{"version":3,"sources":["webpack://pdfjs-dist/image_decoders/pdf.image_decoders/webpack/universalModuleDefinition","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/webpack/bootstrap","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/src/pdf.image_decoders.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/src/shared/util.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/src/shared/compatibility.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/src/shared/is_node.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/global-this.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.global-this.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/export.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/global.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/descriptors.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/fails.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/object-property-is-enumerable.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/create-property-descriptor.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/to-indexed-object.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/indexed-object.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/classof-raw.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/require-object-coercible.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/to-primitive.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/is-object.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/has.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/ie8-dom-define.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/document-create-element.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/create-non-enumerable-property.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/object-define-property.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/an-object.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/redefine.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/set-global.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/inspect-source.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/shared-store.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/internal-state.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/native-weak-map.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/shared-key.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/shared.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/is-pure.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/uid.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/hidden-keys.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/copy-constructor-properties.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/own-keys.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/get-built-in.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/path.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/object-get-own-property-names.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/object-keys-internal.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/array-includes.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/to-length.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/to-integer.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/to-absolute-index.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/enum-bug-keys.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/object-get-own-property-symbols.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/is-forced.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/string/starts-with.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.string.starts-with.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/not-a-regexp.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/is-regexp.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/well-known-symbol.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/native-symbol.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/use-symbol-as-uid.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/correct-is-regexp-logic.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/entry-unbind.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/function-bind-context.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/a-function.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/string/ends-with.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.string.ends-with.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/string/includes.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.string.includes.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/array/includes.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.array.includes.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/add-to-unscopables.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/object-create.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/object-define-properties.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/object-keys.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/html.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/array-method-uses-to-length.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/array/from.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.string.iterator.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/string-multibyte.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/define-iterator.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/create-iterator-constructor.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/iterators-core.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/object-get-prototype-of.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/to-object.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/correct-prototype-getter.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/set-to-string-tag.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/iterators.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/object-set-prototype-of.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/a-possible-prototype.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.array.from.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/array-from.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/call-with-safe-iteration-closing.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/is-array-iterator-method.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/create-property.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/get-iterator-method.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/classof.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/to-string-tag-support.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/check-correctness-of-iteration.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/object/assign.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.object.assign.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/object-assign.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/object/from-entries.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.array.iterator.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.object.from-entries.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/iterate.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/math/log2.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.math.log2.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/number/is-nan.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.number.is-nan.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/number/is-integer.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.number.is-integer.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/is-integer.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/typed-array/slice.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.typed-array.slice.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/array-buffer-view-core.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/array-buffer-native.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/species-constructor.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/map/index.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.map.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/collection.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/internal-metadata.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/freezing.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/an-instance.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/inherit-if-required.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/collection-strong.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/redefine-all.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/set-species.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.object.to-string.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/object-to-string.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/web.dom-collections.iterator.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/dom-iterables.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/set/index.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.set.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/weak-map/index.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.weak-map.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/collection-weak.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/array-iteration.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/array-species-create.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/is-array.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/weak-set/index.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.weak-set.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/string/code-point-at.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.string.code-point-at.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/string/from-code-point.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.string.from-code-point.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/symbol/index.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.array.concat.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/array-method-has-species-support.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/engine-v8-version.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/engine-user-agent.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.symbol.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/object-get-own-property-names-external.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/well-known-symbol-wrapped.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/define-well-known-symbol.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.symbol.async-iterator.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.symbol.description.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.symbol.has-instance.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.symbol.is-concat-spreadable.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.symbol.iterator.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.symbol.match.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.symbol.match-all.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.symbol.replace.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.symbol.search.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.symbol.species.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.symbol.split.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.symbol.to-primitive.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.symbol.to-string-tag.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.symbol.unscopables.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.math.to-string-tag.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.json.to-string-tag.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/string/pad-start.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.string.pad-start.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/string-pad.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/string-repeat.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/string-pad-webkit-bug.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/string/pad-end.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.string.pad-end.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/object/values.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.object.values.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/internals/object-to-array.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/es/object/entries.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/node_modules/core-js/modules/es.object.entries.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/src/core/jbig2.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/src/core/core_utils.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/src/core/arithmetic_decoder.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/src/core/ccitt.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/src/core/jpg.js","webpack://pdfjs-dist/image_decoders/pdf.image_decoders/src/core/jpx.js"],"names":["pdfjsVersion","pdfjsBuild","IDENTITY_MATRIX","FONT_IDENTITY_MATRIX","PermissionFlag","PRINT","MODIFY_CONTENTS","COPY","MODIFY_ANNOTATIONS","FILL_INTERACTIVE_FORMS","COPY_FOR_ACCESSIBILITY","ASSEMBLE","PRINT_HIGH_QUALITY","TextRenderingMode","FILL","STROKE","FILL_STROKE","INVISIBLE","FILL_ADD_TO_PATH","STROKE_ADD_TO_PATH","FILL_STROKE_ADD_TO_PATH","ADD_TO_PATH","FILL_STROKE_MASK","ADD_TO_PATH_FLAG","ImageKind","GRAYSCALE_1BPP","RGB_24BPP","RGBA_32BPP","AnnotationType","TEXT","LINK","FREETEXT","LINE","SQUARE","CIRCLE","POLYGON","POLYLINE","HIGHLIGHT","UNDERLINE","SQUIGGLY","STRIKEOUT","STAMP","CARET","INK","POPUP","FILEATTACHMENT","SOUND","MOVIE","WIDGET","SCREEN","PRINTERMARK","TRAPNET","WATERMARK","THREED","REDACT","AnnotationStateModelType","MARKED","REVIEW","AnnotationMarkedState","UNMARKED","AnnotationReviewState","ACCEPTED","REJECTED","CANCELLED","COMPLETED","NONE","AnnotationReplyType","GROUP","REPLY","AnnotationFlag","HIDDEN","NOZOOM","NOROTATE","NOVIEW","READONLY","LOCKED","TOGGLENOVIEW","LOCKEDCONTENTS","AnnotationFieldFlag","REQUIRED","NOEXPORT","MULTILINE","PASSWORD","NOTOGGLETOOFF","RADIO","PUSHBUTTON","COMBO","EDIT","SORT","FILESELECT","MULTISELECT","DONOTSPELLCHECK","DONOTSCROLL","COMB","RICHTEXT","RADIOSINUNISON","COMMITONSELCHANGE","AnnotationBorderStyleType","SOLID","DASHED","BEVELED","INSET","StreamType","UNKNOWN","FLATE","LZW","DCT","JPX","JBIG","A85","AHX","CCF","RLX","FontType","TYPE1","TYPE1C","CIDFONTTYPE0","CIDFONTTYPE0C","TRUETYPE","CIDFONTTYPE2","TYPE3","OPENTYPE","TYPE0","MMTYPE1","VerbosityLevel","ERRORS","WARNINGS","INFOS","CMapCompressionType","BINARY","STREAM","OPS","dependency","setLineWidth","setLineCap","setLineJoin","setMiterLimit","setDash","setRenderingIntent","setFlatness","setGState","save","restore","transform","moveTo","lineTo","curveTo","curveTo2","curveTo3","closePath","rectangle","stroke","closeStroke","fill","eoFill","fillStroke","eoFillStroke","closeFillStroke","closeEOFillStroke","endPath","clip","eoClip","beginText","endText","setCharSpacing","setWordSpacing","setHScale","setLeading","setFont","setTextRenderingMode","setTextRise","moveText","setLeadingMoveText","setTextMatrix","nextLine","showText","showSpacedText","nextLineShowText","nextLineSetSpacingShowText","setCharWidth","setCharWidthAndBounds","setStrokeColorSpace","setFillColorSpace","setStrokeColor","setStrokeColorN","setFillColor","setFillColorN","setStrokeGray","setFillGray","setStrokeRGBColor","setFillRGBColor","setStrokeCMYKColor","setFillCMYKColor","shadingFill","beginInlineImage","beginImageData","endInlineImage","paintXObject","markPoint","markPointProps","beginMarkedContent","beginMarkedContentProps","endMarkedContent","beginCompat","endCompat","paintFormXObjectBegin","paintFormXObjectEnd","beginGroup","endGroup","beginAnnotations","endAnnotations","beginAnnotation","endAnnotation","paintJpegXObject","paintImageMaskXObject","paintImageMaskXObjectGroup","paintImageXObject","paintInlineImageXObject","paintInlineImageXObjectGroup","paintImageXObjectRepeat","paintImageMaskXObjectRepeat","paintSolidColorImageMask","constructPath","UNSUPPORTED_FEATURES","unknown","forms","javaScript","smask","shadingPattern","font","errorTilingPattern","errorExtGState","errorXObject","errorFontLoadType3","errorFontState","errorFontMissing","errorFontTranslate","errorColorSpace","errorOperatorList","errorFontToUnicode","errorFontLoadNative","errorFontGetPath","errorMarkedContent","PasswordResponses","NEED_PASSWORD","INCORRECT_PASSWORD","verbosity","Number","console","unreachable","base","other","url","absoluteUrl","baseUrl","_isValidProtocol","Object","value","enumerable","configurable","writable","BaseException","constructor","NullCharactersRegExp","warn","str","assert","bytes","length","MAX_ARGUMENT_COUNT","String","strBuf","i","chunkEnd","Math","chunk","arr","resultLength","arrayByteLength","pos","data","item","stringToBytes","itemLength","buffer8","view32","IsLittleEndianCached","shadow","isLittleEndian","IsEvalSupportedCached","isEvalSupported","rgbBuf","m1","m2","xt","p","m","yt","d","p1","Util","p2","r","p3","p4","v","transpose","a","b","c","first","second","sx","sy","rect","orderedX","rect1","rect2","orderedY","result","PDFStringTranslateTable","code","decodeURIComponent","escape","unescape","encodeURIComponent","arr1","arr2","element","date","Date","buffer","capability","isSettled","get","resolve","reject","createObjectURL","digits","forceDataSchema","URL","blob","type","ii","b1","b2","b3","d1","d2","d3","d4","globalThis","require","hasDOM","userAgent","navigator","isIE","Buffer","Element","div","document","OriginalDOMTokenListAdd","DOMTokenList","OriginalDOMTokenListRemove","token","force","arguments","OriginalPushState","window","OriginalReplaceState","args","Array","Uint8Array","isNodeJS","process","module","exports","$","global","getOwnPropertyDescriptor","f","createNonEnumerableProperty","redefine","setGlobal","copyConstructorProperties","isForced","options","source","TARGET","target","GLOBAL","STATIC","stat","FORCED","key","targetProperty","sourceProperty","descriptor","prototype","noTargetGet","forced","undefined","sham","check","it","self","Function","DESCRIPTORS","propertyIsEnumerableModule","createPropertyDescriptor","toIndexedObject","toPrimitive","has","IE8_DOM_DEFINE","nativeGetOwnPropertyDescriptor","O","P","error","call","fails","defineProperty","exec","nativePropertyIsEnumerable","propertyIsEnumerable","NASHORN_BUG","V","bitmap","IndexedObject","requireObjectCoercible","classof","split","toString","slice","TypeError","isObject","input","PREFERRED_STRING","fn","val","valueOf","hasOwnProperty","createElement","EXISTS","definePropertyModule","object","anObject","nativeDefineProperty","Attributes","inspectSource","InternalStateModule","getInternalState","enforceInternalState","enforce","TEMPLATE","unsafe","simple","join","store","functionToString","SHARED","NATIVE_WEAK_MAP","objectHas","sharedKey","hiddenKeys","WeakMap","set","getterFor","TYPE","state","wmget","wmhas","wmset","metadata","STATE","test","shared","uid","keys","IS_PURE","push","version","mode","copyright","id","postfix","random","ownKeys","getOwnPropertyDescriptorModule","getBuiltIn","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","getOwnPropertySymbols","concat","path","aFunction","variable","namespace","method","internalObjectKeys","enumBugKeys","getOwnPropertyNames","indexOf","names","toLength","toAbsoluteIndex","createMethod","IS_INCLUDES","$this","el","fromIndex","index","includes","toInteger","min","argument","ceil","floor","isNaN","max","integer","replacement","feature","detection","normalize","POLYFILL","NATIVE","string","replace","toLowerCase","entryUnbind","notARegExp","correctIsRegExpLogic","nativeStartsWith","startsWith","CORRECT_IS_REGEXP_LOGIC","MDN_POLYFILL_BUG","proto","searchString","that","search","isRegExp","wellKnownSymbol","MATCH","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","Symbol","createWellKnownSymbol","withoutSetter","name","iterator","METHOD_NAME","regexp","e","bind","CONSTRUCTOR","METHOD","apply","nativeEndsWith","endsWith","endPosition","len","end","$includes","addToUnscopables","arrayMethodUsesToLength","USES_TO_LENGTH","ACCESSORS","create","UNSCOPABLES","ArrayPrototype","defineProperties","html","documentCreateElement","GT","LT","PROTOTYPE","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","content","NullProtoObjectViaActiveX","activeXDocument","write","close","temp","parentWindow","NullProtoObjectViaIFrame","iframe","JS","iframeDocument","style","display","appendChild","src","contentWindow","open","F","NullProtoObject","domain","ActiveXObject","Properties","objectKeys","cache","thrower","argument0","argument1","from","charAt","defineIterator","STRING_ITERATOR","setInternalState","iterated","next","point","done","CONVERT_TO_STRING","S","position","size","charCodeAt","codeAt","createIteratorConstructor","getPrototypeOf","setPrototypeOf","setToStringTag","Iterators","IteratorsCore","IteratorPrototype","BUGGY_SAFARI_ITERATORS","ITERATOR","KEYS","VALUES","ENTRIES","returnThis","Iterable","NAME","IteratorConstructor","DEFAULT","IS_SET","getIterationMethod","KIND","defaultIterator","IterablePrototype","values","entries","TO_STRING_TAG","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","CurrentIteratorPrototype","methods","KEY","PrototypeOfArrayIteratorPrototype","arrayIterator","toObject","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","TAG","aPossiblePrototype","CORRECT_SETTER","setter","__proto__","checkCorrectnessOfIteration","INCORRECT_ITERATION","iterable","callWithSafeIterationClosing","isArrayIteratorMethod","createProperty","getIteratorMethod","arrayLike","C","argumentsLength","mapfn","mapping","iteratorMethod","step","returnMethod","propertyKey","TO_STRING_TAG_SUPPORT","classofRaw","CORRECT_ARGUMENTS","tryGet","tag","callee","SAFE_CLOSING","called","iteratorWithReturn","SKIP_CLOSING","ITERATION_SUPPORT","assign","nativeAssign","A","B","symbol","alphabet","forEach","chr","T","j","fromEntries","ARRAY_ITERATOR","kind","Arguments","iterate","obj","k","Result","stopped","AS_ENTRIES","IS_ITERATOR","boundFunction","iterFn","stop","log2","log","LN2","x","number","isInteger","isFinite","ArrayBufferViewCore","speciesConstructor","aTypedArray","aTypedArrayConstructor","exportTypedArrayMethod","$slice","Int8Array","start","list","NATIVE_ARRAY_BUFFER","Int8ArrayPrototype","Uint8ClampedArray","Uint8ClampedArrayPrototype","TypedArray","TypedArrayPrototype","isPrototypeOf","TYPED_ARRAY_TAG","NATIVE_ARRAY_BUFFER_VIEWS","opera","TYPED_ARRAY_TAG_REQIRED","TypedArrayConstructorsList","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","isView","klass","isTypedArray","ARRAY","TypedArrayConstructor","property","exportTypedArrayStaticMethod","ArrayBuffer","DataView","SPECIES","defaultConstructor","Map","collection","collectionStrong","init","InternalMetadataModule","anInstance","inheritIfRequired","CONSTRUCTOR_NAME","wrapper","common","IS_MAP","IS_WEAK","ADDER","NativeConstructor","NativePrototype","Constructor","exported","fixMethod","nativeMethod","add","getConstructor","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","dummy","clear","setStrong","FREEZING","METADATA","isExtensible","setMetadata","objectID","weakData","fastKey","getWeakData","onFreeze","meta","preventExtensions","Wrapper","NewTarget","NewTargetPrototype","redefineAll","setSpecies","internalStateGetterFor","last","define","entry","getEntry","previous","removed","prev","callbackfn","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","DOMIterables","ArrayIteratorMethods","ArrayValues","COLLECTION_NAME","Collection","CollectionPrototype","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","Set","collectionWeak","enforceIternalState","IS_IE11","InternalWeakMap","$WeakMap","WeakMapPrototype","nativeDelete","nativeHas","nativeGet","nativeSet","frozen","ArrayIterationModule","$has","find","findIndex","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","arraySpeciesCreate","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","specificCreate","map","filter","some","every","isArray","originalArray","arg","WeakSet","codePointAt","fromCodePoint","fromCharCode","nativeFromCodePoint","INCORRECT_LENGTH","elements","RangeError","arrayMethodHasSpeciesSupport","V8_VERSION","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","array","SPECIES_SUPPORT","isConcatSpreadable","spreadable","n","E","foo","Boolean","versions","v8","match","nativeObjectCreate","getOwnPropertyNamesExternal","wrappedWellKnownSymbolModule","defineWellKnownSymbol","$forEach","SYMBOL","TO_PRIMITIVE","$Symbol","$stringify","nativeGetOwnPropertyNames","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","QObject","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","wrap","description","isSymbol","$defineProperty","$defineProperties","properties","$getOwnPropertySymbols","$propertyIsEnumerable","$create","$getOwnPropertyDescriptor","$getOwnPropertyNames","IS_OBJECT_PROTOTYPE","keyFor","sym","useSetter","useSimple","FORCED_JSON_STRINGIFY","stringify","replacer","space","$replacer","windowNames","getWindowNames","NativeSymbol","EmptyStringDescriptionStore","SymbolWrapper","symbolPrototype","symbolToString","native","desc","JSON","$padStart","WEBKIT_BUG","padStart","maxLength","repeat","IS_END","fillString","stringLength","fillStr","intMaxLength","fillLen","stringFiller","count","Infinity","$padEnd","padEnd","$values","TO_ENTRIES","$entries","Jbig2Image","ContextCache","getContexts","DecodingContext","decoder","contexts","contextCache","bit","sign","readBits","codeLength","SegmentTypes","CodingTemplates","y","RefinementTemplates","coding","reference","ReusedContexts","RefinementReusedContexts","decodingContext","OLD_PIXEL_MASK","row","row1","row2","contextLabel","pixel","decodeMMRBitmap","templateIndex","at","decodeBitmapTemplate0","useskip","template","templateLength","templateX","templateY","changingTemplateEntries","reuseMask","minX","maxX","minY","changingEntriesLength","changingTemplateX","changingTemplateY","changingTemplateBit","sbb_left","sbb_top","sbb_right","width","pseudoPixelContext","ltp","sltp","skip","i0","j0","shift","codingTemplate","codingTemplateLength","codingTemplateX","codingTemplateY","referenceTemplate","referenceTemplateLength","referenceTemplateX","referenceTemplateY","referenceWidth","referenceBitmap","referenceHeight","huffman","newSymbols","currentHeight","symbolCodeLength","symbols","tableB1","getStandardTable","symbolWidths","deltaHeight","huffmanTables","decodeInteger","currentWidth","totalWidth","firstSymbol","deltaWidth","numberOfInstances","decodeTextRegion","symbolId","decodeIAID","rdx","rdy","decodeRefinement","decodeBitmap","bitmapSize","huffmanInput","collectiveBitmap","readUncompressedBitmap","originalEnd","bitmapEnd","numberOfSymbolsDecoded","xMin","xMax","bitmapWidth","symbolBitmap","exportedSymbols","flags","currentFlag","totalSymbolsLength","runLength","stripT","firstS","deltaT","deltaFirstS","currentS","currentT","stripSize","t","applyRefinement","refinement","inputSymbols","symbolWidth","symbolHeight","rdw","rdh","offsetT","offsetS","s2","symbolRow","maxWidth","t2","deltaS","collectiveWidth","patterns","patternBitmap","patternWidth","combinationOperator","regionBitmap","numberOfPatterns","pattern0","patternHeight","bitsPerValue","grayScaleBitPlanes","mmrInput","mg","ng","patternIndex","gridOffsetX","gridOffsetY","regionRow","patternRow","regionX","regionY","segmentHeader","readUint32","segmentType","pageAssociationFieldSize","referredFlags","referredToCount","retainBits","referredToSegmentNumberSize","referredTo","readUint16","genericRegionInfo","readRegionSegmentInformation","genericRegionSegmentFlags","genericRegionMmr","searchPatternLength","searchPattern","segments","readSegmentHeader","segment","header","height","RegionSegmentInformationFieldLength","dictionary","dictionaryFlags","atLength","readInt8","textRegion","textRegionSegmentFlags","textRegionHuffmanFlags","patternDictionary","patternDictionaryFlags","halftoneRegion","halftoneRegionFlags","genericRegion","pageInfo","resolutionX","resolutionY","pageSegmentFlags","callbackName","visitor","processSegment","chunks","readSegments","processSegments","bitPacked","imgData","q","mask","SimpleSegmentVisitor","onPageInformation","rowSize","info","drawBitmap","regionInfo","mask0","offset0","offset","onImmediateGenericRegion","region","onImmediateLosslessGenericRegion","onSymbolDictionary","getSymbolDictionaryHuffmanTables","referredSegments","referredSymbols","decodeSymbolDictionary","onImmediateTextRegion","getTextRegionHuffmanTables","onImmediateLosslessTextRegion","onPatternDictionary","decodePatternDictionary","onImmediateHalftoneRegion","decodeHalftoneRegion","onImmediateLosslessHalftoneRegion","onTables","customTables","decodeTablesSegment","lineData","line","HuffmanTreeNode","buildTree","node","decodeNode","htOffset","reader","lines","HuffmanTable","decode","assignPrefixCodes","linesLength","prefixLengthMax","histogram","currentLength","firstCode","currentCode","currentTemp","lowestValue","highestValue","prefixSizeBits","rangeSizeBits","currentRangeLow","prefixLength","rangeLength","standardTablesCache","table","Reader","readBit","numBits","byteAlign","currentIndex","codes","runCodesTable","repeatedLength","numberOfRepeats","symbolIDTable","customIndex","tableFirstS","getCustomHuffmanTable","tableDeltaS","tableDeltaT","tableDeltaHeight","tableDeltaWidth","tableBitmapSize","tableAggregateInstances","params","K","Columns","Rows","BlackIs1","EndOfBlock","eof","currentByte","endOfBlock","lookForEOFLimit","parseChunks","parseJbig2Chunks","parse","parseJbig2","lookup","initializer","getArray","stopWhenFound","LOOP_LIMIT","loopCount","dict","ROMAN_NUMBER_MAP","lowerCase","romanBuf","romanStr","ch","QeTable","qe","nmps","nlps","switchFlag","bp","cx_index","cx_mps","qeTableIcx","qeIcx","CCITTFaxDecoder","ccittEOL","ccittEOF","twoDimPass","twoDimHoriz","twoDimVert0","twoDimVertR1","twoDimVertL1","twoDimVertR2","twoDimVertL2","twoDimVertR3","twoDimVertL3","twoDimTable","whiteTable1","whiteTable2","blackTable1","blackTable2","blackTable3","eoblock","code1","readNextChar","refLine","codingLine","columns","refPos","blackPixels","code2","code3","gotEOL","bits","_addPixels","codingPos","a1","_addPixelsNeg","_findTableCode","limitValue","limit","_getTwoDimCode","_getWhiteCode","_getBlackCode","_lookBits","_eatBits","JpegImage","dctZigZag","dctCos1","dctSin1","dctCos3","dctSin3","dctCos6","dctSin6","dctSqrt2","dctSqrt1d2","decodeTransform","colorTransform","codeLengths","children","parseDNLMarker","mcusPerLine","frame","progressive","startOffset","bitsData","bitsCount","nextByte","scanLines","maybeScanLines","blockRow","receive","decodeHuffman","component","diff","receiveAndExtend","rs","s","z","blockOffset","eobrun","successiveACState","offsetZ","successiveACNextValue","mcuRow","mcu","mcuCol","blockCol","getBlockBufferOffset","componentsLength","components","spectralStart","decodeFn","successivePrev","mcuExpected","mcuToRead","resetInterval","decodeBlock","h","decodeMcu","fileMarker","findNextFileMarker","partialMsg","qt","blockData","p0","blockBufferOffset","p5","p6","p7","v0","v1","v2","v3","v4","v7","v5","v6","col","blocksPerLine","blocksPerColumn","computationBuffer","quantizeAndInverse","startPos","maxPos","newPos","currentPos","currentMarker","invalid","marker","newMarker","dnlScanLines","endOffset","mcusPerColumn","blocksPerLineForMcu","blocksPerColumnForMcu","blocksBufferSize","jfif","adobe","numSOSMarkers","quantizationTables","huffmanTablesAC","huffmanTablesDC","appData","readDataBlock","major","minor","densityUnits","xDensity","yDensity","thumbWidth","thumbHeight","thumbData","flags0","flags1","transformCode","quantizationTablesLength","quantizationTablesEnd","quantizationTableSpec","tableData","sofScanLines","componentsCount","maxH","maxV","componentId","qId","l","quantizationId","quantizationTable","prepareComponents","huffmanLength","huffmanTableSpec","codeLengthSum","huffmanValues","buildHuffmanTable","selectorsCount","componentIndex","tableSpec","spectralEnd","successiveApproximation","processed","decodeScan","ex","nextFileMarker","output","buildComponentData","scaleX","scaleY","_getLinearizedBlockData","isSourcePDF","numComponents","dataLength","xScaleBlockOffset","mask3LSB","componentScaleX","componentScaleY","blocksPerScanline","lastComponentScaleX","_convertYccToRgb","Y","Cb","Cr","_convertYcckToRgb","_convertYcckToCmyk","_convertCmykToRgb","getData","forceRGB","rgbData","grayColor","JpxImage","SubbandsGainLog2","LL","LH","HL","HH","head","headerSize","lbox","tbox","jumpDataLength","colorspace","headerType","parseImageProperties","newByte","stream","oldByte","Xsiz","Ysiz","XOsiz","YOsiz","Csiz","parseCodestream","context","doNotRecover","siz","precision","isSigned","XRsiz","YRsiz","calculateComponentDimensions","calculateTileGrids","qcd","sqcd","spqcdSize","scalarExpounded","spqcds","spqcd","qcc","cqcc","cod","scod","blockStyle","precinctsSizes","precinctsSize","PPx","PPy","unsupported","tile","initializeTile","buildPackets","parseTilePackets","transformComponents","tiles","numXtiles","numYtiles","jj","tileComponent","codOrCoc","precinctWidth","dimensions","precinctHeight","isZeroRes","resolution","precinctWidthInSubband","precinctHeightInSubband","numprecinctswide","numprecinctshigh","numprecincts","xcb_","ycb_","codeblockWidth","codeblockHeight","cbx0","subband","cby0","cbx1","cby1","precinctParameters","codeblocks","precincts","codeblock","cbx","cby","tbx0","tby0","tbx1","tby1","pi","pj","precinctNumber","precinct","cbxMin","cbyMin","cbxMax","cbyMax","numcodeblockwide","numcodeblockhigh","precinctCodeblocks","subbands","layerNumber","tileIndex","layersCount","maxDecompositionLevelsCount","packet","createPacket","maxNumPrecinctsInLevel","maxNumPrecincts","resolutions","getPrecinctSizesInImageScale","precinctsIterationSizes","px","py","decompositionLevelsCount","sizeInImageScale","getPrecinctIndexIfExist","posX","pxIndex","precinctIterationSizes","posY","pyIndex","startPrecinctRowIndex","minWidth","minHeight","maxNumWide","maxNumHigh","sizePerComponent","sizePerResolution","minWidthCurrentComponent","minHeightCurrentComponent","maxNumWideCurrentComponent","maxNumHighCurrentComponent","scale","widthCurrentResolution","heightCurrentResolution","blocksDimensions","getBlocksDimensions","buildPrecincts","buildCodeblocks","bscale","resolutionSubbands","progressionOrder","bufferSize","skipNextBit","skipBytes","sopMarkerUsed","ephMarkerUsed","packetsIterator","alignToByte","skipMarkerIfEqual","queue","codeblockColumn","codeblockRow","codeblockIncluded","firstTimeInclusion","inclusionTree","zeroBitPlanesTree","valueReady","codingpasses","readCodingpasses","codingpassesLog2","codedDataLength","packetItem","x0","y0","right","bottom","blockWidth","blockHeight","bitModel","currentCodingpassType","totalLength","dataItem","encodedData","magnitude","bitsDecoded","magnitudeCorrection","reversible","interleave","levelOffset","nb","coefficients","mb","codingStyleParameters","quantizationParameters","guardBits","segmentationSymbolUsed","subbandCoefficients","mu","epsilon","gainLog2","delta","copyCoefficients","items","left","top","resultImages","transformedTiles","transformTile","tile0","out","fourComponents","y0items","y1items","y2items","y3items","component0","alpha01","y1","y2","g","qcdOrQcc","TagTree","levelsLength","level","reset","currentLevel","incrementValue","nextLevel","InclusionTree","stopValue","propagateValues","levelIndex","currentValue","BitModel","UNIFORM_CONTEXT","RUNLENGTH_CONTEXT","LLAndLHContextsLabel","HLContextLabel","HHContextLabel","contextLabelTable","coefficientCount","coefficentsMagnitude","zeroBitPlanes","setDecoder","setNeighborsSignificance","neighborsSignificance","column","runSignificancePropagationPass","coefficentsSign","processingFlags","labels","processedInverseMask","processedMask","firstMagnitudeBitMask","i1","decision","decodeSignBit","significance1","sign1","sign0","contribution","horizontalContribution","decoded","runMagnitudeRefinementPass","width4","index0","indexNext","significance","runCleanupPass","oneRowDown","twoRowsDown","threeRowsDown","iNext","indexBase","checkAllEmpty","allEmpty","hasSignificantCoefficent","i2","checkSegmentationSymbol","Transform","ll","j1","j2","llWidth","llHeight","llItems","hl_lh_hh","bufferPadding","rowBuffer","numBuffers","colBuffers","currentBuffer","u","IrreversibleTransform","alpha","beta","gamma","K_","current","ReversibleTransform"],"mappings":"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","file":"pdf.image_decoders.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"pdfjs-dist/image_decoders/pdf.image_decoders\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"pdfjs-dist/image_decoders/pdf.image_decoders\"] = factory();\n\telse\n\t\troot[\"pdfjs-dist/image_decoders/pdf.image_decoders\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __w_pdfjs_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__w_pdfjs_require__.m = modules;\n\n \t// expose the module cache\n \t__w_pdfjs_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__w_pdfjs_require__.d = function(exports, name, getter) {\n \t\tif(!__w_pdfjs_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__w_pdfjs_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__w_pdfjs_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __w_pdfjs_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__w_pdfjs_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __w_pdfjs_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__w_pdfjs_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__w_pdfjs_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__w_pdfjs_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__w_pdfjs_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __w_pdfjs_require__(__w_pdfjs_require__.s = 0);\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getVerbosityLevel, setVerbosityLevel } from \"./shared/util.js\";\nimport { Jbig2mage } from \"./core/jbig2.js\";\nimport { JpegImage } from \"./core/jpg.js\";\nimport { JpxImage } from \"./core/jpx.js\";\n\n// To ensure that the standalone PDF.js image decoders have the same\n// browser/environment compatibility as the regular PDF.js library,\n// the standard set of polyfills are thus included in this build as well.\n//\n// Given that the (current) image decoders don't use all of the features\n// of the complete PDF.js library, e.g. they are completely synchronous,\n// some of the larger polyfills are thus unnecessary.\n//\n// In an attempt to reduce the size of the standalone PDF.js image decoders,\n// the following polyfills are currently being excluded:\n//  - ReadableStream\n//  - Promise\n//  - URL\n\n// eslint-disable-next-line no-unused-vars\nconst pdfjsVersion = PDFJSDev.eval(\"BUNDLE_VERSION\");\n// eslint-disable-next-line no-unused-vars\nconst pdfjsBuild = PDFJSDev.eval(\"BUNDLE_BUILD\");\n\nexport { Jbig2mage, JpegImage, JpxImage, getVerbosityLevel, setVerbosityLevel };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* eslint no-var: error */\n\nimport \"./compatibility.js\";\n\nconst IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\nconst FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\n\n// Permission flags from Table 22, Section 7.6.3.2 of the PDF specification.\nconst PermissionFlag = {\n  PRINT: 0x04,\n  MODIFY_CONTENTS: 0x08,\n  COPY: 0x10,\n  MODIFY_ANNOTATIONS: 0x20,\n  FILL_INTERACTIVE_FORMS: 0x100,\n  COPY_FOR_ACCESSIBILITY: 0x200,\n  ASSEMBLE: 0x400,\n  PRINT_HIGH_QUALITY: 0x800,\n};\n\nconst TextRenderingMode = {\n  FILL: 0,\n  STROKE: 1,\n  FILL_STROKE: 2,\n  INVISIBLE: 3,\n  FILL_ADD_TO_PATH: 4,\n  STROKE_ADD_TO_PATH: 5,\n  FILL_STROKE_ADD_TO_PATH: 6,\n  ADD_TO_PATH: 7,\n  FILL_STROKE_MASK: 3,\n  ADD_TO_PATH_FLAG: 4,\n};\n\nconst ImageKind = {\n  GRAYSCALE_1BPP: 1,\n  RGB_24BPP: 2,\n  RGBA_32BPP: 3,\n};\n\nconst AnnotationType = {\n  TEXT: 1,\n  LINK: 2,\n  FREETEXT: 3,\n  LINE: 4,\n  SQUARE: 5,\n  CIRCLE: 6,\n  POLYGON: 7,\n  POLYLINE: 8,\n  HIGHLIGHT: 9,\n  UNDERLINE: 10,\n  SQUIGGLY: 11,\n  STRIKEOUT: 12,\n  STAMP: 13,\n  CARET: 14,\n  INK: 15,\n  POPUP: 16,\n  FILEATTACHMENT: 17,\n  SOUND: 18,\n  MOVIE: 19,\n  WIDGET: 20,\n  SCREEN: 21,\n  PRINTERMARK: 22,\n  TRAPNET: 23,\n  WATERMARK: 24,\n  THREED: 25,\n  REDACT: 26,\n};\n\nconst AnnotationStateModelType = {\n  MARKED: \"Marked\",\n  REVIEW: \"Review\",\n};\n\nconst AnnotationMarkedState = {\n  MARKED: \"Marked\",\n  UNMARKED: \"Unmarked\",\n};\n\nconst AnnotationReviewState = {\n  ACCEPTED: \"Accepted\",\n  REJECTED: \"Rejected\",\n  CANCELLED: \"Cancelled\",\n  COMPLETED: \"Completed\",\n  NONE: \"None\",\n};\n\nconst AnnotationReplyType = {\n  GROUP: \"Group\",\n  REPLY: \"R\",\n};\n\nconst AnnotationFlag = {\n  INVISIBLE: 0x01,\n  HIDDEN: 0x02,\n  PRINT: 0x04,\n  NOZOOM: 0x08,\n  NOROTATE: 0x10,\n  NOVIEW: 0x20,\n  READONLY: 0x40,\n  LOCKED: 0x80,\n  TOGGLENOVIEW: 0x100,\n  LOCKEDCONTENTS: 0x200,\n};\n\nconst AnnotationFieldFlag = {\n  READONLY: 0x0000001,\n  REQUIRED: 0x0000002,\n  NOEXPORT: 0x0000004,\n  MULTILINE: 0x0001000,\n  PASSWORD: 0x0002000,\n  NOTOGGLETOOFF: 0x0004000,\n  RADIO: 0x0008000,\n  PUSHBUTTON: 0x0010000,\n  COMBO: 0x0020000,\n  EDIT: 0x0040000,\n  SORT: 0x0080000,\n  FILESELECT: 0x0100000,\n  MULTISELECT: 0x0200000,\n  DONOTSPELLCHECK: 0x0400000,\n  DONOTSCROLL: 0x0800000,\n  COMB: 0x1000000,\n  RICHTEXT: 0x2000000,\n  RADIOSINUNISON: 0x2000000,\n  COMMITONSELCHANGE: 0x4000000,\n};\n\nconst AnnotationBorderStyleType = {\n  SOLID: 1,\n  DASHED: 2,\n  BEVELED: 3,\n  INSET: 4,\n  UNDERLINE: 5,\n};\n\nconst StreamType = {\n  UNKNOWN: \"UNKNOWN\",\n  FLATE: \"FLATE\",\n  LZW: \"LZW\",\n  DCT: \"DCT\",\n  JPX: \"JPX\",\n  JBIG: \"JBIG\",\n  A85: \"A85\",\n  AHX: \"AHX\",\n  CCF: \"CCF\",\n  RLX: \"RLX\", // PDF short name is 'RL', but telemetry requires three chars.\n};\n\nconst FontType = {\n  UNKNOWN: \"UNKNOWN\",\n  TYPE1: \"TYPE1\",\n  TYPE1C: \"TYPE1C\",\n  CIDFONTTYPE0: \"CIDFONTTYPE0\",\n  CIDFONTTYPE0C: \"CIDFONTTYPE0C\",\n  TRUETYPE: \"TRUETYPE\",\n  CIDFONTTYPE2: \"CIDFONTTYPE2\",\n  TYPE3: \"TYPE3\",\n  OPENTYPE: \"OPENTYPE\",\n  TYPE0: \"TYPE0\",\n  MMTYPE1: \"MMTYPE1\",\n};\n\nconst VerbosityLevel = {\n  ERRORS: 0,\n  WARNINGS: 1,\n  INFOS: 5,\n};\n\nconst CMapCompressionType = {\n  NONE: 0,\n  BINARY: 1,\n  STREAM: 2,\n};\n\n// All the possible operations for an operator list.\nconst OPS = {\n  // Intentionally start from 1 so it is easy to spot bad operators that will be\n  // 0's.\n  dependency: 1,\n  setLineWidth: 2,\n  setLineCap: 3,\n  setLineJoin: 4,\n  setMiterLimit: 5,\n  setDash: 6,\n  setRenderingIntent: 7,\n  setFlatness: 8,\n  setGState: 9,\n  save: 10,\n  restore: 11,\n  transform: 12,\n  moveTo: 13,\n  lineTo: 14,\n  curveTo: 15,\n  curveTo2: 16,\n  curveTo3: 17,\n  closePath: 18,\n  rectangle: 19,\n  stroke: 20,\n  closeStroke: 21,\n  fill: 22,\n  eoFill: 23,\n  fillStroke: 24,\n  eoFillStroke: 25,\n  closeFillStroke: 26,\n  closeEOFillStroke: 27,\n  endPath: 28,\n  clip: 29,\n  eoClip: 30,\n  beginText: 31,\n  endText: 32,\n  setCharSpacing: 33,\n  setWordSpacing: 34,\n  setHScale: 35,\n  setLeading: 36,\n  setFont: 37,\n  setTextRenderingMode: 38,\n  setTextRise: 39,\n  moveText: 40,\n  setLeadingMoveText: 41,\n  setTextMatrix: 42,\n  nextLine: 43,\n  showText: 44,\n  showSpacedText: 45,\n  nextLineShowText: 46,\n  nextLineSetSpacingShowText: 47,\n  setCharWidth: 48,\n  setCharWidthAndBounds: 49,\n  setStrokeColorSpace: 50,\n  setFillColorSpace: 51,\n  setStrokeColor: 52,\n  setStrokeColorN: 53,\n  setFillColor: 54,\n  setFillColorN: 55,\n  setStrokeGray: 56,\n  setFillGray: 57,\n  setStrokeRGBColor: 58,\n  setFillRGBColor: 59,\n  setStrokeCMYKColor: 60,\n  setFillCMYKColor: 61,\n  shadingFill: 62,\n  beginInlineImage: 63,\n  beginImageData: 64,\n  endInlineImage: 65,\n  paintXObject: 66,\n  markPoint: 67,\n  markPointProps: 68,\n  beginMarkedContent: 69,\n  beginMarkedContentProps: 70,\n  endMarkedContent: 71,\n  beginCompat: 72,\n  endCompat: 73,\n  paintFormXObjectBegin: 74,\n  paintFormXObjectEnd: 75,\n  beginGroup: 76,\n  endGroup: 77,\n  beginAnnotations: 78,\n  endAnnotations: 79,\n  beginAnnotation: 80,\n  endAnnotation: 81,\n  paintJpegXObject: 82,\n  paintImageMaskXObject: 83,\n  paintImageMaskXObjectGroup: 84,\n  paintImageXObject: 85,\n  paintInlineImageXObject: 86,\n  paintInlineImageXObjectGroup: 87,\n  paintImageXObjectRepeat: 88,\n  paintImageMaskXObjectRepeat: 89,\n  paintSolidColorImageMask: 90,\n  constructPath: 91,\n};\n\nconst UNSUPPORTED_FEATURES = {\n  /** @deprecated unused */\n  unknown: \"unknown\",\n  forms: \"forms\",\n  javaScript: \"javaScript\",\n  smask: \"smask\",\n  shadingPattern: \"shadingPattern\",\n  /** @deprecated unused */\n  font: \"font\",\n  errorTilingPattern: \"errorTilingPattern\",\n  errorExtGState: \"errorExtGState\",\n  errorXObject: \"errorXObject\",\n  errorFontLoadType3: \"errorFontLoadType3\",\n  errorFontState: \"errorFontState\",\n  errorFontMissing: \"errorFontMissing\",\n  errorFontTranslate: \"errorFontTranslate\",\n  errorColorSpace: \"errorColorSpace\",\n  errorOperatorList: \"errorOperatorList\",\n  errorFontToUnicode: \"errorFontToUnicode\",\n  errorFontLoadNative: \"errorFontLoadNative\",\n  errorFontGetPath: \"errorFontGetPath\",\n  errorMarkedContent: \"errorMarkedContent\",\n};\n\nconst PasswordResponses = {\n  NEED_PASSWORD: 1,\n  INCORRECT_PASSWORD: 2,\n};\n\nlet verbosity = VerbosityLevel.WARNINGS;\n\nfunction setVerbosityLevel(level) {\n  if (Number.isInteger(level)) {\n    verbosity = level;\n  }\n}\n\nfunction getVerbosityLevel() {\n  return verbosity;\n}\n\n// A notice for devs. These are good for things that are helpful to devs, such\n// as warning that Workers were disabled, which is important to devs but not\n// end users.\nfunction info(msg) {\n  if (verbosity >= VerbosityLevel.INFOS) {\n    console.log(`Info: ${msg}`);\n  }\n}\n\n// Non-fatal warnings.\nfunction warn(msg) {\n  if (verbosity >= VerbosityLevel.WARNINGS) {\n    console.log(`Warning: ${msg}`);\n  }\n}\n\nfunction unreachable(msg) {\n  throw new Error(msg);\n}\n\nfunction assert(cond, msg) {\n  if (!cond) {\n    unreachable(msg);\n  }\n}\n\n// Checks if URLs have the same origin. For non-HTTP based URLs, returns false.\nfunction isSameOrigin(baseUrl, otherUrl) {\n  let base;\n  try {\n    base = new URL(baseUrl);\n    if (!base.origin || base.origin === \"null\") {\n      return false; // non-HTTP url\n    }\n  } catch (e) {\n    return false;\n  }\n\n  const other = new URL(otherUrl, base);\n  return base.origin === other.origin;\n}\n\n// Checks if URLs use one of the allowed protocols, e.g. to avoid XSS.\nfunction _isValidProtocol(url) {\n  if (!url) {\n    return false;\n  }\n  switch (url.protocol) {\n    case \"http:\":\n    case \"https:\":\n    case \"ftp:\":\n    case \"mailto:\":\n    case \"tel:\":\n      return true;\n    default:\n      return false;\n  }\n}\n\n/**\n * Attempts to create a valid absolute URL.\n *\n * @param {URL|string} url - An absolute, or relative, URL.\n * @param {URL|string} baseUrl - An absolute URL.\n * @returns Either a valid {URL}, or `null` otherwise.\n */\nfunction createValidAbsoluteUrl(url, baseUrl) {\n  if (!url) {\n    return null;\n  }\n  try {\n    const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);\n    if (_isValidProtocol(absoluteUrl)) {\n      return absoluteUrl;\n    }\n  } catch (ex) {\n    /* `new URL()` will throw on incorrect data. */\n  }\n  return null;\n}\n\nfunction shadow(obj, prop, value) {\n  Object.defineProperty(obj, prop, {\n    value,\n    enumerable: true,\n    configurable: true,\n    writable: false,\n  });\n  return value;\n}\n\n/**\n * @type {any}\n */\nconst BaseException = (function BaseExceptionClosure() {\n  // eslint-disable-next-line no-shadow\n  function BaseException(message) {\n    if (this.constructor === BaseException) {\n      unreachable(\"Cannot initialize BaseException.\");\n    }\n    this.message = message;\n    this.name = this.constructor.name;\n  }\n  BaseException.prototype = new Error();\n  BaseException.constructor = BaseException;\n\n  return BaseException;\n})();\n\nclass PasswordException extends BaseException {\n  constructor(msg, code) {\n    super(msg);\n    this.code = code;\n  }\n}\n\nclass UnknownErrorException extends BaseException {\n  constructor(msg, details) {\n    super(msg);\n    this.details = details;\n  }\n}\n\nclass InvalidPDFException extends BaseException {}\n\nclass MissingPDFException extends BaseException {}\n\nclass UnexpectedResponseException extends BaseException {\n  constructor(msg, status) {\n    super(msg);\n    this.status = status;\n  }\n}\n\n/**\n * Error caused during parsing PDF data.\n */\nclass FormatError extends BaseException {}\n\n/**\n * Error used to indicate task cancellation.\n */\nclass AbortException extends BaseException {}\n\nconst NullCharactersRegExp = /\\x00/g;\n\n/**\n * @param {string} str\n */\nfunction removeNullCharacters(str) {\n  if (typeof str !== \"string\") {\n    warn(\"The argument for removeNullCharacters must be a string.\");\n    return str;\n  }\n  return str.replace(NullCharactersRegExp, \"\");\n}\n\nfunction bytesToString(bytes) {\n  assert(\n    bytes !== null && typeof bytes === \"object\" && bytes.length !== undefined,\n    \"Invalid argument for bytesToString\"\n  );\n  const length = bytes.length;\n  const MAX_ARGUMENT_COUNT = 8192;\n  if (length < MAX_ARGUMENT_COUNT) {\n    return String.fromCharCode.apply(null, bytes);\n  }\n  const strBuf = [];\n  for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\n    const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\n    const chunk = bytes.subarray(i, chunkEnd);\n    strBuf.push(String.fromCharCode.apply(null, chunk));\n  }\n  return strBuf.join(\"\");\n}\n\nfunction stringToBytes(str) {\n  assert(typeof str === \"string\", \"Invalid argument for stringToBytes\");\n  const length = str.length;\n  const bytes = new Uint8Array(length);\n  for (let i = 0; i < length; ++i) {\n    bytes[i] = str.charCodeAt(i) & 0xff;\n  }\n  return bytes;\n}\n\n/**\n * Gets length of the array (Array, Uint8Array, or string) in bytes.\n * @param {Array<any>|Uint8Array|string} arr\n * @returns {number}\n */\nfunction arrayByteLength(arr) {\n  if (arr.length !== undefined) {\n    return arr.length;\n  }\n  assert(arr.byteLength !== undefined, \"arrayByteLength - invalid argument.\");\n  return arr.byteLength;\n}\n\n/**\n * Combines array items (arrays) into single Uint8Array object.\n * @param {Array<Array<any>|Uint8Array|string>} arr - the array of the arrays\n *   (Array, Uint8Array, or string).\n * @returns {Uint8Array}\n */\nfunction arraysToBytes(arr) {\n  const length = arr.length;\n  // Shortcut: if first and only item is Uint8Array, return it.\n  if (length === 1 && arr[0] instanceof Uint8Array) {\n    return arr[0];\n  }\n  let resultLength = 0;\n  for (let i = 0; i < length; i++) {\n    resultLength += arrayByteLength(arr[i]);\n  }\n  let pos = 0;\n  const data = new Uint8Array(resultLength);\n  for (let i = 0; i < length; i++) {\n    let item = arr[i];\n    if (!(item instanceof Uint8Array)) {\n      if (typeof item === \"string\") {\n        item = stringToBytes(item);\n      } else {\n        item = new Uint8Array(item);\n      }\n    }\n    const itemLength = item.byteLength;\n    data.set(item, pos);\n    pos += itemLength;\n  }\n  return data;\n}\n\nfunction string32(value) {\n  return String.fromCharCode(\n    (value >> 24) & 0xff,\n    (value >> 16) & 0xff,\n    (value >> 8) & 0xff,\n    value & 0xff\n  );\n}\n\n// Checks the endianness of the platform.\nfunction isLittleEndian() {\n  const buffer8 = new Uint8Array(4);\n  buffer8[0] = 1;\n  const view32 = new Uint32Array(buffer8.buffer, 0, 1);\n  return view32[0] === 1;\n}\nconst IsLittleEndianCached = {\n  get value() {\n    return shadow(this, \"value\", isLittleEndian());\n  },\n};\n\n// Checks if it's possible to eval JS expressions.\nfunction isEvalSupported() {\n  try {\n    new Function(\"\"); // eslint-disable-line no-new, no-new-func\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\nconst IsEvalSupportedCached = {\n  get value() {\n    return shadow(this, \"value\", isEvalSupported());\n  },\n};\n\nconst rgbBuf = [\"rgb(\", 0, \",\", 0, \",\", 0, \")\"];\n\nclass Util {\n  // makeCssRgb() can be called thousands of times. Using ´rgbBuf` avoids\n  // creating many intermediate strings.\n  static makeCssRgb(r, g, b) {\n    rgbBuf[1] = r;\n    rgbBuf[3] = g;\n    rgbBuf[5] = b;\n    return rgbBuf.join(\"\");\n  }\n\n  // Concatenates two transformation matrices together and returns the result.\n  static transform(m1, m2) {\n    return [\n      m1[0] * m2[0] + m1[2] * m2[1],\n      m1[1] * m2[0] + m1[3] * m2[1],\n      m1[0] * m2[2] + m1[2] * m2[3],\n      m1[1] * m2[2] + m1[3] * m2[3],\n      m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n      m1[1] * m2[4] + m1[3] * m2[5] + m1[5],\n    ];\n  }\n\n  // For 2d affine transforms\n  static applyTransform(p, m) {\n    const xt = p[0] * m[0] + p[1] * m[2] + m[4];\n    const yt = p[0] * m[1] + p[1] * m[3] + m[5];\n    return [xt, yt];\n  }\n\n  static applyInverseTransform(p, m) {\n    const d = m[0] * m[3] - m[1] * m[2];\n    const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n    const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n    return [xt, yt];\n  }\n\n  // Applies the transform to the rectangle and finds the minimum axially\n  // aligned bounding box.\n  static getAxialAlignedBoundingBox(r, m) {\n    const p1 = Util.applyTransform(r, m);\n    const p2 = Util.applyTransform(r.slice(2, 4), m);\n    const p3 = Util.applyTransform([r[0], r[3]], m);\n    const p4 = Util.applyTransform([r[2], r[1]], m);\n    return [\n      Math.min(p1[0], p2[0], p3[0], p4[0]),\n      Math.min(p1[1], p2[1], p3[1], p4[1]),\n      Math.max(p1[0], p2[0], p3[0], p4[0]),\n      Math.max(p1[1], p2[1], p3[1], p4[1]),\n    ];\n  }\n\n  static inverseTransform(m) {\n    const d = m[0] * m[3] - m[1] * m[2];\n    return [\n      m[3] / d,\n      -m[1] / d,\n      -m[2] / d,\n      m[0] / d,\n      (m[2] * m[5] - m[4] * m[3]) / d,\n      (m[4] * m[1] - m[5] * m[0]) / d,\n    ];\n  }\n\n  // Apply a generic 3d matrix M on a 3-vector v:\n  //   | a b c |   | X |\n  //   | d e f | x | Y |\n  //   | g h i |   | Z |\n  // M is assumed to be serialized as [a,b,c,d,e,f,g,h,i],\n  // with v as [X,Y,Z]\n  static apply3dTransform(m, v) {\n    return [\n      m[0] * v[0] + m[1] * v[1] + m[2] * v[2],\n      m[3] * v[0] + m[4] * v[1] + m[5] * v[2],\n      m[6] * v[0] + m[7] * v[1] + m[8] * v[2],\n    ];\n  }\n\n  // This calculation uses Singular Value Decomposition.\n  // The SVD can be represented with formula A = USV. We are interested in the\n  // matrix S here because it represents the scale values.\n  static singularValueDecompose2dScale(m) {\n    const transpose = [m[0], m[2], m[1], m[3]];\n\n    // Multiply matrix m with its transpose.\n    const a = m[0] * transpose[0] + m[1] * transpose[2];\n    const b = m[0] * transpose[1] + m[1] * transpose[3];\n    const c = m[2] * transpose[0] + m[3] * transpose[2];\n    const d = m[2] * transpose[1] + m[3] * transpose[3];\n\n    // Solve the second degree polynomial to get roots.\n    const first = (a + d) / 2;\n    const second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;\n    const sx = first + second || 1;\n    const sy = first - second || 1;\n\n    // Scale values are the square roots of the eigenvalues.\n    return [Math.sqrt(sx), Math.sqrt(sy)];\n  }\n\n  // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)\n  // For coordinate systems whose origin lies in the bottom-left, this\n  // means normalization to (BL,TR) ordering. For systems with origin in the\n  // top-left, this means (TL,BR) ordering.\n  static normalizeRect(rect) {\n    const r = rect.slice(0); // clone rect\n    if (rect[0] > rect[2]) {\n      r[0] = rect[2];\n      r[2] = rect[0];\n    }\n    if (rect[1] > rect[3]) {\n      r[1] = rect[3];\n      r[3] = rect[1];\n    }\n    return r;\n  }\n\n  // Returns a rectangle [x1, y1, x2, y2] corresponding to the\n  // intersection of rect1 and rect2. If no intersection, returns 'false'\n  // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]\n  static intersect(rect1, rect2) {\n    function compare(a, b) {\n      return a - b;\n    }\n\n    // Order points along the axes\n    const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare);\n    const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare);\n    const result = [];\n\n    rect1 = Util.normalizeRect(rect1);\n    rect2 = Util.normalizeRect(rect2);\n\n    // X: first and second points belong to different rectangles?\n    if (\n      (orderedX[0] === rect1[0] && orderedX[1] === rect2[0]) ||\n      (orderedX[0] === rect2[0] && orderedX[1] === rect1[0])\n    ) {\n      // Intersection must be between second and third points\n      result[0] = orderedX[1];\n      result[2] = orderedX[2];\n    } else {\n      return null;\n    }\n\n    // Y: first and second points belong to different rectangles?\n    if (\n      (orderedY[0] === rect1[1] && orderedY[1] === rect2[1]) ||\n      (orderedY[0] === rect2[1] && orderedY[1] === rect1[1])\n    ) {\n      // Intersection must be between second and third points\n      result[1] = orderedY[1];\n      result[3] = orderedY[2];\n    } else {\n      return null;\n    }\n\n    return result;\n  }\n}\n\n// prettier-ignore\nconst PDFStringTranslateTable = [\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014,\n  0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C,\n  0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160,\n  0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC\n];\n\nfunction stringToPDFString(str) {\n  const length = str.length,\n    strBuf = [];\n  if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\n    // UTF16BE BOM\n    for (let i = 2; i < length; i += 2) {\n      strBuf.push(\n        String.fromCharCode((str.charCodeAt(i) << 8) | str.charCodeAt(i + 1))\n      );\n    }\n  } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\n    // UTF16LE BOM\n    for (let i = 2; i < length; i += 2) {\n      strBuf.push(\n        String.fromCharCode((str.charCodeAt(i + 1) << 8) | str.charCodeAt(i))\n      );\n    }\n  } else {\n    for (let i = 0; i < length; ++i) {\n      const code = PDFStringTranslateTable[str.charCodeAt(i)];\n      strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));\n    }\n  }\n  return strBuf.join(\"\");\n}\n\nfunction escapeString(str) {\n  // replace \"(\", \")\" and \"\\\" by \"\\(\", \"\\)\" and \"\\\\\"\n  // in order to write it in a PDF file.\n  return str.replace(/([\\(\\)\\\\])/g, \"\\\\$1\");\n}\n\nfunction stringToUTF8String(str) {\n  return decodeURIComponent(escape(str));\n}\n\nfunction utf8StringToString(str) {\n  return unescape(encodeURIComponent(str));\n}\n\nfunction isBool(v) {\n  return typeof v === \"boolean\";\n}\n\nfunction isNum(v) {\n  return typeof v === \"number\";\n}\n\nfunction isString(v) {\n  return typeof v === \"string\";\n}\n\nfunction isArrayBuffer(v) {\n  return typeof v === \"object\" && v !== null && v.byteLength !== undefined;\n}\n\nfunction isArrayEqual(arr1, arr2) {\n  if (arr1.length !== arr2.length) {\n    return false;\n  }\n  return arr1.every(function (element, index) {\n    return element === arr2[index];\n  });\n}\n\nfunction getModificationDate(date = new Date(Date.now())) {\n  const buffer = [\n    date.getUTCFullYear().toString(),\n    (date.getUTCMonth() + 1).toString().padStart(2, \"0\"),\n    (date.getUTCDate() + 1).toString().padStart(2, \"0\"),\n    date.getUTCHours().toString().padStart(2, \"0\"),\n    date.getUTCMinutes().toString().padStart(2, \"0\"),\n    date.getUTCSeconds().toString().padStart(2, \"0\"),\n  ];\n\n  return buffer.join(\"\");\n}\n\n/**\n * Promise Capability object.\n *\n * @typedef {Object} PromiseCapability\n * @property {Promise<any>} promise - A Promise object.\n * @property {boolean} settled - If the Promise has been fulfilled/rejected.\n * @property {function} resolve - Fulfills the Promise.\n * @property {function} reject - Rejects the Promise.\n */\n\n/**\n * Creates a promise capability object.\n * @alias createPromiseCapability\n *\n * @returns {PromiseCapability}\n */\nfunction createPromiseCapability() {\n  const capability = Object.create(null);\n  let isSettled = false;\n\n  Object.defineProperty(capability, \"settled\", {\n    get() {\n      return isSettled;\n    },\n  });\n  capability.promise = new Promise(function (resolve, reject) {\n    capability.resolve = function (data) {\n      isSettled = true;\n      resolve(data);\n    };\n    capability.reject = function (reason) {\n      isSettled = true;\n      reject(reason);\n    };\n  });\n  return capability;\n}\n\nconst createObjectURL = (function createObjectURLClosure() {\n  // Blob/createObjectURL is not available, falling back to data schema.\n  const digits =\n    \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n  // eslint-disable-next-line no-shadow\n  return function createObjectURL(data, contentType, forceDataSchema = false) {\n    if (!forceDataSchema && URL.createObjectURL) {\n      const blob = new Blob([data], { type: contentType });\n      return URL.createObjectURL(blob);\n    }\n\n    let buffer = `data:${contentType};base64,`;\n    for (let i = 0, ii = data.length; i < ii; i += 3) {\n      const b1 = data[i] & 0xff;\n      const b2 = data[i + 1] & 0xff;\n      const b3 = data[i + 2] & 0xff;\n      const d1 = b1 >> 2,\n        d2 = ((b1 & 3) << 4) | (b2 >> 4);\n      const d3 = i + 1 < ii ? ((b2 & 0xf) << 2) | (b3 >> 6) : 64;\n      const d4 = i + 2 < ii ? b3 & 0x3f : 64;\n      buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];\n    }\n    return buffer;\n  };\n})();\n\nexport {\n  BaseException,\n  FONT_IDENTITY_MATRIX,\n  IDENTITY_MATRIX,\n  OPS,\n  VerbosityLevel,\n  UNSUPPORTED_FEATURES,\n  AnnotationBorderStyleType,\n  AnnotationFieldFlag,\n  AnnotationFlag,\n  AnnotationMarkedState,\n  AnnotationReplyType,\n  AnnotationReviewState,\n  AnnotationStateModelType,\n  AnnotationType,\n  FontType,\n  ImageKind,\n  CMapCompressionType,\n  AbortException,\n  InvalidPDFException,\n  MissingPDFException,\n  PasswordException,\n  PasswordResponses,\n  PermissionFlag,\n  StreamType,\n  TextRenderingMode,\n  UnexpectedResponseException,\n  UnknownErrorException,\n  Util,\n  FormatError,\n  arrayByteLength,\n  arraysToBytes,\n  assert,\n  bytesToString,\n  createPromiseCapability,\n  createObjectURL,\n  escapeString,\n  getModificationDate,\n  getVerbosityLevel,\n  info,\n  isArrayBuffer,\n  isArrayEqual,\n  isBool,\n  isNum,\n  isString,\n  isSameOrigin,\n  createValidAbsoluteUrl,\n  IsLittleEndianCached,\n  IsEvalSupportedCached,\n  removeNullCharacters,\n  setVerbosityLevel,\n  shadow,\n  string32,\n  stringToBytes,\n  stringToPDFString,\n  stringToUTF8String,\n  utf8StringToString,\n  warn,\n  unreachable,\n};\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* eslint no-var: error */\n\nimport { isNodeJS } from \"./is_node.js\";\n\n// Skip compatibility checks for modern builds and if we already ran the module.\nif (\n  (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"SKIP_BABEL\")) &&\n  (typeof globalThis === \"undefined\" || !globalThis._pdfjsCompatibilityChecked)\n) {\n  // Provides support for globalThis in legacy browsers.\n  // Support: IE11/Edge, Opera\n  if (typeof globalThis === \"undefined\" || globalThis.Math !== Math) {\n    // eslint-disable-next-line no-global-assign\n    globalThis = require(\"core-js/es/global-this\");\n  }\n  globalThis._pdfjsCompatibilityChecked = true;\n\n  const hasDOM = typeof window === \"object\" && typeof document === \"object\";\n  const userAgent =\n    (typeof navigator !== \"undefined\" && navigator.userAgent) || \"\";\n  const isIE = /Trident/.test(userAgent);\n\n  // Support: Node.js\n  (function checkNodeBtoa() {\n    if (globalThis.btoa || !isNodeJS) {\n      return;\n    }\n    globalThis.btoa = function (chars) {\n      // eslint-disable-next-line no-undef\n      return Buffer.from(chars, \"binary\").toString(\"base64\");\n    };\n  })();\n\n  // Support: Node.js\n  (function checkNodeAtob() {\n    if (globalThis.atob || !isNodeJS) {\n      return;\n    }\n    globalThis.atob = function (input) {\n      // eslint-disable-next-line no-undef\n      return Buffer.from(input, \"base64\").toString(\"binary\");\n    };\n  })();\n\n  // Provides support for ChildNode.remove in legacy browsers.\n  // Support: IE.\n  (function checkChildNodeRemove() {\n    if (!hasDOM) {\n      return;\n    }\n    if (typeof Element.prototype.remove !== \"undefined\") {\n      return;\n    }\n    Element.prototype.remove = function () {\n      if (this.parentNode) {\n        // eslint-disable-next-line mozilla/avoid-removeChild\n        this.parentNode.removeChild(this);\n      }\n    };\n  })();\n\n  // Provides support for DOMTokenList.prototype.{add, remove}, with more than\n  // one parameter, in legacy browsers.\n  // Support: IE\n  (function checkDOMTokenListAddRemove() {\n    if (!hasDOM || isNodeJS) {\n      return;\n    }\n    const div = document.createElement(\"div\");\n    div.classList.add(\"testOne\", \"testTwo\");\n\n    if (\n      div.classList.contains(\"testOne\") === true &&\n      div.classList.contains(\"testTwo\") === true\n    ) {\n      return;\n    }\n    const OriginalDOMTokenListAdd = DOMTokenList.prototype.add;\n    const OriginalDOMTokenListRemove = DOMTokenList.prototype.remove;\n\n    DOMTokenList.prototype.add = function (...tokens) {\n      for (const token of tokens) {\n        OriginalDOMTokenListAdd.call(this, token);\n      }\n    };\n    DOMTokenList.prototype.remove = function (...tokens) {\n      for (const token of tokens) {\n        OriginalDOMTokenListRemove.call(this, token);\n      }\n    };\n  })();\n\n  // Provides support for DOMTokenList.prototype.toggle, with the optional\n  // \"force\" parameter, in legacy browsers.\n  // Support: IE\n  (function checkDOMTokenListToggle() {\n    if (!hasDOM || isNodeJS) {\n      return;\n    }\n    const div = document.createElement(\"div\");\n    if (div.classList.toggle(\"test\", 0) === false) {\n      return;\n    }\n\n    DOMTokenList.prototype.toggle = function (token) {\n      const force =\n        arguments.length > 1 ? !!arguments[1] : !this.contains(token);\n      return this[force ? \"add\" : \"remove\"](token), force;\n    };\n  })();\n\n  // Provides support for window.history.{pushState, replaceState}, with the\n  // `url` parameter set to `undefined`, without breaking the document URL.\n  // Support: IE\n  (function checkWindowHistoryPushStateReplaceState() {\n    if (!hasDOM || !isIE) {\n      return;\n    }\n    const OriginalPushState = window.history.pushState;\n    const OriginalReplaceState = window.history.replaceState;\n\n    window.history.pushState = function (state, title, url) {\n      const args = url === undefined ? [state, title] : [state, title, url];\n      OriginalPushState.apply(this, args);\n    };\n    window.history.replaceState = function (state, title, url) {\n      const args = url === undefined ? [state, title] : [state, title, url];\n      OriginalReplaceState.apply(this, args);\n    };\n  })();\n\n  // Provides support for String.prototype.startsWith in legacy browsers.\n  // Support: IE, Chrome<41\n  (function checkStringStartsWith() {\n    if (String.prototype.startsWith) {\n      return;\n    }\n    require(\"core-js/es/string/starts-with.js\");\n  })();\n\n  // Provides support for String.prototype.endsWith in legacy browsers.\n  // Support: IE, Chrome<41\n  (function checkStringEndsWith() {\n    if (String.prototype.endsWith) {\n      return;\n    }\n    require(\"core-js/es/string/ends-with.js\");\n  })();\n\n  // Provides support for String.prototype.includes in legacy browsers.\n  // Support: IE, Chrome<41\n  (function checkStringIncludes() {\n    if (String.prototype.includes) {\n      return;\n    }\n    require(\"core-js/es/string/includes.js\");\n  })();\n\n  // Provides support for Array.prototype.includes in legacy browsers.\n  // Support: IE, Chrome<47\n  (function checkArrayIncludes() {\n    if (Array.prototype.includes) {\n      return;\n    }\n    require(\"core-js/es/array/includes.js\");\n  })();\n\n  // Provides support for Array.from in legacy browsers.\n  // Support: IE\n  (function checkArrayFrom() {\n    if (Array.from) {\n      return;\n    }\n    require(\"core-js/es/array/from.js\");\n  })();\n\n  // Provides support for Object.assign in legacy browsers.\n  // Support: IE\n  (function checkObjectAssign() {\n    if (Object.assign) {\n      return;\n    }\n    require(\"core-js/es/object/assign.js\");\n  })();\n\n  // Provides support for Object.fromEntries in legacy browsers.\n  // Support: IE, Chrome<73\n  (function checkObjectFromEntries() {\n    if (Object.fromEntries) {\n      return;\n    }\n    require(\"core-js/es/object/from-entries.js\");\n  })();\n\n  // Provides support for Math.log2 in legacy browsers.\n  // Support: IE, Chrome<38\n  (function checkMathLog2() {\n    if (Math.log2) {\n      return;\n    }\n    Math.log2 = require(\"core-js/es/math/log2.js\");\n  })();\n\n  // Provides support for Number.isNaN in legacy browsers.\n  // Support: IE.\n  (function checkNumberIsNaN() {\n    if (Number.isNaN) {\n      return;\n    }\n    Number.isNaN = require(\"core-js/es/number/is-nan.js\");\n  })();\n\n  // Provides support for Number.isInteger in legacy browsers.\n  // Support: IE, Chrome<34\n  (function checkNumberIsInteger() {\n    if (Number.isInteger) {\n      return;\n    }\n    Number.isInteger = require(\"core-js/es/number/is-integer.js\");\n  })();\n\n  // Provides support for TypedArray.prototype.slice in legacy browsers.\n  // Support: IE\n  (function checkTypedArraySlice() {\n    if (Uint8Array.prototype.slice) {\n      return;\n    }\n    require(\"core-js/es/typed-array/slice\");\n  })();\n\n  // Support: IE, Safari<11, Chrome<63\n  (function checkPromise() {\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"IMAGE_DECODERS\")) {\n      // The current image decoders are synchronous, hence `Promise` shouldn't\n      // need to be polyfilled for the IMAGE_DECODERS build target.\n      return;\n    }\n    if (globalThis.Promise && globalThis.Promise.allSettled) {\n      return;\n    }\n    globalThis.Promise = require(\"core-js/es/promise/index.js\");\n  })();\n\n  // Support: IE\n  (function checkURL() {\n    if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"PRODUCTION\")) {\n      // Prevent \"require is not a function\" errors in development mode,\n      // since the `URL` constructor should be available in modern browers.\n      return;\n    } else if (!PDFJSDev.test(\"GENERIC\")) {\n      // The `URL` constructor is assumed to be available in the extension\n      // builds.\n      return;\n    } else if (PDFJSDev.test(\"IMAGE_DECODERS\")) {\n      // The current image decoders don't use the `URL` constructor, so it\n      // doesn't need to be polyfilled for the IMAGE_DECODERS build target.\n      return;\n    }\n    globalThis.URL = require(\"core-js/web/url.js\");\n  })();\n\n  // Support: IE, Node.js\n  (function checkReadableStream() {\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"IMAGE_DECODERS\")) {\n      // The current image decoders are synchronous, hence `ReadableStream`\n      // shouldn't need to be polyfilled for the IMAGE_DECODERS build target.\n      return;\n    }\n    let isReadableStreamSupported = false;\n\n    if (typeof ReadableStream !== \"undefined\") {\n      // MS Edge may say it has ReadableStream but they are not up to spec yet.\n      try {\n        // eslint-disable-next-line no-new\n        new ReadableStream({\n          start(controller) {\n            controller.close();\n          },\n        });\n        isReadableStreamSupported = true;\n      } catch (e) {\n        // The ReadableStream constructor cannot be used.\n      }\n    }\n    if (isReadableStreamSupported) {\n      return;\n    }\n    globalThis.ReadableStream = require(\"web-streams-polyfill/dist/ponyfill.js\").ReadableStream;\n  })();\n\n  // We want to support Map iteration, but it doesn't seem possible to easily\n  // test for that specifically; hence using a similarly unsupported property.\n  // Support: IE11\n  (function checkMapEntries() {\n    if (globalThis.Map && globalThis.Map.prototype.entries) {\n      return;\n    }\n    globalThis.Map = require(\"core-js/es/map/index.js\");\n  })();\n\n  // We want to support Set iteration, but it doesn't seem possible to easily\n  // test for that specifically; hence using a similarly unsupported property.\n  // Support: IE11\n  (function checkSetEntries() {\n    if (globalThis.Set && globalThis.Set.prototype.entries) {\n      return;\n    }\n    globalThis.Set = require(\"core-js/es/set/index.js\");\n  })();\n\n  // Support: IE<11, Safari<8, Chrome<36\n  (function checkWeakMap() {\n    if (globalThis.WeakMap) {\n      return;\n    }\n    globalThis.WeakMap = require(\"core-js/es/weak-map/index.js\");\n  })();\n\n  // Support: IE11\n  (function checkWeakSet() {\n    if (globalThis.WeakSet) {\n      return;\n    }\n    globalThis.WeakSet = require(\"core-js/es/weak-set/index.js\");\n  })();\n\n  // Provides support for String.codePointAt in legacy browsers.\n  // Support: IE11.\n  (function checkStringCodePointAt() {\n    if (String.prototype.codePointAt) {\n      return;\n    }\n    require(\"core-js/es/string/code-point-at.js\");\n  })();\n\n  // Provides support for String.fromCodePoint in legacy browsers.\n  // Support: IE11.\n  (function checkStringFromCodePoint() {\n    if (String.fromCodePoint) {\n      return;\n    }\n    String.fromCodePoint = require(\"core-js/es/string/from-code-point.js\");\n  })();\n\n  // Support: IE\n  (function checkSymbol() {\n    if (globalThis.Symbol) {\n      return;\n    }\n    require(\"core-js/es/symbol/index.js\");\n  })();\n\n  // Provides support for String.prototype.padStart in legacy browsers.\n  // Support: IE, Chrome<57\n  (function checkStringPadStart() {\n    if (String.prototype.padStart) {\n      return;\n    }\n    require(\"core-js/es/string/pad-start.js\");\n  })();\n\n  // Provides support for String.prototype.padEnd in legacy browsers.\n  // Support: IE, Chrome<57\n  (function checkStringPadEnd() {\n    if (String.prototype.padEnd) {\n      return;\n    }\n    require(\"core-js/es/string/pad-end.js\");\n  })();\n\n  // Provides support for Object.values in legacy browsers.\n  // Support: IE, Chrome<54\n  (function checkObjectValues() {\n    if (Object.values) {\n      return;\n    }\n    Object.values = require(\"core-js/es/object/values.js\");\n  })();\n\n  // Provides support for Object.entries in legacy browsers.\n  // Support: IE, Chrome<54\n  (function checkObjectEntries() {\n    if (Object.entries) {\n      return;\n    }\n    Object.entries = require(\"core-js/es/object/entries.js\");\n  })();\n}\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals process */\n\n// NW.js / Electron is a browser context, but copies some Node.js objects; see\n// http://docs.nwjs.io/en/latest/For%20Users/Advanced/JavaScript%20Contexts%20in%20NW.js/#access-nodejs-and-nwjs-api-in-browser-context\n// https://www.electronjs.org/docs/api/process#processversionselectron-readonly\n// https://www.electronjs.org/docs/api/process#processtype-readonly\nconst isNodeJS =\n  typeof process === \"object\" &&\n  process + \"\" === \"[object process]\" &&\n  !process.versions.nw &&\n  !(process.versions.electron && process.type && process.type !== \"browser\");\n\nexport { isNodeJS };\n","require('../modules/es.global-this');\n\nmodule.exports = require('../internals/global');\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\n\n// `globalThis` object\n// https://github.com/tc39/proposal-global\n$({ global: true }, {\n  globalThis: global\n});\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n  options.target      - name of the target object\n  options.global      - target is the global object\n  options.stat        - export as static methods of target\n  options.proto       - export as prototype methods of target\n  options.real        - real prototype method for the `pure` version\n  options.forced      - export even if the native feature is available\n  options.bind        - bind methods to the target, required for the `pure` version\n  options.wrap        - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe      - use the simple assignment of property instead of delete + defineProperty\n  options.sham        - add a flag to not completely full polyfills\n  options.enumerable  - export as enumerable property\n  options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n  if (GLOBAL) {\n    target = global;\n  } else if (STATIC) {\n    target = global[TARGET] || setGlobal(TARGET, {});\n  } else {\n    target = (global[TARGET] || {}).prototype;\n  }\n  if (target) for (key in source) {\n    sourceProperty = source[key];\n    if (options.noTargetGet) {\n      descriptor = getOwnPropertyDescriptor(target, key);\n      targetProperty = descriptor && descriptor.value;\n    } else targetProperty = target[key];\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contained in target\n    if (!FORCED && targetProperty !== undefined) {\n      if (typeof sourceProperty === typeof targetProperty) continue;\n      copyConstructorProperties(sourceProperty, targetProperty);\n    }\n    // add a flag to not completely full polyfills\n    if (options.sham || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(sourceProperty, 'sham', true);\n    }\n    // extend global\n    redefine(target, key, sourceProperty, options);\n  }\n};\n","var check = function (it) {\n  return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  // eslint-disable-next-line no-undef\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  check(typeof self == 'object' && self) ||\n  check(typeof global == 'object' && global) ||\n  // eslint-disable-next-line no-new-func\n  Function('return this')();\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return nativeGetOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var fails = require('../internals/fails');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !fails(function () {\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n","'use strict';\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins\n  return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.github.io/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n  return it;\n};\n","var isObject = require('../internals/is-object');\n\n// `ToPrimitive` abstract operation\n// https://tc39.github.io/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n  if (!isObject(input)) return input;\n  var fn, val;\n  if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n  if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n  if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return nativeDefineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n  if (!isObject(it)) {\n    throw TypeError(String(it) + ' is not an object');\n  } return it;\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n  var unsafe = options ? !!options.unsafe : false;\n  var simple = options ? !!options.enumerable : false;\n  var noTargetGet = options ? !!options.noTargetGet : false;\n  if (typeof value == 'function') {\n    if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key);\n    enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');\n  }\n  if (O === global) {\n    if (simple) O[key] = value;\n    else setGlobal(key, value);\n    return;\n  } else if (!unsafe) {\n    delete O[key];\n  } else if (!noTargetGet && O[key]) {\n    simple = true;\n  }\n  if (simple) O[key] = value;\n  else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n  return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (key, value) {\n  try {\n    createNonEnumerableProperty(global, key, value);\n  } catch (error) {\n    global[key] = value;\n  } return value;\n};\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n  store.inspectSource = function (it) {\n    return functionToString.call(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP) {\n  var store = new WeakMap();\n  var wmget = store.get;\n  var wmhas = store.has;\n  var wmset = store.set;\n  set = function (it, metadata) {\n    wmset.call(store, it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return wmget.call(store, it) || {};\n  };\n  has = function (it) {\n    return wmhas.call(store, it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return objectHas(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return objectHas(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: '3.6.5',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","module.exports = false;\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n  return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","module.exports = {};\n","var has = require('../internals/has');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n  var keys = ownKeys(source);\n  var defineProperty = definePropertyModule.f;\n  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n  }\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n  var keys = getOwnPropertyNamesModule.f(anObject(it));\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","var path = require('../internals/path');\nvar global = require('../internals/global');\n\nvar aFunction = function (variable) {\n  return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n    : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~indexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.github.io/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.github.io/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n  return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n  var integer = toInteger(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n","exports.f = Object.getOwnPropertySymbols;\n","var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value == POLYFILL ? true\n    : value == NATIVE ? false\n    : typeof detection == 'function' ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","require('../../modules/es.string.starts-with');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('String', 'startsWith');\n","'use strict';\nvar $ = require('../internals/export');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\nvar nativeStartsWith = ''.startsWith;\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n  var descriptor = getOwnPropertyDescriptor(String.prototype, 'startsWith');\n  return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.startsWith` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.startswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = String(requireObjectCoercible(this));\n    notARegExp(searchString);\n    var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = String(searchString);\n    return nativeStartsWith\n      ? nativeStartsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});\n","var isRegExp = require('../internals/is-regexp');\n\nmodule.exports = function (it) {\n  if (isRegExp(it)) {\n    throw TypeError(\"The method doesn't accept regular expressions\");\n  } return it;\n};\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.github.io/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!has(WellKnownSymbolsStore, name)) {\n    if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];\n    else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n  } return WellKnownSymbolsStore[name];\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  // Chrome 38 Symbol has incorrect toString conversion\n  // eslint-disable-next-line no-undef\n  return !String(Symbol());\n});\n","var NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n  // eslint-disable-next-line no-undef\n  && !Symbol.sham\n  // eslint-disable-next-line no-undef\n  && typeof Symbol.iterator == 'symbol';\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n  var regexp = /./;\n  try {\n    '/./'[METHOD_NAME](regexp);\n  } catch (e) {\n    try {\n      regexp[MATCH] = false;\n      return '/./'[METHOD_NAME](regexp);\n    } catch (f) { /* empty */ }\n  } return false;\n};\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\n\nvar call = Function.call;\n\nmodule.exports = function (CONSTRUCTOR, METHOD, length) {\n  return bind(call, global[CONSTRUCTOR].prototype[METHOD], length);\n};\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 0: return function () {\n      return fn.call(that);\n    };\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","module.exports = function (it) {\n  if (typeof it != 'function') {\n    throw TypeError(String(it) + ' is not a function');\n  } return it;\n};\n","require('../../modules/es.string.ends-with');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('String', 'endsWith');\n","'use strict';\nvar $ = require('../internals/export');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\nvar nativeEndsWith = ''.endsWith;\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n  var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');\n  return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.endsWith` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.endswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n  endsWith: function endsWith(searchString /* , endPosition = @length */) {\n    var that = String(requireObjectCoercible(this));\n    notARegExp(searchString);\n    var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n    var len = toLength(that.length);\n    var end = endPosition === undefined ? len : min(toLength(endPosition), len);\n    var search = String(searchString);\n    return nativeEndsWith\n      ? nativeEndsWith.call(that, search, end)\n      : that.slice(end - search.length, end) === search;\n  }\n});\n","require('../../modules/es.string.includes');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('String', 'includes');\n","'use strict';\nvar $ = require('../internals/export');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\n// `String.prototype.includes` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~String(requireObjectCoercible(this))\n      .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","require('../../modules/es.array.includes');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('Array', 'includes');\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });\n\n// `Array.prototype.includes` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true, forced: !USES_TO_LENGTH }, {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n  definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n    configurable: true,\n    value: create(null)\n  });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n  ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","var anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n  activeXDocument.write(scriptTag(''));\n  activeXDocument.close();\n  var temp = activeXDocument.parentWindow.Object;\n  activeXDocument = null; // avoid memory leak\n  return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = documentCreateElement('iframe');\n  var JS = 'java' + SCRIPT + ':';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  html.appendChild(iframe);\n  // https://github.com/zloirock/core-js/issues/475\n  iframe.src = String(JS);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(scriptTag('document.F=Object'));\n  iframeDocument.close();\n  return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n  try {\n    /* global ActiveXObject */\n    activeXDocument = document.domain && new ActiveXObject('htmlfile');\n  } catch (error) { /* ignore */ }\n  NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\n  var length = enumBugKeys.length;\n  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n  return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.github.io/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    EmptyConstructor[PROTOTYPE] = anObject(O);\n    result = new EmptyConstructor();\n    EmptyConstructor[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = NullProtoObject();\n  return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperties\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = objectKeys(Properties);\n  var length = keys.length;\n  var index = 0;\n  var key;\n  while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n  return O;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.github.io/ecma262/#sec-object.keys\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\n\nvar defineProperty = Object.defineProperty;\nvar cache = {};\n\nvar thrower = function (it) { throw it; };\n\nmodule.exports = function (METHOD_NAME, options) {\n  if (has(cache, METHOD_NAME)) return cache[METHOD_NAME];\n  if (!options) options = {};\n  var method = [][METHOD_NAME];\n  var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false;\n  var argument0 = has(options, 0) ? options[0] : thrower;\n  var argument1 = has(options, 1) ? options[1] : undefined;\n\n  return cache[METHOD_NAME] = !!method && !fails(function () {\n    if (ACCESSORS && !DESCRIPTORS) return true;\n    var O = { length: -1 };\n\n    if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower });\n    else O[1] = 1;\n\n    method.call(O, argument0, argument1);\n  });\n};\n","require('../../modules/es.string.iterator');\nrequire('../../modules/es.array.from');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Array.from;\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n  setInternalState(this, {\n    type: STRING_ITERATOR,\n    string: String(iterated),\n    index: 0\n  });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n  var state = getInternalState(this);\n  var string = state.string;\n  var index = state.index;\n  var point;\n  if (index >= string.length) return { value: undefined, done: true };\n  point = charAt(string, index);\n  state.index += point.length;\n  return { value: point, done: false };\n});\n","var toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n  return function ($this, pos) {\n    var S = String(requireObjectCoercible($this));\n    var position = toInteger(pos);\n    var size = S.length;\n    var first, second;\n    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n    first = S.charCodeAt(position);\n    return first < 0xD800 || first > 0xDBFF || position + 1 === size\n      || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n        ? CONVERT_TO_STRING ? S.charAt(position) : first\n        : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.codePointAt` method\n  // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat\n  codeAt: createMethod(false),\n  // `String.prototype.at` method\n  // https://github.com/mathiasbynens/String.prototype.at\n  charAt: createMethod(true)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n  createIteratorConstructor(IteratorConstructor, NAME, next);\n\n  var getIterationMethod = function (KIND) {\n    if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n    if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n    switch (KIND) {\n      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n    } return function () { return new IteratorConstructor(this); };\n  };\n\n  var TO_STRING_TAG = NAME + ' Iterator';\n  var INCORRECT_VALUES_NAME = false;\n  var IterablePrototype = Iterable.prototype;\n  var nativeIterator = IterablePrototype[ITERATOR]\n    || IterablePrototype['@@iterator']\n    || DEFAULT && IterablePrototype[DEFAULT];\n  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n  var CurrentIteratorPrototype, methods, KEY;\n\n  // fix native\n  if (anyNativeIterator) {\n    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n    if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n        if (setPrototypeOf) {\n          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n        } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n          createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n        }\n      }\n      // Set @@toStringTag to native iterators\n      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n    }\n  }\n\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n    INCORRECT_VALUES_NAME = true;\n    defaultIterator = function values() { return nativeIterator.call(this); };\n  }\n\n  // define iterator\n  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n    createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n  }\n  Iterators[NAME] = defaultIterator;\n\n  // export additional methods\n  if (DEFAULT) {\n    methods = {\n      values: getIterationMethod(VALUES),\n      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n      entries: getIterationMethod(ENTRIES)\n    };\n    if (FORCED) for (KEY in methods) {\n      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n        redefine(IterablePrototype, KEY, methods[KEY]);\n      }\n    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n  }\n\n  return methods;\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n  var TO_STRING_TAG = NAME + ' Iterator';\n  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n  Iterators[TO_STRING_TAG] = returnThis;\n  return IteratorConstructor;\n};\n","'use strict';\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\nif ([].keys) {\n  arrayIterator = [].keys();\n  // Safari 8 has buggy iterators w/o `next`\n  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n  else {\n    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n  }\n}\n\nif (IteratorPrototype == undefined) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif (!IS_PURE && !has(IteratorPrototype, ITERATOR)) {\n  createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n  IteratorPrototype: IteratorPrototype,\n  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","var has = require('../internals/has');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectPrototype : null;\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.github.io/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return Object(requireObjectCoercible(argument));\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var defineProperty = require('../internals/object-define-property').f;\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n  if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n    defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n  }\n};\n","module.exports = {};\n","var anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\n    setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n    setter.call(test, []);\n    CORRECT_SETTER = test instanceof Array;\n  } catch (error) { /* empty */ }\n  return function setPrototypeOf(O, proto) {\n    anObject(O);\n    aPossiblePrototype(proto);\n    if (CORRECT_SETTER) setter.call(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n  if (!isObject(it) && it !== null) {\n    throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n  } return it;\n};\n","var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n  Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.github.io/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n  from: from\n});\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\n// `Array.from` method implementation\n// https://tc39.github.io/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n  var O = toObject(arrayLike);\n  var C = typeof this == 'function' ? this : Array;\n  var argumentsLength = arguments.length;\n  var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n  var mapping = mapfn !== undefined;\n  var iteratorMethod = getIteratorMethod(O);\n  var index = 0;\n  var length, result, step, iterator, next, value;\n  if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n  // if the target is not iterable or it's an array with the default iterator - use a simple case\n  if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\n    iterator = iteratorMethod.call(O);\n    next = iterator.next;\n    result = new C();\n    for (;!(step = next.call(iterator)).done; index++) {\n      value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n      createProperty(result, index, value);\n    }\n  } else {\n    length = toLength(O.length);\n    result = new C(length);\n    for (;length > index; index++) {\n      value = mapping ? mapfn(O[index], index) : O[index];\n      createProperty(result, index, value);\n    }\n  }\n  result.length = index;\n  return result;\n};\n","var anObject = require('../internals/an-object');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n  try {\n    return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (error) {\n    var returnMethod = iterator['return'];\n    if (returnMethod !== undefined) anObject(returnMethod.call(iterator));\n    throw error;\n  }\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n  var propertyKey = toPrimitive(key);\n  if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n  else object[propertyKey] = value;\n};\n","var classof = require('../internals/classof');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n  var O, tag, result;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n    // builtinTag case\n    : CORRECT_ARGUMENTS ? classofRaw(O)\n    // ES3 arguments fallback\n    : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var called = 0;\n  var iteratorWithReturn = {\n    next: function () {\n      return { done: !!called++ };\n    },\n    'return': function () {\n      SAFE_CLOSING = true;\n    }\n  };\n  iteratorWithReturn[ITERATOR] = function () {\n    return this;\n  };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n  if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n  var ITERATION_SUPPORT = false;\n  try {\n    var object = {};\n    object[ITERATOR] = function () {\n      return {\n        next: function () {\n          return { done: ITERATION_SUPPORT = true };\n        }\n      };\n    };\n    exec(object);\n  } catch (error) { /* empty */ }\n  return ITERATION_SUPPORT;\n};\n","require('../../modules/es.object.assign');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.assign;\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n  assign: assign\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\nvar nativeAssign = Object.assign;\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\nmodule.exports = !nativeAssign || fails(function () {\n  // should have correct order of operations (Edge bug)\n  if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', {\n    enumerable: true,\n    get: function () {\n      defineProperty(this, 'b', {\n        value: 3,\n        enumerable: false\n      });\n    }\n  }), { b: 2 })).b !== 1) return true;\n  // should work with symbols and should have deterministic property order (V8 bug)\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var symbol = Symbol();\n  var alphabet = 'abcdefghijklmnopqrst';\n  A[symbol] = 7;\n  alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n  return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var argumentsLength = arguments.length;\n  var index = 1;\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  var propertyIsEnumerable = propertyIsEnumerableModule.f;\n  while (argumentsLength > index) {\n    var S = IndexedObject(arguments[index++]);\n    var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n    }\n  } return T;\n} : nativeAssign;\n","require('../../modules/es.array.iterator');\nrequire('../../modules/es.object.from-entries');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.fromEntries;\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.github.io/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n  setInternalState(this, {\n    type: ARRAY_ITERATOR,\n    target: toIndexedObject(iterated), // target\n    index: 0,                          // next index\n    kind: kind                         // kind\n  });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n  var state = getInternalState(this);\n  var target = state.target;\n  var kind = state.kind;\n  var index = state.index++;\n  if (!target || index >= target.length) {\n    state.target = undefined;\n    return { value: undefined, done: true };\n  }\n  if (kind == 'keys') return { value: index, done: false };\n  if (kind == 'values') return { value: target[index], done: false };\n  return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://github.com/tc39/proposal-object-from-entries\n$({ target: 'Object', stat: true }, {\n  fromEntries: function fromEntries(iterable) {\n    var obj = {};\n    iterate(iterable, function (k, v) {\n      createProperty(obj, k, v);\n    }, undefined, true);\n    return obj;\n  }\n});\n","var anObject = require('../internals/an-object');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\n\nvar Result = function (stopped, result) {\n  this.stopped = stopped;\n  this.result = result;\n};\n\nvar iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) {\n  var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1);\n  var iterator, iterFn, index, length, result, next, step;\n\n  if (IS_ITERATOR) {\n    iterator = iterable;\n  } else {\n    iterFn = getIteratorMethod(iterable);\n    if (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n    // optimisation for array iterators\n    if (isArrayIteratorMethod(iterFn)) {\n      for (index = 0, length = toLength(iterable.length); length > index; index++) {\n        result = AS_ENTRIES\n          ? boundFunction(anObject(step = iterable[index])[0], step[1])\n          : boundFunction(iterable[index]);\n        if (result && result instanceof Result) return result;\n      } return new Result(false);\n    }\n    iterator = iterFn.call(iterable);\n  }\n\n  next = iterator.next;\n  while (!(step = next.call(iterator)).done) {\n    result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES);\n    if (typeof result == 'object' && result && result instanceof Result) return result;\n  } return new Result(false);\n};\n\niterate.stop = function (result) {\n  return new Result(true, result);\n};\n","require('../../modules/es.math.log2');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Math.log2;\n","var $ = require('../internals/export');\n\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\n// `Math.log2` method\n// https://tc39.github.io/ecma262/#sec-math.log2\n$({ target: 'Math', stat: true }, {\n  log2: function log2(x) {\n    return log(x) / LN2;\n  }\n});\n","require('../../modules/es.number.is-nan');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.isNaN;\n","var $ = require('../internals/export');\n\n// `Number.isNaN` method\n// https://tc39.github.io/ecma262/#sec-number.isnan\n$({ target: 'Number', stat: true }, {\n  isNaN: function isNaN(number) {\n    // eslint-disable-next-line no-self-compare\n    return number != number;\n  }\n});\n","require('../../modules/es.number.is-integer');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.isInteger;\n","var $ = require('../internals/export');\nvar isInteger = require('../internals/is-integer');\n\n// `Number.isInteger` method\n// https://tc39.github.io/ecma262/#sec-number.isinteger\n$({ target: 'Number', stat: true }, {\n  isInteger: isInteger\n});\n","var isObject = require('../internals/is-object');\n\nvar floor = Math.floor;\n\n// `Number.isInteger` method implementation\n// https://tc39.github.io/ecma262/#sec-number.isinteger\nmodule.exports = function isInteger(it) {\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","require('../../modules/es.typed-array.slice');\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar speciesConstructor = require('../internals/species-constructor');\nvar fails = require('../internals/fails');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $slice = [].slice;\n\nvar FORCED = fails(function () {\n  // eslint-disable-next-line no-undef\n  new Int8Array(1).slice();\n});\n\n// `%TypedArray%.prototype.slice` method\n// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.slice\nexportTypedArrayMethod('slice', function slice(start, end) {\n  var list = $slice.call(aTypedArray(this), start, end);\n  var C = speciesConstructor(this, this.constructor);\n  var index = 0;\n  var length = list.length;\n  var result = new (aTypedArrayConstructor(C))(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n}, FORCED);\n","'use strict';\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar uid = require('../internals/uid');\n\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar isPrototypeOf = ObjectPrototype.isPrototypeOf;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQIRED = false;\nvar NAME;\n\nvar TypedArrayConstructorsList = {\n  Int8Array: 1,\n  Uint8Array: 1,\n  Uint8ClampedArray: 1,\n  Int16Array: 2,\n  Uint16Array: 2,\n  Int32Array: 4,\n  Uint32Array: 4,\n  Float32Array: 4,\n  Float64Array: 8\n};\n\nvar isView = function isView(it) {\n  var klass = classof(it);\n  return klass === 'DataView' || has(TypedArrayConstructorsList, klass);\n};\n\nvar isTypedArray = function (it) {\n  return isObject(it) && has(TypedArrayConstructorsList, classof(it));\n};\n\nvar aTypedArray = function (it) {\n  if (isTypedArray(it)) return it;\n  throw TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n  if (setPrototypeOf) {\n    if (isPrototypeOf.call(TypedArray, C)) return C;\n  } else for (var ARRAY in TypedArrayConstructorsList) if (has(TypedArrayConstructorsList, NAME)) {\n    var TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && (C === TypedArrayConstructor || isPrototypeOf.call(TypedArrayConstructor, C))) {\n      return C;\n    }\n  } throw TypeError('Target is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced) {\n  if (!DESCRIPTORS) return;\n  if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n    var TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && has(TypedArrayConstructor.prototype, KEY)) {\n      delete TypedArrayConstructor.prototype[KEY];\n    }\n  }\n  if (!TypedArrayPrototype[KEY] || forced) {\n    redefine(TypedArrayPrototype, KEY, forced ? property\n      : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property);\n  }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n  var ARRAY, TypedArrayConstructor;\n  if (!DESCRIPTORS) return;\n  if (setPrototypeOf) {\n    if (forced) for (ARRAY in TypedArrayConstructorsList) {\n      TypedArrayConstructor = global[ARRAY];\n      if (TypedArrayConstructor && has(TypedArrayConstructor, KEY)) {\n        delete TypedArrayConstructor[KEY];\n      }\n    }\n    if (!TypedArray[KEY] || forced) {\n      // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n      try {\n        return redefine(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && Int8Array[KEY] || property);\n      } catch (error) { /* empty */ }\n    } else return;\n  }\n  for (ARRAY in TypedArrayConstructorsList) {\n    TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n      redefine(TypedArrayConstructor, KEY, property);\n    }\n  }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n  if (!global[NAME]) NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || typeof TypedArray != 'function' || TypedArray === Function.prototype) {\n  // eslint-disable-next-line no-shadow\n  TypedArray = function TypedArray() {\n    throw TypeError('Incorrect invocation');\n  };\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n  }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n  TypedArrayPrototype = TypedArray.prototype;\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n  }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n  setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !has(TypedArrayPrototype, TO_STRING_TAG)) {\n  TYPED_ARRAY_TAG_REQIRED = true;\n  defineProperty(TypedArrayPrototype, TO_STRING_TAG, { get: function () {\n    return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n  } });\n  for (NAME in TypedArrayConstructorsList) if (global[NAME]) {\n    createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n  }\n}\n\nmodule.exports = {\n  NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n  TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG,\n  aTypedArray: aTypedArray,\n  aTypedArrayConstructor: aTypedArrayConstructor,\n  exportTypedArrayMethod: exportTypedArrayMethod,\n  exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n  isView: isView,\n  isTypedArray: isTypedArray,\n  TypedArray: TypedArray,\n  TypedArrayPrototype: TypedArrayPrototype\n};\n","module.exports = typeof ArrayBuffer !== 'undefined' && typeof DataView !== 'undefined';\n","var anObject = require('../internals/an-object');\nvar aFunction = require('../internals/a-function');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.github.io/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\n};\n","require('../../modules/es.map');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/web.dom-collections.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Map;\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.github.io/ecma262/#sec-map-objects\nmodule.exports = collection('Map', function (init) {\n  return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n  var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n  var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var NativeConstructor = global[CONSTRUCTOR_NAME];\n  var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n  var Constructor = NativeConstructor;\n  var exported = {};\n\n  var fixMethod = function (KEY) {\n    var nativeMethod = NativePrototype[KEY];\n    redefine(NativePrototype, KEY,\n      KEY == 'add' ? function add(value) {\n        nativeMethod.call(this, value === 0 ? 0 : value);\n        return this;\n      } : KEY == 'delete' ? function (key) {\n        return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n      } : KEY == 'get' ? function get(key) {\n        return IS_WEAK && !isObject(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key);\n      } : KEY == 'has' ? function has(key) {\n        return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n      } : function set(key, value) {\n        nativeMethod.call(this, key === 0 ? 0 : key, value);\n        return this;\n      }\n    );\n  };\n\n  // eslint-disable-next-line max-len\n  if (isForced(CONSTRUCTOR_NAME, typeof NativeConstructor != 'function' || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n    new NativeConstructor().entries().next();\n  })))) {\n    // create collection constructor\n    Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n    InternalMetadataModule.REQUIRED = true;\n  } else if (isForced(CONSTRUCTOR_NAME, true)) {\n    var instance = new Constructor();\n    // early implementations not supports chaining\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n    // most early implementations doesn't supports iterables, most modern - not close it correctly\n    // eslint-disable-next-line no-new\n    var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n    // for early implementations -0 and +0 not the same\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      // V8 ~ Chromium 42- fails only with 5+ elements\n      var $instance = new NativeConstructor();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n\n    if (!ACCEPT_ITERABLES) {\n      Constructor = wrapper(function (dummy, iterable) {\n        anInstance(dummy, Constructor, CONSTRUCTOR_NAME);\n        var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n        if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP);\n        return that;\n      });\n      Constructor.prototype = NativePrototype;\n      NativePrototype.constructor = Constructor;\n    }\n\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n    // weak collections should not contains .clear method\n    if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n  }\n\n  exported[CONSTRUCTOR_NAME] = Constructor;\n  $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n  setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n  if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n  return Constructor;\n};\n","var hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar has = require('../internals/has');\nvar defineProperty = require('../internals/object-define-property').f;\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\n\nvar setMetadata = function (it) {\n  defineProperty(it, METADATA, { value: {\n    objectID: 'O' + ++id, // object ID\n    weakData: {}          // weak collections IDs\n  } });\n};\n\nvar fastKey = function (it, create) {\n  // return a primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMetadata(it);\n  // return object ID\n  } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n  if (!has(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMetadata(it);\n  // return the store of weak collections IDs\n  } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZING && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it);\n  return it;\n};\n\nvar meta = module.exports = {\n  REQUIRED: false,\n  fastKey: fastKey,\n  getWeakData: getWeakData,\n  onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  return Object.isExtensible(Object.preventExtensions({}));\n});\n","module.exports = function (it, Constructor, name) {\n  if (!(it instanceof Constructor)) {\n    throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n  } return it;\n};\n","var isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n  var NewTarget, NewTargetPrototype;\n  if (\n    // it can work only with native `setPrototypeOf`\n    setPrototypeOf &&\n    // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n    typeof (NewTarget = dummy.constructor) == 'function' &&\n    NewTarget !== Wrapper &&\n    isObject(NewTargetPrototype = NewTarget.prototype) &&\n    NewTargetPrototype !== Wrapper.prototype\n  ) setPrototypeOf($this, NewTargetPrototype);\n  return $this;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, CONSTRUCTOR_NAME);\n      setInternalState(that, {\n        type: CONSTRUCTOR_NAME,\n        index: create(null),\n        first: undefined,\n        last: undefined,\n        size: 0\n      });\n      if (!DESCRIPTORS) that.size = 0;\n      if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP);\n    });\n\n    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n    var define = function (that, key, value) {\n      var state = getInternalState(that);\n      var entry = getEntry(that, key);\n      var previous, index;\n      // change existing entry\n      if (entry) {\n        entry.value = value;\n      // create new entry\n      } else {\n        state.last = entry = {\n          index: index = fastKey(key, true),\n          key: key,\n          value: value,\n          previous: previous = state.last,\n          next: undefined,\n          removed: false\n        };\n        if (!state.first) state.first = entry;\n        if (previous) previous.next = entry;\n        if (DESCRIPTORS) state.size++;\n        else that.size++;\n        // add to index\n        if (index !== 'F') state.index[index] = entry;\n      } return that;\n    };\n\n    var getEntry = function (that, key) {\n      var state = getInternalState(that);\n      // fast case\n      var index = fastKey(key);\n      var entry;\n      if (index !== 'F') return state.index[index];\n      // frozen object case\n      for (entry = state.first; entry; entry = entry.next) {\n        if (entry.key == key) return entry;\n      }\n    };\n\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear() {\n        var that = this;\n        var state = getInternalState(that);\n        var data = state.index;\n        var entry = state.first;\n        while (entry) {\n          entry.removed = true;\n          if (entry.previous) entry.previous = entry.previous.next = undefined;\n          delete data[entry.index];\n          entry = entry.next;\n        }\n        state.first = state.last = undefined;\n        if (DESCRIPTORS) state.size = 0;\n        else that.size = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function (key) {\n        var that = this;\n        var state = getInternalState(that);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.next;\n          var prev = entry.previous;\n          delete state.index[entry.index];\n          entry.removed = true;\n          if (prev) prev.next = next;\n          if (next) next.previous = prev;\n          if (state.first == entry) state.first = next;\n          if (state.last == entry) state.last = prev;\n          if (DESCRIPTORS) state.size--;\n          else that.size--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        var state = getInternalState(this);\n        var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n        var entry;\n        while (entry = entry ? entry.next : state.first) {\n          boundFunction(entry.value, entry.key, this);\n          // revert to the last existing entry\n          while (entry && entry.removed) entry = entry.previous;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key) {\n        return !!getEntry(this, key);\n      }\n    });\n\n    redefineAll(C.prototype, IS_MAP ? {\n      // 23.1.3.6 Map.prototype.get(key)\n      get: function get(key) {\n        var entry = getEntry(this, key);\n        return entry && entry.value;\n      },\n      // 23.1.3.9 Map.prototype.set(key, value)\n      set: function set(key, value) {\n        return define(this, key === 0 ? 0 : key, value);\n      }\n    } : {\n      // 23.2.3.1 Set.prototype.add(value)\n      add: function add(value) {\n        return define(this, value = value === 0 ? 0 : value, value);\n      }\n    });\n    if (DESCRIPTORS) defineProperty(C.prototype, 'size', {\n      get: function () {\n        return getInternalState(this).size;\n      }\n    });\n    return C;\n  },\n  setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) {\n    var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n    var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n    var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) {\n      setInternalState(this, {\n        type: ITERATOR_NAME,\n        target: iterated,\n        state: getInternalCollectionState(iterated),\n        kind: kind,\n        last: undefined\n      });\n    }, function () {\n      var state = getInternalIteratorState(this);\n      var kind = state.kind;\n      var entry = state.last;\n      // revert to the last existing entry\n      while (entry && entry.removed) entry = entry.previous;\n      // get next entry\n      if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n        // or finish the iteration\n        state.target = undefined;\n        return { value: undefined, done: true };\n      }\n      // return step by kind\n      if (kind == 'keys') return { value: entry.key, done: false };\n      if (kind == 'values') return { value: entry.value, done: false };\n      return { value: [entry.key, entry.value], done: false };\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(CONSTRUCTOR_NAME);\n  }\n};\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n  for (var key in src) redefine(target, key, src[key], options);\n  return target;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n  var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n  var defineProperty = definePropertyModule.f;\n\n  if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n    defineProperty(Constructor, SPECIES, {\n      configurable: true,\n      get: function () { return this; }\n    });\n  }\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.github.io/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n  redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n  return '[object ' + classof(this) + ']';\n};\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  var Collection = global[COLLECTION_NAME];\n  var CollectionPrototype = Collection && Collection.prototype;\n  if (CollectionPrototype) {\n    // some Chrome versions have non-configurable methods on DOMTokenList\n    if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n      createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n    } catch (error) {\n      CollectionPrototype[ITERATOR] = ArrayValues;\n    }\n    if (!CollectionPrototype[TO_STRING_TAG]) {\n      createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n    }\n    if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n      // some Chrome versions have non-configurable methods on DOMTokenList\n      if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n        createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n      } catch (error) {\n        CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n      }\n    }\n  }\n}\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n  CSSRuleList: 0,\n  CSSStyleDeclaration: 0,\n  CSSValueList: 0,\n  ClientRectList: 0,\n  DOMRectList: 0,\n  DOMStringList: 0,\n  DOMTokenList: 1,\n  DataTransferItemList: 0,\n  FileList: 0,\n  HTMLAllCollection: 0,\n  HTMLCollection: 0,\n  HTMLFormElement: 0,\n  HTMLSelectElement: 0,\n  MediaList: 0,\n  MimeTypeArray: 0,\n  NamedNodeMap: 0,\n  NodeList: 1,\n  PaintRequestList: 0,\n  Plugin: 0,\n  PluginArray: 0,\n  SVGLengthList: 0,\n  SVGNumberList: 0,\n  SVGPathSegList: 0,\n  SVGPointList: 0,\n  SVGStringList: 0,\n  SVGTransformList: 0,\n  SourceBufferList: 0,\n  StyleSheetList: 0,\n  TextTrackCueList: 0,\n  TextTrackList: 0,\n  TouchList: 0\n};\n","require('../../modules/es.set');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/web.dom-collections.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Set;\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.github.io/ecma262/#sec-set-objects\nmodule.exports = collection('Set', function (init) {\n  return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","require('../../modules/es.object.to-string');\nrequire('../../modules/es.weak-map');\nrequire('../../modules/web.dom-collections.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.WeakMap;\n","'use strict';\nvar global = require('../internals/global');\nvar redefineAll = require('../internals/redefine-all');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\nvar isObject = require('../internals/is-object');\nvar enforceIternalState = require('../internals/internal-state').enforce;\nvar NATIVE_WEAK_MAP = require('../internals/native-weak-map');\n\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar isExtensible = Object.isExtensible;\nvar InternalWeakMap;\n\nvar wrapper = function (init) {\n  return function WeakMap() {\n    return init(this, arguments.length ? arguments[0] : undefined);\n  };\n};\n\n// `WeakMap` constructor\n// https://tc39.github.io/ecma262/#sec-weakmap-constructor\nvar $WeakMap = module.exports = collection('WeakMap', wrapper, collectionWeak);\n\n// IE11 WeakMap frozen keys fix\n// We can't use feature detection because it crash some old IE builds\n// https://github.com/zloirock/core-js/issues/485\nif (NATIVE_WEAK_MAP && IS_IE11) {\n  InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);\n  InternalMetadataModule.REQUIRED = true;\n  var WeakMapPrototype = $WeakMap.prototype;\n  var nativeDelete = WeakMapPrototype['delete'];\n  var nativeHas = WeakMapPrototype.has;\n  var nativeGet = WeakMapPrototype.get;\n  var nativeSet = WeakMapPrototype.set;\n  redefineAll(WeakMapPrototype, {\n    'delete': function (key) {\n      if (isObject(key) && !isExtensible(key)) {\n        var state = enforceIternalState(this);\n        if (!state.frozen) state.frozen = new InternalWeakMap();\n        return nativeDelete.call(this, key) || state.frozen['delete'](key);\n      } return nativeDelete.call(this, key);\n    },\n    has: function has(key) {\n      if (isObject(key) && !isExtensible(key)) {\n        var state = enforceIternalState(this);\n        if (!state.frozen) state.frozen = new InternalWeakMap();\n        return nativeHas.call(this, key) || state.frozen.has(key);\n      } return nativeHas.call(this, key);\n    },\n    get: function get(key) {\n      if (isObject(key) && !isExtensible(key)) {\n        var state = enforceIternalState(this);\n        if (!state.frozen) state.frozen = new InternalWeakMap();\n        return nativeHas.call(this, key) ? nativeGet.call(this, key) : state.frozen.get(key);\n      } return nativeGet.call(this, key);\n    },\n    set: function set(key, value) {\n      if (isObject(key) && !isExtensible(key)) {\n        var state = enforceIternalState(this);\n        if (!state.frozen) state.frozen = new InternalWeakMap();\n        nativeHas.call(this, key) ? nativeSet.call(this, key, value) : state.frozen.set(key, value);\n      } else nativeSet.call(this, key, value);\n      return this;\n    }\n  });\n}\n","'use strict';\nvar redefineAll = require('../internals/redefine-all');\nvar getWeakData = require('../internals/internal-metadata').getWeakData;\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar ArrayIterationModule = require('../internals/array-iteration');\nvar $has = require('../internals/has');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\nvar find = ArrayIterationModule.find;\nvar findIndex = ArrayIterationModule.findIndex;\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (store) {\n  return store.frozen || (store.frozen = new UncaughtFrozenStore());\n};\n\nvar UncaughtFrozenStore = function () {\n  this.entries = [];\n};\n\nvar findUncaughtFrozen = function (store, key) {\n  return find(store.entries, function (it) {\n    return it[0] === key;\n  });\n};\n\nUncaughtFrozenStore.prototype = {\n  get: function (key) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) return entry[1];\n  },\n  has: function (key) {\n    return !!findUncaughtFrozen(this, key);\n  },\n  set: function (key, value) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) entry[1] = value;\n    else this.entries.push([key, value]);\n  },\n  'delete': function (key) {\n    var index = findIndex(this.entries, function (it) {\n      return it[0] === key;\n    });\n    if (~index) this.entries.splice(index, 1);\n    return !!~index;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, CONSTRUCTOR_NAME);\n      setInternalState(that, {\n        type: CONSTRUCTOR_NAME,\n        id: id++,\n        frozen: undefined\n      });\n      if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP);\n    });\n\n    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n    var define = function (that, key, value) {\n      var state = getInternalState(that);\n      var data = getWeakData(anObject(key), true);\n      if (data === true) uncaughtFrozenStore(state).set(key, value);\n      else data[state.id] = value;\n      return that;\n    };\n\n    redefineAll(C.prototype, {\n      // 23.3.3.2 WeakMap.prototype.delete(key)\n      // 23.4.3.3 WeakSet.prototype.delete(value)\n      'delete': function (key) {\n        var state = getInternalState(this);\n        if (!isObject(key)) return false;\n        var data = getWeakData(key);\n        if (data === true) return uncaughtFrozenStore(state)['delete'](key);\n        return data && $has(data, state.id) && delete data[state.id];\n      },\n      // 23.3.3.4 WeakMap.prototype.has(key)\n      // 23.4.3.4 WeakSet.prototype.has(value)\n      has: function has(key) {\n        var state = getInternalState(this);\n        if (!isObject(key)) return false;\n        var data = getWeakData(key);\n        if (data === true) return uncaughtFrozenStore(state).has(key);\n        return data && $has(data, state.id);\n      }\n    });\n\n    redefineAll(C.prototype, IS_MAP ? {\n      // 23.3.3.3 WeakMap.prototype.get(key)\n      get: function get(key) {\n        var state = getInternalState(this);\n        if (isObject(key)) {\n          var data = getWeakData(key);\n          if (data === true) return uncaughtFrozenStore(state).get(key);\n          return data ? data[state.id] : undefined;\n        }\n      },\n      // 23.3.3.5 WeakMap.prototype.set(key, value)\n      set: function set(key, value) {\n        return define(this, key, value);\n      }\n    } : {\n      // 23.4.3.1 WeakSet.prototype.add(value)\n      add: function add(value) {\n        return define(this, value, true);\n      }\n    });\n\n    return C;\n  }\n};\n","var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation\nvar createMethod = function (TYPE) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  return function ($this, callbackfn, that, specificCreate) {\n    var O = toObject($this);\n    var self = IndexedObject(O);\n    var boundFunction = bind(callbackfn, that, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var create = specificCreate || arraySpeciesCreate;\n    var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n    var value, result;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      value = self[index];\n      result = boundFunction(value, index, O);\n      if (TYPE) {\n        if (IS_MAP) target[index] = result; // map\n        else if (result) switch (TYPE) {\n          case 3: return true;              // some\n          case 5: return value;             // find\n          case 6: return index;             // findIndex\n          case 2: push.call(target, value); // filter\n        } else if (IS_EVERY) return false;  // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.forEach` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.foreach\n  forEach: createMethod(0),\n  // `Array.prototype.map` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.map\n  map: createMethod(1),\n  // `Array.prototype.filter` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.filter\n  filter: createMethod(2),\n  // `Array.prototype.some` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.some\n  some: createMethod(3),\n  // `Array.prototype.every` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.every\n  every: createMethod(4),\n  // `Array.prototype.find` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.find\n  find: createMethod(5),\n  // `Array.prototype.findIndex` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\n  findIndex: createMethod(6)\n};\n","var isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.github.io/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n  var C;\n  if (isArray(originalArray)) {\n    C = originalArray.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n    else if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.github.io/ecma262/#sec-isarray\nmodule.exports = Array.isArray || function isArray(arg) {\n  return classof(arg) == 'Array';\n};\n","require('../../modules/es.object.to-string');\nrequire('../../modules/es.weak-set');\nrequire('../../modules/web.dom-collections.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.WeakSet;\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\n\n// `WeakSet` constructor\n// https://tc39.github.io/ecma262/#sec-weakset-constructor\ncollection('WeakSet', function (init) {\n  return function WeakSet() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionWeak);\n","require('../../modules/es.string.code-point-at');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('String', 'codePointAt');\n","'use strict';\nvar $ = require('../internals/export');\nvar codeAt = require('../internals/string-multibyte').codeAt;\n\n// `String.prototype.codePointAt` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.codepointat\n$({ target: 'String', proto: true }, {\n  codePointAt: function codePointAt(pos) {\n    return codeAt(this, pos);\n  }\n});\n","require('../../modules/es.string.from-code-point');\nvar path = require('../../internals/path');\n\nmodule.exports = path.String.fromCodePoint;\n","var $ = require('../internals/export');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\nvar fromCharCode = String.fromCharCode;\nvar nativeFromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\nvar INCORRECT_LENGTH = !!nativeFromCodePoint && nativeFromCodePoint.length != 1;\n\n// `String.fromCodePoint` method\n// https://tc39.github.io/ecma262/#sec-string.fromcodepoint\n$({ target: 'String', stat: true, forced: INCORRECT_LENGTH }, {\n  fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n    var elements = [];\n    var length = arguments.length;\n    var i = 0;\n    var code;\n    while (length > i) {\n      code = +arguments[i++];\n      if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw RangeError(code + ' is not a valid code point');\n      elements.push(code < 0x10000\n        ? fromCharCode(code)\n        : fromCharCode(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00)\n      );\n    } return elements.join('');\n  }\n});\n","require('../../modules/es.array.concat');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.symbol');\nrequire('../../modules/es.symbol.async-iterator');\nrequire('../../modules/es.symbol.description');\nrequire('../../modules/es.symbol.has-instance');\nrequire('../../modules/es.symbol.is-concat-spreadable');\nrequire('../../modules/es.symbol.iterator');\nrequire('../../modules/es.symbol.match');\nrequire('../../modules/es.symbol.match-all');\nrequire('../../modules/es.symbol.replace');\nrequire('../../modules/es.symbol.search');\nrequire('../../modules/es.symbol.species');\nrequire('../../modules/es.symbol.split');\nrequire('../../modules/es.symbol.to-primitive');\nrequire('../../modules/es.symbol.to-string-tag');\nrequire('../../modules/es.symbol.unscopables');\nrequire('../../modules/es.math.to-string-tag');\nrequire('../../modules/es.json.to-string-tag');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Symbol;\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n  var array = [];\n  array[IS_CONCAT_SPREADABLE] = false;\n  return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n  if (!isObject(O)) return false;\n  var spreadable = O[IS_CONCAT_SPREADABLE];\n  return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n  concat: function concat(arg) { // eslint-disable-line no-unused-vars\n    var O = toObject(this);\n    var A = arraySpeciesCreate(O, 0);\n    var n = 0;\n    var i, k, length, len, E;\n    for (i = -1, length = arguments.length; i < length; i++) {\n      E = i === -1 ? O : arguments[i];\n      if (isConcatSpreadable(E)) {\n        len = toLength(E.length);\n        if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n      } else {\n        if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        createProperty(A, n++, E);\n      }\n    }\n    A.length = n;\n    return A;\n  }\n});\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n  // We can't use this feature detection in V8 since it causes\n  // deoptimization and serious performance degradation\n  // https://github.com/zloirock/core-js/issues/677\n  return V8_VERSION >= 51 || !fails(function () {\n    var array = [];\n    var constructor = array.constructor = {};\n    constructor[SPECIES] = function () {\n      return { foo: 1 };\n    };\n    return array[METHOD_NAME](Boolean).foo !== 1;\n  });\n};\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  version = match[0] + match[1];\n} else if (userAgent) {\n  match = userAgent.match(/Edge\\/(\\d+)/);\n  if (!match || match[1] >= 74) {\n    match = userAgent.match(/Chrome\\/(\\d+)/);\n    if (match) version = match[1];\n  }\n}\n\nmodule.exports = version && +version;\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n  return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n    get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (O, P, Attributes) {\n  var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n  if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n  nativeDefineProperty(O, P, Attributes);\n  if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n    nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n  }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n  var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]);\n  setInternalState(symbol, {\n    type: SYMBOL,\n    tag: tag,\n    description: description\n  });\n  if (!DESCRIPTORS) symbol.description = description;\n  return symbol;\n};\n\nvar isSymbol = USE_SYMBOL_AS_UID ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return Object(it) instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n  if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n  anObject(O);\n  var key = toPrimitive(P, true);\n  anObject(Attributes);\n  if (has(AllSymbols, key)) {\n    if (!Attributes.enumerable) {\n      if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n      O[HIDDEN][key] = true;\n    } else {\n      if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n      Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n    } return setSymbolDescriptor(O, key, Attributes);\n  } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n  anObject(O);\n  var properties = toIndexedObject(Properties);\n  var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n  $forEach(keys, function (key) {\n    if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);\n  });\n  return O;\n};\n\nvar $create = function create(O, Properties) {\n  return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n  var P = toPrimitive(V, true);\n  var enumerable = nativePropertyIsEnumerable.call(this, P);\n  if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;\n  return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n  var it = toIndexedObject(O);\n  var key = toPrimitive(P, true);\n  if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;\n  var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n  if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {\n    descriptor.enumerable = true;\n  }\n  return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n  var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n  var result = [];\n  $forEach(names, function (key) {\n    if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);\n  });\n  return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n  var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n  var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n  var result = [];\n  $forEach(names, function (key) {\n    if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {\n      result.push(AllSymbols[key]);\n    }\n  });\n  return result;\n};\n\n// `Symbol` constructor\n// https://tc39.github.io/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');\n    var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]);\n    var tag = uid(description);\n    var setter = function (value) {\n      if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n    };\n    if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n    return wrap(tag, description);\n  };\n\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return getInternalState(this).tag;\n  });\n\n  redefine($Symbol, 'withoutSetter', function (description) {\n    return wrap(uid(description), description);\n  });\n\n  propertyIsEnumerableModule.f = $propertyIsEnumerable;\n  definePropertyModule.f = $defineProperty;\n  getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n  getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n  getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n  wrappedWellKnownSymbolModule.f = function (name) {\n    return wrap(wellKnownSymbol(name), name);\n  };\n\n  if (DESCRIPTORS) {\n    // https://github.com/tc39/proposal-Symbol-description\n    nativeDefineProperty($Symbol[PROTOTYPE], 'description', {\n      configurable: true,\n      get: function description() {\n        return getInternalState(this).description;\n      }\n    });\n    if (!IS_PURE) {\n      redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n    }\n  }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n  Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n  defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n  // `Symbol.for` method\n  // https://tc39.github.io/ecma262/#sec-symbol.for\n  'for': function (key) {\n    var string = String(key);\n    if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n    var symbol = $Symbol(string);\n    StringToSymbolRegistry[string] = symbol;\n    SymbolToStringRegistry[symbol] = string;\n    return symbol;\n  },\n  // `Symbol.keyFor` method\n  // https://tc39.github.io/ecma262/#sec-symbol.keyfor\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n    if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n  },\n  useSetter: function () { USE_SETTER = true; },\n  useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n  // `Object.create` method\n  // https://tc39.github.io/ecma262/#sec-object.create\n  create: $create,\n  // `Object.defineProperty` method\n  // https://tc39.github.io/ecma262/#sec-object.defineproperty\n  defineProperty: $defineProperty,\n  // `Object.defineProperties` method\n  // https://tc39.github.io/ecma262/#sec-object.defineproperties\n  defineProperties: $defineProperties,\n  // `Object.getOwnPropertyDescriptor` method\n  // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n  // `Object.getOwnPropertyNames` method\n  // https://tc39.github.io/ecma262/#sec-object.getownpropertynames\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // `Object.getOwnPropertySymbols` method\n  // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n  getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n    return getOwnPropertySymbolsModule.f(toObject(it));\n  }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.github.io/ecma262/#sec-json.stringify\nif ($stringify) {\n  var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n    var symbol = $Symbol();\n    // MS Edge converts symbol values to JSON as {}\n    return $stringify([symbol]) != '[null]'\n      // WebKit converts symbol values to JSON as null\n      || $stringify({ a: symbol }) != '{}'\n      // V8 throws on boxed symbols\n      || $stringify(Object(symbol)) != '{}';\n  });\n\n  $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n    // eslint-disable-next-line no-unused-vars\n    stringify: function stringify(it, replacer, space) {\n      var args = [it];\n      var index = 1;\n      var $replacer;\n      while (arguments.length > index) args.push(arguments[index++]);\n      $replacer = replacer;\n      if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n      if (!isArray(replacer)) replacer = function (key, value) {\n        if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n        if (!isSymbol(value)) return value;\n      };\n      args[1] = replacer;\n      return $stringify.apply(null, args);\n    }\n  });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {\n  createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyNames = require('../internals/object-get-own-property-names').f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return nativeGetOwnPropertyNames(it);\n  } catch (error) {\n    return windowNames.slice();\n  }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]'\n    ? getWindowNames(it)\n    : nativeGetOwnPropertyNames(toIndexedObject(it));\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var path = require('../internals/path');\nvar has = require('../internals/has');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n  var Symbol = path.Symbol || (path.Symbol = {});\n  if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {\n    value: wrappedWellKnownSymbolModule.f(NAME)\n  });\n};\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n","// `Symbol.prototype.description` getter\n// https://tc39.github.io/ecma262/#sec-symbol.prototype.description\n'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar has = require('../internals/has');\nvar isObject = require('../internals/is-object');\nvar defineProperty = require('../internals/object-define-property').f;\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\n\nvar NativeSymbol = global.Symbol;\n\nif (DESCRIPTORS && typeof NativeSymbol == 'function' && (!('description' in NativeSymbol.prototype) ||\n  // Safari 12 bug\n  NativeSymbol().description !== undefined\n)) {\n  var EmptyStringDescriptionStore = {};\n  // wrap Symbol constructor for correct work with undefined description\n  var SymbolWrapper = function Symbol() {\n    var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]);\n    var result = this instanceof SymbolWrapper\n      ? new NativeSymbol(description)\n      // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n      : description === undefined ? NativeSymbol() : NativeSymbol(description);\n    if (description === '') EmptyStringDescriptionStore[result] = true;\n    return result;\n  };\n  copyConstructorProperties(SymbolWrapper, NativeSymbol);\n  var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype;\n  symbolPrototype.constructor = SymbolWrapper;\n\n  var symbolToString = symbolPrototype.toString;\n  var native = String(NativeSymbol('test')) == 'Symbol(test)';\n  var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n  defineProperty(symbolPrototype, 'description', {\n    configurable: true,\n    get: function description() {\n      var symbol = isObject(this) ? this.valueOf() : this;\n      var string = symbolToString.call(symbol);\n      if (has(EmptyStringDescriptionStore, symbol)) return '';\n      var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1');\n      return desc === '' ? undefined : desc;\n    }\n  });\n\n  $({ global: true, forced: true }, {\n    Symbol: SymbolWrapper\n  });\n}\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.hasInstance` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.hasinstance\ndefineWellKnownSymbol('hasInstance');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.isConcatSpreadable` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.isconcatspreadable\ndefineWellKnownSymbol('isConcatSpreadable');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.match` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.match\ndefineWellKnownSymbol('match');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.matchAll` well-known symbol\ndefineWellKnownSymbol('matchAll');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.replace` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.replace\ndefineWellKnownSymbol('replace');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.search` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.search\ndefineWellKnownSymbol('search');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.species` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.species\ndefineWellKnownSymbol('species');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.split` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.split\ndefineWellKnownSymbol('split');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.unscopables` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.unscopables\ndefineWellKnownSymbol('unscopables');\n","var setToStringTag = require('../internals/set-to-string-tag');\n\n// Math[@@toStringTag] property\n// https://tc39.github.io/ecma262/#sec-math-@@tostringtag\nsetToStringTag(Math, 'Math', true);\n","var global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.github.io/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n","require('../../modules/es.string.pad-start');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('String', 'padStart');\n","'use strict';\nvar $ = require('../internals/export');\nvar $padStart = require('../internals/string-pad').start;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padStart` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.padstart\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n  padStart: function padStart(maxLength /* , fillString = ' ' */) {\n    return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('../internals/to-length');\nvar repeat = require('../internals/string-repeat');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar ceil = Math.ceil;\n\n// `String.prototype.{ padStart, padEnd }` methods implementation\nvar createMethod = function (IS_END) {\n  return function ($this, maxLength, fillString) {\n    var S = String(requireObjectCoercible($this));\n    var stringLength = S.length;\n    var fillStr = fillString === undefined ? ' ' : String(fillString);\n    var intMaxLength = toLength(maxLength);\n    var fillLen, stringFiller;\n    if (intMaxLength <= stringLength || fillStr == '') return S;\n    fillLen = intMaxLength - stringLength;\n    stringFiller = repeat.call(fillStr, ceil(fillLen / fillStr.length));\n    if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n    return IS_END ? S + stringFiller : stringFiller + S;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.padStart` method\n  // https://tc39.github.io/ecma262/#sec-string.prototype.padstart\n  start: createMethod(false),\n  // `String.prototype.padEnd` method\n  // https://tc39.github.io/ecma262/#sec-string.prototype.padend\n  end: createMethod(true)\n};\n","'use strict';\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.github.io/ecma262/#sec-string.prototype.repeat\nmodule.exports = ''.repeat || function repeat(count) {\n  var str = String(requireObjectCoercible(this));\n  var result = '';\n  var n = toInteger(count);\n  if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n  return result;\n};\n","// https://github.com/zloirock/core-js/issues/280\nvar userAgent = require('../internals/engine-user-agent');\n\n// eslint-disable-next-line unicorn/no-unsafe-regex\nmodule.exports = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n","require('../../modules/es.string.pad-end');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('String', 'padEnd');\n","'use strict';\nvar $ = require('../internals/export');\nvar $padEnd = require('../internals/string-pad').end;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padEnd` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.padend\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n  padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n    return $padEnd(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","require('../../modules/es.object.values');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.values;\n","var $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.github.io/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n  values: function values(O) {\n    return $values(O);\n  }\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n  return function (it) {\n    var O = toIndexedObject(it);\n    var keys = objectKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) {\n      key = keys[i++];\n      if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) {\n        result.push(TO_ENTRIES ? [key, O[key]] : O[key]);\n      }\n    }\n    return result;\n  };\n};\n\nmodule.exports = {\n  // `Object.entries` method\n  // https://tc39.github.io/ecma262/#sec-object.entries\n  entries: createMethod(true),\n  // `Object.values` method\n  // https://tc39.github.io/ecma262/#sec-object.values\n  values: createMethod(false)\n};\n","require('../../modules/es.object.entries');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.entries;\n","var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.github.io/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n  entries: function entries(O) {\n    return $entries(O);\n  }\n});\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BaseException, shadow } from \"../shared/util.js\";\nimport { log2, readInt8, readUint16, readUint32 } from \"./core_utils.js\";\nimport { ArithmeticDecoder } from \"./arithmetic_decoder.js\";\nimport { CCITTFaxDecoder } from \"./ccitt.js\";\n\nclass Jbig2Error extends BaseException {\n  constructor(msg) {\n    super(`JBIG2 error: ${msg}`);\n  }\n}\n\nvar Jbig2Image = (function Jbig2ImageClosure() {\n  // Utility data structures\n  function ContextCache() {}\n\n  ContextCache.prototype = {\n    getContexts(id) {\n      if (id in this) {\n        return this[id];\n      }\n      return (this[id] = new Int8Array(1 << 16));\n    },\n  };\n\n  function DecodingContext(data, start, end) {\n    this.data = data;\n    this.start = start;\n    this.end = end;\n  }\n\n  DecodingContext.prototype = {\n    get decoder() {\n      var decoder = new ArithmeticDecoder(this.data, this.start, this.end);\n      return shadow(this, \"decoder\", decoder);\n    },\n    get contextCache() {\n      var cache = new ContextCache();\n      return shadow(this, \"contextCache\", cache);\n    },\n  };\n\n  // Annex A. Arithmetic Integer Decoding Procedure\n  // A.2 Procedure for decoding values\n  function decodeInteger(contextCache, procedure, decoder) {\n    var contexts = contextCache.getContexts(procedure);\n    var prev = 1;\n\n    function readBits(length) {\n      var v = 0;\n      for (var i = 0; i < length; i++) {\n        var bit = decoder.readBit(contexts, prev);\n        prev =\n          prev < 256 ? (prev << 1) | bit : (((prev << 1) | bit) & 511) | 256;\n        v = (v << 1) | bit;\n      }\n      return v >>> 0;\n    }\n\n    var sign = readBits(1);\n    // prettier-ignore\n    /* eslint-disable no-nested-ternary */\n    var value = readBits(1) ?\n                  (readBits(1) ?\n                    (readBits(1) ?\n                      (readBits(1) ?\n                        (readBits(1) ?\n                          (readBits(32) + 4436) :\n                        readBits(12) + 340) :\n                      readBits(8) + 84) :\n                    readBits(6) + 20) :\n                  readBits(4) + 4) :\n                readBits(2);\n    /* eslint-enable no-nested-ternary */\n    if (sign === 0) {\n      return value;\n    } else if (value > 0) {\n      return -value;\n    }\n    return null;\n  }\n\n  // A.3 The IAID decoding procedure\n  function decodeIAID(contextCache, decoder, codeLength) {\n    var contexts = contextCache.getContexts(\"IAID\");\n\n    var prev = 1;\n    for (var i = 0; i < codeLength; i++) {\n      var bit = decoder.readBit(contexts, prev);\n      prev = (prev << 1) | bit;\n    }\n    if (codeLength < 31) {\n      return prev & ((1 << codeLength) - 1);\n    }\n    return prev & 0x7fffffff;\n  }\n\n  // 7.3 Segment types\n  var SegmentTypes = [\n    \"SymbolDictionary\",\n    null,\n    null,\n    null,\n    \"IntermediateTextRegion\",\n    null,\n    \"ImmediateTextRegion\",\n    \"ImmediateLosslessTextRegion\",\n    null,\n    null,\n    null,\n    null,\n    null,\n    null,\n    null,\n    null,\n    \"PatternDictionary\",\n    null,\n    null,\n    null,\n    \"IntermediateHalftoneRegion\",\n    null,\n    \"ImmediateHalftoneRegion\",\n    \"ImmediateLosslessHalftoneRegion\",\n    null,\n    null,\n    null,\n    null,\n    null,\n    null,\n    null,\n    null,\n    null,\n    null,\n    null,\n    null,\n    \"IntermediateGenericRegion\",\n    null,\n    \"ImmediateGenericRegion\",\n    \"ImmediateLosslessGenericRegion\",\n    \"IntermediateGenericRefinementRegion\",\n    null,\n    \"ImmediateGenericRefinementRegion\",\n    \"ImmediateLosslessGenericRefinementRegion\",\n    null,\n    null,\n    null,\n    null,\n    \"PageInformation\",\n    \"EndOfPage\",\n    \"EndOfStripe\",\n    \"EndOfFile\",\n    \"Profiles\",\n    \"Tables\",\n    null,\n    null,\n    null,\n    null,\n    null,\n    null,\n    null,\n    null,\n    \"Extension\",\n  ];\n\n  var CodingTemplates = [\n    [\n      { x: -1, y: -2 },\n      { x: 0, y: -2 },\n      { x: 1, y: -2 },\n      { x: -2, y: -1 },\n      { x: -1, y: -1 },\n      { x: 0, y: -1 },\n      { x: 1, y: -1 },\n      { x: 2, y: -1 },\n      { x: -4, y: 0 },\n      { x: -3, y: 0 },\n      { x: -2, y: 0 },\n      { x: -1, y: 0 },\n    ],\n    [\n      { x: -1, y: -2 },\n      { x: 0, y: -2 },\n      { x: 1, y: -2 },\n      { x: 2, y: -2 },\n      { x: -2, y: -1 },\n      { x: -1, y: -1 },\n      { x: 0, y: -1 },\n      { x: 1, y: -1 },\n      { x: 2, y: -1 },\n      { x: -3, y: 0 },\n      { x: -2, y: 0 },\n      { x: -1, y: 0 },\n    ],\n    [\n      { x: -1, y: -2 },\n      { x: 0, y: -2 },\n      { x: 1, y: -2 },\n      { x: -2, y: -1 },\n      { x: -1, y: -1 },\n      { x: 0, y: -1 },\n      { x: 1, y: -1 },\n      { x: -2, y: 0 },\n      { x: -1, y: 0 },\n    ],\n    [\n      { x: -3, y: -1 },\n      { x: -2, y: -1 },\n      { x: -1, y: -1 },\n      { x: 0, y: -1 },\n      { x: 1, y: -1 },\n      { x: -4, y: 0 },\n      { x: -3, y: 0 },\n      { x: -2, y: 0 },\n      { x: -1, y: 0 },\n    ],\n  ];\n\n  var RefinementTemplates = [\n    {\n      coding: [\n        { x: 0, y: -1 },\n        { x: 1, y: -1 },\n        { x: -1, y: 0 },\n      ],\n      reference: [\n        { x: 0, y: -1 },\n        { x: 1, y: -1 },\n        { x: -1, y: 0 },\n        { x: 0, y: 0 },\n        { x: 1, y: 0 },\n        { x: -1, y: 1 },\n        { x: 0, y: 1 },\n        { x: 1, y: 1 },\n      ],\n    },\n    {\n      coding: [\n        { x: -1, y: -1 },\n        { x: 0, y: -1 },\n        { x: 1, y: -1 },\n        { x: -1, y: 0 },\n      ],\n      reference: [\n        { x: 0, y: -1 },\n        { x: -1, y: 0 },\n        { x: 0, y: 0 },\n        { x: 1, y: 0 },\n        { x: 0, y: 1 },\n        { x: 1, y: 1 },\n      ],\n    },\n  ];\n\n  // See 6.2.5.7 Decoding the bitmap.\n  var ReusedContexts = [\n    0x9b25, // 10011 0110010 0101\n    0x0795, // 0011 110010 101\n    0x00e5, // 001 11001 01\n    0x0195, // 011001 0101\n  ];\n\n  var RefinementReusedContexts = [\n    0x0020, // '000' + '0' (coding) + '00010000' + '0' (reference)\n    0x0008, // '0000' + '001000'\n  ];\n\n  function decodeBitmapTemplate0(width, height, decodingContext) {\n    var decoder = decodingContext.decoder;\n    var contexts = decodingContext.contextCache.getContexts(\"GB\");\n    var contextLabel,\n      i,\n      j,\n      pixel,\n      row,\n      row1,\n      row2,\n      bitmap = [];\n\n    // ...ooooo....\n    // ..ooooooo... Context template for current pixel (X)\n    // .ooooX...... (concatenate values of 'o'-pixels to get contextLabel)\n    var OLD_PIXEL_MASK = 0x7bf7; // 01111 0111111 0111\n\n    for (i = 0; i < height; i++) {\n      row = bitmap[i] = new Uint8Array(width);\n      row1 = i < 1 ? row : bitmap[i - 1];\n      row2 = i < 2 ? row : bitmap[i - 2];\n\n      // At the beginning of each row:\n      // Fill contextLabel with pixels that are above/right of (X)\n      contextLabel =\n        (row2[0] << 13) |\n        (row2[1] << 12) |\n        (row2[2] << 11) |\n        (row1[0] << 7) |\n        (row1[1] << 6) |\n        (row1[2] << 5) |\n        (row1[3] << 4);\n\n      for (j = 0; j < width; j++) {\n        row[j] = pixel = decoder.readBit(contexts, contextLabel);\n\n        // At each pixel: Clear contextLabel pixels that are shifted\n        // out of the context, then add new ones.\n        contextLabel =\n          ((contextLabel & OLD_PIXEL_MASK) << 1) |\n          (j + 3 < width ? row2[j + 3] << 11 : 0) |\n          (j + 4 < width ? row1[j + 4] << 4 : 0) |\n          pixel;\n      }\n    }\n\n    return bitmap;\n  }\n\n  // 6.2 Generic Region Decoding Procedure\n  function decodeBitmap(\n    mmr,\n    width,\n    height,\n    templateIndex,\n    prediction,\n    skip,\n    at,\n    decodingContext\n  ) {\n    if (mmr) {\n      const input = new Reader(\n        decodingContext.data,\n        decodingContext.start,\n        decodingContext.end\n      );\n      return decodeMMRBitmap(input, width, height, false);\n    }\n\n    // Use optimized version for the most common case\n    if (\n      templateIndex === 0 &&\n      !skip &&\n      !prediction &&\n      at.length === 4 &&\n      at[0].x === 3 &&\n      at[0].y === -1 &&\n      at[1].x === -3 &&\n      at[1].y === -1 &&\n      at[2].x === 2 &&\n      at[2].y === -2 &&\n      at[3].x === -2 &&\n      at[3].y === -2\n    ) {\n      return decodeBitmapTemplate0(width, height, decodingContext);\n    }\n\n    var useskip = !!skip;\n    var template = CodingTemplates[templateIndex].concat(at);\n\n    // Sorting is non-standard, and it is not required. But sorting increases\n    // the number of template bits that can be reused from the previous\n    // contextLabel in the main loop.\n    template.sort(function (a, b) {\n      return a.y - b.y || a.x - b.x;\n    });\n\n    var templateLength = template.length;\n    var templateX = new Int8Array(templateLength);\n    var templateY = new Int8Array(templateLength);\n    var changingTemplateEntries = [];\n    var reuseMask = 0,\n      minX = 0,\n      maxX = 0,\n      minY = 0;\n    var c, k;\n\n    for (k = 0; k < templateLength; k++) {\n      templateX[k] = template[k].x;\n      templateY[k] = template[k].y;\n      minX = Math.min(minX, template[k].x);\n      maxX = Math.max(maxX, template[k].x);\n      minY = Math.min(minY, template[k].y);\n      // Check if the template pixel appears in two consecutive context labels,\n      // so it can be reused. Otherwise, we add it to the list of changing\n      // template entries.\n      if (\n        k < templateLength - 1 &&\n        template[k].y === template[k + 1].y &&\n        template[k].x === template[k + 1].x - 1\n      ) {\n        reuseMask |= 1 << (templateLength - 1 - k);\n      } else {\n        changingTemplateEntries.push(k);\n      }\n    }\n    var changingEntriesLength = changingTemplateEntries.length;\n\n    var changingTemplateX = new Int8Array(changingEntriesLength);\n    var changingTemplateY = new Int8Array(changingEntriesLength);\n    var changingTemplateBit = new Uint16Array(changingEntriesLength);\n    for (c = 0; c < changingEntriesLength; c++) {\n      k = changingTemplateEntries[c];\n      changingTemplateX[c] = template[k].x;\n      changingTemplateY[c] = template[k].y;\n      changingTemplateBit[c] = 1 << (templateLength - 1 - k);\n    }\n\n    // Get the safe bounding box edges from the width, height, minX, maxX, minY\n    var sbb_left = -minX;\n    var sbb_top = -minY;\n    var sbb_right = width - maxX;\n\n    var pseudoPixelContext = ReusedContexts[templateIndex];\n    var row = new Uint8Array(width);\n    var bitmap = [];\n\n    var decoder = decodingContext.decoder;\n    var contexts = decodingContext.contextCache.getContexts(\"GB\");\n\n    var ltp = 0,\n      j,\n      i0,\n      j0,\n      contextLabel = 0,\n      bit,\n      shift;\n    for (var i = 0; i < height; i++) {\n      if (prediction) {\n        var sltp = decoder.readBit(contexts, pseudoPixelContext);\n        ltp ^= sltp;\n        if (ltp) {\n          bitmap.push(row); // duplicate previous row\n          continue;\n        }\n      }\n      row = new Uint8Array(row);\n      bitmap.push(row);\n      for (j = 0; j < width; j++) {\n        if (useskip && skip[i][j]) {\n          row[j] = 0;\n          continue;\n        }\n        // Are we in the middle of a scanline, so we can reuse contextLabel\n        // bits?\n        if (j >= sbb_left && j < sbb_right && i >= sbb_top) {\n          // If yes, we can just shift the bits that are reusable and only\n          // fetch the remaining ones.\n          contextLabel = (contextLabel << 1) & reuseMask;\n          for (k = 0; k < changingEntriesLength; k++) {\n            i0 = i + changingTemplateY[k];\n            j0 = j + changingTemplateX[k];\n            bit = bitmap[i0][j0];\n            if (bit) {\n              bit = changingTemplateBit[k];\n              contextLabel |= bit;\n            }\n          }\n        } else {\n          // compute the contextLabel from scratch\n          contextLabel = 0;\n          shift = templateLength - 1;\n          for (k = 0; k < templateLength; k++, shift--) {\n            j0 = j + templateX[k];\n            if (j0 >= 0 && j0 < width) {\n              i0 = i + templateY[k];\n              if (i0 >= 0) {\n                bit = bitmap[i0][j0];\n                if (bit) {\n                  contextLabel |= bit << shift;\n                }\n              }\n            }\n          }\n        }\n        var pixel = decoder.readBit(contexts, contextLabel);\n        row[j] = pixel;\n      }\n    }\n    return bitmap;\n  }\n\n  // 6.3.2 Generic Refinement Region Decoding Procedure\n  function decodeRefinement(\n    width,\n    height,\n    templateIndex,\n    referenceBitmap,\n    offsetX,\n    offsetY,\n    prediction,\n    at,\n    decodingContext\n  ) {\n    var codingTemplate = RefinementTemplates[templateIndex].coding;\n    if (templateIndex === 0) {\n      codingTemplate = codingTemplate.concat([at[0]]);\n    }\n    var codingTemplateLength = codingTemplate.length;\n    var codingTemplateX = new Int32Array(codingTemplateLength);\n    var codingTemplateY = new Int32Array(codingTemplateLength);\n    var k;\n    for (k = 0; k < codingTemplateLength; k++) {\n      codingTemplateX[k] = codingTemplate[k].x;\n      codingTemplateY[k] = codingTemplate[k].y;\n    }\n\n    var referenceTemplate = RefinementTemplates[templateIndex].reference;\n    if (templateIndex === 0) {\n      referenceTemplate = referenceTemplate.concat([at[1]]);\n    }\n    var referenceTemplateLength = referenceTemplate.length;\n    var referenceTemplateX = new Int32Array(referenceTemplateLength);\n    var referenceTemplateY = new Int32Array(referenceTemplateLength);\n    for (k = 0; k < referenceTemplateLength; k++) {\n      referenceTemplateX[k] = referenceTemplate[k].x;\n      referenceTemplateY[k] = referenceTemplate[k].y;\n    }\n    var referenceWidth = referenceBitmap[0].length;\n    var referenceHeight = referenceBitmap.length;\n\n    var pseudoPixelContext = RefinementReusedContexts[templateIndex];\n    var bitmap = [];\n\n    var decoder = decodingContext.decoder;\n    var contexts = decodingContext.contextCache.getContexts(\"GR\");\n\n    var ltp = 0;\n    for (var i = 0; i < height; i++) {\n      if (prediction) {\n        var sltp = decoder.readBit(contexts, pseudoPixelContext);\n        ltp ^= sltp;\n        if (ltp) {\n          throw new Jbig2Error(\"prediction is not supported\");\n        }\n      }\n      var row = new Uint8Array(width);\n      bitmap.push(row);\n      for (var j = 0; j < width; j++) {\n        var i0, j0;\n        var contextLabel = 0;\n        for (k = 0; k < codingTemplateLength; k++) {\n          i0 = i + codingTemplateY[k];\n          j0 = j + codingTemplateX[k];\n          if (i0 < 0 || j0 < 0 || j0 >= width) {\n            contextLabel <<= 1; // out of bound pixel\n          } else {\n            contextLabel = (contextLabel << 1) | bitmap[i0][j0];\n          }\n        }\n        for (k = 0; k < referenceTemplateLength; k++) {\n          i0 = i + referenceTemplateY[k] - offsetY;\n          j0 = j + referenceTemplateX[k] - offsetX;\n          if (\n            i0 < 0 ||\n            i0 >= referenceHeight ||\n            j0 < 0 ||\n            j0 >= referenceWidth\n          ) {\n            contextLabel <<= 1; // out of bound pixel\n          } else {\n            contextLabel = (contextLabel << 1) | referenceBitmap[i0][j0];\n          }\n        }\n        var pixel = decoder.readBit(contexts, contextLabel);\n        row[j] = pixel;\n      }\n    }\n\n    return bitmap;\n  }\n\n  // 6.5.5 Decoding the symbol dictionary\n  function decodeSymbolDictionary(\n    huffman,\n    refinement,\n    symbols,\n    numberOfNewSymbols,\n    numberOfExportedSymbols,\n    huffmanTables,\n    templateIndex,\n    at,\n    refinementTemplateIndex,\n    refinementAt,\n    decodingContext,\n    huffmanInput\n  ) {\n    if (huffman && refinement) {\n      throw new Jbig2Error(\"symbol refinement with Huffman is not supported\");\n    }\n\n    var newSymbols = [];\n    var currentHeight = 0;\n    var symbolCodeLength = log2(symbols.length + numberOfNewSymbols);\n\n    var decoder = decodingContext.decoder;\n    var contextCache = decodingContext.contextCache;\n    let tableB1, symbolWidths;\n    if (huffman) {\n      tableB1 = getStandardTable(1); // standard table B.1\n      symbolWidths = [];\n      symbolCodeLength = Math.max(symbolCodeLength, 1); // 6.5.8.2.3\n    }\n\n    while (newSymbols.length < numberOfNewSymbols) {\n      var deltaHeight = huffman\n        ? huffmanTables.tableDeltaHeight.decode(huffmanInput)\n        : decodeInteger(contextCache, \"IADH\", decoder); // 6.5.6\n      currentHeight += deltaHeight;\n      let currentWidth = 0,\n        totalWidth = 0;\n      const firstSymbol = huffman ? symbolWidths.length : 0;\n      while (true) {\n        var deltaWidth = huffman\n          ? huffmanTables.tableDeltaWidth.decode(huffmanInput)\n          : decodeInteger(contextCache, \"IADW\", decoder); // 6.5.7\n        if (deltaWidth === null) {\n          break; // OOB\n        }\n        currentWidth += deltaWidth;\n        totalWidth += currentWidth;\n        var bitmap;\n        if (refinement) {\n          // 6.5.8.2 Refinement/aggregate-coded symbol bitmap\n          var numberOfInstances = decodeInteger(contextCache, \"IAAI\", decoder);\n          if (numberOfInstances > 1) {\n            bitmap = decodeTextRegion(\n              huffman,\n              refinement,\n              currentWidth,\n              currentHeight,\n              0,\n              numberOfInstances,\n              1, // strip size\n              symbols.concat(newSymbols),\n              symbolCodeLength,\n              0, // transposed\n              0, // ds offset\n              1, // top left 7.4.3.1.1\n              0, // OR operator\n              huffmanTables,\n              refinementTemplateIndex,\n              refinementAt,\n              decodingContext,\n              0,\n              huffmanInput\n            );\n          } else {\n            var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);\n            var rdx = decodeInteger(contextCache, \"IARDX\", decoder); // 6.4.11.3\n            var rdy = decodeInteger(contextCache, \"IARDY\", decoder); // 6.4.11.4\n            var symbol =\n              symbolId < symbols.length\n                ? symbols[symbolId]\n                : newSymbols[symbolId - symbols.length];\n            bitmap = decodeRefinement(\n              currentWidth,\n              currentHeight,\n              refinementTemplateIndex,\n              symbol,\n              rdx,\n              rdy,\n              false,\n              refinementAt,\n              decodingContext\n            );\n          }\n          newSymbols.push(bitmap);\n        } else if (huffman) {\n          // Store only symbol width and decode a collective bitmap when the\n          // height class is done.\n          symbolWidths.push(currentWidth);\n        } else {\n          // 6.5.8.1 Direct-coded symbol bitmap\n          bitmap = decodeBitmap(\n            false,\n            currentWidth,\n            currentHeight,\n            templateIndex,\n            false,\n            null,\n            at,\n            decodingContext\n          );\n          newSymbols.push(bitmap);\n        }\n      }\n      if (huffman && !refinement) {\n        // 6.5.9 Height class collective bitmap\n        const bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput);\n        huffmanInput.byteAlign();\n        let collectiveBitmap;\n        if (bitmapSize === 0) {\n          // Uncompressed collective bitmap\n          collectiveBitmap = readUncompressedBitmap(\n            huffmanInput,\n            totalWidth,\n            currentHeight\n          );\n        } else {\n          // MMR collective bitmap\n          const originalEnd = huffmanInput.end;\n          const bitmapEnd = huffmanInput.position + bitmapSize;\n          huffmanInput.end = bitmapEnd;\n          collectiveBitmap = decodeMMRBitmap(\n            huffmanInput,\n            totalWidth,\n            currentHeight,\n            false\n          );\n          huffmanInput.end = originalEnd;\n          huffmanInput.position = bitmapEnd;\n        }\n        const numberOfSymbolsDecoded = symbolWidths.length;\n        if (firstSymbol === numberOfSymbolsDecoded - 1) {\n          // collectiveBitmap is a single symbol.\n          newSymbols.push(collectiveBitmap);\n        } else {\n          // Divide collectiveBitmap into symbols.\n          let i,\n            y,\n            xMin = 0,\n            xMax,\n            bitmapWidth,\n            symbolBitmap;\n          for (i = firstSymbol; i < numberOfSymbolsDecoded; i++) {\n            bitmapWidth = symbolWidths[i];\n            xMax = xMin + bitmapWidth;\n            symbolBitmap = [];\n            for (y = 0; y < currentHeight; y++) {\n              symbolBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));\n            }\n            newSymbols.push(symbolBitmap);\n            xMin = xMax;\n          }\n        }\n      }\n    }\n\n    // 6.5.10 Exported symbols\n    var exportedSymbols = [];\n    var flags = [],\n      currentFlag = false;\n    var totalSymbolsLength = symbols.length + numberOfNewSymbols;\n    while (flags.length < totalSymbolsLength) {\n      var runLength = huffman\n        ? tableB1.decode(huffmanInput)\n        : decodeInteger(contextCache, \"IAEX\", decoder);\n      while (runLength--) {\n        flags.push(currentFlag);\n      }\n      currentFlag = !currentFlag;\n    }\n    for (var i = 0, ii = symbols.length; i < ii; i++) {\n      if (flags[i]) {\n        exportedSymbols.push(symbols[i]);\n      }\n    }\n    for (var j = 0; j < numberOfNewSymbols; i++, j++) {\n      if (flags[i]) {\n        exportedSymbols.push(newSymbols[j]);\n      }\n    }\n    return exportedSymbols;\n  }\n\n  function decodeTextRegion(\n    huffman,\n    refinement,\n    width,\n    height,\n    defaultPixelValue,\n    numberOfSymbolInstances,\n    stripSize,\n    inputSymbols,\n    symbolCodeLength,\n    transposed,\n    dsOffset,\n    referenceCorner,\n    combinationOperator,\n    huffmanTables,\n    refinementTemplateIndex,\n    refinementAt,\n    decodingContext,\n    logStripSize,\n    huffmanInput\n  ) {\n    if (huffman && refinement) {\n      throw new Jbig2Error(\"refinement with Huffman is not supported\");\n    }\n\n    // Prepare bitmap\n    var bitmap = [];\n    var i, row;\n    for (i = 0; i < height; i++) {\n      row = new Uint8Array(width);\n      if (defaultPixelValue) {\n        for (var j = 0; j < width; j++) {\n          row[j] = defaultPixelValue;\n        }\n      }\n      bitmap.push(row);\n    }\n\n    var decoder = decodingContext.decoder;\n    var contextCache = decodingContext.contextCache;\n\n    var stripT = huffman\n      ? -huffmanTables.tableDeltaT.decode(huffmanInput)\n      : -decodeInteger(contextCache, \"IADT\", decoder); // 6.4.6\n    var firstS = 0;\n    i = 0;\n    while (i < numberOfSymbolInstances) {\n      var deltaT = huffman\n        ? huffmanTables.tableDeltaT.decode(huffmanInput)\n        : decodeInteger(contextCache, \"IADT\", decoder); // 6.4.6\n      stripT += deltaT;\n\n      var deltaFirstS = huffman\n        ? huffmanTables.tableFirstS.decode(huffmanInput)\n        : decodeInteger(contextCache, \"IAFS\", decoder); // 6.4.7\n      firstS += deltaFirstS;\n      var currentS = firstS;\n      do {\n        let currentT = 0; // 6.4.9\n        if (stripSize > 1) {\n          currentT = huffman\n            ? huffmanInput.readBits(logStripSize)\n            : decodeInteger(contextCache, \"IAIT\", decoder);\n        }\n        var t = stripSize * stripT + currentT;\n        var symbolId = huffman\n          ? huffmanTables.symbolIDTable.decode(huffmanInput)\n          : decodeIAID(contextCache, decoder, symbolCodeLength);\n        var applyRefinement =\n          refinement &&\n          (huffman\n            ? huffmanInput.readBit()\n            : decodeInteger(contextCache, \"IARI\", decoder));\n        var symbolBitmap = inputSymbols[symbolId];\n        var symbolWidth = symbolBitmap[0].length;\n        var symbolHeight = symbolBitmap.length;\n        if (applyRefinement) {\n          var rdw = decodeInteger(contextCache, \"IARDW\", decoder); // 6.4.11.1\n          var rdh = decodeInteger(contextCache, \"IARDH\", decoder); // 6.4.11.2\n          var rdx = decodeInteger(contextCache, \"IARDX\", decoder); // 6.4.11.3\n          var rdy = decodeInteger(contextCache, \"IARDY\", decoder); // 6.4.11.4\n          symbolWidth += rdw;\n          symbolHeight += rdh;\n          symbolBitmap = decodeRefinement(\n            symbolWidth,\n            symbolHeight,\n            refinementTemplateIndex,\n            symbolBitmap,\n            (rdw >> 1) + rdx,\n            (rdh >> 1) + rdy,\n            false,\n            refinementAt,\n            decodingContext\n          );\n        }\n        var offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1);\n        var offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0);\n        var s2, t2, symbolRow;\n        if (transposed) {\n          // Place Symbol Bitmap from T1,S1\n          for (s2 = 0; s2 < symbolHeight; s2++) {\n            row = bitmap[offsetS + s2];\n            if (!row) {\n              continue;\n            }\n            symbolRow = symbolBitmap[s2];\n            // To ignore Parts of Symbol bitmap which goes\n            // outside bitmap region\n            var maxWidth = Math.min(width - offsetT, symbolWidth);\n            switch (combinationOperator) {\n              case 0: // OR\n                for (t2 = 0; t2 < maxWidth; t2++) {\n                  row[offsetT + t2] |= symbolRow[t2];\n                }\n                break;\n              case 2: // XOR\n                for (t2 = 0; t2 < maxWidth; t2++) {\n                  row[offsetT + t2] ^= symbolRow[t2];\n                }\n                break;\n              default:\n                throw new Jbig2Error(\n                  `operator ${combinationOperator} is not supported`\n                );\n            }\n          }\n          currentS += symbolHeight - 1;\n        } else {\n          for (t2 = 0; t2 < symbolHeight; t2++) {\n            row = bitmap[offsetT + t2];\n            if (!row) {\n              continue;\n            }\n            symbolRow = symbolBitmap[t2];\n            switch (combinationOperator) {\n              case 0: // OR\n                for (s2 = 0; s2 < symbolWidth; s2++) {\n                  row[offsetS + s2] |= symbolRow[s2];\n                }\n                break;\n              case 2: // XOR\n                for (s2 = 0; s2 < symbolWidth; s2++) {\n                  row[offsetS + s2] ^= symbolRow[s2];\n                }\n                break;\n              default:\n                throw new Jbig2Error(\n                  `operator ${combinationOperator} is not supported`\n                );\n            }\n          }\n          currentS += symbolWidth - 1;\n        }\n        i++;\n        var deltaS = huffman\n          ? huffmanTables.tableDeltaS.decode(huffmanInput)\n          : decodeInteger(contextCache, \"IADS\", decoder); // 6.4.8\n        if (deltaS === null) {\n          break; // OOB\n        }\n        currentS += deltaS + dsOffset;\n      } while (true);\n    }\n    return bitmap;\n  }\n\n  function decodePatternDictionary(\n    mmr,\n    patternWidth,\n    patternHeight,\n    maxPatternIndex,\n    template,\n    decodingContext\n  ) {\n    const at = [];\n    if (!mmr) {\n      at.push({\n        x: -patternWidth,\n        y: 0,\n      });\n      if (template === 0) {\n        at.push({\n          x: -3,\n          y: -1,\n        });\n        at.push({\n          x: 2,\n          y: -2,\n        });\n        at.push({\n          x: -2,\n          y: -2,\n        });\n      }\n    }\n    const collectiveWidth = (maxPatternIndex + 1) * patternWidth;\n    const collectiveBitmap = decodeBitmap(\n      mmr,\n      collectiveWidth,\n      patternHeight,\n      template,\n      false,\n      null,\n      at,\n      decodingContext\n    );\n    // Divide collective bitmap into patterns.\n    const patterns = [];\n    for (let i = 0; i <= maxPatternIndex; i++) {\n      const patternBitmap = [];\n      const xMin = patternWidth * i;\n      const xMax = xMin + patternWidth;\n      for (let y = 0; y < patternHeight; y++) {\n        patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));\n      }\n      patterns.push(patternBitmap);\n    }\n    return patterns;\n  }\n\n  function decodeHalftoneRegion(\n    mmr,\n    patterns,\n    template,\n    regionWidth,\n    regionHeight,\n    defaultPixelValue,\n    enableSkip,\n    combinationOperator,\n    gridWidth,\n    gridHeight,\n    gridOffsetX,\n    gridOffsetY,\n    gridVectorX,\n    gridVectorY,\n    decodingContext\n  ) {\n    const skip = null;\n    if (enableSkip) {\n      throw new Jbig2Error(\"skip is not supported\");\n    }\n    if (combinationOperator !== 0) {\n      throw new Jbig2Error(\n        \"operator \" +\n          combinationOperator +\n          \" is not supported in halftone region\"\n      );\n    }\n\n    // Prepare bitmap.\n    const regionBitmap = [];\n    let i, j, row;\n    for (i = 0; i < regionHeight; i++) {\n      row = new Uint8Array(regionWidth);\n      if (defaultPixelValue) {\n        for (j = 0; j < regionWidth; j++) {\n          row[j] = defaultPixelValue;\n        }\n      }\n      regionBitmap.push(row);\n    }\n\n    const numberOfPatterns = patterns.length;\n    const pattern0 = patterns[0];\n    const patternWidth = pattern0[0].length,\n      patternHeight = pattern0.length;\n    const bitsPerValue = log2(numberOfPatterns);\n    const at = [];\n    if (!mmr) {\n      at.push({\n        x: template <= 1 ? 3 : 2,\n        y: -1,\n      });\n      if (template === 0) {\n        at.push({\n          x: -3,\n          y: -1,\n        });\n        at.push({\n          x: 2,\n          y: -2,\n        });\n        at.push({\n          x: -2,\n          y: -2,\n        });\n      }\n    }\n    // Annex C. Gray-scale Image Decoding Procedure.\n    const grayScaleBitPlanes = [];\n    let mmrInput, bitmap;\n    if (mmr) {\n      // MMR bit planes are in one continuous stream. Only EOFB codes indicate\n      // the end of each bitmap, so EOFBs must be decoded.\n      mmrInput = new Reader(\n        decodingContext.data,\n        decodingContext.start,\n        decodingContext.end\n      );\n    }\n    for (i = bitsPerValue - 1; i >= 0; i--) {\n      if (mmr) {\n        bitmap = decodeMMRBitmap(mmrInput, gridWidth, gridHeight, true);\n      } else {\n        bitmap = decodeBitmap(\n          false,\n          gridWidth,\n          gridHeight,\n          template,\n          false,\n          skip,\n          at,\n          decodingContext\n        );\n      }\n      grayScaleBitPlanes[i] = bitmap;\n    }\n    // 6.6.5.2 Rendering the patterns.\n    let mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow;\n    for (mg = 0; mg < gridHeight; mg++) {\n      for (ng = 0; ng < gridWidth; ng++) {\n        bit = 0;\n        patternIndex = 0;\n        for (j = bitsPerValue - 1; j >= 0; j--) {\n          bit = grayScaleBitPlanes[j][mg][ng] ^ bit; // Gray decoding\n          patternIndex |= bit << j;\n        }\n        patternBitmap = patterns[patternIndex];\n        x = (gridOffsetX + mg * gridVectorY + ng * gridVectorX) >> 8;\n        y = (gridOffsetY + mg * gridVectorX - ng * gridVectorY) >> 8;\n        // Draw patternBitmap at (x, y).\n        if (\n          x >= 0 &&\n          x + patternWidth <= regionWidth &&\n          y >= 0 &&\n          y + patternHeight <= regionHeight\n        ) {\n          for (i = 0; i < patternHeight; i++) {\n            regionRow = regionBitmap[y + i];\n            patternRow = patternBitmap[i];\n            for (j = 0; j < patternWidth; j++) {\n              regionRow[x + j] |= patternRow[j];\n            }\n          }\n        } else {\n          let regionX, regionY;\n          for (i = 0; i < patternHeight; i++) {\n            regionY = y + i;\n            if (regionY < 0 || regionY >= regionHeight) {\n              continue;\n            }\n            regionRow = regionBitmap[regionY];\n            patternRow = patternBitmap[i];\n            for (j = 0; j < patternWidth; j++) {\n              regionX = x + j;\n              if (regionX >= 0 && regionX < regionWidth) {\n                regionRow[regionX] |= patternRow[j];\n              }\n            }\n          }\n        }\n      }\n    }\n    return regionBitmap;\n  }\n\n  function readSegmentHeader(data, start) {\n    var segmentHeader = {};\n    segmentHeader.number = readUint32(data, start);\n    var flags = data[start + 4];\n    var segmentType = flags & 0x3f;\n    if (!SegmentTypes[segmentType]) {\n      throw new Jbig2Error(\"invalid segment type: \" + segmentType);\n    }\n    segmentHeader.type = segmentType;\n    segmentHeader.typeName = SegmentTypes[segmentType];\n    segmentHeader.deferredNonRetain = !!(flags & 0x80);\n\n    var pageAssociationFieldSize = !!(flags & 0x40);\n    var referredFlags = data[start + 5];\n    var referredToCount = (referredFlags >> 5) & 7;\n    var retainBits = [referredFlags & 31];\n    var position = start + 6;\n    if (referredFlags === 7) {\n      referredToCount = readUint32(data, position - 1) & 0x1fffffff;\n      position += 3;\n      var bytes = (referredToCount + 7) >> 3;\n      retainBits[0] = data[position++];\n      while (--bytes > 0) {\n        retainBits.push(data[position++]);\n      }\n    } else if (referredFlags === 5 || referredFlags === 6) {\n      throw new Jbig2Error(\"invalid referred-to flags\");\n    }\n\n    segmentHeader.retainBits = retainBits;\n\n    let referredToSegmentNumberSize = 4;\n    if (segmentHeader.number <= 256) {\n      referredToSegmentNumberSize = 1;\n    } else if (segmentHeader.number <= 65536) {\n      referredToSegmentNumberSize = 2;\n    }\n    var referredTo = [];\n    var i, ii;\n    for (i = 0; i < referredToCount; i++) {\n      let number;\n      if (referredToSegmentNumberSize === 1) {\n        number = data[position];\n      } else if (referredToSegmentNumberSize === 2) {\n        number = readUint16(data, position);\n      } else {\n        number = readUint32(data, position);\n      }\n      referredTo.push(number);\n      position += referredToSegmentNumberSize;\n    }\n    segmentHeader.referredTo = referredTo;\n    if (!pageAssociationFieldSize) {\n      segmentHeader.pageAssociation = data[position++];\n    } else {\n      segmentHeader.pageAssociation = readUint32(data, position);\n      position += 4;\n    }\n    segmentHeader.length = readUint32(data, position);\n    position += 4;\n\n    if (segmentHeader.length === 0xffffffff) {\n      // 7.2.7 Segment data length, unknown segment length\n      if (segmentType === 38) {\n        // ImmediateGenericRegion\n        var genericRegionInfo = readRegionSegmentInformation(data, position);\n        var genericRegionSegmentFlags =\n          data[position + RegionSegmentInformationFieldLength];\n        var genericRegionMmr = !!(genericRegionSegmentFlags & 1);\n        // searching for the segment end\n        var searchPatternLength = 6;\n        var searchPattern = new Uint8Array(searchPatternLength);\n        if (!genericRegionMmr) {\n          searchPattern[0] = 0xff;\n          searchPattern[1] = 0xac;\n        }\n        searchPattern[2] = (genericRegionInfo.height >>> 24) & 0xff;\n        searchPattern[3] = (genericRegionInfo.height >> 16) & 0xff;\n        searchPattern[4] = (genericRegionInfo.height >> 8) & 0xff;\n        searchPattern[5] = genericRegionInfo.height & 0xff;\n        for (i = position, ii = data.length; i < ii; i++) {\n          var j = 0;\n          while (j < searchPatternLength && searchPattern[j] === data[i + j]) {\n            j++;\n          }\n          if (j === searchPatternLength) {\n            segmentHeader.length = i + searchPatternLength;\n            break;\n          }\n        }\n        if (segmentHeader.length === 0xffffffff) {\n          throw new Jbig2Error(\"segment end was not found\");\n        }\n      } else {\n        throw new Jbig2Error(\"invalid unknown segment length\");\n      }\n    }\n    segmentHeader.headerEnd = position;\n    return segmentHeader;\n  }\n\n  function readSegments(header, data, start, end) {\n    var segments = [];\n    var position = start;\n    while (position < end) {\n      var segmentHeader = readSegmentHeader(data, position);\n      position = segmentHeader.headerEnd;\n      var segment = {\n        header: segmentHeader,\n        data,\n      };\n      if (!header.randomAccess) {\n        segment.start = position;\n        position += segmentHeader.length;\n        segment.end = position;\n      }\n      segments.push(segment);\n      if (segmentHeader.type === 51) {\n        break; // end of file is found\n      }\n    }\n    if (header.randomAccess) {\n      for (var i = 0, ii = segments.length; i < ii; i++) {\n        segments[i].start = position;\n        position += segments[i].header.length;\n        segments[i].end = position;\n      }\n    }\n    return segments;\n  }\n\n  // 7.4.1 Region segment information field\n  function readRegionSegmentInformation(data, start) {\n    return {\n      width: readUint32(data, start),\n      height: readUint32(data, start + 4),\n      x: readUint32(data, start + 8),\n      y: readUint32(data, start + 12),\n      combinationOperator: data[start + 16] & 7,\n    };\n  }\n  var RegionSegmentInformationFieldLength = 17;\n\n  function processSegment(segment, visitor) {\n    var header = segment.header;\n\n    var data = segment.data,\n      position = segment.start,\n      end = segment.end;\n    var args, at, i, atLength;\n    switch (header.type) {\n      case 0: // SymbolDictionary\n        // 7.4.2 Symbol dictionary segment syntax\n        var dictionary = {};\n        var dictionaryFlags = readUint16(data, position); // 7.4.2.1.1\n        dictionary.huffman = !!(dictionaryFlags & 1);\n        dictionary.refinement = !!(dictionaryFlags & 2);\n        dictionary.huffmanDHSelector = (dictionaryFlags >> 2) & 3;\n        dictionary.huffmanDWSelector = (dictionaryFlags >> 4) & 3;\n        dictionary.bitmapSizeSelector = (dictionaryFlags >> 6) & 1;\n        dictionary.aggregationInstancesSelector = (dictionaryFlags >> 7) & 1;\n        dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256);\n        dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512);\n        dictionary.template = (dictionaryFlags >> 10) & 3;\n        dictionary.refinementTemplate = (dictionaryFlags >> 12) & 1;\n        position += 2;\n        if (!dictionary.huffman) {\n          atLength = dictionary.template === 0 ? 4 : 1;\n          at = [];\n          for (i = 0; i < atLength; i++) {\n            at.push({\n              x: readInt8(data, position),\n              y: readInt8(data, position + 1),\n            });\n            position += 2;\n          }\n          dictionary.at = at;\n        }\n        if (dictionary.refinement && !dictionary.refinementTemplate) {\n          at = [];\n          for (i = 0; i < 2; i++) {\n            at.push({\n              x: readInt8(data, position),\n              y: readInt8(data, position + 1),\n            });\n            position += 2;\n          }\n          dictionary.refinementAt = at;\n        }\n        dictionary.numberOfExportedSymbols = readUint32(data, position);\n        position += 4;\n        dictionary.numberOfNewSymbols = readUint32(data, position);\n        position += 4;\n        args = [\n          dictionary,\n          header.number,\n          header.referredTo,\n          data,\n          position,\n          end,\n        ];\n        break;\n      case 6: // ImmediateTextRegion\n      case 7: // ImmediateLosslessTextRegion\n        var textRegion = {};\n        textRegion.info = readRegionSegmentInformation(data, position);\n        position += RegionSegmentInformationFieldLength;\n        var textRegionSegmentFlags = readUint16(data, position);\n        position += 2;\n        textRegion.huffman = !!(textRegionSegmentFlags & 1);\n        textRegion.refinement = !!(textRegionSegmentFlags & 2);\n        textRegion.logStripSize = (textRegionSegmentFlags >> 2) & 3;\n        textRegion.stripSize = 1 << textRegion.logStripSize;\n        textRegion.referenceCorner = (textRegionSegmentFlags >> 4) & 3;\n        textRegion.transposed = !!(textRegionSegmentFlags & 64);\n        textRegion.combinationOperator = (textRegionSegmentFlags >> 7) & 3;\n        textRegion.defaultPixelValue = (textRegionSegmentFlags >> 9) & 1;\n        textRegion.dsOffset = (textRegionSegmentFlags << 17) >> 27;\n        textRegion.refinementTemplate = (textRegionSegmentFlags >> 15) & 1;\n        if (textRegion.huffman) {\n          var textRegionHuffmanFlags = readUint16(data, position);\n          position += 2;\n          textRegion.huffmanFS = textRegionHuffmanFlags & 3;\n          textRegion.huffmanDS = (textRegionHuffmanFlags >> 2) & 3;\n          textRegion.huffmanDT = (textRegionHuffmanFlags >> 4) & 3;\n          textRegion.huffmanRefinementDW = (textRegionHuffmanFlags >> 6) & 3;\n          textRegion.huffmanRefinementDH = (textRegionHuffmanFlags >> 8) & 3;\n          textRegion.huffmanRefinementDX = (textRegionHuffmanFlags >> 10) & 3;\n          textRegion.huffmanRefinementDY = (textRegionHuffmanFlags >> 12) & 3;\n          textRegion.huffmanRefinementSizeSelector = !!(\n            textRegionHuffmanFlags & 0x4000\n          );\n        }\n        if (textRegion.refinement && !textRegion.refinementTemplate) {\n          at = [];\n          for (i = 0; i < 2; i++) {\n            at.push({\n              x: readInt8(data, position),\n              y: readInt8(data, position + 1),\n            });\n            position += 2;\n          }\n          textRegion.refinementAt = at;\n        }\n        textRegion.numberOfSymbolInstances = readUint32(data, position);\n        position += 4;\n        args = [textRegion, header.referredTo, data, position, end];\n        break;\n      case 16: // PatternDictionary\n        // 7.4.4. Pattern dictionary segment syntax\n        const patternDictionary = {};\n        const patternDictionaryFlags = data[position++];\n        patternDictionary.mmr = !!(patternDictionaryFlags & 1);\n        patternDictionary.template = (patternDictionaryFlags >> 1) & 3;\n        patternDictionary.patternWidth = data[position++];\n        patternDictionary.patternHeight = data[position++];\n        patternDictionary.maxPatternIndex = readUint32(data, position);\n        position += 4;\n        args = [patternDictionary, header.number, data, position, end];\n        break;\n      case 22: // ImmediateHalftoneRegion\n      case 23: // ImmediateLosslessHalftoneRegion\n        // 7.4.5 Halftone region segment syntax\n        const halftoneRegion = {};\n        halftoneRegion.info = readRegionSegmentInformation(data, position);\n        position += RegionSegmentInformationFieldLength;\n        const halftoneRegionFlags = data[position++];\n        halftoneRegion.mmr = !!(halftoneRegionFlags & 1);\n        halftoneRegion.template = (halftoneRegionFlags >> 1) & 3;\n        halftoneRegion.enableSkip = !!(halftoneRegionFlags & 8);\n        halftoneRegion.combinationOperator = (halftoneRegionFlags >> 4) & 7;\n        halftoneRegion.defaultPixelValue = (halftoneRegionFlags >> 7) & 1;\n        halftoneRegion.gridWidth = readUint32(data, position);\n        position += 4;\n        halftoneRegion.gridHeight = readUint32(data, position);\n        position += 4;\n        halftoneRegion.gridOffsetX = readUint32(data, position) & 0xffffffff;\n        position += 4;\n        halftoneRegion.gridOffsetY = readUint32(data, position) & 0xffffffff;\n        position += 4;\n        halftoneRegion.gridVectorX = readUint16(data, position);\n        position += 2;\n        halftoneRegion.gridVectorY = readUint16(data, position);\n        position += 2;\n        args = [halftoneRegion, header.referredTo, data, position, end];\n        break;\n      case 38: // ImmediateGenericRegion\n      case 39: // ImmediateLosslessGenericRegion\n        var genericRegion = {};\n        genericRegion.info = readRegionSegmentInformation(data, position);\n        position += RegionSegmentInformationFieldLength;\n        var genericRegionSegmentFlags = data[position++];\n        genericRegion.mmr = !!(genericRegionSegmentFlags & 1);\n        genericRegion.template = (genericRegionSegmentFlags >> 1) & 3;\n        genericRegion.prediction = !!(genericRegionSegmentFlags & 8);\n        if (!genericRegion.mmr) {\n          atLength = genericRegion.template === 0 ? 4 : 1;\n          at = [];\n          for (i = 0; i < atLength; i++) {\n            at.push({\n              x: readInt8(data, position),\n              y: readInt8(data, position + 1),\n            });\n            position += 2;\n          }\n          genericRegion.at = at;\n        }\n        args = [genericRegion, data, position, end];\n        break;\n      case 48: // PageInformation\n        var pageInfo = {\n          width: readUint32(data, position),\n          height: readUint32(data, position + 4),\n          resolutionX: readUint32(data, position + 8),\n          resolutionY: readUint32(data, position + 12),\n        };\n        if (pageInfo.height === 0xffffffff) {\n          delete pageInfo.height;\n        }\n        var pageSegmentFlags = data[position + 16];\n        readUint16(data, position + 17); // pageStripingInformation\n        pageInfo.lossless = !!(pageSegmentFlags & 1);\n        pageInfo.refinement = !!(pageSegmentFlags & 2);\n        pageInfo.defaultPixelValue = (pageSegmentFlags >> 2) & 1;\n        pageInfo.combinationOperator = (pageSegmentFlags >> 3) & 3;\n        pageInfo.requiresBuffer = !!(pageSegmentFlags & 32);\n        pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64);\n        args = [pageInfo];\n        break;\n      case 49: // EndOfPage\n        break;\n      case 50: // EndOfStripe\n        break;\n      case 51: // EndOfFile\n        break;\n      case 53: // Tables\n        args = [header.number, data, position, end];\n        break;\n      case 62: // 7.4.15 defines 2 extension types which\n        // are comments and can be ignored.\n        break;\n      default:\n        throw new Jbig2Error(\n          `segment type ${header.typeName}(${header.type})` +\n            \" is not implemented\"\n        );\n    }\n    var callbackName = \"on\" + header.typeName;\n    if (callbackName in visitor) {\n      visitor[callbackName].apply(visitor, args);\n    }\n  }\n\n  function processSegments(segments, visitor) {\n    for (var i = 0, ii = segments.length; i < ii; i++) {\n      processSegment(segments[i], visitor);\n    }\n  }\n\n  function parseJbig2Chunks(chunks) {\n    var visitor = new SimpleSegmentVisitor();\n    for (var i = 0, ii = chunks.length; i < ii; i++) {\n      var chunk = chunks[i];\n      var segments = readSegments({}, chunk.data, chunk.start, chunk.end);\n      processSegments(segments, visitor);\n    }\n    return visitor.buffer;\n  }\n\n  function parseJbig2(data) {\n    const end = data.length;\n    let position = 0;\n\n    if (\n      data[position] !== 0x97 ||\n      data[position + 1] !== 0x4a ||\n      data[position + 2] !== 0x42 ||\n      data[position + 3] !== 0x32 ||\n      data[position + 4] !== 0x0d ||\n      data[position + 5] !== 0x0a ||\n      data[position + 6] !== 0x1a ||\n      data[position + 7] !== 0x0a\n    ) {\n      throw new Jbig2Error(\"parseJbig2 - invalid header.\");\n    }\n\n    const header = Object.create(null);\n    position += 8;\n    const flags = data[position++];\n    header.randomAccess = !(flags & 1);\n    if (!(flags & 2)) {\n      header.numberOfPages = readUint32(data, position);\n      position += 4;\n    }\n\n    const segments = readSegments(header, data, position, end);\n    const visitor = new SimpleSegmentVisitor();\n    processSegments(segments, visitor);\n\n    const { width, height } = visitor.currentPageInfo;\n    const bitPacked = visitor.buffer;\n    const imgData = new Uint8ClampedArray(width * height);\n    let q = 0,\n      k = 0;\n    for (let i = 0; i < height; i++) {\n      let mask = 0,\n        buffer;\n      for (let j = 0; j < width; j++) {\n        if (!mask) {\n          mask = 128;\n          buffer = bitPacked[k++];\n        }\n        imgData[q++] = buffer & mask ? 0 : 255;\n        mask >>= 1;\n      }\n    }\n\n    return { imgData, width, height };\n  }\n\n  function SimpleSegmentVisitor() {}\n\n  SimpleSegmentVisitor.prototype = {\n    onPageInformation: function SimpleSegmentVisitor_onPageInformation(info) {\n      this.currentPageInfo = info;\n      var rowSize = (info.width + 7) >> 3;\n      var buffer = new Uint8ClampedArray(rowSize * info.height);\n      // The contents of ArrayBuffers are initialized to 0.\n      // Fill the buffer with 0xFF only if info.defaultPixelValue is set\n      if (info.defaultPixelValue) {\n        for (var i = 0, ii = buffer.length; i < ii; i++) {\n          buffer[i] = 0xff;\n        }\n      }\n      this.buffer = buffer;\n    },\n    drawBitmap: function SimpleSegmentVisitor_drawBitmap(regionInfo, bitmap) {\n      var pageInfo = this.currentPageInfo;\n      var width = regionInfo.width,\n        height = regionInfo.height;\n      var rowSize = (pageInfo.width + 7) >> 3;\n      var combinationOperator = pageInfo.combinationOperatorOverride\n        ? regionInfo.combinationOperator\n        : pageInfo.combinationOperator;\n      var buffer = this.buffer;\n      var mask0 = 128 >> (regionInfo.x & 7);\n      var offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3);\n      var i, j, mask, offset;\n      switch (combinationOperator) {\n        case 0: // OR\n          for (i = 0; i < height; i++) {\n            mask = mask0;\n            offset = offset0;\n            for (j = 0; j < width; j++) {\n              if (bitmap[i][j]) {\n                buffer[offset] |= mask;\n              }\n              mask >>= 1;\n              if (!mask) {\n                mask = 128;\n                offset++;\n              }\n            }\n            offset0 += rowSize;\n          }\n          break;\n        case 2: // XOR\n          for (i = 0; i < height; i++) {\n            mask = mask0;\n            offset = offset0;\n            for (j = 0; j < width; j++) {\n              if (bitmap[i][j]) {\n                buffer[offset] ^= mask;\n              }\n              mask >>= 1;\n              if (!mask) {\n                mask = 128;\n                offset++;\n              }\n            }\n            offset0 += rowSize;\n          }\n          break;\n        default:\n          throw new Jbig2Error(\n            `operator ${combinationOperator} is not supported`\n          );\n      }\n    },\n    onImmediateGenericRegion: function SimpleSegmentVisitor_onImmediateGenericRegion(\n      region,\n      data,\n      start,\n      end\n    ) {\n      var regionInfo = region.info;\n      var decodingContext = new DecodingContext(data, start, end);\n      var bitmap = decodeBitmap(\n        region.mmr,\n        regionInfo.width,\n        regionInfo.height,\n        region.template,\n        region.prediction,\n        null,\n        region.at,\n        decodingContext\n      );\n      this.drawBitmap(regionInfo, bitmap);\n    },\n    onImmediateLosslessGenericRegion: function SimpleSegmentVisitor_onImmediateLosslessGenericRegion() {\n      this.onImmediateGenericRegion.apply(this, arguments);\n    },\n    onSymbolDictionary: function SimpleSegmentVisitor_onSymbolDictionary(\n      dictionary,\n      currentSegment,\n      referredSegments,\n      data,\n      start,\n      end\n    ) {\n      let huffmanTables, huffmanInput;\n      if (dictionary.huffman) {\n        huffmanTables = getSymbolDictionaryHuffmanTables(\n          dictionary,\n          referredSegments,\n          this.customTables\n        );\n        huffmanInput = new Reader(data, start, end);\n      }\n\n      // Combines exported symbols from all referred segments\n      var symbols = this.symbols;\n      if (!symbols) {\n        this.symbols = symbols = {};\n      }\n\n      var inputSymbols = [];\n      for (var i = 0, ii = referredSegments.length; i < ii; i++) {\n        const referredSymbols = symbols[referredSegments[i]];\n        // referredSymbols is undefined when we have a reference to a Tables\n        // segment instead of a SymbolDictionary.\n        if (referredSymbols) {\n          inputSymbols = inputSymbols.concat(referredSymbols);\n        }\n      }\n\n      var decodingContext = new DecodingContext(data, start, end);\n      symbols[currentSegment] = decodeSymbolDictionary(\n        dictionary.huffman,\n        dictionary.refinement,\n        inputSymbols,\n        dictionary.numberOfNewSymbols,\n        dictionary.numberOfExportedSymbols,\n        huffmanTables,\n        dictionary.template,\n        dictionary.at,\n        dictionary.refinementTemplate,\n        dictionary.refinementAt,\n        decodingContext,\n        huffmanInput\n      );\n    },\n    onImmediateTextRegion: function SimpleSegmentVisitor_onImmediateTextRegion(\n      region,\n      referredSegments,\n      data,\n      start,\n      end\n    ) {\n      var regionInfo = region.info;\n      let huffmanTables, huffmanInput;\n\n      // Combines exported symbols from all referred segments\n      var symbols = this.symbols;\n      var inputSymbols = [];\n      for (var i = 0, ii = referredSegments.length; i < ii; i++) {\n        const referredSymbols = symbols[referredSegments[i]];\n        // referredSymbols is undefined when we have a reference to a Tables\n        // segment instead of a SymbolDictionary.\n        if (referredSymbols) {\n          inputSymbols = inputSymbols.concat(referredSymbols);\n        }\n      }\n      var symbolCodeLength = log2(inputSymbols.length);\n      if (region.huffman) {\n        huffmanInput = new Reader(data, start, end);\n        huffmanTables = getTextRegionHuffmanTables(\n          region,\n          referredSegments,\n          this.customTables,\n          inputSymbols.length,\n          huffmanInput\n        );\n      }\n\n      var decodingContext = new DecodingContext(data, start, end);\n      var bitmap = decodeTextRegion(\n        region.huffman,\n        region.refinement,\n        regionInfo.width,\n        regionInfo.height,\n        region.defaultPixelValue,\n        region.numberOfSymbolInstances,\n        region.stripSize,\n        inputSymbols,\n        symbolCodeLength,\n        region.transposed,\n        region.dsOffset,\n        region.referenceCorner,\n        region.combinationOperator,\n        huffmanTables,\n        region.refinementTemplate,\n        region.refinementAt,\n        decodingContext,\n        region.logStripSize,\n        huffmanInput\n      );\n      this.drawBitmap(regionInfo, bitmap);\n    },\n    onImmediateLosslessTextRegion: function SimpleSegmentVisitor_onImmediateLosslessTextRegion() {\n      this.onImmediateTextRegion.apply(this, arguments);\n    },\n    onPatternDictionary(dictionary, currentSegment, data, start, end) {\n      let patterns = this.patterns;\n      if (!patterns) {\n        this.patterns = patterns = {};\n      }\n      const decodingContext = new DecodingContext(data, start, end);\n      patterns[currentSegment] = decodePatternDictionary(\n        dictionary.mmr,\n        dictionary.patternWidth,\n        dictionary.patternHeight,\n        dictionary.maxPatternIndex,\n        dictionary.template,\n        decodingContext\n      );\n    },\n    onImmediateHalftoneRegion(region, referredSegments, data, start, end) {\n      // HalftoneRegion refers to exactly one PatternDictionary.\n      const patterns = this.patterns[referredSegments[0]];\n      const regionInfo = region.info;\n      const decodingContext = new DecodingContext(data, start, end);\n      const bitmap = decodeHalftoneRegion(\n        region.mmr,\n        patterns,\n        region.template,\n        regionInfo.width,\n        regionInfo.height,\n        region.defaultPixelValue,\n        region.enableSkip,\n        region.combinationOperator,\n        region.gridWidth,\n        region.gridHeight,\n        region.gridOffsetX,\n        region.gridOffsetY,\n        region.gridVectorX,\n        region.gridVectorY,\n        decodingContext\n      );\n      this.drawBitmap(regionInfo, bitmap);\n    },\n    onImmediateLosslessHalftoneRegion() {\n      this.onImmediateHalftoneRegion.apply(this, arguments);\n    },\n    onTables(currentSegment, data, start, end) {\n      let customTables = this.customTables;\n      if (!customTables) {\n        this.customTables = customTables = {};\n      }\n      customTables[currentSegment] = decodeTablesSegment(data, start, end);\n    },\n  };\n\n  function HuffmanLine(lineData) {\n    if (lineData.length === 2) {\n      // OOB line.\n      this.isOOB = true;\n      this.rangeLow = 0;\n      this.prefixLength = lineData[0];\n      this.rangeLength = 0;\n      this.prefixCode = lineData[1];\n      this.isLowerRange = false;\n    } else {\n      // Normal, upper range or lower range line.\n      // Upper range lines are processed like normal lines.\n      this.isOOB = false;\n      this.rangeLow = lineData[0];\n      this.prefixLength = lineData[1];\n      this.rangeLength = lineData[2];\n      this.prefixCode = lineData[3];\n      this.isLowerRange = lineData[4] === \"lower\";\n    }\n  }\n\n  function HuffmanTreeNode(line) {\n    this.children = [];\n    if (line) {\n      // Leaf node\n      this.isLeaf = true;\n      this.rangeLength = line.rangeLength;\n      this.rangeLow = line.rangeLow;\n      this.isLowerRange = line.isLowerRange;\n      this.isOOB = line.isOOB;\n    } else {\n      // Intermediate or root node\n      this.isLeaf = false;\n    }\n  }\n\n  HuffmanTreeNode.prototype = {\n    buildTree(line, shift) {\n      const bit = (line.prefixCode >> shift) & 1;\n      if (shift <= 0) {\n        // Create a leaf node.\n        this.children[bit] = new HuffmanTreeNode(line);\n      } else {\n        // Create an intermediate node and continue recursively.\n        let node = this.children[bit];\n        if (!node) {\n          this.children[bit] = node = new HuffmanTreeNode(null);\n        }\n        node.buildTree(line, shift - 1);\n      }\n    },\n    decodeNode(reader) {\n      if (this.isLeaf) {\n        if (this.isOOB) {\n          return null;\n        }\n        const htOffset = reader.readBits(this.rangeLength);\n        return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset);\n      }\n      const node = this.children[reader.readBit()];\n      if (!node) {\n        throw new Jbig2Error(\"invalid Huffman data\");\n      }\n      return node.decodeNode(reader);\n    },\n  };\n\n  function HuffmanTable(lines, prefixCodesDone) {\n    if (!prefixCodesDone) {\n      this.assignPrefixCodes(lines);\n    }\n    // Create Huffman tree.\n    this.rootNode = new HuffmanTreeNode(null);\n    for (let i = 0, ii = lines.length; i < ii; i++) {\n      const line = lines[i];\n      if (line.prefixLength > 0) {\n        this.rootNode.buildTree(line, line.prefixLength - 1);\n      }\n    }\n  }\n\n  HuffmanTable.prototype = {\n    decode(reader) {\n      return this.rootNode.decodeNode(reader);\n    },\n    assignPrefixCodes(lines) {\n      // Annex B.3 Assigning the prefix codes.\n      const linesLength = lines.length;\n      let prefixLengthMax = 0;\n      for (let i = 0; i < linesLength; i++) {\n        prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength);\n      }\n\n      const histogram = new Uint32Array(prefixLengthMax + 1);\n      for (let i = 0; i < linesLength; i++) {\n        histogram[lines[i].prefixLength]++;\n      }\n      let currentLength = 1,\n        firstCode = 0,\n        currentCode,\n        currentTemp,\n        line;\n      histogram[0] = 0;\n\n      while (currentLength <= prefixLengthMax) {\n        firstCode = (firstCode + histogram[currentLength - 1]) << 1;\n        currentCode = firstCode;\n        currentTemp = 0;\n        while (currentTemp < linesLength) {\n          line = lines[currentTemp];\n          if (line.prefixLength === currentLength) {\n            line.prefixCode = currentCode;\n            currentCode++;\n          }\n          currentTemp++;\n        }\n        currentLength++;\n      }\n    },\n  };\n\n  function decodeTablesSegment(data, start, end) {\n    // Decodes a Tables segment, i.e., a custom Huffman table.\n    // Annex B.2 Code table structure.\n    const flags = data[start];\n    const lowestValue = readUint32(data, start + 1) & 0xffffffff;\n    const highestValue = readUint32(data, start + 5) & 0xffffffff;\n    const reader = new Reader(data, start + 9, end);\n\n    const prefixSizeBits = ((flags >> 1) & 7) + 1;\n    const rangeSizeBits = ((flags >> 4) & 7) + 1;\n    const lines = [];\n    let prefixLength,\n      rangeLength,\n      currentRangeLow = lowestValue;\n\n    // Normal table lines\n    do {\n      prefixLength = reader.readBits(prefixSizeBits);\n      rangeLength = reader.readBits(rangeSizeBits);\n      lines.push(\n        new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0])\n      );\n      currentRangeLow += 1 << rangeLength;\n    } while (currentRangeLow < highestValue);\n\n    // Lower range table line\n    prefixLength = reader.readBits(prefixSizeBits);\n    lines.push(\n      new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, \"lower\"])\n    );\n\n    // Upper range table line\n    prefixLength = reader.readBits(prefixSizeBits);\n    lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0]));\n\n    if (flags & 1) {\n      // Out-of-band table line\n      prefixLength = reader.readBits(prefixSizeBits);\n      lines.push(new HuffmanLine([prefixLength, 0]));\n    }\n\n    return new HuffmanTable(lines, false);\n  }\n\n  const standardTablesCache = {};\n\n  function getStandardTable(number) {\n    // Annex B.5 Standard Huffman tables.\n    let table = standardTablesCache[number];\n    if (table) {\n      return table;\n    }\n    let lines;\n    switch (number) {\n      case 1:\n        lines = [\n          [0, 1, 4, 0x0],\n          [16, 2, 8, 0x2],\n          [272, 3, 16, 0x6],\n          [65808, 3, 32, 0x7], // upper\n        ];\n        break;\n      case 2:\n        lines = [\n          [0, 1, 0, 0x0],\n          [1, 2, 0, 0x2],\n          [2, 3, 0, 0x6],\n          [3, 4, 3, 0xe],\n          [11, 5, 6, 0x1e],\n          [75, 6, 32, 0x3e], // upper\n          [6, 0x3f], // OOB\n        ];\n        break;\n      case 3:\n        lines = [\n          [-256, 8, 8, 0xfe],\n          [0, 1, 0, 0x0],\n          [1, 2, 0, 0x2],\n          [2, 3, 0, 0x6],\n          [3, 4, 3, 0xe],\n          [11, 5, 6, 0x1e],\n          [-257, 8, 32, 0xff, \"lower\"],\n          [75, 7, 32, 0x7e], // upper\n          [6, 0x3e], // OOB\n        ];\n        break;\n      case 4:\n        lines = [\n          [1, 1, 0, 0x0],\n          [2, 2, 0, 0x2],\n          [3, 3, 0, 0x6],\n          [4, 4, 3, 0xe],\n          [12, 5, 6, 0x1e],\n          [76, 5, 32, 0x1f], // upper\n        ];\n        break;\n      case 5:\n        lines = [\n          [-255, 7, 8, 0x7e],\n          [1, 1, 0, 0x0],\n          [2, 2, 0, 0x2],\n          [3, 3, 0, 0x6],\n          [4, 4, 3, 0xe],\n          [12, 5, 6, 0x1e],\n          [-256, 7, 32, 0x7f, \"lower\"],\n          [76, 6, 32, 0x3e], // upper\n        ];\n        break;\n      case 6:\n        lines = [\n          [-2048, 5, 10, 0x1c],\n          [-1024, 4, 9, 0x8],\n          [-512, 4, 8, 0x9],\n          [-256, 4, 7, 0xa],\n          [-128, 5, 6, 0x1d],\n          [-64, 5, 5, 0x1e],\n          [-32, 4, 5, 0xb],\n          [0, 2, 7, 0x0],\n          [128, 3, 7, 0x2],\n          [256, 3, 8, 0x3],\n          [512, 4, 9, 0xc],\n          [1024, 4, 10, 0xd],\n          [-2049, 6, 32, 0x3e, \"lower\"],\n          [2048, 6, 32, 0x3f], // upper\n        ];\n        break;\n      case 7:\n        lines = [\n          [-1024, 4, 9, 0x8],\n          [-512, 3, 8, 0x0],\n          [-256, 4, 7, 0x9],\n          [-128, 5, 6, 0x1a],\n          [-64, 5, 5, 0x1b],\n          [-32, 4, 5, 0xa],\n          [0, 4, 5, 0xb],\n          [32, 5, 5, 0x1c],\n          [64, 5, 6, 0x1d],\n          [128, 4, 7, 0xc],\n          [256, 3, 8, 0x1],\n          [512, 3, 9, 0x2],\n          [1024, 3, 10, 0x3],\n          [-1025, 5, 32, 0x1e, \"lower\"],\n          [2048, 5, 32, 0x1f], // upper\n        ];\n        break;\n      case 8:\n        lines = [\n          [-15, 8, 3, 0xfc],\n          [-7, 9, 1, 0x1fc],\n          [-5, 8, 1, 0xfd],\n          [-3, 9, 0, 0x1fd],\n          [-2, 7, 0, 0x7c],\n          [-1, 4, 0, 0xa],\n          [0, 2, 1, 0x0],\n          [2, 5, 0, 0x1a],\n          [3, 6, 0, 0x3a],\n          [4, 3, 4, 0x4],\n          [20, 6, 1, 0x3b],\n          [22, 4, 4, 0xb],\n          [38, 4, 5, 0xc],\n          [70, 5, 6, 0x1b],\n          [134, 5, 7, 0x1c],\n          [262, 6, 7, 0x3c],\n          [390, 7, 8, 0x7d],\n          [646, 6, 10, 0x3d],\n          [-16, 9, 32, 0x1fe, \"lower\"],\n          [1670, 9, 32, 0x1ff], // upper\n          [2, 0x1], // OOB\n        ];\n        break;\n      case 9:\n        lines = [\n          [-31, 8, 4, 0xfc],\n          [-15, 9, 2, 0x1fc],\n          [-11, 8, 2, 0xfd],\n          [-7, 9, 1, 0x1fd],\n          [-5, 7, 1, 0x7c],\n          [-3, 4, 1, 0xa],\n          [-1, 3, 1, 0x2],\n          [1, 3, 1, 0x3],\n          [3, 5, 1, 0x1a],\n          [5, 6, 1, 0x3a],\n          [7, 3, 5, 0x4],\n          [39, 6, 2, 0x3b],\n          [43, 4, 5, 0xb],\n          [75, 4, 6, 0xc],\n          [139, 5, 7, 0x1b],\n          [267, 5, 8, 0x1c],\n          [523, 6, 8, 0x3c],\n          [779, 7, 9, 0x7d],\n          [1291, 6, 11, 0x3d],\n          [-32, 9, 32, 0x1fe, \"lower\"],\n          [3339, 9, 32, 0x1ff], // upper\n          [2, 0x0], // OOB\n        ];\n        break;\n      case 10:\n        lines = [\n          [-21, 7, 4, 0x7a],\n          [-5, 8, 0, 0xfc],\n          [-4, 7, 0, 0x7b],\n          [-3, 5, 0, 0x18],\n          [-2, 2, 2, 0x0],\n          [2, 5, 0, 0x19],\n          [3, 6, 0, 0x36],\n          [4, 7, 0, 0x7c],\n          [5, 8, 0, 0xfd],\n          [6, 2, 6, 0x1],\n          [70, 5, 5, 0x1a],\n          [102, 6, 5, 0x37],\n          [134, 6, 6, 0x38],\n          [198, 6, 7, 0x39],\n          [326, 6, 8, 0x3a],\n          [582, 6, 9, 0x3b],\n          [1094, 6, 10, 0x3c],\n          [2118, 7, 11, 0x7d],\n          [-22, 8, 32, 0xfe, \"lower\"],\n          [4166, 8, 32, 0xff], // upper\n          [2, 0x2], // OOB\n        ];\n        break;\n      case 11:\n        lines = [\n          [1, 1, 0, 0x0],\n          [2, 2, 1, 0x2],\n          [4, 4, 0, 0xc],\n          [5, 4, 1, 0xd],\n          [7, 5, 1, 0x1c],\n          [9, 5, 2, 0x1d],\n          [13, 6, 2, 0x3c],\n          [17, 7, 2, 0x7a],\n          [21, 7, 3, 0x7b],\n          [29, 7, 4, 0x7c],\n          [45, 7, 5, 0x7d],\n          [77, 7, 6, 0x7e],\n          [141, 7, 32, 0x7f], // upper\n        ];\n        break;\n      case 12:\n        lines = [\n          [1, 1, 0, 0x0],\n          [2, 2, 0, 0x2],\n          [3, 3, 1, 0x6],\n          [5, 5, 0, 0x1c],\n          [6, 5, 1, 0x1d],\n          [8, 6, 1, 0x3c],\n          [10, 7, 0, 0x7a],\n          [11, 7, 1, 0x7b],\n          [13, 7, 2, 0x7c],\n          [17, 7, 3, 0x7d],\n          [25, 7, 4, 0x7e],\n          [41, 8, 5, 0xfe],\n          [73, 8, 32, 0xff], // upper\n        ];\n        break;\n      case 13:\n        lines = [\n          [1, 1, 0, 0x0],\n          [2, 3, 0, 0x4],\n          [3, 4, 0, 0xc],\n          [4, 5, 0, 0x1c],\n          [5, 4, 1, 0xd],\n          [7, 3, 3, 0x5],\n          [15, 6, 1, 0x3a],\n          [17, 6, 2, 0x3b],\n          [21, 6, 3, 0x3c],\n          [29, 6, 4, 0x3d],\n          [45, 6, 5, 0x3e],\n          [77, 7, 6, 0x7e],\n          [141, 7, 32, 0x7f], // upper\n        ];\n        break;\n      case 14:\n        lines = [\n          [-2, 3, 0, 0x4],\n          [-1, 3, 0, 0x5],\n          [0, 1, 0, 0x0],\n          [1, 3, 0, 0x6],\n          [2, 3, 0, 0x7],\n        ];\n        break;\n      case 15:\n        lines = [\n          [-24, 7, 4, 0x7c],\n          [-8, 6, 2, 0x3c],\n          [-4, 5, 1, 0x1c],\n          [-2, 4, 0, 0xc],\n          [-1, 3, 0, 0x4],\n          [0, 1, 0, 0x0],\n          [1, 3, 0, 0x5],\n          [2, 4, 0, 0xd],\n          [3, 5, 1, 0x1d],\n          [5, 6, 2, 0x3d],\n          [9, 7, 4, 0x7d],\n          [-25, 7, 32, 0x7e, \"lower\"],\n          [25, 7, 32, 0x7f], // upper\n        ];\n        break;\n      default:\n        throw new Jbig2Error(`standard table B.${number} does not exist`);\n    }\n\n    for (let i = 0, ii = lines.length; i < ii; i++) {\n      lines[i] = new HuffmanLine(lines[i]);\n    }\n    table = new HuffmanTable(lines, true);\n    standardTablesCache[number] = table;\n    return table;\n  }\n\n  function Reader(data, start, end) {\n    this.data = data;\n    this.start = start;\n    this.end = end;\n    this.position = start;\n    this.shift = -1;\n    this.currentByte = 0;\n  }\n\n  Reader.prototype = {\n    readBit() {\n      if (this.shift < 0) {\n        if (this.position >= this.end) {\n          throw new Jbig2Error(\"end of data while reading bit\");\n        }\n        this.currentByte = this.data[this.position++];\n        this.shift = 7;\n      }\n      const bit = (this.currentByte >> this.shift) & 1;\n      this.shift--;\n      return bit;\n    },\n\n    readBits(numBits) {\n      let result = 0,\n        i;\n      for (i = numBits - 1; i >= 0; i--) {\n        result |= this.readBit() << i;\n      }\n      return result;\n    },\n\n    byteAlign() {\n      this.shift = -1;\n    },\n\n    next() {\n      if (this.position >= this.end) {\n        return -1;\n      }\n      return this.data[this.position++];\n    },\n  };\n\n  function getCustomHuffmanTable(index, referredTo, customTables) {\n    // Returns a Tables segment that has been earlier decoded.\n    // See 7.4.2.1.6 (symbol dictionary) or 7.4.3.1.6 (text region).\n    let currentIndex = 0;\n    for (let i = 0, ii = referredTo.length; i < ii; i++) {\n      const table = customTables[referredTo[i]];\n      if (table) {\n        if (index === currentIndex) {\n          return table;\n        }\n        currentIndex++;\n      }\n    }\n    throw new Jbig2Error(\"can't find custom Huffman table\");\n  }\n\n  function getTextRegionHuffmanTables(\n    textRegion,\n    referredTo,\n    customTables,\n    numberOfSymbols,\n    reader\n  ) {\n    // 7.4.3.1.7 Symbol ID Huffman table decoding\n\n    // Read code lengths for RUNCODEs 0...34.\n    const codes = [];\n    for (let i = 0; i <= 34; i++) {\n      const codeLength = reader.readBits(4);\n      codes.push(new HuffmanLine([i, codeLength, 0, 0]));\n    }\n    // Assign Huffman codes for RUNCODEs.\n    const runCodesTable = new HuffmanTable(codes, false);\n\n    // Read a Huffman code using the assignment above.\n    // Interpret the RUNCODE codes and the additional bits (if any).\n    codes.length = 0;\n    for (let i = 0; i < numberOfSymbols; ) {\n      const codeLength = runCodesTable.decode(reader);\n      if (codeLength >= 32) {\n        let repeatedLength, numberOfRepeats, j;\n        switch (codeLength) {\n          case 32:\n            if (i === 0) {\n              throw new Jbig2Error(\"no previous value in symbol ID table\");\n            }\n            numberOfRepeats = reader.readBits(2) + 3;\n            repeatedLength = codes[i - 1].prefixLength;\n            break;\n          case 33:\n            numberOfRepeats = reader.readBits(3) + 3;\n            repeatedLength = 0;\n            break;\n          case 34:\n            numberOfRepeats = reader.readBits(7) + 11;\n            repeatedLength = 0;\n            break;\n          default:\n            throw new Jbig2Error(\"invalid code length in symbol ID table\");\n        }\n        for (j = 0; j < numberOfRepeats; j++) {\n          codes.push(new HuffmanLine([i, repeatedLength, 0, 0]));\n          i++;\n        }\n      } else {\n        codes.push(new HuffmanLine([i, codeLength, 0, 0]));\n        i++;\n      }\n    }\n    reader.byteAlign();\n    const symbolIDTable = new HuffmanTable(codes, false);\n\n    // 7.4.3.1.6 Text region segment Huffman table selection\n\n    let customIndex = 0,\n      tableFirstS,\n      tableDeltaS,\n      tableDeltaT;\n\n    switch (textRegion.huffmanFS) {\n      case 0:\n      case 1:\n        tableFirstS = getStandardTable(textRegion.huffmanFS + 6);\n        break;\n      case 3:\n        tableFirstS = getCustomHuffmanTable(\n          customIndex,\n          referredTo,\n          customTables\n        );\n        customIndex++;\n        break;\n      default:\n        throw new Jbig2Error(\"invalid Huffman FS selector\");\n    }\n\n    switch (textRegion.huffmanDS) {\n      case 0:\n      case 1:\n      case 2:\n        tableDeltaS = getStandardTable(textRegion.huffmanDS + 8);\n        break;\n      case 3:\n        tableDeltaS = getCustomHuffmanTable(\n          customIndex,\n          referredTo,\n          customTables\n        );\n        customIndex++;\n        break;\n      default:\n        throw new Jbig2Error(\"invalid Huffman DS selector\");\n    }\n\n    switch (textRegion.huffmanDT) {\n      case 0:\n      case 1:\n      case 2:\n        tableDeltaT = getStandardTable(textRegion.huffmanDT + 11);\n        break;\n      case 3:\n        tableDeltaT = getCustomHuffmanTable(\n          customIndex,\n          referredTo,\n          customTables\n        );\n        customIndex++;\n        break;\n      default:\n        throw new Jbig2Error(\"invalid Huffman DT selector\");\n    }\n\n    if (textRegion.refinement) {\n      // Load tables RDW, RDH, RDX and RDY.\n      throw new Jbig2Error(\"refinement with Huffman is not supported\");\n    }\n\n    return {\n      symbolIDTable,\n      tableFirstS,\n      tableDeltaS,\n      tableDeltaT,\n    };\n  }\n\n  function getSymbolDictionaryHuffmanTables(\n    dictionary,\n    referredTo,\n    customTables\n  ) {\n    // 7.4.2.1.6 Symbol dictionary segment Huffman table selection\n\n    let customIndex = 0,\n      tableDeltaHeight,\n      tableDeltaWidth;\n    switch (dictionary.huffmanDHSelector) {\n      case 0:\n      case 1:\n        tableDeltaHeight = getStandardTable(dictionary.huffmanDHSelector + 4);\n        break;\n      case 3:\n        tableDeltaHeight = getCustomHuffmanTable(\n          customIndex,\n          referredTo,\n          customTables\n        );\n        customIndex++;\n        break;\n      default:\n        throw new Jbig2Error(\"invalid Huffman DH selector\");\n    }\n\n    switch (dictionary.huffmanDWSelector) {\n      case 0:\n      case 1:\n        tableDeltaWidth = getStandardTable(dictionary.huffmanDWSelector + 2);\n        break;\n      case 3:\n        tableDeltaWidth = getCustomHuffmanTable(\n          customIndex,\n          referredTo,\n          customTables\n        );\n        customIndex++;\n        break;\n      default:\n        throw new Jbig2Error(\"invalid Huffman DW selector\");\n    }\n\n    let tableBitmapSize, tableAggregateInstances;\n    if (dictionary.bitmapSizeSelector) {\n      tableBitmapSize = getCustomHuffmanTable(\n        customIndex,\n        referredTo,\n        customTables\n      );\n      customIndex++;\n    } else {\n      tableBitmapSize = getStandardTable(1);\n    }\n\n    if (dictionary.aggregationInstancesSelector) {\n      tableAggregateInstances = getCustomHuffmanTable(\n        customIndex,\n        referredTo,\n        customTables\n      );\n    } else {\n      tableAggregateInstances = getStandardTable(1);\n    }\n\n    return {\n      tableDeltaHeight,\n      tableDeltaWidth,\n      tableBitmapSize,\n      tableAggregateInstances,\n    };\n  }\n\n  function readUncompressedBitmap(reader, width, height) {\n    const bitmap = [];\n    for (let y = 0; y < height; y++) {\n      const row = new Uint8Array(width);\n      bitmap.push(row);\n      for (let x = 0; x < width; x++) {\n        row[x] = reader.readBit();\n      }\n      reader.byteAlign();\n    }\n    return bitmap;\n  }\n\n  function decodeMMRBitmap(input, width, height, endOfBlock) {\n    // MMR is the same compression algorithm as the PDF filter\n    // CCITTFaxDecode with /K -1.\n    const params = {\n      K: -1,\n      Columns: width,\n      Rows: height,\n      BlackIs1: true,\n      EndOfBlock: endOfBlock,\n    };\n    const decoder = new CCITTFaxDecoder(input, params);\n    const bitmap = [];\n    let currentByte,\n      eof = false;\n\n    for (let y = 0; y < height; y++) {\n      const row = new Uint8Array(width);\n      bitmap.push(row);\n      let shift = -1;\n      for (let x = 0; x < width; x++) {\n        if (shift < 0) {\n          currentByte = decoder.readNextChar();\n          if (currentByte === -1) {\n            // Set the rest of the bits to zero.\n            currentByte = 0;\n            eof = true;\n          }\n          shift = 7;\n        }\n        row[x] = (currentByte >> shift) & 1;\n        shift--;\n      }\n    }\n\n    if (endOfBlock && !eof) {\n      // Read until EOFB has been consumed.\n      const lookForEOFLimit = 5;\n      for (let i = 0; i < lookForEOFLimit; i++) {\n        if (decoder.readNextChar() === -1) {\n          break;\n        }\n      }\n    }\n\n    return bitmap;\n  }\n\n  // eslint-disable-next-line no-shadow\n  function Jbig2Image() {}\n\n  Jbig2Image.prototype = {\n    parseChunks(chunks) {\n      return parseJbig2Chunks(chunks);\n    },\n\n    parse(data) {\n      const { imgData, width, height } = parseJbig2(data);\n      this.width = width;\n      this.height = height;\n      return imgData;\n    },\n  };\n\n  return Jbig2Image;\n})();\n\nexport { Jbig2Image };\n","/* Copyright 2019 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* eslint no-var: error */\n\nimport { assert, BaseException, warn } from \"../shared/util.js\";\n\nfunction getLookupTableFactory(initializer) {\n  let lookup;\n  return function () {\n    if (initializer) {\n      lookup = Object.create(null);\n      initializer(lookup);\n      initializer = null;\n    }\n    return lookup;\n  };\n}\n\nclass MissingDataException extends BaseException {\n  constructor(begin, end) {\n    super(`Missing data [${begin}, ${end})`);\n    this.begin = begin;\n    this.end = end;\n  }\n}\n\nclass XRefEntryException extends BaseException {}\n\nclass XRefParseException extends BaseException {}\n\n/**\n * Get the value of an inheritable property.\n *\n * If the PDF specification explicitly lists a property in a dictionary as\n * inheritable, then the value of the property may be present in the dictionary\n * itself or in one or more parents of the dictionary.\n *\n * If the key is not found in the tree, `undefined` is returned. Otherwise,\n * the value for the key is returned or, if `stopWhenFound` is `false`, a list\n * of values is returned. To avoid infinite loops, the traversal is stopped when\n * the loop limit is reached.\n *\n * @param {Dict} dict - Dictionary from where to start the traversal.\n * @param {string} key - The key of the property to find the value for.\n * @param {boolean} getArray - Whether or not the value should be fetched as an\n *   array. The default value is `false`.\n * @param {boolean} stopWhenFound - Whether or not to stop the traversal when\n *   the key is found. If set to `false`, we always walk up the entire parent\n *   chain, for example to be able to find `\\Resources` placed on multiple\n *   levels of the tree. The default value is `true`.\n */\nfunction getInheritableProperty({\n  dict,\n  key,\n  getArray = false,\n  stopWhenFound = true,\n}) {\n  const LOOP_LIMIT = 100;\n  let loopCount = 0;\n  let values;\n\n  while (dict) {\n    const value = getArray ? dict.getArray(key) : dict.get(key);\n    if (value !== undefined) {\n      if (stopWhenFound) {\n        return value;\n      }\n      if (!values) {\n        values = [];\n      }\n      values.push(value);\n    }\n    if (++loopCount > LOOP_LIMIT) {\n      warn(`getInheritableProperty: maximum loop count exceeded for \"${key}\"`);\n      break;\n    }\n    dict = dict.get(\"Parent\");\n  }\n  return values;\n}\n\n// prettier-ignore\nconst ROMAN_NUMBER_MAP = [\n  \"\", \"C\", \"CC\", \"CCC\", \"CD\", \"D\", \"DC\", \"DCC\", \"DCCC\", \"CM\",\n  \"\", \"X\", \"XX\", \"XXX\", \"XL\", \"L\", \"LX\", \"LXX\", \"LXXX\", \"XC\",\n  \"\", \"I\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"VII\", \"VIII\", \"IX\"\n];\n\n/**\n * Converts positive integers to (upper case) Roman numerals.\n * @param {number} number - The number that should be converted.\n * @param {boolean} lowerCase - Indicates if the result should be converted\n *   to lower case letters. The default value is `false`.\n * @returns {string} The resulting Roman number.\n */\nfunction toRomanNumerals(number, lowerCase = false) {\n  assert(\n    Number.isInteger(number) && number > 0,\n    \"The number should be a positive integer.\"\n  );\n  const romanBuf = [];\n  let pos;\n  // Thousands\n  while (number >= 1000) {\n    number -= 1000;\n    romanBuf.push(\"M\");\n  }\n  // Hundreds\n  pos = (number / 100) | 0;\n  number %= 100;\n  romanBuf.push(ROMAN_NUMBER_MAP[pos]);\n  // Tens\n  pos = (number / 10) | 0;\n  number %= 10;\n  romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]);\n  // Ones\n  romanBuf.push(ROMAN_NUMBER_MAP[20 + number]);\n\n  const romanStr = romanBuf.join(\"\");\n  return lowerCase ? romanStr.toLowerCase() : romanStr;\n}\n\n// Calculate the base 2 logarithm of the number `x`. This differs from the\n// native function in the sense that it returns the ceiling value and that it\n// returns 0 instead of `Infinity`/`NaN` for `x` values smaller than/equal to 0.\nfunction log2(x) {\n  if (x <= 0) {\n    return 0;\n  }\n  return Math.ceil(Math.log2(x));\n}\n\nfunction readInt8(data, offset) {\n  return (data[offset] << 24) >> 24;\n}\n\nfunction readUint16(data, offset) {\n  return (data[offset] << 8) | data[offset + 1];\n}\n\nfunction readUint32(data, offset) {\n  return (\n    ((data[offset] << 24) |\n      (data[offset + 1] << 16) |\n      (data[offset + 2] << 8) |\n      data[offset + 3]) >>>\n    0\n  );\n}\n\n// Checks if ch is one of the following characters: SPACE, TAB, CR or LF.\nfunction isWhiteSpace(ch) {\n  return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a;\n}\n\nexport {\n  getLookupTableFactory,\n  MissingDataException,\n  XRefEntryException,\n  XRefParseException,\n  getInheritableProperty,\n  toRomanNumerals,\n  log2,\n  readInt8,\n  readUint16,\n  readUint32,\n  isWhiteSpace,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* eslint no-var: error */\n\n// Table C-2\nconst QeTable = [\n  { qe: 0x5601, nmps: 1, nlps: 1, switchFlag: 1 },\n  { qe: 0x3401, nmps: 2, nlps: 6, switchFlag: 0 },\n  { qe: 0x1801, nmps: 3, nlps: 9, switchFlag: 0 },\n  { qe: 0x0ac1, nmps: 4, nlps: 12, switchFlag: 0 },\n  { qe: 0x0521, nmps: 5, nlps: 29, switchFlag: 0 },\n  { qe: 0x0221, nmps: 38, nlps: 33, switchFlag: 0 },\n  { qe: 0x5601, nmps: 7, nlps: 6, switchFlag: 1 },\n  { qe: 0x5401, nmps: 8, nlps: 14, switchFlag: 0 },\n  { qe: 0x4801, nmps: 9, nlps: 14, switchFlag: 0 },\n  { qe: 0x3801, nmps: 10, nlps: 14, switchFlag: 0 },\n  { qe: 0x3001, nmps: 11, nlps: 17, switchFlag: 0 },\n  { qe: 0x2401, nmps: 12, nlps: 18, switchFlag: 0 },\n  { qe: 0x1c01, nmps: 13, nlps: 20, switchFlag: 0 },\n  { qe: 0x1601, nmps: 29, nlps: 21, switchFlag: 0 },\n  { qe: 0x5601, nmps: 15, nlps: 14, switchFlag: 1 },\n  { qe: 0x5401, nmps: 16, nlps: 14, switchFlag: 0 },\n  { qe: 0x5101, nmps: 17, nlps: 15, switchFlag: 0 },\n  { qe: 0x4801, nmps: 18, nlps: 16, switchFlag: 0 },\n  { qe: 0x3801, nmps: 19, nlps: 17, switchFlag: 0 },\n  { qe: 0x3401, nmps: 20, nlps: 18, switchFlag: 0 },\n  { qe: 0x3001, nmps: 21, nlps: 19, switchFlag: 0 },\n  { qe: 0x2801, nmps: 22, nlps: 19, switchFlag: 0 },\n  { qe: 0x2401, nmps: 23, nlps: 20, switchFlag: 0 },\n  { qe: 0x2201, nmps: 24, nlps: 21, switchFlag: 0 },\n  { qe: 0x1c01, nmps: 25, nlps: 22, switchFlag: 0 },\n  { qe: 0x1801, nmps: 26, nlps: 23, switchFlag: 0 },\n  { qe: 0x1601, nmps: 27, nlps: 24, switchFlag: 0 },\n  { qe: 0x1401, nmps: 28, nlps: 25, switchFlag: 0 },\n  { qe: 0x1201, nmps: 29, nlps: 26, switchFlag: 0 },\n  { qe: 0x1101, nmps: 30, nlps: 27, switchFlag: 0 },\n  { qe: 0x0ac1, nmps: 31, nlps: 28, switchFlag: 0 },\n  { qe: 0x09c1, nmps: 32, nlps: 29, switchFlag: 0 },\n  { qe: 0x08a1, nmps: 33, nlps: 30, switchFlag: 0 },\n  { qe: 0x0521, nmps: 34, nlps: 31, switchFlag: 0 },\n  { qe: 0x0441, nmps: 35, nlps: 32, switchFlag: 0 },\n  { qe: 0x02a1, nmps: 36, nlps: 33, switchFlag: 0 },\n  { qe: 0x0221, nmps: 37, nlps: 34, switchFlag: 0 },\n  { qe: 0x0141, nmps: 38, nlps: 35, switchFlag: 0 },\n  { qe: 0x0111, nmps: 39, nlps: 36, switchFlag: 0 },\n  { qe: 0x0085, nmps: 40, nlps: 37, switchFlag: 0 },\n  { qe: 0x0049, nmps: 41, nlps: 38, switchFlag: 0 },\n  { qe: 0x0025, nmps: 42, nlps: 39, switchFlag: 0 },\n  { qe: 0x0015, nmps: 43, nlps: 40, switchFlag: 0 },\n  { qe: 0x0009, nmps: 44, nlps: 41, switchFlag: 0 },\n  { qe: 0x0005, nmps: 45, nlps: 42, switchFlag: 0 },\n  { qe: 0x0001, nmps: 45, nlps: 43, switchFlag: 0 },\n  { qe: 0x5601, nmps: 46, nlps: 46, switchFlag: 0 },\n];\n\n/**\n * This class implements the QM Coder decoding as defined in\n *   JPEG 2000 Part I Final Committee Draft Version 1.0\n *   Annex C.3 Arithmetic decoding procedure\n * available at http://www.jpeg.org/public/fcd15444-1.pdf\n *\n * The arithmetic decoder is used in conjunction with context models to decode\n * JPEG2000 and JBIG2 streams.\n */\nclass ArithmeticDecoder {\n  // C.3.5 Initialisation of the decoder (INITDEC)\n  constructor(data, start, end) {\n    this.data = data;\n    this.bp = start;\n    this.dataEnd = end;\n\n    this.chigh = data[start];\n    this.clow = 0;\n\n    this.byteIn();\n\n    this.chigh = ((this.chigh << 7) & 0xffff) | ((this.clow >> 9) & 0x7f);\n    this.clow = (this.clow << 7) & 0xffff;\n    this.ct -= 7;\n    this.a = 0x8000;\n  }\n\n  // C.3.4 Compressed data input (BYTEIN)\n  byteIn() {\n    const data = this.data;\n    let bp = this.bp;\n\n    if (data[bp] === 0xff) {\n      if (data[bp + 1] > 0x8f) {\n        this.clow += 0xff00;\n        this.ct = 8;\n      } else {\n        bp++;\n        this.clow += data[bp] << 9;\n        this.ct = 7;\n        this.bp = bp;\n      }\n    } else {\n      bp++;\n      this.clow += bp < this.dataEnd ? data[bp] << 8 : 0xff00;\n      this.ct = 8;\n      this.bp = bp;\n    }\n    if (this.clow > 0xffff) {\n      this.chigh += this.clow >> 16;\n      this.clow &= 0xffff;\n    }\n  }\n\n  // C.3.2 Decoding a decision (DECODE)\n  readBit(contexts, pos) {\n    // Contexts are packed into 1 byte:\n    // highest 7 bits carry cx.index, lowest bit carries cx.mps\n    let cx_index = contexts[pos] >> 1,\n      cx_mps = contexts[pos] & 1;\n    const qeTableIcx = QeTable[cx_index];\n    const qeIcx = qeTableIcx.qe;\n    let d;\n    let a = this.a - qeIcx;\n\n    if (this.chigh < qeIcx) {\n      // exchangeLps\n      if (a < qeIcx) {\n        a = qeIcx;\n        d = cx_mps;\n        cx_index = qeTableIcx.nmps;\n      } else {\n        a = qeIcx;\n        d = 1 ^ cx_mps;\n        if (qeTableIcx.switchFlag === 1) {\n          cx_mps = d;\n        }\n        cx_index = qeTableIcx.nlps;\n      }\n    } else {\n      this.chigh -= qeIcx;\n      if ((a & 0x8000) !== 0) {\n        this.a = a;\n        return cx_mps;\n      }\n      // exchangeMps\n      if (a < qeIcx) {\n        d = 1 ^ cx_mps;\n        if (qeTableIcx.switchFlag === 1) {\n          cx_mps = d;\n        }\n        cx_index = qeTableIcx.nlps;\n      } else {\n        d = cx_mps;\n        cx_index = qeTableIcx.nmps;\n      }\n    }\n    // C.3.3 renormD;\n    do {\n      if (this.ct === 0) {\n        this.byteIn();\n      }\n\n      a <<= 1;\n      this.chigh = ((this.chigh << 1) & 0xffff) | ((this.clow >> 15) & 1);\n      this.clow = (this.clow << 1) & 0xffff;\n      this.ct--;\n    } while ((a & 0x8000) === 0);\n    this.a = a;\n\n    contexts[pos] = (cx_index << 1) | cx_mps;\n    return d;\n  }\n}\n\nexport { ArithmeticDecoder };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* Copyright 1996-2003 Glyph & Cog, LLC\n *\n * The CCITT stream implementation contained in this file is a JavaScript port\n * of XPDF's implementation, made available under the Apache 2.0 open source\n * license.\n */\n\n/**\n * @typedef {Object} CCITTFaxDecoderSource\n * @property {function} next - Method that return one byte of data for decoding,\n *   or -1 when EOF is reached.\n */\n\nimport { info } from \"../shared/util.js\";\n\nconst CCITTFaxDecoder = (function CCITTFaxDecoder() {\n  const ccittEOL = -2;\n  const ccittEOF = -1;\n  const twoDimPass = 0;\n  const twoDimHoriz = 1;\n  const twoDimVert0 = 2;\n  const twoDimVertR1 = 3;\n  const twoDimVertL1 = 4;\n  const twoDimVertR2 = 5;\n  const twoDimVertL2 = 6;\n  const twoDimVertR3 = 7;\n  const twoDimVertL3 = 8;\n\n  // prettier-ignore\n  const twoDimTable = [\n    [-1, -1], [-1, -1],                   // 000000x\n    [7, twoDimVertL3],                    // 0000010\n    [7, twoDimVertR3],                    // 0000011\n    [6, twoDimVertL2], [6, twoDimVertL2], // 000010x\n    [6, twoDimVertR2], [6, twoDimVertR2], // 000011x\n    [4, twoDimPass], [4, twoDimPass],     // 0001xxx\n    [4, twoDimPass], [4, twoDimPass],\n    [4, twoDimPass], [4, twoDimPass],\n    [4, twoDimPass], [4, twoDimPass],\n    [3, twoDimHoriz], [3, twoDimHoriz],   // 001xxxx\n    [3, twoDimHoriz], [3, twoDimHoriz],\n    [3, twoDimHoriz], [3, twoDimHoriz],\n    [3, twoDimHoriz], [3, twoDimHoriz],\n    [3, twoDimHoriz], [3, twoDimHoriz],\n    [3, twoDimHoriz], [3, twoDimHoriz],\n    [3, twoDimHoriz], [3, twoDimHoriz],\n    [3, twoDimHoriz], [3, twoDimHoriz],\n    [3, twoDimVertL1], [3, twoDimVertL1], // 010xxxx\n    [3, twoDimVertL1], [3, twoDimVertL1],\n    [3, twoDimVertL1], [3, twoDimVertL1],\n    [3, twoDimVertL1], [3, twoDimVertL1],\n    [3, twoDimVertL1], [3, twoDimVertL1],\n    [3, twoDimVertL1], [3, twoDimVertL1],\n    [3, twoDimVertL1], [3, twoDimVertL1],\n    [3, twoDimVertL1], [3, twoDimVertL1],\n    [3, twoDimVertR1], [3, twoDimVertR1], // 011xxxx\n    [3, twoDimVertR1], [3, twoDimVertR1],\n    [3, twoDimVertR1], [3, twoDimVertR1],\n    [3, twoDimVertR1], [3, twoDimVertR1],\n    [3, twoDimVertR1], [3, twoDimVertR1],\n    [3, twoDimVertR1], [3, twoDimVertR1],\n    [3, twoDimVertR1], [3, twoDimVertR1],\n    [3, twoDimVertR1], [3, twoDimVertR1],\n    [1, twoDimVert0], [1, twoDimVert0],   // 1xxxxxx\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0],\n    [1, twoDimVert0], [1, twoDimVert0]\n  ];\n\n  // prettier-ignore\n  const whiteTable1 = [\n    [-1, -1],                               // 00000\n    [12, ccittEOL],                         // 00001\n    [-1, -1], [-1, -1],                     // 0001x\n    [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 001xx\n    [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 010xx\n    [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 011xx\n    [11, 1792], [11, 1792],                 // 1000x\n    [12, 1984],                             // 10010\n    [12, 2048],                             // 10011\n    [12, 2112],                             // 10100\n    [12, 2176],                             // 10101\n    [12, 2240],                             // 10110\n    [12, 2304],                             // 10111\n    [11, 1856], [11, 1856],                 // 1100x\n    [11, 1920], [11, 1920],                 // 1101x\n    [12, 2368],                             // 11100\n    [12, 2432],                             // 11101\n    [12, 2496],                             // 11110\n    [12, 2560]                              // 11111\n  ];\n\n  // prettier-ignore\n  const whiteTable2 = [\n    [-1, -1], [-1, -1], [-1, -1], [-1, -1],     // 0000000xx\n    [8, 29], [8, 29],                           // 00000010x\n    [8, 30], [8, 30],                           // 00000011x\n    [8, 45], [8, 45],                           // 00000100x\n    [8, 46], [8, 46],                           // 00000101x\n    [7, 22], [7, 22], [7, 22], [7, 22],         // 0000011xx\n    [7, 23], [7, 23], [7, 23], [7, 23],         // 0000100xx\n    [8, 47], [8, 47],                           // 00001010x\n    [8, 48], [8, 48],                           // 00001011x\n    [6, 13], [6, 13], [6, 13], [6, 13],         // 000011xxx\n    [6, 13], [6, 13], [6, 13], [6, 13],\n    [7, 20], [7, 20], [7, 20], [7, 20],         // 0001000xx\n    [8, 33], [8, 33],                           // 00010010x\n    [8, 34], [8, 34],                           // 00010011x\n    [8, 35], [8, 35],                           // 00010100x\n    [8, 36], [8, 36],                           // 00010101x\n    [8, 37], [8, 37],                           // 00010110x\n    [8, 38], [8, 38],                           // 00010111x\n    [7, 19], [7, 19], [7, 19], [7, 19],         // 0001100xx\n    [8, 31], [8, 31],                           // 00011010x\n    [8, 32], [8, 32],                           // 00011011x\n    [6, 1], [6, 1], [6, 1], [6, 1],             // 000111xxx\n    [6, 1], [6, 1], [6, 1], [6, 1],\n    [6, 12], [6, 12], [6, 12], [6, 12],         // 001000xxx\n    [6, 12], [6, 12], [6, 12], [6, 12],\n    [8, 53], [8, 53],                           // 00100100x\n    [8, 54], [8, 54],                           // 00100101x\n    [7, 26], [7, 26], [7, 26], [7, 26],         // 0010011xx\n    [8, 39], [8, 39],                           // 00101000x\n    [8, 40], [8, 40],                           // 00101001x\n    [8, 41], [8, 41],                           // 00101010x\n    [8, 42], [8, 42],                           // 00101011x\n    [8, 43], [8, 43],                           // 00101100x\n    [8, 44], [8, 44],                           // 00101101x\n    [7, 21], [7, 21], [7, 21], [7, 21],         // 0010111xx\n    [7, 28], [7, 28], [7, 28], [7, 28],         // 0011000xx\n    [8, 61], [8, 61],                           // 00110010x\n    [8, 62], [8, 62],                           // 00110011x\n    [8, 63], [8, 63],                           // 00110100x\n    [8, 0], [8, 0],                             // 00110101x\n    [8, 320], [8, 320],                         // 00110110x\n    [8, 384], [8, 384],                         // 00110111x\n    [5, 10], [5, 10], [5, 10], [5, 10],         // 00111xxxx\n    [5, 10], [5, 10], [5, 10], [5, 10],\n    [5, 10], [5, 10], [5, 10], [5, 10],\n    [5, 10], [5, 10], [5, 10], [5, 10],\n    [5, 11], [5, 11], [5, 11], [5, 11],         // 01000xxxx\n    [5, 11], [5, 11], [5, 11], [5, 11],\n    [5, 11], [5, 11], [5, 11], [5, 11],\n    [5, 11], [5, 11], [5, 11], [5, 11],\n    [7, 27], [7, 27], [7, 27], [7, 27],         // 0100100xx\n    [8, 59], [8, 59],                           // 01001010x\n    [8, 60], [8, 60],                           // 01001011x\n    [9, 1472],                                  // 010011000\n    [9, 1536],                                  // 010011001\n    [9, 1600],                                  // 010011010\n    [9, 1728],                                  // 010011011\n    [7, 18], [7, 18], [7, 18], [7, 18],         // 0100111xx\n    [7, 24], [7, 24], [7, 24], [7, 24],         // 0101000xx\n    [8, 49], [8, 49],                           // 01010010x\n    [8, 50], [8, 50],                           // 01010011x\n    [8, 51], [8, 51],                           // 01010100x\n    [8, 52], [8, 52],                           // 01010101x\n    [7, 25], [7, 25], [7, 25], [7, 25],         // 0101011xx\n    [8, 55], [8, 55],                           // 01011000x\n    [8, 56], [8, 56],                           // 01011001x\n    [8, 57], [8, 57],                           // 01011010x\n    [8, 58], [8, 58],                           // 01011011x\n    [6, 192], [6, 192], [6, 192], [6, 192],     // 010111xxx\n    [6, 192], [6, 192], [6, 192], [6, 192],\n    [6, 1664], [6, 1664], [6, 1664], [6, 1664], // 011000xxx\n    [6, 1664], [6, 1664], [6, 1664], [6, 1664],\n    [8, 448], [8, 448],                         // 01100100x\n    [8, 512], [8, 512],                         // 01100101x\n    [9, 704],                                   // 011001100\n    [9, 768],                                   // 011001101\n    [8, 640], [8, 640],                         // 01100111x\n    [8, 576], [8, 576],                         // 01101000x\n    [9, 832],                                   // 011010010\n    [9, 896],                                   // 011010011\n    [9, 960],                                   // 011010100\n    [9, 1024],                                  // 011010101\n    [9, 1088],                                  // 011010110\n    [9, 1152],                                  // 011010111\n    [9, 1216],                                  // 011011000\n    [9, 1280],                                  // 011011001\n    [9, 1344],                                  // 011011010\n    [9, 1408],                                  // 011011011\n    [7, 256], [7, 256], [7, 256], [7, 256],     // 0110111xx\n    [4, 2], [4, 2], [4, 2], [4, 2],             // 0111xxxxx\n    [4, 2], [4, 2], [4, 2], [4, 2],\n    [4, 2], [4, 2], [4, 2], [4, 2],\n    [4, 2], [4, 2], [4, 2], [4, 2],\n    [4, 2], [4, 2], [4, 2], [4, 2],\n    [4, 2], [4, 2], [4, 2], [4, 2],\n    [4, 2], [4, 2], [4, 2], [4, 2],\n    [4, 2], [4, 2], [4, 2], [4, 2],\n    [4, 3], [4, 3], [4, 3], [4, 3],             // 1000xxxxx\n    [4, 3], [4, 3], [4, 3], [4, 3],\n    [4, 3], [4, 3], [4, 3], [4, 3],\n    [4, 3], [4, 3], [4, 3], [4, 3],\n    [4, 3], [4, 3], [4, 3], [4, 3],\n    [4, 3], [4, 3], [4, 3], [4, 3],\n    [4, 3], [4, 3], [4, 3], [4, 3],\n    [4, 3], [4, 3], [4, 3], [4, 3],\n    [5, 128], [5, 128], [5, 128], [5, 128],     // 10010xxxx\n    [5, 128], [5, 128], [5, 128], [5, 128],\n    [5, 128], [5, 128], [5, 128], [5, 128],\n    [5, 128], [5, 128], [5, 128], [5, 128],\n    [5, 8], [5, 8], [5, 8], [5, 8],             // 10011xxxx\n    [5, 8], [5, 8], [5, 8], [5, 8],\n    [5, 8], [5, 8], [5, 8], [5, 8],\n    [5, 8], [5, 8], [5, 8], [5, 8],\n    [5, 9], [5, 9], [5, 9], [5, 9],             // 10100xxxx\n    [5, 9], [5, 9], [5, 9], [5, 9],\n    [5, 9], [5, 9], [5, 9], [5, 9],\n    [5, 9], [5, 9], [5, 9], [5, 9],\n    [6, 16], [6, 16], [6, 16], [6, 16],         // 101010xxx\n    [6, 16], [6, 16], [6, 16], [6, 16],\n    [6, 17], [6, 17], [6, 17], [6, 17],         // 101011xxx\n    [6, 17], [6, 17], [6, 17], [6, 17],\n    [4, 4], [4, 4], [4, 4], [4, 4],             // 1011xxxxx\n    [4, 4], [4, 4], [4, 4], [4, 4],\n    [4, 4], [4, 4], [4, 4], [4, 4],\n    [4, 4], [4, 4], [4, 4], [4, 4],\n    [4, 4], [4, 4], [4, 4], [4, 4],\n    [4, 4], [4, 4], [4, 4], [4, 4],\n    [4, 4], [4, 4], [4, 4], [4, 4],\n    [4, 4], [4, 4], [4, 4], [4, 4],\n    [4, 5], [4, 5], [4, 5], [4, 5],             // 1100xxxxx\n    [4, 5], [4, 5], [4, 5], [4, 5],\n    [4, 5], [4, 5], [4, 5], [4, 5],\n    [4, 5], [4, 5], [4, 5], [4, 5],\n    [4, 5], [4, 5], [4, 5], [4, 5],\n    [4, 5], [4, 5], [4, 5], [4, 5],\n    [4, 5], [4, 5], [4, 5], [4, 5],\n    [4, 5], [4, 5], [4, 5], [4, 5],\n    [6, 14], [6, 14], [6, 14], [6, 14],         // 110100xxx\n    [6, 14], [6, 14], [6, 14], [6, 14],\n    [6, 15], [6, 15], [6, 15], [6, 15],         // 110101xxx\n    [6, 15], [6, 15], [6, 15], [6, 15],\n    [5, 64], [5, 64], [5, 64], [5, 64],         // 11011xxxx\n    [5, 64], [5, 64], [5, 64], [5, 64],\n    [5, 64], [5, 64], [5, 64], [5, 64],\n    [5, 64], [5, 64], [5, 64], [5, 64],\n    [4, 6], [4, 6], [4, 6], [4, 6],             // 1110xxxxx\n    [4, 6], [4, 6], [4, 6], [4, 6],\n    [4, 6], [4, 6], [4, 6], [4, 6],\n    [4, 6], [4, 6], [4, 6], [4, 6],\n    [4, 6], [4, 6], [4, 6], [4, 6],\n    [4, 6], [4, 6], [4, 6], [4, 6],\n    [4, 6], [4, 6], [4, 6], [4, 6],\n    [4, 6], [4, 6], [4, 6], [4, 6],\n    [4, 7], [4, 7], [4, 7], [4, 7],             // 1111xxxxx\n    [4, 7], [4, 7], [4, 7], [4, 7],\n    [4, 7], [4, 7], [4, 7], [4, 7],\n    [4, 7], [4, 7], [4, 7], [4, 7],\n    [4, 7], [4, 7], [4, 7], [4, 7],\n    [4, 7], [4, 7], [4, 7], [4, 7],\n    [4, 7], [4, 7], [4, 7], [4, 7],\n    [4, 7], [4, 7], [4, 7], [4, 7]\n  ];\n\n  // prettier-ignore\n  const blackTable1 = [\n    [-1, -1], [-1, -1],                             // 000000000000x\n    [12, ccittEOL], [12, ccittEOL],                 // 000000000001x\n    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000001xx\n    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000010xx\n    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000011xx\n    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000100xx\n    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000101xx\n    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000110xx\n    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000111xx\n    [11, 1792], [11, 1792], [11, 1792], [11, 1792], // 00000001000xx\n    [12, 1984], [12, 1984],                         // 000000010010x\n    [12, 2048], [12, 2048],                         // 000000010011x\n    [12, 2112], [12, 2112],                         // 000000010100x\n    [12, 2176], [12, 2176],                         // 000000010101x\n    [12, 2240], [12, 2240],                         // 000000010110x\n    [12, 2304], [12, 2304],                         // 000000010111x\n    [11, 1856], [11, 1856], [11, 1856], [11, 1856], // 00000001100xx\n    [11, 1920], [11, 1920], [11, 1920], [11, 1920], // 00000001101xx\n    [12, 2368], [12, 2368],                         // 000000011100x\n    [12, 2432], [12, 2432],                         // 000000011101x\n    [12, 2496], [12, 2496],                         // 000000011110x\n    [12, 2560], [12, 2560],                         // 000000011111x\n    [10, 18], [10, 18], [10, 18], [10, 18],         // 0000001000xxx\n    [10, 18], [10, 18], [10, 18], [10, 18],\n    [12, 52], [12, 52],                             // 000000100100x\n    [13, 640],                                      // 0000001001010\n    [13, 704],                                      // 0000001001011\n    [13, 768],                                      // 0000001001100\n    [13, 832],                                      // 0000001001101\n    [12, 55], [12, 55],                             // 000000100111x\n    [12, 56], [12, 56],                             // 000000101000x\n    [13, 1280],                                     // 0000001010010\n    [13, 1344],                                     // 0000001010011\n    [13, 1408],                                     // 0000001010100\n    [13, 1472],                                     // 0000001010101\n    [12, 59], [12, 59],                             // 000000101011x\n    [12, 60], [12, 60],                             // 000000101100x\n    [13, 1536],                                     // 0000001011010\n    [13, 1600],                                     // 0000001011011\n    [11, 24], [11, 24], [11, 24], [11, 24],         // 00000010111xx\n    [11, 25], [11, 25], [11, 25], [11, 25],         // 00000011000xx\n    [13, 1664],                                     // 0000001100100\n    [13, 1728],                                     // 0000001100101\n    [12, 320], [12, 320],                           // 000000110011x\n    [12, 384], [12, 384],                           // 000000110100x\n    [12, 448], [12, 448],                           // 000000110101x\n    [13, 512],                                      // 0000001101100\n    [13, 576],                                      // 0000001101101\n    [12, 53], [12, 53],                             // 000000110111x\n    [12, 54], [12, 54],                             // 000000111000x\n    [13, 896],                                      // 0000001110010\n    [13, 960],                                      // 0000001110011\n    [13, 1024],                                     // 0000001110100\n    [13, 1088],                                     // 0000001110101\n    [13, 1152],                                     // 0000001110110\n    [13, 1216],                                     // 0000001110111\n    [10, 64], [10, 64], [10, 64], [10, 64],         // 0000001111xxx\n    [10, 64], [10, 64], [10, 64], [10, 64]\n  ];\n\n  // prettier-ignore\n  const blackTable2 = [\n    [8, 13], [8, 13], [8, 13], [8, 13],     // 00000100xxxx\n    [8, 13], [8, 13], [8, 13], [8, 13],\n    [8, 13], [8, 13], [8, 13], [8, 13],\n    [8, 13], [8, 13], [8, 13], [8, 13],\n    [11, 23], [11, 23],                     // 00000101000x\n    [12, 50],                               // 000001010010\n    [12, 51],                               // 000001010011\n    [12, 44],                               // 000001010100\n    [12, 45],                               // 000001010101\n    [12, 46],                               // 000001010110\n    [12, 47],                               // 000001010111\n    [12, 57],                               // 000001011000\n    [12, 58],                               // 000001011001\n    [12, 61],                               // 000001011010\n    [12, 256],                              // 000001011011\n    [10, 16], [10, 16], [10, 16], [10, 16], // 0000010111xx\n    [10, 17], [10, 17], [10, 17], [10, 17], // 0000011000xx\n    [12, 48],                               // 000001100100\n    [12, 49],                               // 000001100101\n    [12, 62],                               // 000001100110\n    [12, 63],                               // 000001100111\n    [12, 30],                               // 000001101000\n    [12, 31],                               // 000001101001\n    [12, 32],                               // 000001101010\n    [12, 33],                               // 000001101011\n    [12, 40],                               // 000001101100\n    [12, 41],                               // 000001101101\n    [11, 22], [11, 22],                     // 00000110111x\n    [8, 14], [8, 14], [8, 14], [8, 14],     // 00000111xxxx\n    [8, 14], [8, 14], [8, 14], [8, 14],\n    [8, 14], [8, 14], [8, 14], [8, 14],\n    [8, 14], [8, 14], [8, 14], [8, 14],\n    [7, 10], [7, 10], [7, 10], [7, 10],     // 0000100xxxxx\n    [7, 10], [7, 10], [7, 10], [7, 10],\n    [7, 10], [7, 10], [7, 10], [7, 10],\n    [7, 10], [7, 10], [7, 10], [7, 10],\n    [7, 10], [7, 10], [7, 10], [7, 10],\n    [7, 10], [7, 10], [7, 10], [7, 10],\n    [7, 10], [7, 10], [7, 10], [7, 10],\n    [7, 10], [7, 10], [7, 10], [7, 10],\n    [7, 11], [7, 11], [7, 11], [7, 11],     // 0000101xxxxx\n    [7, 11], [7, 11], [7, 11], [7, 11],\n    [7, 11], [7, 11], [7, 11], [7, 11],\n    [7, 11], [7, 11], [7, 11], [7, 11],\n    [7, 11], [7, 11], [7, 11], [7, 11],\n    [7, 11], [7, 11], [7, 11], [7, 11],\n    [7, 11], [7, 11], [7, 11], [7, 11],\n    [7, 11], [7, 11], [7, 11], [7, 11],\n    [9, 15], [9, 15], [9, 15], [9, 15],     // 000011000xxx\n    [9, 15], [9, 15], [9, 15], [9, 15],\n    [12, 128],                              // 000011001000\n    [12, 192],                              // 000011001001\n    [12, 26],                               // 000011001010\n    [12, 27],                               // 000011001011\n    [12, 28],                               // 000011001100\n    [12, 29],                               // 000011001101\n    [11, 19], [11, 19],                     // 00001100111x\n    [11, 20], [11, 20],                     // 00001101000x\n    [12, 34],                               // 000011010010\n    [12, 35],                               // 000011010011\n    [12, 36],                               // 000011010100\n    [12, 37],                               // 000011010101\n    [12, 38],                               // 000011010110\n    [12, 39],                               // 000011010111\n    [11, 21], [11, 21],                     // 00001101100x\n    [12, 42],                               // 000011011010\n    [12, 43],                               // 000011011011\n    [10, 0], [10, 0], [10, 0], [10, 0],     // 0000110111xx\n    [7, 12], [7, 12], [7, 12], [7, 12],     // 0000111xxxxx\n    [7, 12], [7, 12], [7, 12], [7, 12],\n    [7, 12], [7, 12], [7, 12], [7, 12],\n    [7, 12], [7, 12], [7, 12], [7, 12],\n    [7, 12], [7, 12], [7, 12], [7, 12],\n    [7, 12], [7, 12], [7, 12], [7, 12],\n    [7, 12], [7, 12], [7, 12], [7, 12],\n    [7, 12], [7, 12], [7, 12], [7, 12]\n  ];\n\n  // prettier-ignore\n  const blackTable3 = [\n    [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 0000xx\n    [6, 9],                                 // 000100\n    [6, 8],                                 // 000101\n    [5, 7], [5, 7],                         // 00011x\n    [4, 6], [4, 6], [4, 6], [4, 6],         // 0010xx\n    [4, 5], [4, 5], [4, 5], [4, 5],         // 0011xx\n    [3, 1], [3, 1], [3, 1], [3, 1],         // 010xxx\n    [3, 1], [3, 1], [3, 1], [3, 1],\n    [3, 4], [3, 4], [3, 4], [3, 4],         // 011xxx\n    [3, 4], [3, 4], [3, 4], [3, 4],\n    [2, 3], [2, 3], [2, 3], [2, 3],         // 10xxxx\n    [2, 3], [2, 3], [2, 3], [2, 3],\n    [2, 3], [2, 3], [2, 3], [2, 3],\n    [2, 3], [2, 3], [2, 3], [2, 3],\n    [2, 2], [2, 2], [2, 2], [2, 2],         // 11xxxx\n    [2, 2], [2, 2], [2, 2], [2, 2],\n    [2, 2], [2, 2], [2, 2], [2, 2],\n    [2, 2], [2, 2], [2, 2], [2, 2]\n  ];\n\n  /**\n   * @param {CCITTFaxDecoderSource} source - The data which should be decoded.\n   * @param {Object} [options] - Decoding options.\n   */\n  // eslint-disable-next-line no-shadow\n  function CCITTFaxDecoder(source, options = {}) {\n    if (!source || typeof source.next !== \"function\") {\n      throw new Error('CCITTFaxDecoder - invalid \"source\" parameter.');\n    }\n    this.source = source;\n    this.eof = false;\n\n    this.encoding = options.K || 0;\n    this.eoline = options.EndOfLine || false;\n    this.byteAlign = options.EncodedByteAlign || false;\n    this.columns = options.Columns || 1728;\n    this.rows = options.Rows || 0;\n    let eoblock = options.EndOfBlock;\n    if (eoblock === null || eoblock === undefined) {\n      eoblock = true;\n    }\n    this.eoblock = eoblock;\n    this.black = options.BlackIs1 || false;\n\n    this.codingLine = new Uint32Array(this.columns + 1);\n    this.refLine = new Uint32Array(this.columns + 2);\n\n    this.codingLine[0] = this.columns;\n    this.codingPos = 0;\n\n    this.row = 0;\n    this.nextLine2D = this.encoding < 0;\n    this.inputBits = 0;\n    this.inputBuf = 0;\n    this.outputBits = 0;\n    this.rowsDone = false;\n\n    let code1;\n    while ((code1 = this._lookBits(12)) === 0) {\n      this._eatBits(1);\n    }\n    if (code1 === 1) {\n      this._eatBits(12);\n    }\n    if (this.encoding > 0) {\n      this.nextLine2D = !this._lookBits(1);\n      this._eatBits(1);\n    }\n  }\n\n  CCITTFaxDecoder.prototype = {\n    readNextChar() {\n      if (this.eof) {\n        return -1;\n      }\n      const refLine = this.refLine;\n      const codingLine = this.codingLine;\n      const columns = this.columns;\n\n      let refPos, blackPixels, bits, i;\n\n      if (this.outputBits === 0) {\n        if (this.rowsDone) {\n          this.eof = true;\n        }\n        if (this.eof) {\n          return -1;\n        }\n        this.err = false;\n\n        let code1, code2, code3;\n        if (this.nextLine2D) {\n          for (i = 0; codingLine[i] < columns; ++i) {\n            refLine[i] = codingLine[i];\n          }\n          refLine[i++] = columns;\n          refLine[i] = columns;\n          codingLine[0] = 0;\n          this.codingPos = 0;\n          refPos = 0;\n          blackPixels = 0;\n\n          while (codingLine[this.codingPos] < columns) {\n            code1 = this._getTwoDimCode();\n            switch (code1) {\n              case twoDimPass:\n                this._addPixels(refLine[refPos + 1], blackPixels);\n                if (refLine[refPos + 1] < columns) {\n                  refPos += 2;\n                }\n                break;\n              case twoDimHoriz:\n                code1 = code2 = 0;\n                if (blackPixels) {\n                  do {\n                    code1 += code3 = this._getBlackCode();\n                  } while (code3 >= 64);\n                  do {\n                    code2 += code3 = this._getWhiteCode();\n                  } while (code3 >= 64);\n                } else {\n                  do {\n                    code1 += code3 = this._getWhiteCode();\n                  } while (code3 >= 64);\n                  do {\n                    code2 += code3 = this._getBlackCode();\n                  } while (code3 >= 64);\n                }\n                this._addPixels(\n                  codingLine[this.codingPos] + code1,\n                  blackPixels\n                );\n                if (codingLine[this.codingPos] < columns) {\n                  this._addPixels(\n                    codingLine[this.codingPos] + code2,\n                    blackPixels ^ 1\n                  );\n                }\n                while (\n                  refLine[refPos] <= codingLine[this.codingPos] &&\n                  refLine[refPos] < columns\n                ) {\n                  refPos += 2;\n                }\n                break;\n              case twoDimVertR3:\n                this._addPixels(refLine[refPos] + 3, blackPixels);\n                blackPixels ^= 1;\n                if (codingLine[this.codingPos] < columns) {\n                  ++refPos;\n                  while (\n                    refLine[refPos] <= codingLine[this.codingPos] &&\n                    refLine[refPos] < columns\n                  ) {\n                    refPos += 2;\n                  }\n                }\n                break;\n              case twoDimVertR2:\n                this._addPixels(refLine[refPos] + 2, blackPixels);\n                blackPixels ^= 1;\n                if (codingLine[this.codingPos] < columns) {\n                  ++refPos;\n                  while (\n                    refLine[refPos] <= codingLine[this.codingPos] &&\n                    refLine[refPos] < columns\n                  ) {\n                    refPos += 2;\n                  }\n                }\n                break;\n              case twoDimVertR1:\n                this._addPixels(refLine[refPos] + 1, blackPixels);\n                blackPixels ^= 1;\n                if (codingLine[this.codingPos] < columns) {\n                  ++refPos;\n                  while (\n                    refLine[refPos] <= codingLine[this.codingPos] &&\n                    refLine[refPos] < columns\n                  ) {\n                    refPos += 2;\n                  }\n                }\n                break;\n              case twoDimVert0:\n                this._addPixels(refLine[refPos], blackPixels);\n                blackPixels ^= 1;\n                if (codingLine[this.codingPos] < columns) {\n                  ++refPos;\n                  while (\n                    refLine[refPos] <= codingLine[this.codingPos] &&\n                    refLine[refPos] < columns\n                  ) {\n                    refPos += 2;\n                  }\n                }\n                break;\n              case twoDimVertL3:\n                this._addPixelsNeg(refLine[refPos] - 3, blackPixels);\n                blackPixels ^= 1;\n                if (codingLine[this.codingPos] < columns) {\n                  if (refPos > 0) {\n                    --refPos;\n                  } else {\n                    ++refPos;\n                  }\n                  while (\n                    refLine[refPos] <= codingLine[this.codingPos] &&\n                    refLine[refPos] < columns\n                  ) {\n                    refPos += 2;\n                  }\n                }\n                break;\n              case twoDimVertL2:\n                this._addPixelsNeg(refLine[refPos] - 2, blackPixels);\n                blackPixels ^= 1;\n                if (codingLine[this.codingPos] < columns) {\n                  if (refPos > 0) {\n                    --refPos;\n                  } else {\n                    ++refPos;\n                  }\n                  while (\n                    refLine[refPos] <= codingLine[this.codingPos] &&\n                    refLine[refPos] < columns\n                  ) {\n                    refPos += 2;\n                  }\n                }\n                break;\n              case twoDimVertL1:\n                this._addPixelsNeg(refLine[refPos] - 1, blackPixels);\n                blackPixels ^= 1;\n                if (codingLine[this.codingPos] < columns) {\n                  if (refPos > 0) {\n                    --refPos;\n                  } else {\n                    ++refPos;\n                  }\n                  while (\n                    refLine[refPos] <= codingLine[this.codingPos] &&\n                    refLine[refPos] < columns\n                  ) {\n                    refPos += 2;\n                  }\n                }\n                break;\n              case ccittEOF:\n                this._addPixels(columns, 0);\n                this.eof = true;\n                break;\n              default:\n                info(\"bad 2d code\");\n                this._addPixels(columns, 0);\n                this.err = true;\n            }\n          }\n        } else {\n          codingLine[0] = 0;\n          this.codingPos = 0;\n          blackPixels = 0;\n          while (codingLine[this.codingPos] < columns) {\n            code1 = 0;\n            if (blackPixels) {\n              do {\n                code1 += code3 = this._getBlackCode();\n              } while (code3 >= 64);\n            } else {\n              do {\n                code1 += code3 = this._getWhiteCode();\n              } while (code3 >= 64);\n            }\n            this._addPixels(codingLine[this.codingPos] + code1, blackPixels);\n            blackPixels ^= 1;\n          }\n        }\n\n        let gotEOL = false;\n\n        if (this.byteAlign) {\n          this.inputBits &= ~7;\n        }\n\n        if (!this.eoblock && this.row === this.rows - 1) {\n          this.rowsDone = true;\n        } else {\n          code1 = this._lookBits(12);\n          if (this.eoline) {\n            while (code1 !== ccittEOF && code1 !== 1) {\n              this._eatBits(1);\n              code1 = this._lookBits(12);\n            }\n          } else {\n            while (code1 === 0) {\n              this._eatBits(1);\n              code1 = this._lookBits(12);\n            }\n          }\n          if (code1 === 1) {\n            this._eatBits(12);\n            gotEOL = true;\n          } else if (code1 === ccittEOF) {\n            this.eof = true;\n          }\n        }\n\n        if (!this.eof && this.encoding > 0 && !this.rowsDone) {\n          this.nextLine2D = !this._lookBits(1);\n          this._eatBits(1);\n        }\n\n        if (this.eoblock && gotEOL && this.byteAlign) {\n          code1 = this._lookBits(12);\n          if (code1 === 1) {\n            this._eatBits(12);\n            if (this.encoding > 0) {\n              this._lookBits(1);\n              this._eatBits(1);\n            }\n            if (this.encoding >= 0) {\n              for (i = 0; i < 4; ++i) {\n                code1 = this._lookBits(12);\n                if (code1 !== 1) {\n                  info(\"bad rtc code: \" + code1);\n                }\n                this._eatBits(12);\n                if (this.encoding > 0) {\n                  this._lookBits(1);\n                  this._eatBits(1);\n                }\n              }\n            }\n            this.eof = true;\n          }\n        } else if (this.err && this.eoline) {\n          while (true) {\n            code1 = this._lookBits(13);\n            if (code1 === ccittEOF) {\n              this.eof = true;\n              return -1;\n            }\n            if (code1 >> 1 === 1) {\n              break;\n            }\n            this._eatBits(1);\n          }\n          this._eatBits(12);\n          if (this.encoding > 0) {\n            this._eatBits(1);\n            this.nextLine2D = !(code1 & 1);\n          }\n        }\n\n        if (codingLine[0] > 0) {\n          this.outputBits = codingLine[(this.codingPos = 0)];\n        } else {\n          this.outputBits = codingLine[(this.codingPos = 1)];\n        }\n        this.row++;\n      }\n\n      let c;\n      if (this.outputBits >= 8) {\n        c = this.codingPos & 1 ? 0 : 0xff;\n        this.outputBits -= 8;\n        if (this.outputBits === 0 && codingLine[this.codingPos] < columns) {\n          this.codingPos++;\n          this.outputBits =\n            codingLine[this.codingPos] - codingLine[this.codingPos - 1];\n        }\n      } else {\n        bits = 8;\n        c = 0;\n        do {\n          if (this.outputBits > bits) {\n            c <<= bits;\n            if (!(this.codingPos & 1)) {\n              c |= 0xff >> (8 - bits);\n            }\n            this.outputBits -= bits;\n            bits = 0;\n          } else {\n            c <<= this.outputBits;\n            if (!(this.codingPos & 1)) {\n              c |= 0xff >> (8 - this.outputBits);\n            }\n            bits -= this.outputBits;\n            this.outputBits = 0;\n            if (codingLine[this.codingPos] < columns) {\n              this.codingPos++;\n              this.outputBits =\n                codingLine[this.codingPos] - codingLine[this.codingPos - 1];\n            } else if (bits > 0) {\n              c <<= bits;\n              bits = 0;\n            }\n          }\n        } while (bits);\n      }\n      if (this.black) {\n        c ^= 0xff;\n      }\n      return c;\n    },\n\n    /**\n     * @private\n     */\n    _addPixels(a1, blackPixels) {\n      const codingLine = this.codingLine;\n      let codingPos = this.codingPos;\n\n      if (a1 > codingLine[codingPos]) {\n        if (a1 > this.columns) {\n          info(\"row is wrong length\");\n          this.err = true;\n          a1 = this.columns;\n        }\n        if ((codingPos & 1) ^ blackPixels) {\n          ++codingPos;\n        }\n\n        codingLine[codingPos] = a1;\n      }\n      this.codingPos = codingPos;\n    },\n\n    /**\n     * @private\n     */\n    _addPixelsNeg(a1, blackPixels) {\n      const codingLine = this.codingLine;\n      let codingPos = this.codingPos;\n\n      if (a1 > codingLine[codingPos]) {\n        if (a1 > this.columns) {\n          info(\"row is wrong length\");\n          this.err = true;\n          a1 = this.columns;\n        }\n        if ((codingPos & 1) ^ blackPixels) {\n          ++codingPos;\n        }\n\n        codingLine[codingPos] = a1;\n      } else if (a1 < codingLine[codingPos]) {\n        if (a1 < 0) {\n          info(\"invalid code\");\n          this.err = true;\n          a1 = 0;\n        }\n        while (codingPos > 0 && a1 < codingLine[codingPos - 1]) {\n          --codingPos;\n        }\n        codingLine[codingPos] = a1;\n      }\n\n      this.codingPos = codingPos;\n    },\n\n    /**\n     * This function returns the code found from the table.\n     * The start and end parameters set the boundaries for searching the table.\n     * The limit parameter is optional. Function returns an array with three\n     * values. The first array element indicates whether a valid code is being\n     * returned. The second array element is the actual code. The third array\n     * element indicates whether EOF was reached.\n     * @private\n     */\n    _findTableCode(start, end, table, limit) {\n      const limitValue = limit || 0;\n      for (let i = start; i <= end; ++i) {\n        let code = this._lookBits(i);\n        if (code === ccittEOF) {\n          return [true, 1, false];\n        }\n        if (i < end) {\n          code <<= end - i;\n        }\n        if (!limitValue || code >= limitValue) {\n          const p = table[code - limitValue];\n          if (p[0] === i) {\n            this._eatBits(i);\n            return [true, p[1], true];\n          }\n        }\n      }\n      return [false, 0, false];\n    },\n\n    /**\n     * @private\n     */\n    _getTwoDimCode() {\n      let code = 0;\n      let p;\n      if (this.eoblock) {\n        code = this._lookBits(7);\n        p = twoDimTable[code];\n        if (p && p[0] > 0) {\n          this._eatBits(p[0]);\n          return p[1];\n        }\n      } else {\n        const result = this._findTableCode(1, 7, twoDimTable);\n        if (result[0] && result[2]) {\n          return result[1];\n        }\n      }\n      info(\"Bad two dim code\");\n      return ccittEOF;\n    },\n\n    /**\n     * @private\n     */\n    _getWhiteCode() {\n      let code = 0;\n      let p;\n      if (this.eoblock) {\n        code = this._lookBits(12);\n        if (code === ccittEOF) {\n          return 1;\n        }\n\n        if (code >> 5 === 0) {\n          p = whiteTable1[code];\n        } else {\n          p = whiteTable2[code >> 3];\n        }\n\n        if (p[0] > 0) {\n          this._eatBits(p[0]);\n          return p[1];\n        }\n      } else {\n        let result = this._findTableCode(1, 9, whiteTable2);\n        if (result[0]) {\n          return result[1];\n        }\n\n        result = this._findTableCode(11, 12, whiteTable1);\n        if (result[0]) {\n          return result[1];\n        }\n      }\n      info(\"bad white code\");\n      this._eatBits(1);\n      return 1;\n    },\n\n    /**\n     * @private\n     */\n    _getBlackCode() {\n      let code, p;\n      if (this.eoblock) {\n        code = this._lookBits(13);\n        if (code === ccittEOF) {\n          return 1;\n        }\n        if (code >> 7 === 0) {\n          p = blackTable1[code];\n        } else if (code >> 9 === 0 && code >> 7 !== 0) {\n          p = blackTable2[(code >> 1) - 64];\n        } else {\n          p = blackTable3[code >> 7];\n        }\n\n        if (p[0] > 0) {\n          this._eatBits(p[0]);\n          return p[1];\n        }\n      } else {\n        let result = this._findTableCode(2, 6, blackTable3);\n        if (result[0]) {\n          return result[1];\n        }\n\n        result = this._findTableCode(7, 12, blackTable2, 64);\n        if (result[0]) {\n          return result[1];\n        }\n\n        result = this._findTableCode(10, 13, blackTable1);\n        if (result[0]) {\n          return result[1];\n        }\n      }\n      info(\"bad black code\");\n      this._eatBits(1);\n      return 1;\n    },\n\n    /**\n     * @private\n     */\n    _lookBits(n) {\n      let c;\n      while (this.inputBits < n) {\n        if ((c = this.source.next()) === -1) {\n          if (this.inputBits === 0) {\n            return ccittEOF;\n          }\n          return (this.inputBuf << (n - this.inputBits)) & (0xffff >> (16 - n));\n        }\n        this.inputBuf = (this.inputBuf << 8) | c;\n        this.inputBits += 8;\n      }\n      return (this.inputBuf >> (this.inputBits - n)) & (0xffff >> (16 - n));\n    },\n\n    /**\n     * @private\n     */\n    _eatBits(n) {\n      if ((this.inputBits -= n) < 0) {\n        this.inputBits = 0;\n      }\n    },\n  };\n\n  return CCITTFaxDecoder;\n})();\n\nexport { CCITTFaxDecoder };\n","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, BaseException, warn } from \"../shared/util.js\";\nimport { readUint16 } from \"./core_utils.js\";\n\nclass JpegError extends BaseException {\n  constructor(msg) {\n    super(`JPEG error: ${msg}`);\n  }\n}\n\nclass DNLMarkerError extends BaseException {\n  constructor(message, scanLines) {\n    super(message);\n    this.scanLines = scanLines;\n  }\n}\n\nclass EOIMarkerError extends BaseException {}\n\n/**\n * This code was forked from https://github.com/notmasteryet/jpgjs.\n * The original version was created by GitHub user notmasteryet.\n *\n * - The JPEG specification can be found in the ITU CCITT Recommendation T.81\n *   (www.w3.org/Graphics/JPEG/itu-t81.pdf)\n * - The JFIF specification can be found in the JPEG File Interchange Format\n *   (www.w3.org/Graphics/JPEG/jfif3.pdf)\n * - The Adobe Application-Specific JPEG markers in the\n *   Supporting the DCT Filters in PostScript Level 2, Technical Note #5116\n *   (partners.adobe.com/public/developer/en/ps/sdk/5116.DCT_Filter.pdf)\n */\n\nvar JpegImage = (function JpegImageClosure() {\n  // prettier-ignore\n  var dctZigZag = new Uint8Array([\n     0,\n     1,  8,\n    16,  9,  2,\n     3, 10, 17, 24,\n    32, 25, 18, 11, 4,\n     5, 12, 19, 26, 33, 40,\n    48, 41, 34, 27, 20, 13,  6,\n     7, 14, 21, 28, 35, 42, 49, 56,\n    57, 50, 43, 36, 29, 22, 15,\n    23, 30, 37, 44, 51, 58,\n    59, 52, 45, 38, 31,\n    39, 46, 53, 60,\n    61, 54, 47,\n    55, 62,\n    63\n  ]);\n\n  var dctCos1 = 4017; // cos(pi/16)\n  var dctSin1 = 799; // sin(pi/16)\n  var dctCos3 = 3406; // cos(3*pi/16)\n  var dctSin3 = 2276; // sin(3*pi/16)\n  var dctCos6 = 1567; // cos(6*pi/16)\n  var dctSin6 = 3784; // sin(6*pi/16)\n  var dctSqrt2 = 5793; // sqrt(2)\n  var dctSqrt1d2 = 2896; // sqrt(2) / 2\n\n  // eslint-disable-next-line no-shadow\n  function JpegImage({ decodeTransform = null, colorTransform = -1 } = {}) {\n    this._decodeTransform = decodeTransform;\n    this._colorTransform = colorTransform;\n  }\n\n  function buildHuffmanTable(codeLengths, values) {\n    var k = 0,\n      code = [],\n      i,\n      j,\n      length = 16;\n    while (length > 0 && !codeLengths[length - 1]) {\n      length--;\n    }\n    code.push({ children: [], index: 0 });\n    var p = code[0],\n      q;\n    for (i = 0; i < length; i++) {\n      for (j = 0; j < codeLengths[i]; j++) {\n        p = code.pop();\n        p.children[p.index] = values[k];\n        while (p.index > 0) {\n          p = code.pop();\n        }\n        p.index++;\n        code.push(p);\n        while (code.length <= i) {\n          code.push((q = { children: [], index: 0 }));\n          p.children[p.index] = q.children;\n          p = q;\n        }\n        k++;\n      }\n      if (i + 1 < length) {\n        // p here points to last code\n        code.push((q = { children: [], index: 0 }));\n        p.children[p.index] = q.children;\n        p = q;\n      }\n    }\n    return code[0].children;\n  }\n\n  function getBlockBufferOffset(component, row, col) {\n    return 64 * ((component.blocksPerLine + 1) * row + col);\n  }\n\n  function decodeScan(\n    data,\n    offset,\n    frame,\n    components,\n    resetInterval,\n    spectralStart,\n    spectralEnd,\n    successivePrev,\n    successive,\n    parseDNLMarker = false\n  ) {\n    var mcusPerLine = frame.mcusPerLine;\n    var progressive = frame.progressive;\n\n    const startOffset = offset;\n    let bitsData = 0,\n      bitsCount = 0;\n\n    function readBit() {\n      if (bitsCount > 0) {\n        bitsCount--;\n        return (bitsData >> bitsCount) & 1;\n      }\n      bitsData = data[offset++];\n      if (bitsData === 0xff) {\n        var nextByte = data[offset++];\n        if (nextByte) {\n          if (nextByte === /* DNL = */ 0xdc && parseDNLMarker) {\n            offset += 2; // Skip marker length.\n\n            const scanLines = readUint16(data, offset);\n            offset += 2;\n            if (scanLines > 0 && scanLines !== frame.scanLines) {\n              throw new DNLMarkerError(\n                \"Found DNL marker (0xFFDC) while parsing scan data\",\n                scanLines\n              );\n            }\n          } else if (nextByte === /* EOI = */ 0xd9) {\n            if (parseDNLMarker) {\n              // NOTE: only 8-bit JPEG images are supported in this decoder.\n              const maybeScanLines = blockRow * (frame.precision === 8 ? 8 : 0);\n              // Heuristic to attempt to handle corrupt JPEG images with too\n              // large `scanLines` parameter, by falling back to the currently\n              // parsed number of scanLines when it's at least (approximately)\n              // one order of magnitude smaller than expected (fixes\n              // issue10880.pdf and issue10989.pdf).\n              if (\n                maybeScanLines > 0 &&\n                Math.round(frame.scanLines / maybeScanLines) >= 10\n              ) {\n                throw new DNLMarkerError(\n                  \"Found EOI marker (0xFFD9) while parsing scan data, \" +\n                    \"possibly caused by incorrect `scanLines` parameter\",\n                  maybeScanLines\n                );\n              }\n            }\n            throw new EOIMarkerError(\n              \"Found EOI marker (0xFFD9) while parsing scan data\"\n            );\n          }\n          throw new JpegError(\n            `unexpected marker ${((bitsData << 8) | nextByte).toString(16)}`\n          );\n        }\n        // unstuff 0\n      }\n      bitsCount = 7;\n      return bitsData >>> 7;\n    }\n\n    function decodeHuffman(tree) {\n      var node = tree;\n      while (true) {\n        node = node[readBit()];\n        switch (typeof node) {\n          case \"number\":\n            return node;\n          case \"object\":\n            continue;\n        }\n        throw new JpegError(\"invalid huffman sequence\");\n      }\n    }\n\n    function receive(length) {\n      var n = 0;\n      while (length > 0) {\n        n = (n << 1) | readBit();\n        length--;\n      }\n      return n;\n    }\n\n    function receiveAndExtend(length) {\n      if (length === 1) {\n        return readBit() === 1 ? 1 : -1;\n      }\n      var n = receive(length);\n      if (n >= 1 << (length - 1)) {\n        return n;\n      }\n      return n + (-1 << length) + 1;\n    }\n\n    function decodeBaseline(component, blockOffset) {\n      var t = decodeHuffman(component.huffmanTableDC);\n      var diff = t === 0 ? 0 : receiveAndExtend(t);\n      component.blockData[blockOffset] = component.pred += diff;\n      var k = 1;\n      while (k < 64) {\n        var rs = decodeHuffman(component.huffmanTableAC);\n        var s = rs & 15,\n          r = rs >> 4;\n        if (s === 0) {\n          if (r < 15) {\n            break;\n          }\n          k += 16;\n          continue;\n        }\n        k += r;\n        var z = dctZigZag[k];\n        component.blockData[blockOffset + z] = receiveAndExtend(s);\n        k++;\n      }\n    }\n\n    function decodeDCFirst(component, blockOffset) {\n      var t = decodeHuffman(component.huffmanTableDC);\n      var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;\n      component.blockData[blockOffset] = component.pred += diff;\n    }\n\n    function decodeDCSuccessive(component, blockOffset) {\n      component.blockData[blockOffset] |= readBit() << successive;\n    }\n\n    var eobrun = 0;\n    function decodeACFirst(component, blockOffset) {\n      if (eobrun > 0) {\n        eobrun--;\n        return;\n      }\n      var k = spectralStart,\n        e = spectralEnd;\n      while (k <= e) {\n        var rs = decodeHuffman(component.huffmanTableAC);\n        var s = rs & 15,\n          r = rs >> 4;\n        if (s === 0) {\n          if (r < 15) {\n            eobrun = receive(r) + (1 << r) - 1;\n            break;\n          }\n          k += 16;\n          continue;\n        }\n        k += r;\n        var z = dctZigZag[k];\n        component.blockData[blockOffset + z] =\n          receiveAndExtend(s) * (1 << successive);\n        k++;\n      }\n    }\n\n    var successiveACState = 0,\n      successiveACNextValue;\n    function decodeACSuccessive(component, blockOffset) {\n      var k = spectralStart;\n      var e = spectralEnd;\n      var r = 0;\n      var s;\n      var rs;\n      while (k <= e) {\n        const offsetZ = blockOffset + dctZigZag[k];\n        const sign = component.blockData[offsetZ] < 0 ? -1 : 1;\n        switch (successiveACState) {\n          case 0: // initial state\n            rs = decodeHuffman(component.huffmanTableAC);\n            s = rs & 15;\n            r = rs >> 4;\n            if (s === 0) {\n              if (r < 15) {\n                eobrun = receive(r) + (1 << r);\n                successiveACState = 4;\n              } else {\n                r = 16;\n                successiveACState = 1;\n              }\n            } else {\n              if (s !== 1) {\n                throw new JpegError(\"invalid ACn encoding\");\n              }\n              successiveACNextValue = receiveAndExtend(s);\n              successiveACState = r ? 2 : 3;\n            }\n            continue;\n          case 1: // skipping r zero items\n          case 2:\n            if (component.blockData[offsetZ]) {\n              component.blockData[offsetZ] += sign * (readBit() << successive);\n            } else {\n              r--;\n              if (r === 0) {\n                successiveACState = successiveACState === 2 ? 3 : 0;\n              }\n            }\n            break;\n          case 3: // set value for a zero item\n            if (component.blockData[offsetZ]) {\n              component.blockData[offsetZ] += sign * (readBit() << successive);\n            } else {\n              component.blockData[offsetZ] =\n                successiveACNextValue << successive;\n              successiveACState = 0;\n            }\n            break;\n          case 4: // eob\n            if (component.blockData[offsetZ]) {\n              component.blockData[offsetZ] += sign * (readBit() << successive);\n            }\n            break;\n        }\n        k++;\n      }\n      if (successiveACState === 4) {\n        eobrun--;\n        if (eobrun === 0) {\n          successiveACState = 0;\n        }\n      }\n    }\n\n    let blockRow = 0;\n    function decodeMcu(component, decode, mcu, row, col) {\n      var mcuRow = (mcu / mcusPerLine) | 0;\n      var mcuCol = mcu % mcusPerLine;\n      blockRow = mcuRow * component.v + row;\n      var blockCol = mcuCol * component.h + col;\n      const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);\n      decode(component, blockOffset);\n    }\n\n    function decodeBlock(component, decode, mcu) {\n      blockRow = (mcu / component.blocksPerLine) | 0;\n      var blockCol = mcu % component.blocksPerLine;\n      const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);\n      decode(component, blockOffset);\n    }\n\n    var componentsLength = components.length;\n    var component, i, j, k, n;\n    var decodeFn;\n    if (progressive) {\n      if (spectralStart === 0) {\n        decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;\n      } else {\n        decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;\n      }\n    } else {\n      decodeFn = decodeBaseline;\n    }\n\n    var mcu = 0,\n      fileMarker;\n    var mcuExpected;\n    if (componentsLength === 1) {\n      mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;\n    } else {\n      mcuExpected = mcusPerLine * frame.mcusPerColumn;\n    }\n\n    var h, v;\n    while (mcu <= mcuExpected) {\n      // reset interval stuff\n      var mcuToRead = resetInterval\n        ? Math.min(mcuExpected - mcu, resetInterval)\n        : mcuExpected;\n\n      // The `mcuToRead === 0` case should only occur when all of the expected\n      // MCU data has been already parsed, i.e. when `mcu === mcuExpected`, but\n      // some corrupt JPEG images contain more data than intended and we thus\n      // want to skip over any extra RSTx markers below (fixes issue11794.pdf).\n      if (mcuToRead > 0) {\n        for (i = 0; i < componentsLength; i++) {\n          components[i].pred = 0;\n        }\n        eobrun = 0;\n\n        if (componentsLength === 1) {\n          component = components[0];\n          for (n = 0; n < mcuToRead; n++) {\n            decodeBlock(component, decodeFn, mcu);\n            mcu++;\n          }\n        } else {\n          for (n = 0; n < mcuToRead; n++) {\n            for (i = 0; i < componentsLength; i++) {\n              component = components[i];\n              h = component.h;\n              v = component.v;\n              for (j = 0; j < v; j++) {\n                for (k = 0; k < h; k++) {\n                  decodeMcu(component, decodeFn, mcu, j, k);\n                }\n              }\n            }\n            mcu++;\n          }\n        }\n      }\n\n      // find marker\n      bitsCount = 0;\n      fileMarker = findNextFileMarker(data, offset);\n      if (!fileMarker) {\n        break; // Reached the end of the image data without finding any marker.\n      }\n      if (fileMarker.invalid) {\n        // Some bad images seem to pad Scan blocks with e.g. zero bytes, skip\n        // past those to attempt to find a valid marker (fixes issue4090.pdf).\n        const partialMsg = mcuToRead > 0 ? \"unexpected\" : \"excessive\";\n        warn(\n          `decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`\n        );\n        offset = fileMarker.offset;\n      }\n      if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) {\n        // RSTx\n        offset += 2;\n      } else {\n        break;\n      }\n    }\n\n    return offset - startOffset;\n  }\n\n  // A port of poppler's IDCT method which in turn is taken from:\n  //   Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,\n  //   'Practical Fast 1-D DCT Algorithms with 11 Multiplications',\n  //   IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989,\n  //   988-991.\n  function quantizeAndInverse(component, blockBufferOffset, p) {\n    var qt = component.quantizationTable,\n      blockData = component.blockData;\n    var v0, v1, v2, v3, v4, v5, v6, v7;\n    var p0, p1, p2, p3, p4, p5, p6, p7;\n    var t;\n\n    if (!qt) {\n      throw new JpegError(\"missing required Quantization Table.\");\n    }\n\n    // inverse DCT on rows\n    for (var row = 0; row < 64; row += 8) {\n      // gather block data\n      p0 = blockData[blockBufferOffset + row];\n      p1 = blockData[blockBufferOffset + row + 1];\n      p2 = blockData[blockBufferOffset + row + 2];\n      p3 = blockData[blockBufferOffset + row + 3];\n      p4 = blockData[blockBufferOffset + row + 4];\n      p5 = blockData[blockBufferOffset + row + 5];\n      p6 = blockData[blockBufferOffset + row + 6];\n      p7 = blockData[blockBufferOffset + row + 7];\n\n      // dequant p0\n      p0 *= qt[row];\n\n      // check for all-zero AC coefficients\n      if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {\n        t = (dctSqrt2 * p0 + 512) >> 10;\n        p[row] = t;\n        p[row + 1] = t;\n        p[row + 2] = t;\n        p[row + 3] = t;\n        p[row + 4] = t;\n        p[row + 5] = t;\n        p[row + 6] = t;\n        p[row + 7] = t;\n        continue;\n      }\n      // dequant p1 ... p7\n      p1 *= qt[row + 1];\n      p2 *= qt[row + 2];\n      p3 *= qt[row + 3];\n      p4 *= qt[row + 4];\n      p5 *= qt[row + 5];\n      p6 *= qt[row + 6];\n      p7 *= qt[row + 7];\n\n      // stage 4\n      v0 = (dctSqrt2 * p0 + 128) >> 8;\n      v1 = (dctSqrt2 * p4 + 128) >> 8;\n      v2 = p2;\n      v3 = p6;\n      v4 = (dctSqrt1d2 * (p1 - p7) + 128) >> 8;\n      v7 = (dctSqrt1d2 * (p1 + p7) + 128) >> 8;\n      v5 = p3 << 4;\n      v6 = p5 << 4;\n\n      // stage 3\n      v0 = (v0 + v1 + 1) >> 1;\n      v1 = v0 - v1;\n      t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8;\n      v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8;\n      v3 = t;\n      v4 = (v4 + v6 + 1) >> 1;\n      v6 = v4 - v6;\n      v7 = (v7 + v5 + 1) >> 1;\n      v5 = v7 - v5;\n\n      // stage 2\n      v0 = (v0 + v3 + 1) >> 1;\n      v3 = v0 - v3;\n      v1 = (v1 + v2 + 1) >> 1;\n      v2 = v1 - v2;\n      t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n      v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n      v7 = t;\n      t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n      v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n      v6 = t;\n\n      // stage 1\n      p[row] = v0 + v7;\n      p[row + 7] = v0 - v7;\n      p[row + 1] = v1 + v6;\n      p[row + 6] = v1 - v6;\n      p[row + 2] = v2 + v5;\n      p[row + 5] = v2 - v5;\n      p[row + 3] = v3 + v4;\n      p[row + 4] = v3 - v4;\n    }\n\n    // inverse DCT on columns\n    for (var col = 0; col < 8; ++col) {\n      p0 = p[col];\n      p1 = p[col + 8];\n      p2 = p[col + 16];\n      p3 = p[col + 24];\n      p4 = p[col + 32];\n      p5 = p[col + 40];\n      p6 = p[col + 48];\n      p7 = p[col + 56];\n\n      // check for all-zero AC coefficients\n      if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {\n        t = (dctSqrt2 * p0 + 8192) >> 14;\n        // Convert to 8-bit.\n        if (t < -2040) {\n          t = 0;\n        } else if (t >= 2024) {\n          t = 255;\n        } else {\n          t = (t + 2056) >> 4;\n        }\n        blockData[blockBufferOffset + col] = t;\n        blockData[blockBufferOffset + col + 8] = t;\n        blockData[blockBufferOffset + col + 16] = t;\n        blockData[blockBufferOffset + col + 24] = t;\n        blockData[blockBufferOffset + col + 32] = t;\n        blockData[blockBufferOffset + col + 40] = t;\n        blockData[blockBufferOffset + col + 48] = t;\n        blockData[blockBufferOffset + col + 56] = t;\n        continue;\n      }\n\n      // stage 4\n      v0 = (dctSqrt2 * p0 + 2048) >> 12;\n      v1 = (dctSqrt2 * p4 + 2048) >> 12;\n      v2 = p2;\n      v3 = p6;\n      v4 = (dctSqrt1d2 * (p1 - p7) + 2048) >> 12;\n      v7 = (dctSqrt1d2 * (p1 + p7) + 2048) >> 12;\n      v5 = p3;\n      v6 = p5;\n\n      // stage 3\n      // Shift v0 by 128.5 << 5 here, so we don't need to shift p0...p7 when\n      // converting to UInt8 range later.\n      v0 = ((v0 + v1 + 1) >> 1) + 4112;\n      v1 = v0 - v1;\n      t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12;\n      v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12;\n      v3 = t;\n      v4 = (v4 + v6 + 1) >> 1;\n      v6 = v4 - v6;\n      v7 = (v7 + v5 + 1) >> 1;\n      v5 = v7 - v5;\n\n      // stage 2\n      v0 = (v0 + v3 + 1) >> 1;\n      v3 = v0 - v3;\n      v1 = (v1 + v2 + 1) >> 1;\n      v2 = v1 - v2;\n      t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n      v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n      v7 = t;\n      t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n      v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n      v6 = t;\n\n      // stage 1\n      p0 = v0 + v7;\n      p7 = v0 - v7;\n      p1 = v1 + v6;\n      p6 = v1 - v6;\n      p2 = v2 + v5;\n      p5 = v2 - v5;\n      p3 = v3 + v4;\n      p4 = v3 - v4;\n\n      // Convert to 8-bit integers.\n      if (p0 < 16) {\n        p0 = 0;\n      } else if (p0 >= 4080) {\n        p0 = 255;\n      } else {\n        p0 >>= 4;\n      }\n      if (p1 < 16) {\n        p1 = 0;\n      } else if (p1 >= 4080) {\n        p1 = 255;\n      } else {\n        p1 >>= 4;\n      }\n      if (p2 < 16) {\n        p2 = 0;\n      } else if (p2 >= 4080) {\n        p2 = 255;\n      } else {\n        p2 >>= 4;\n      }\n      if (p3 < 16) {\n        p3 = 0;\n      } else if (p3 >= 4080) {\n        p3 = 255;\n      } else {\n        p3 >>= 4;\n      }\n      if (p4 < 16) {\n        p4 = 0;\n      } else if (p4 >= 4080) {\n        p4 = 255;\n      } else {\n        p4 >>= 4;\n      }\n      if (p5 < 16) {\n        p5 = 0;\n      } else if (p5 >= 4080) {\n        p5 = 255;\n      } else {\n        p5 >>= 4;\n      }\n      if (p6 < 16) {\n        p6 = 0;\n      } else if (p6 >= 4080) {\n        p6 = 255;\n      } else {\n        p6 >>= 4;\n      }\n      if (p7 < 16) {\n        p7 = 0;\n      } else if (p7 >= 4080) {\n        p7 = 255;\n      } else {\n        p7 >>= 4;\n      }\n\n      // store block data\n      blockData[blockBufferOffset + col] = p0;\n      blockData[blockBufferOffset + col + 8] = p1;\n      blockData[blockBufferOffset + col + 16] = p2;\n      blockData[blockBufferOffset + col + 24] = p3;\n      blockData[blockBufferOffset + col + 32] = p4;\n      blockData[blockBufferOffset + col + 40] = p5;\n      blockData[blockBufferOffset + col + 48] = p6;\n      blockData[blockBufferOffset + col + 56] = p7;\n    }\n  }\n\n  function buildComponentData(frame, component) {\n    var blocksPerLine = component.blocksPerLine;\n    var blocksPerColumn = component.blocksPerColumn;\n    var computationBuffer = new Int16Array(64);\n\n    for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n      for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n        var offset = getBlockBufferOffset(component, blockRow, blockCol);\n        quantizeAndInverse(component, offset, computationBuffer);\n      }\n    }\n    return component.blockData;\n  }\n\n  function findNextFileMarker(data, currentPos, startPos = currentPos) {\n    const maxPos = data.length - 1;\n    var newPos = startPos < currentPos ? startPos : currentPos;\n\n    if (currentPos >= maxPos) {\n      return null; // Don't attempt to read non-existent data and just return.\n    }\n    var currentMarker = readUint16(data, currentPos);\n    if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) {\n      return {\n        invalid: null,\n        marker: currentMarker,\n        offset: currentPos,\n      };\n    }\n    var newMarker = readUint16(data, newPos);\n    while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) {\n      if (++newPos >= maxPos) {\n        return null; // Don't attempt to read non-existent data and just return.\n      }\n      newMarker = readUint16(data, newPos);\n    }\n    return {\n      invalid: currentMarker.toString(16),\n      marker: newMarker,\n      offset: newPos,\n    };\n  }\n\n  JpegImage.prototype = {\n    parse(data, { dnlScanLines = null } = {}) {\n      function readDataBlock() {\n        const length = readUint16(data, offset);\n        offset += 2;\n        let endOffset = offset + length - 2;\n\n        var fileMarker = findNextFileMarker(data, endOffset, offset);\n        if (fileMarker && fileMarker.invalid) {\n          warn(\n            \"readDataBlock - incorrect length, current marker is: \" +\n              fileMarker.invalid\n          );\n          endOffset = fileMarker.offset;\n        }\n\n        var array = data.subarray(offset, endOffset);\n        offset += array.length;\n        return array;\n      }\n\n      function prepareComponents(frame) {\n        var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);\n        var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);\n        for (var i = 0; i < frame.components.length; i++) {\n          component = frame.components[i];\n          var blocksPerLine = Math.ceil(\n            (Math.ceil(frame.samplesPerLine / 8) * component.h) / frame.maxH\n          );\n          var blocksPerColumn = Math.ceil(\n            (Math.ceil(frame.scanLines / 8) * component.v) / frame.maxV\n          );\n          var blocksPerLineForMcu = mcusPerLine * component.h;\n          var blocksPerColumnForMcu = mcusPerColumn * component.v;\n\n          var blocksBufferSize =\n            64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);\n          component.blockData = new Int16Array(blocksBufferSize);\n          component.blocksPerLine = blocksPerLine;\n          component.blocksPerColumn = blocksPerColumn;\n        }\n        frame.mcusPerLine = mcusPerLine;\n        frame.mcusPerColumn = mcusPerColumn;\n      }\n\n      var offset = 0;\n      var jfif = null;\n      var adobe = null;\n      var frame, resetInterval;\n      let numSOSMarkers = 0;\n      var quantizationTables = [];\n      var huffmanTablesAC = [],\n        huffmanTablesDC = [];\n\n      let fileMarker = readUint16(data, offset);\n      offset += 2;\n      if (fileMarker !== /* SOI (Start of Image) = */ 0xffd8) {\n        throw new JpegError(\"SOI not found\");\n      }\n      fileMarker = readUint16(data, offset);\n      offset += 2;\n\n      markerLoop: while (fileMarker !== /* EOI (End of Image) = */ 0xffd9) {\n        var i, j, l;\n        switch (fileMarker) {\n          case 0xffe0: // APP0 (Application Specific)\n          case 0xffe1: // APP1\n          case 0xffe2: // APP2\n          case 0xffe3: // APP3\n          case 0xffe4: // APP4\n          case 0xffe5: // APP5\n          case 0xffe6: // APP6\n          case 0xffe7: // APP7\n          case 0xffe8: // APP8\n          case 0xffe9: // APP9\n          case 0xffea: // APP10\n          case 0xffeb: // APP11\n          case 0xffec: // APP12\n          case 0xffed: // APP13\n          case 0xffee: // APP14\n          case 0xffef: // APP15\n          case 0xfffe: // COM (Comment)\n            var appData = readDataBlock();\n\n            if (fileMarker === 0xffe0) {\n              // 'JFIF\\x00'\n              if (\n                appData[0] === 0x4a &&\n                appData[1] === 0x46 &&\n                appData[2] === 0x49 &&\n                appData[3] === 0x46 &&\n                appData[4] === 0\n              ) {\n                jfif = {\n                  version: { major: appData[5], minor: appData[6] },\n                  densityUnits: appData[7],\n                  xDensity: (appData[8] << 8) | appData[9],\n                  yDensity: (appData[10] << 8) | appData[11],\n                  thumbWidth: appData[12],\n                  thumbHeight: appData[13],\n                  thumbData: appData.subarray(\n                    14,\n                    14 + 3 * appData[12] * appData[13]\n                  ),\n                };\n              }\n            }\n            // TODO APP1 - Exif\n            if (fileMarker === 0xffee) {\n              // 'Adobe'\n              if (\n                appData[0] === 0x41 &&\n                appData[1] === 0x64 &&\n                appData[2] === 0x6f &&\n                appData[3] === 0x62 &&\n                appData[4] === 0x65\n              ) {\n                adobe = {\n                  version: (appData[5] << 8) | appData[6],\n                  flags0: (appData[7] << 8) | appData[8],\n                  flags1: (appData[9] << 8) | appData[10],\n                  transformCode: appData[11],\n                };\n              }\n            }\n            break;\n\n          case 0xffdb: // DQT (Define Quantization Tables)\n            const quantizationTablesLength = readUint16(data, offset);\n            offset += 2;\n            var quantizationTablesEnd = quantizationTablesLength + offset - 2;\n            var z;\n            while (offset < quantizationTablesEnd) {\n              var quantizationTableSpec = data[offset++];\n              var tableData = new Uint16Array(64);\n              if (quantizationTableSpec >> 4 === 0) {\n                // 8 bit values\n                for (j = 0; j < 64; j++) {\n                  z = dctZigZag[j];\n                  tableData[z] = data[offset++];\n                }\n              } else if (quantizationTableSpec >> 4 === 1) {\n                // 16 bit values\n                for (j = 0; j < 64; j++) {\n                  z = dctZigZag[j];\n                  tableData[z] = readUint16(data, offset);\n                  offset += 2;\n                }\n              } else {\n                throw new JpegError(\"DQT - invalid table spec\");\n              }\n              quantizationTables[quantizationTableSpec & 15] = tableData;\n            }\n            break;\n\n          case 0xffc0: // SOF0 (Start of Frame, Baseline DCT)\n          case 0xffc1: // SOF1 (Start of Frame, Extended DCT)\n          case 0xffc2: // SOF2 (Start of Frame, Progressive DCT)\n            if (frame) {\n              throw new JpegError(\"Only single frame JPEGs supported\");\n            }\n            offset += 2; // Skip marker length.\n\n            frame = {};\n            frame.extended = fileMarker === 0xffc1;\n            frame.progressive = fileMarker === 0xffc2;\n            frame.precision = data[offset++];\n            const sofScanLines = readUint16(data, offset);\n            offset += 2;\n            frame.scanLines = dnlScanLines || sofScanLines;\n            frame.samplesPerLine = readUint16(data, offset);\n            offset += 2;\n            frame.components = [];\n            frame.componentIds = {};\n            var componentsCount = data[offset++],\n              componentId;\n            var maxH = 0,\n              maxV = 0;\n            for (i = 0; i < componentsCount; i++) {\n              componentId = data[offset];\n              var h = data[offset + 1] >> 4;\n              var v = data[offset + 1] & 15;\n              if (maxH < h) {\n                maxH = h;\n              }\n              if (maxV < v) {\n                maxV = v;\n              }\n              var qId = data[offset + 2];\n              l = frame.components.push({\n                h,\n                v,\n                quantizationId: qId,\n                quantizationTable: null, // See comment below.\n              });\n              frame.componentIds[componentId] = l - 1;\n              offset += 3;\n            }\n            frame.maxH = maxH;\n            frame.maxV = maxV;\n            prepareComponents(frame);\n            break;\n\n          case 0xffc4: // DHT (Define Huffman Tables)\n            const huffmanLength = readUint16(data, offset);\n            offset += 2;\n            for (i = 2; i < huffmanLength; ) {\n              var huffmanTableSpec = data[offset++];\n              var codeLengths = new Uint8Array(16);\n              var codeLengthSum = 0;\n              for (j = 0; j < 16; j++, offset++) {\n                codeLengthSum += codeLengths[j] = data[offset];\n              }\n              var huffmanValues = new Uint8Array(codeLengthSum);\n              for (j = 0; j < codeLengthSum; j++, offset++) {\n                huffmanValues[j] = data[offset];\n              }\n              i += 17 + codeLengthSum;\n\n              (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[\n                huffmanTableSpec & 15\n              ] = buildHuffmanTable(codeLengths, huffmanValues);\n            }\n            break;\n\n          case 0xffdd: // DRI (Define Restart Interval)\n            offset += 2; // Skip marker length.\n\n            resetInterval = readUint16(data, offset);\n            offset += 2;\n            break;\n\n          case 0xffda: // SOS (Start of Scan)\n            // A DNL marker (0xFFDC), if it exists, is only allowed at the end\n            // of the first scan segment and may only occur once in an image.\n            // Furthermore, to prevent an infinite loop, do *not* attempt to\n            // parse DNL markers during re-parsing of the JPEG scan data.\n            const parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines;\n\n            offset += 2; // Skip marker length.\n\n            var selectorsCount = data[offset++];\n            var components = [],\n              component;\n            for (i = 0; i < selectorsCount; i++) {\n              const index = data[offset++];\n              var componentIndex = frame.componentIds[index];\n              component = frame.components[componentIndex];\n              component.index = index;\n              var tableSpec = data[offset++];\n              component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];\n              component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];\n              components.push(component);\n            }\n            var spectralStart = data[offset++];\n            var spectralEnd = data[offset++];\n            var successiveApproximation = data[offset++];\n            try {\n              var processed = decodeScan(\n                data,\n                offset,\n                frame,\n                components,\n                resetInterval,\n                spectralStart,\n                spectralEnd,\n                successiveApproximation >> 4,\n                successiveApproximation & 15,\n                parseDNLMarker\n              );\n              offset += processed;\n            } catch (ex) {\n              if (ex instanceof DNLMarkerError) {\n                warn(`${ex.message} -- attempting to re-parse the JPEG image.`);\n                return this.parse(data, { dnlScanLines: ex.scanLines });\n              } else if (ex instanceof EOIMarkerError) {\n                warn(`${ex.message} -- ignoring the rest of the image data.`);\n                break markerLoop;\n              }\n              throw ex;\n            }\n            break;\n\n          case 0xffdc: // DNL (Define Number of Lines)\n            // Ignore the marker, since it's being handled in `decodeScan`.\n            offset += 4;\n            break;\n\n          case 0xffff: // Fill bytes\n            if (data[offset] !== 0xff) {\n              // Avoid skipping a valid marker.\n              offset--;\n            }\n            break;\n\n          default:\n            // Could be incorrect encoding -- the last 0xFF byte of the previous\n            // block could have been eaten by the encoder, hence we fallback to\n            // `startPos = offset - 3` when looking for the next valid marker.\n            const nextFileMarker = findNextFileMarker(\n              data,\n              /* currentPos = */ offset - 2,\n              /* startPos = */ offset - 3\n            );\n            if (nextFileMarker && nextFileMarker.invalid) {\n              warn(\n                \"JpegImage.parse - unexpected data, current marker is: \" +\n                  nextFileMarker.invalid\n              );\n              offset = nextFileMarker.offset;\n              break;\n            }\n            if (offset >= data.length - 1) {\n              warn(\n                \"JpegImage.parse - reached the end of the image data \" +\n                  \"without finding an EOI marker (0xFFD9).\"\n              );\n              break markerLoop;\n            }\n            throw new JpegError(\n              \"JpegImage.parse - unknown marker: \" + fileMarker.toString(16)\n            );\n        }\n        fileMarker = readUint16(data, offset);\n        offset += 2;\n      }\n\n      this.width = frame.samplesPerLine;\n      this.height = frame.scanLines;\n      this.jfif = jfif;\n      this.adobe = adobe;\n      this.components = [];\n      for (i = 0; i < frame.components.length; i++) {\n        component = frame.components[i];\n\n        // Prevent errors when DQT markers are placed after SOF{n} markers,\n        // by assigning the `quantizationTable` entry after the entire image\n        // has been parsed (fixes issue7406.pdf).\n        var quantizationTable = quantizationTables[component.quantizationId];\n        if (quantizationTable) {\n          component.quantizationTable = quantizationTable;\n        }\n\n        this.components.push({\n          index: component.index,\n          output: buildComponentData(frame, component),\n          scaleX: component.h / frame.maxH,\n          scaleY: component.v / frame.maxV,\n          blocksPerLine: component.blocksPerLine,\n          blocksPerColumn: component.blocksPerColumn,\n        });\n      }\n      this.numComponents = this.components.length;\n      return undefined;\n    },\n\n    _getLinearizedBlockData(width, height, isSourcePDF = false) {\n      var scaleX = this.width / width,\n        scaleY = this.height / height;\n\n      var component, componentScaleX, componentScaleY, blocksPerScanline;\n      var x, y, i, j, k;\n      var index;\n      var offset = 0;\n      var output;\n      var numComponents = this.components.length;\n      var dataLength = width * height * numComponents;\n      var data = new Uint8ClampedArray(dataLength);\n      var xScaleBlockOffset = new Uint32Array(width);\n      var mask3LSB = 0xfffffff8; // used to clear the 3 LSBs\n      let lastComponentScaleX;\n\n      for (i = 0; i < numComponents; i++) {\n        component = this.components[i];\n        componentScaleX = component.scaleX * scaleX;\n        componentScaleY = component.scaleY * scaleY;\n        offset = i;\n        output = component.output;\n        blocksPerScanline = (component.blocksPerLine + 1) << 3;\n        // Precalculate the `xScaleBlockOffset`. Since it doesn't depend on the\n        // component data, that's only necessary when `componentScaleX` changes.\n        if (componentScaleX !== lastComponentScaleX) {\n          for (x = 0; x < width; x++) {\n            j = 0 | (x * componentScaleX);\n            xScaleBlockOffset[x] = ((j & mask3LSB) << 3) | (j & 7);\n          }\n          lastComponentScaleX = componentScaleX;\n        }\n        // linearize the blocks of the component\n        for (y = 0; y < height; y++) {\n          j = 0 | (y * componentScaleY);\n          index = (blocksPerScanline * (j & mask3LSB)) | ((j & 7) << 3);\n          for (x = 0; x < width; x++) {\n            data[offset] = output[index + xScaleBlockOffset[x]];\n            offset += numComponents;\n          }\n        }\n      }\n\n      // decodeTransform contains pairs of multiplier (-256..256) and additive\n      let transform = this._decodeTransform;\n\n      // In PDF files, JPEG images with CMYK colour spaces are usually inverted\n      // (this can be observed by extracting the raw image data).\n      // Since the conversion algorithms (see below) were written primarily for\n      // the PDF use-cases, attempting to use `JpegImage` to parse standalone\n      // JPEG (CMYK) images may thus result in inverted images (see issue 9513).\n      //\n      // Unfortunately it's not (always) possible to tell, from the image data\n      // alone, if it needs to be inverted. Thus in an attempt to provide better\n      // out-of-box behaviour when `JpegImage` is used standalone, default to\n      // inverting JPEG (CMYK) images if and only if the image data does *not*\n      // come from a PDF file and no `decodeTransform` was passed by the user.\n      if (!isSourcePDF && numComponents === 4 && !transform) {\n        // prettier-ignore\n        transform = new Int32Array([\n          -256, 255, -256, 255, -256, 255, -256, 255]);\n      }\n\n      if (transform) {\n        for (i = 0; i < dataLength; ) {\n          for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) {\n            data[i] = ((data[i] * transform[k]) >> 8) + transform[k + 1];\n          }\n        }\n      }\n      return data;\n    },\n\n    get _isColorConversionNeeded() {\n      if (this.adobe) {\n        // The adobe transform marker overrides any previous setting.\n        return !!this.adobe.transformCode;\n      }\n      if (this.numComponents === 3) {\n        if (this._colorTransform === 0) {\n          // If the Adobe transform marker is not present and the image\n          // dictionary has a 'ColorTransform' entry, explicitly set to `0`,\n          // then the colours should *not* be transformed.\n          return false;\n        } else if (\n          this.components[0].index === /* \"R\" = */ 0x52 &&\n          this.components[1].index === /* \"G\" = */ 0x47 &&\n          this.components[2].index === /* \"B\" = */ 0x42\n        ) {\n          // If the three components are indexed as RGB in ASCII\n          // then the colours should *not* be transformed.\n          return false;\n        }\n        return true;\n      }\n      // `this.numComponents !== 3`\n      if (this._colorTransform === 1) {\n        // If the Adobe transform marker is not present and the image\n        // dictionary has a 'ColorTransform' entry, explicitly set to `1`,\n        // then the colours should be transformed.\n        return true;\n      }\n      return false;\n    },\n\n    _convertYccToRgb: function convertYccToRgb(data) {\n      var Y, Cb, Cr;\n      for (var i = 0, length = data.length; i < length; i += 3) {\n        Y = data[i];\n        Cb = data[i + 1];\n        Cr = data[i + 2];\n        data[i] = Y - 179.456 + 1.402 * Cr;\n        data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr;\n        data[i + 2] = Y - 226.816 + 1.772 * Cb;\n      }\n      return data;\n    },\n\n    _convertYcckToRgb: function convertYcckToRgb(data) {\n      var Y, Cb, Cr, k;\n      var offset = 0;\n      for (var i = 0, length = data.length; i < length; i += 4) {\n        Y = data[i];\n        Cb = data[i + 1];\n        Cr = data[i + 2];\n        k = data[i + 3];\n\n        data[offset++] =\n          -122.67195406894 +\n          Cb *\n            (-6.60635669420364e-5 * Cb +\n              0.000437130475926232 * Cr -\n              5.4080610064599e-5 * Y +\n              0.00048449797120281 * k -\n              0.154362151871126) +\n          Cr *\n            (-0.000957964378445773 * Cr +\n              0.000817076911346625 * Y -\n              0.00477271405408747 * k +\n              1.53380253221734) +\n          Y *\n            (0.000961250184130688 * Y -\n              0.00266257332283933 * k +\n              0.48357088451265) +\n          k * (-0.000336197177618394 * k + 0.484791561490776);\n\n        data[offset++] =\n          107.268039397724 +\n          Cb *\n            (2.19927104525741e-5 * Cb -\n              0.000640992018297945 * Cr +\n              0.000659397001245577 * Y +\n              0.000426105652938837 * k -\n              0.176491792462875) +\n          Cr *\n            (-0.000778269941513683 * Cr +\n              0.00130872261408275 * Y +\n              0.000770482631801132 * k -\n              0.151051492775562) +\n          Y *\n            (0.00126935368114843 * Y -\n              0.00265090189010898 * k +\n              0.25802910206845) +\n          k * (-0.000318913117588328 * k - 0.213742400323665);\n\n        data[offset++] =\n          -20.810012546947 +\n          Cb *\n            (-0.000570115196973677 * Cb -\n              2.63409051004589e-5 * Cr +\n              0.0020741088115012 * Y -\n              0.00288260236853442 * k +\n              0.814272968359295) +\n          Cr *\n            (-1.53496057440975e-5 * Cr -\n              0.000132689043961446 * Y +\n              0.000560833691242812 * k -\n              0.195152027534049) +\n          Y *\n            (0.00174418132927582 * Y -\n              0.00255243321439347 * k +\n              0.116935020465145) +\n          k * (-0.000343531996510555 * k + 0.24165260232407);\n      }\n      // Ensure that only the converted RGB data is returned.\n      return data.subarray(0, offset);\n    },\n\n    _convertYcckToCmyk: function convertYcckToCmyk(data) {\n      var Y, Cb, Cr;\n      for (var i = 0, length = data.length; i < length; i += 4) {\n        Y = data[i];\n        Cb = data[i + 1];\n        Cr = data[i + 2];\n        data[i] = 434.456 - Y - 1.402 * Cr;\n        data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr;\n        data[i + 2] = 481.816 - Y - 1.772 * Cb;\n        // K in data[i + 3] is unchanged\n      }\n      return data;\n    },\n\n    _convertCmykToRgb: function convertCmykToRgb(data) {\n      var c, m, y, k;\n      var offset = 0;\n      for (var i = 0, length = data.length; i < length; i += 4) {\n        c = data[i];\n        m = data[i + 1];\n        y = data[i + 2];\n        k = data[i + 3];\n\n        data[offset++] =\n          255 +\n          c *\n            (-0.00006747147073602441 * c +\n              0.0008379262121013727 * m +\n              0.0002894718188643294 * y +\n              0.003264231057537806 * k -\n              1.1185611867203937) +\n          m *\n            (0.000026374107616089405 * m -\n              0.00008626949158638572 * y -\n              0.0002748769067499491 * k -\n              0.02155688794978967) +\n          y *\n            (-0.00003878099212869363 * y -\n              0.0003267808279485286 * k +\n              0.0686742238595345) -\n          k * (0.0003361971776183937 * k + 0.7430659151342254);\n\n        data[offset++] =\n          255 +\n          c *\n            (0.00013596372813588848 * c +\n              0.000924537132573585 * m +\n              0.00010567359618683593 * y +\n              0.0004791864687436512 * k -\n              0.3109689587515875) +\n          m *\n            (-0.00023545346108370344 * m +\n              0.0002702845253534714 * y +\n              0.0020200308977307156 * k -\n              0.7488052167015494) +\n          y *\n            (0.00006834815998235662 * y +\n              0.00015168452363460973 * k -\n              0.09751927774728933) -\n          k * (0.00031891311758832814 * k + 0.7364883807733168);\n\n        data[offset++] =\n          255 +\n          c *\n            (0.000013598650411385307 * c +\n              0.00012423956175490851 * m +\n              0.0004751985097583589 * y -\n              0.0000036729317476630422 * k -\n              0.05562186980264034) +\n          m *\n            (0.00016141380598724676 * m +\n              0.0009692239130725186 * y +\n              0.0007782692450036253 * k -\n              0.44015232367526463) +\n          y *\n            (5.068882914068769e-7 * y +\n              0.0017778369011375071 * k -\n              0.7591454649749609) -\n          k * (0.0003435319965105553 * k + 0.7063770186160144);\n      }\n      // Ensure that only the converted RGB data is returned.\n      return data.subarray(0, offset);\n    },\n\n    getData({ width, height, forceRGB = false, isSourcePDF = false }) {\n      if (\n        typeof PDFJSDev === \"undefined\" ||\n        PDFJSDev.test(\"!PRODUCTION || TESTING\")\n      ) {\n        assert(\n          isSourcePDF === true,\n          'JpegImage.getData: Unexpected \"isSourcePDF\" value for PDF files.'\n        );\n      }\n      if (this.numComponents > 4) {\n        throw new JpegError(\"Unsupported color mode\");\n      }\n      // Type of data: Uint8ClampedArray(width * height * numComponents)\n      var data = this._getLinearizedBlockData(width, height, isSourcePDF);\n\n      if (this.numComponents === 1 && forceRGB) {\n        var dataLength = data.length;\n        var rgbData = new Uint8ClampedArray(dataLength * 3);\n        var offset = 0;\n        for (var i = 0; i < dataLength; i++) {\n          var grayColor = data[i];\n          rgbData[offset++] = grayColor;\n          rgbData[offset++] = grayColor;\n          rgbData[offset++] = grayColor;\n        }\n        return rgbData;\n      } else if (this.numComponents === 3 && this._isColorConversionNeeded) {\n        return this._convertYccToRgb(data);\n      } else if (this.numComponents === 4) {\n        if (this._isColorConversionNeeded) {\n          if (forceRGB) {\n            return this._convertYcckToRgb(data);\n          }\n          return this._convertYcckToCmyk(data);\n        } else if (forceRGB) {\n          return this._convertCmykToRgb(data);\n        }\n      }\n      return data;\n    },\n  };\n\n  return JpegImage;\n})();\n\nexport { JpegImage };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BaseException, info, warn } from \"../shared/util.js\";\nimport { log2, readUint16, readUint32 } from \"./core_utils.js\";\nimport { ArithmeticDecoder } from \"./arithmetic_decoder.js\";\n\nclass JpxError extends BaseException {\n  constructor(msg) {\n    super(`JPX error: ${msg}`);\n  }\n}\n\nvar JpxImage = (function JpxImageClosure() {\n  // Table E.1\n  var SubbandsGainLog2 = {\n    LL: 0,\n    LH: 1,\n    HL: 1,\n    HH: 2,\n  };\n\n  // eslint-disable-next-line no-shadow\n  function JpxImage() {\n    this.failOnCorruptedImage = false;\n  }\n  JpxImage.prototype = {\n    parse: function JpxImage_parse(data) {\n      var head = readUint16(data, 0);\n      // No box header, immediate start of codestream (SOC)\n      if (head === 0xff4f) {\n        this.parseCodestream(data, 0, data.length);\n        return;\n      }\n\n      var position = 0,\n        length = data.length;\n      while (position < length) {\n        var headerSize = 8;\n        var lbox = readUint32(data, position);\n        var tbox = readUint32(data, position + 4);\n        position += headerSize;\n        if (lbox === 1) {\n          // XLBox: read UInt64 according to spec.\n          // JavaScript's int precision of 53 bit should be sufficient here.\n          lbox =\n            readUint32(data, position) * 4294967296 +\n            readUint32(data, position + 4);\n          position += 8;\n          headerSize += 8;\n        }\n        if (lbox === 0) {\n          lbox = length - position + headerSize;\n        }\n        if (lbox < headerSize) {\n          throw new JpxError(\"Invalid box field size\");\n        }\n        var dataLength = lbox - headerSize;\n        var jumpDataLength = true;\n        switch (tbox) {\n          case 0x6a703268: // 'jp2h'\n            jumpDataLength = false; // parsing child boxes\n            break;\n          case 0x636f6c72: // 'colr'\n            // Colorspaces are not used, the CS from the PDF is used.\n            var method = data[position];\n            if (method === 1) {\n              // enumerated colorspace\n              var colorspace = readUint32(data, position + 3);\n              switch (colorspace) {\n                case 16: // this indicates a sRGB colorspace\n                case 17: // this indicates a grayscale colorspace\n                case 18: // this indicates a YUV colorspace\n                  break;\n                default:\n                  warn(\"Unknown colorspace \" + colorspace);\n                  break;\n              }\n            } else if (method === 2) {\n              info(\"ICC profile not supported\");\n            }\n            break;\n          case 0x6a703263: // 'jp2c'\n            this.parseCodestream(data, position, position + dataLength);\n            break;\n          case 0x6a502020: // 'jP\\024\\024'\n            if (readUint32(data, position) !== 0x0d0a870a) {\n              warn(\"Invalid JP2 signature\");\n            }\n            break;\n          // The following header types are valid but currently not used:\n          case 0x6a501a1a: // 'jP\\032\\032'\n          case 0x66747970: // 'ftyp'\n          case 0x72726571: // 'rreq'\n          case 0x72657320: // 'res '\n          case 0x69686472: // 'ihdr'\n            break;\n          default:\n            var headerType = String.fromCharCode(\n              (tbox >> 24) & 0xff,\n              (tbox >> 16) & 0xff,\n              (tbox >> 8) & 0xff,\n              tbox & 0xff\n            );\n            warn(\"Unsupported header type \" + tbox + \" (\" + headerType + \")\");\n            break;\n        }\n        if (jumpDataLength) {\n          position += dataLength;\n        }\n      }\n    },\n    parseImageProperties: function JpxImage_parseImageProperties(stream) {\n      var newByte = stream.getByte();\n      while (newByte >= 0) {\n        var oldByte = newByte;\n        newByte = stream.getByte();\n        var code = (oldByte << 8) | newByte;\n        // Image and tile size (SIZ)\n        if (code === 0xff51) {\n          stream.skip(4);\n          var Xsiz = stream.getInt32() >>> 0; // Byte 4\n          var Ysiz = stream.getInt32() >>> 0; // Byte 8\n          var XOsiz = stream.getInt32() >>> 0; // Byte 12\n          var YOsiz = stream.getInt32() >>> 0; // Byte 16\n          stream.skip(16);\n          var Csiz = stream.getUint16(); // Byte 36\n          this.width = Xsiz - XOsiz;\n          this.height = Ysiz - YOsiz;\n          this.componentsCount = Csiz;\n          // Results are always returned as `Uint8ClampedArray`s.\n          this.bitsPerComponent = 8;\n          return;\n        }\n      }\n      throw new JpxError(\"No size marker found in JPX stream\");\n    },\n    parseCodestream: function JpxImage_parseCodestream(data, start, end) {\n      var context = {};\n      var doNotRecover = false;\n      try {\n        var position = start;\n        while (position + 1 < end) {\n          var code = readUint16(data, position);\n          position += 2;\n\n          var length = 0,\n            j,\n            sqcd,\n            spqcds,\n            spqcdSize,\n            scalarExpounded,\n            tile;\n          switch (code) {\n            case 0xff4f: // Start of codestream (SOC)\n              context.mainHeader = true;\n              break;\n            case 0xffd9: // End of codestream (EOC)\n              break;\n            case 0xff51: // Image and tile size (SIZ)\n              length = readUint16(data, position);\n              var siz = {};\n              siz.Xsiz = readUint32(data, position + 4);\n              siz.Ysiz = readUint32(data, position + 8);\n              siz.XOsiz = readUint32(data, position + 12);\n              siz.YOsiz = readUint32(data, position + 16);\n              siz.XTsiz = readUint32(data, position + 20);\n              siz.YTsiz = readUint32(data, position + 24);\n              siz.XTOsiz = readUint32(data, position + 28);\n              siz.YTOsiz = readUint32(data, position + 32);\n              var componentsCount = readUint16(data, position + 36);\n              siz.Csiz = componentsCount;\n              var components = [];\n              j = position + 38;\n              for (var i = 0; i < componentsCount; i++) {\n                var component = {\n                  precision: (data[j] & 0x7f) + 1,\n                  isSigned: !!(data[j] & 0x80),\n                  XRsiz: data[j + 1],\n                  YRsiz: data[j + 2],\n                };\n                j += 3;\n                calculateComponentDimensions(component, siz);\n                components.push(component);\n              }\n              context.SIZ = siz;\n              context.components = components;\n              calculateTileGrids(context, components);\n              context.QCC = [];\n              context.COC = [];\n              break;\n            case 0xff5c: // Quantization default (QCD)\n              length = readUint16(data, position);\n              var qcd = {};\n              j = position + 2;\n              sqcd = data[j++];\n              switch (sqcd & 0x1f) {\n                case 0:\n                  spqcdSize = 8;\n                  scalarExpounded = true;\n                  break;\n                case 1:\n                  spqcdSize = 16;\n                  scalarExpounded = false;\n                  break;\n                case 2:\n                  spqcdSize = 16;\n                  scalarExpounded = true;\n                  break;\n                default:\n                  throw new Error(\"Invalid SQcd value \" + sqcd);\n              }\n              qcd.noQuantization = spqcdSize === 8;\n              qcd.scalarExpounded = scalarExpounded;\n              qcd.guardBits = sqcd >> 5;\n              spqcds = [];\n              while (j < length + position) {\n                var spqcd = {};\n                if (spqcdSize === 8) {\n                  spqcd.epsilon = data[j++] >> 3;\n                  spqcd.mu = 0;\n                } else {\n                  spqcd.epsilon = data[j] >> 3;\n                  spqcd.mu = ((data[j] & 0x7) << 8) | data[j + 1];\n                  j += 2;\n                }\n                spqcds.push(spqcd);\n              }\n              qcd.SPqcds = spqcds;\n              if (context.mainHeader) {\n                context.QCD = qcd;\n              } else {\n                context.currentTile.QCD = qcd;\n                context.currentTile.QCC = [];\n              }\n              break;\n            case 0xff5d: // Quantization component (QCC)\n              length = readUint16(data, position);\n              var qcc = {};\n              j = position + 2;\n              var cqcc;\n              if (context.SIZ.Csiz < 257) {\n                cqcc = data[j++];\n              } else {\n                cqcc = readUint16(data, j);\n                j += 2;\n              }\n              sqcd = data[j++];\n              switch (sqcd & 0x1f) {\n                case 0:\n                  spqcdSize = 8;\n                  scalarExpounded = true;\n                  break;\n                case 1:\n                  spqcdSize = 16;\n                  scalarExpounded = false;\n                  break;\n                case 2:\n                  spqcdSize = 16;\n                  scalarExpounded = true;\n                  break;\n                default:\n                  throw new Error(\"Invalid SQcd value \" + sqcd);\n              }\n              qcc.noQuantization = spqcdSize === 8;\n              qcc.scalarExpounded = scalarExpounded;\n              qcc.guardBits = sqcd >> 5;\n              spqcds = [];\n              while (j < length + position) {\n                spqcd = {};\n                if (spqcdSize === 8) {\n                  spqcd.epsilon = data[j++] >> 3;\n                  spqcd.mu = 0;\n                } else {\n                  spqcd.epsilon = data[j] >> 3;\n                  spqcd.mu = ((data[j] & 0x7) << 8) | data[j + 1];\n                  j += 2;\n                }\n                spqcds.push(spqcd);\n              }\n              qcc.SPqcds = spqcds;\n              if (context.mainHeader) {\n                context.QCC[cqcc] = qcc;\n              } else {\n                context.currentTile.QCC[cqcc] = qcc;\n              }\n              break;\n            case 0xff52: // Coding style default (COD)\n              length = readUint16(data, position);\n              var cod = {};\n              j = position + 2;\n              var scod = data[j++];\n              cod.entropyCoderWithCustomPrecincts = !!(scod & 1);\n              cod.sopMarkerUsed = !!(scod & 2);\n              cod.ephMarkerUsed = !!(scod & 4);\n              cod.progressionOrder = data[j++];\n              cod.layersCount = readUint16(data, j);\n              j += 2;\n              cod.multipleComponentTransform = data[j++];\n\n              cod.decompositionLevelsCount = data[j++];\n              cod.xcb = (data[j++] & 0xf) + 2;\n              cod.ycb = (data[j++] & 0xf) + 2;\n              var blockStyle = data[j++];\n              cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1);\n              cod.resetContextProbabilities = !!(blockStyle & 2);\n              cod.terminationOnEachCodingPass = !!(blockStyle & 4);\n              cod.verticallyStripe = !!(blockStyle & 8);\n              cod.predictableTermination = !!(blockStyle & 16);\n              cod.segmentationSymbolUsed = !!(blockStyle & 32);\n              cod.reversibleTransformation = data[j++];\n              if (cod.entropyCoderWithCustomPrecincts) {\n                var precinctsSizes = [];\n                while (j < length + position) {\n                  var precinctsSize = data[j++];\n                  precinctsSizes.push({\n                    PPx: precinctsSize & 0xf,\n                    PPy: precinctsSize >> 4,\n                  });\n                }\n                cod.precinctsSizes = precinctsSizes;\n              }\n              var unsupported = [];\n              if (cod.selectiveArithmeticCodingBypass) {\n                unsupported.push(\"selectiveArithmeticCodingBypass\");\n              }\n              if (cod.resetContextProbabilities) {\n                unsupported.push(\"resetContextProbabilities\");\n              }\n              if (cod.terminationOnEachCodingPass) {\n                unsupported.push(\"terminationOnEachCodingPass\");\n              }\n              if (cod.verticallyStripe) {\n                unsupported.push(\"verticallyStripe\");\n              }\n              if (cod.predictableTermination) {\n                unsupported.push(\"predictableTermination\");\n              }\n              if (unsupported.length > 0) {\n                doNotRecover = true;\n                throw new Error(\n                  \"Unsupported COD options (\" + unsupported.join(\", \") + \")\"\n                );\n              }\n              if (context.mainHeader) {\n                context.COD = cod;\n              } else {\n                context.currentTile.COD = cod;\n                context.currentTile.COC = [];\n              }\n              break;\n            case 0xff90: // Start of tile-part (SOT)\n              length = readUint16(data, position);\n              tile = {};\n              tile.index = readUint16(data, position + 2);\n              tile.length = readUint32(data, position + 4);\n              tile.dataEnd = tile.length + position - 2;\n              tile.partIndex = data[position + 8];\n              tile.partsCount = data[position + 9];\n\n              context.mainHeader = false;\n              if (tile.partIndex === 0) {\n                // reset component specific settings\n                tile.COD = context.COD;\n                tile.COC = context.COC.slice(0); // clone of the global COC\n                tile.QCD = context.QCD;\n                tile.QCC = context.QCC.slice(0); // clone of the global COC\n              }\n              context.currentTile = tile;\n              break;\n            case 0xff93: // Start of data (SOD)\n              tile = context.currentTile;\n              if (tile.partIndex === 0) {\n                initializeTile(context, tile.index);\n                buildPackets(context);\n              }\n\n              // moving to the end of the data\n              length = tile.dataEnd - position;\n              parseTilePackets(context, data, position, length);\n              break;\n            case 0xff55: // Tile-part lengths, main header (TLM)\n            case 0xff57: // Packet length, main header (PLM)\n            case 0xff58: // Packet length, tile-part header (PLT)\n            case 0xff64: // Comment (COM)\n              length = readUint16(data, position);\n              // skipping content\n              break;\n            case 0xff53: // Coding style component (COC)\n              throw new Error(\n                \"Codestream code 0xFF53 (COC) is not implemented\"\n              );\n            default:\n              throw new Error(\"Unknown codestream code: \" + code.toString(16));\n          }\n          position += length;\n        }\n      } catch (e) {\n        if (doNotRecover || this.failOnCorruptedImage) {\n          throw new JpxError(e.message);\n        } else {\n          warn(\"JPX: Trying to recover from: \" + e.message);\n        }\n      }\n      this.tiles = transformComponents(context);\n      this.width = context.SIZ.Xsiz - context.SIZ.XOsiz;\n      this.height = context.SIZ.Ysiz - context.SIZ.YOsiz;\n      this.componentsCount = context.SIZ.Csiz;\n    },\n  };\n  function calculateComponentDimensions(component, siz) {\n    // Section B.2 Component mapping\n    component.x0 = Math.ceil(siz.XOsiz / component.XRsiz);\n    component.x1 = Math.ceil(siz.Xsiz / component.XRsiz);\n    component.y0 = Math.ceil(siz.YOsiz / component.YRsiz);\n    component.y1 = Math.ceil(siz.Ysiz / component.YRsiz);\n    component.width = component.x1 - component.x0;\n    component.height = component.y1 - component.y0;\n  }\n  function calculateTileGrids(context, components) {\n    var siz = context.SIZ;\n    // Section B.3 Division into tile and tile-components\n    var tile,\n      tiles = [];\n    var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz);\n    var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz);\n    for (var q = 0; q < numYtiles; q++) {\n      for (var p = 0; p < numXtiles; p++) {\n        tile = {};\n        tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz);\n        tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz);\n        tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz);\n        tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz);\n        tile.width = tile.tx1 - tile.tx0;\n        tile.height = tile.ty1 - tile.ty0;\n        tile.components = [];\n        tiles.push(tile);\n      }\n    }\n    context.tiles = tiles;\n\n    var componentsCount = siz.Csiz;\n    for (var i = 0, ii = componentsCount; i < ii; i++) {\n      var component = components[i];\n      for (var j = 0, jj = tiles.length; j < jj; j++) {\n        var tileComponent = {};\n        tile = tiles[j];\n        tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz);\n        tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz);\n        tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz);\n        tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz);\n        tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0;\n        tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0;\n        tile.components[i] = tileComponent;\n      }\n    }\n  }\n  function getBlocksDimensions(context, component, r) {\n    var codOrCoc = component.codingStyleParameters;\n    var result = {};\n    if (!codOrCoc.entropyCoderWithCustomPrecincts) {\n      result.PPx = 15;\n      result.PPy = 15;\n    } else {\n      result.PPx = codOrCoc.precinctsSizes[r].PPx;\n      result.PPy = codOrCoc.precinctsSizes[r].PPy;\n    }\n    // calculate codeblock size as described in section B.7\n    result.xcb_ =\n      r > 0\n        ? Math.min(codOrCoc.xcb, result.PPx - 1)\n        : Math.min(codOrCoc.xcb, result.PPx);\n    result.ycb_ =\n      r > 0\n        ? Math.min(codOrCoc.ycb, result.PPy - 1)\n        : Math.min(codOrCoc.ycb, result.PPy);\n    return result;\n  }\n  function buildPrecincts(context, resolution, dimensions) {\n    // Section B.6 Division resolution to precincts\n    var precinctWidth = 1 << dimensions.PPx;\n    var precinctHeight = 1 << dimensions.PPy;\n    // Jasper introduces codeblock groups for mapping each subband codeblocks\n    // to precincts. Precinct partition divides a resolution according to width\n    // and height parameters. The subband that belongs to the resolution level\n    // has a different size than the level, unless it is the zero resolution.\n\n    // From Jasper documentation: jpeg2000.pdf, section K: Tier-2 coding:\n    // The precinct partitioning for a particular subband is derived from a\n    // partitioning of its parent LL band (i.e., the LL band at the next higher\n    // resolution level)... The LL band associated with each resolution level is\n    // divided into precincts... Each of the resulting precinct regions is then\n    // mapped into its child subbands (if any) at the next lower resolution\n    // level. This is accomplished by using the coordinate transformation\n    // (u, v) = (ceil(x/2), ceil(y/2)) where (x, y) and (u, v) are the\n    // coordinates of a point in the LL band and child subband, respectively.\n    var isZeroRes = resolution.resLevel === 0;\n    var precinctWidthInSubband = 1 << (dimensions.PPx + (isZeroRes ? 0 : -1));\n    var precinctHeightInSubband = 1 << (dimensions.PPy + (isZeroRes ? 0 : -1));\n    var numprecinctswide =\n      resolution.trx1 > resolution.trx0\n        ? Math.ceil(resolution.trx1 / precinctWidth) -\n          Math.floor(resolution.trx0 / precinctWidth)\n        : 0;\n    var numprecinctshigh =\n      resolution.try1 > resolution.try0\n        ? Math.ceil(resolution.try1 / precinctHeight) -\n          Math.floor(resolution.try0 / precinctHeight)\n        : 0;\n    var numprecincts = numprecinctswide * numprecinctshigh;\n\n    resolution.precinctParameters = {\n      precinctWidth,\n      precinctHeight,\n      numprecinctswide,\n      numprecinctshigh,\n      numprecincts,\n      precinctWidthInSubband,\n      precinctHeightInSubband,\n    };\n  }\n  function buildCodeblocks(context, subband, dimensions) {\n    // Section B.7 Division sub-band into code-blocks\n    var xcb_ = dimensions.xcb_;\n    var ycb_ = dimensions.ycb_;\n    var codeblockWidth = 1 << xcb_;\n    var codeblockHeight = 1 << ycb_;\n    var cbx0 = subband.tbx0 >> xcb_;\n    var cby0 = subband.tby0 >> ycb_;\n    var cbx1 = (subband.tbx1 + codeblockWidth - 1) >> xcb_;\n    var cby1 = (subband.tby1 + codeblockHeight - 1) >> ycb_;\n    var precinctParameters = subband.resolution.precinctParameters;\n    var codeblocks = [];\n    var precincts = [];\n    var i, j, codeblock, precinctNumber;\n    for (j = cby0; j < cby1; j++) {\n      for (i = cbx0; i < cbx1; i++) {\n        codeblock = {\n          cbx: i,\n          cby: j,\n          tbx0: codeblockWidth * i,\n          tby0: codeblockHeight * j,\n          tbx1: codeblockWidth * (i + 1),\n          tby1: codeblockHeight * (j + 1),\n        };\n\n        codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0);\n        codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0);\n        codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1);\n        codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1);\n\n        // Calculate precinct number for this codeblock, codeblock position\n        // should be relative to its subband, use actual dimension and position\n        // See comment about codeblock group width and height\n        var pi = Math.floor(\n          (codeblock.tbx0_ - subband.tbx0) /\n            precinctParameters.precinctWidthInSubband\n        );\n        var pj = Math.floor(\n          (codeblock.tby0_ - subband.tby0) /\n            precinctParameters.precinctHeightInSubband\n        );\n        precinctNumber = pi + pj * precinctParameters.numprecinctswide;\n\n        codeblock.precinctNumber = precinctNumber;\n        codeblock.subbandType = subband.type;\n        codeblock.Lblock = 3;\n\n        if (\n          codeblock.tbx1_ <= codeblock.tbx0_ ||\n          codeblock.tby1_ <= codeblock.tby0_\n        ) {\n          continue;\n        }\n        codeblocks.push(codeblock);\n        // building precinct for the sub-band\n        var precinct = precincts[precinctNumber];\n        if (precinct !== undefined) {\n          if (i < precinct.cbxMin) {\n            precinct.cbxMin = i;\n          } else if (i > precinct.cbxMax) {\n            precinct.cbxMax = i;\n          }\n          if (j < precinct.cbyMin) {\n            precinct.cbxMin = j;\n          } else if (j > precinct.cbyMax) {\n            precinct.cbyMax = j;\n          }\n        } else {\n          precincts[precinctNumber] = precinct = {\n            cbxMin: i,\n            cbyMin: j,\n            cbxMax: i,\n            cbyMax: j,\n          };\n        }\n        codeblock.precinct = precinct;\n      }\n    }\n    subband.codeblockParameters = {\n      codeblockWidth: xcb_,\n      codeblockHeight: ycb_,\n      numcodeblockwide: cbx1 - cbx0 + 1,\n      numcodeblockhigh: cby1 - cby0 + 1,\n    };\n    subband.codeblocks = codeblocks;\n    subband.precincts = precincts;\n  }\n  function createPacket(resolution, precinctNumber, layerNumber) {\n    var precinctCodeblocks = [];\n    // Section B.10.8 Order of info in packet\n    var subbands = resolution.subbands;\n    // sub-bands already ordered in 'LL', 'HL', 'LH', and 'HH' sequence\n    for (var i = 0, ii = subbands.length; i < ii; i++) {\n      var subband = subbands[i];\n      var codeblocks = subband.codeblocks;\n      for (var j = 0, jj = codeblocks.length; j < jj; j++) {\n        var codeblock = codeblocks[j];\n        if (codeblock.precinctNumber !== precinctNumber) {\n          continue;\n        }\n        precinctCodeblocks.push(codeblock);\n      }\n    }\n    return {\n      layerNumber,\n      codeblocks: precinctCodeblocks,\n    };\n  }\n  function LayerResolutionComponentPositionIterator(context) {\n    var siz = context.SIZ;\n    var tileIndex = context.currentTile.index;\n    var tile = context.tiles[tileIndex];\n    var layersCount = tile.codingStyleDefaultParameters.layersCount;\n    var componentsCount = siz.Csiz;\n    var maxDecompositionLevelsCount = 0;\n    for (var q = 0; q < componentsCount; q++) {\n      maxDecompositionLevelsCount = Math.max(\n        maxDecompositionLevelsCount,\n        tile.components[q].codingStyleParameters.decompositionLevelsCount\n      );\n    }\n\n    var l = 0,\n      r = 0,\n      i = 0,\n      k = 0;\n\n    this.nextPacket = function JpxImage_nextPacket() {\n      // Section B.12.1.1 Layer-resolution-component-position\n      for (; l < layersCount; l++) {\n        for (; r <= maxDecompositionLevelsCount; r++) {\n          for (; i < componentsCount; i++) {\n            var component = tile.components[i];\n            if (r > component.codingStyleParameters.decompositionLevelsCount) {\n              continue;\n            }\n\n            var resolution = component.resolutions[r];\n            var numprecincts = resolution.precinctParameters.numprecincts;\n            for (; k < numprecincts; ) {\n              var packet = createPacket(resolution, k, l);\n              k++;\n              return packet;\n            }\n            k = 0;\n          }\n          i = 0;\n        }\n        r = 0;\n      }\n      throw new JpxError(\"Out of packets\");\n    };\n  }\n  function ResolutionLayerComponentPositionIterator(context) {\n    var siz = context.SIZ;\n    var tileIndex = context.currentTile.index;\n    var tile = context.tiles[tileIndex];\n    var layersCount = tile.codingStyleDefaultParameters.layersCount;\n    var componentsCount = siz.Csiz;\n    var maxDecompositionLevelsCount = 0;\n    for (var q = 0; q < componentsCount; q++) {\n      maxDecompositionLevelsCount = Math.max(\n        maxDecompositionLevelsCount,\n        tile.components[q].codingStyleParameters.decompositionLevelsCount\n      );\n    }\n\n    var r = 0,\n      l = 0,\n      i = 0,\n      k = 0;\n\n    this.nextPacket = function JpxImage_nextPacket() {\n      // Section B.12.1.2 Resolution-layer-component-position\n      for (; r <= maxDecompositionLevelsCount; r++) {\n        for (; l < layersCount; l++) {\n          for (; i < componentsCount; i++) {\n            var component = tile.components[i];\n            if (r > component.codingStyleParameters.decompositionLevelsCount) {\n              continue;\n            }\n\n            var resolution = component.resolutions[r];\n            var numprecincts = resolution.precinctParameters.numprecincts;\n            for (; k < numprecincts; ) {\n              var packet = createPacket(resolution, k, l);\n              k++;\n              return packet;\n            }\n            k = 0;\n          }\n          i = 0;\n        }\n        l = 0;\n      }\n      throw new JpxError(\"Out of packets\");\n    };\n  }\n  function ResolutionPositionComponentLayerIterator(context) {\n    var siz = context.SIZ;\n    var tileIndex = context.currentTile.index;\n    var tile = context.tiles[tileIndex];\n    var layersCount = tile.codingStyleDefaultParameters.layersCount;\n    var componentsCount = siz.Csiz;\n    var l, r, c, p;\n    var maxDecompositionLevelsCount = 0;\n    for (c = 0; c < componentsCount; c++) {\n      const component = tile.components[c];\n      maxDecompositionLevelsCount = Math.max(\n        maxDecompositionLevelsCount,\n        component.codingStyleParameters.decompositionLevelsCount\n      );\n    }\n    var maxNumPrecinctsInLevel = new Int32Array(\n      maxDecompositionLevelsCount + 1\n    );\n    for (r = 0; r <= maxDecompositionLevelsCount; ++r) {\n      var maxNumPrecincts = 0;\n      for (c = 0; c < componentsCount; ++c) {\n        var resolutions = tile.components[c].resolutions;\n        if (r < resolutions.length) {\n          maxNumPrecincts = Math.max(\n            maxNumPrecincts,\n            resolutions[r].precinctParameters.numprecincts\n          );\n        }\n      }\n      maxNumPrecinctsInLevel[r] = maxNumPrecincts;\n    }\n    l = 0;\n    r = 0;\n    c = 0;\n    p = 0;\n\n    this.nextPacket = function JpxImage_nextPacket() {\n      // Section B.12.1.3 Resolution-position-component-layer\n      for (; r <= maxDecompositionLevelsCount; r++) {\n        for (; p < maxNumPrecinctsInLevel[r]; p++) {\n          for (; c < componentsCount; c++) {\n            const component = tile.components[c];\n            if (r > component.codingStyleParameters.decompositionLevelsCount) {\n              continue;\n            }\n            var resolution = component.resolutions[r];\n            var numprecincts = resolution.precinctParameters.numprecincts;\n            if (p >= numprecincts) {\n              continue;\n            }\n            for (; l < layersCount; ) {\n              var packet = createPacket(resolution, p, l);\n              l++;\n              return packet;\n            }\n            l = 0;\n          }\n          c = 0;\n        }\n        p = 0;\n      }\n      throw new JpxError(\"Out of packets\");\n    };\n  }\n  function PositionComponentResolutionLayerIterator(context) {\n    var siz = context.SIZ;\n    var tileIndex = context.currentTile.index;\n    var tile = context.tiles[tileIndex];\n    var layersCount = tile.codingStyleDefaultParameters.layersCount;\n    var componentsCount = siz.Csiz;\n    var precinctsSizes = getPrecinctSizesInImageScale(tile);\n    var precinctsIterationSizes = precinctsSizes;\n    var l = 0,\n      r = 0,\n      c = 0,\n      px = 0,\n      py = 0;\n\n    this.nextPacket = function JpxImage_nextPacket() {\n      // Section B.12.1.4 Position-component-resolution-layer\n      for (; py < precinctsIterationSizes.maxNumHigh; py++) {\n        for (; px < precinctsIterationSizes.maxNumWide; px++) {\n          for (; c < componentsCount; c++) {\n            var component = tile.components[c];\n            var decompositionLevelsCount =\n              component.codingStyleParameters.decompositionLevelsCount;\n            for (; r <= decompositionLevelsCount; r++) {\n              var resolution = component.resolutions[r];\n              var sizeInImageScale =\n                precinctsSizes.components[c].resolutions[r];\n              var k = getPrecinctIndexIfExist(\n                px,\n                py,\n                sizeInImageScale,\n                precinctsIterationSizes,\n                resolution\n              );\n              if (k === null) {\n                continue;\n              }\n              for (; l < layersCount; ) {\n                var packet = createPacket(resolution, k, l);\n                l++;\n                return packet;\n              }\n              l = 0;\n            }\n            r = 0;\n          }\n          c = 0;\n        }\n        px = 0;\n      }\n      throw new JpxError(\"Out of packets\");\n    };\n  }\n  function ComponentPositionResolutionLayerIterator(context) {\n    var siz = context.SIZ;\n    var tileIndex = context.currentTile.index;\n    var tile = context.tiles[tileIndex];\n    var layersCount = tile.codingStyleDefaultParameters.layersCount;\n    var componentsCount = siz.Csiz;\n    var precinctsSizes = getPrecinctSizesInImageScale(tile);\n    var l = 0,\n      r = 0,\n      c = 0,\n      px = 0,\n      py = 0;\n\n    this.nextPacket = function JpxImage_nextPacket() {\n      // Section B.12.1.5 Component-position-resolution-layer\n      for (; c < componentsCount; ++c) {\n        var component = tile.components[c];\n        var precinctsIterationSizes = precinctsSizes.components[c];\n        var decompositionLevelsCount =\n          component.codingStyleParameters.decompositionLevelsCount;\n        for (; py < precinctsIterationSizes.maxNumHigh; py++) {\n          for (; px < precinctsIterationSizes.maxNumWide; px++) {\n            for (; r <= decompositionLevelsCount; r++) {\n              var resolution = component.resolutions[r];\n              var sizeInImageScale = precinctsIterationSizes.resolutions[r];\n              var k = getPrecinctIndexIfExist(\n                px,\n                py,\n                sizeInImageScale,\n                precinctsIterationSizes,\n                resolution\n              );\n              if (k === null) {\n                continue;\n              }\n              for (; l < layersCount; ) {\n                var packet = createPacket(resolution, k, l);\n                l++;\n                return packet;\n              }\n              l = 0;\n            }\n            r = 0;\n          }\n          px = 0;\n        }\n        py = 0;\n      }\n      throw new JpxError(\"Out of packets\");\n    };\n  }\n  function getPrecinctIndexIfExist(\n    pxIndex,\n    pyIndex,\n    sizeInImageScale,\n    precinctIterationSizes,\n    resolution\n  ) {\n    var posX = pxIndex * precinctIterationSizes.minWidth;\n    var posY = pyIndex * precinctIterationSizes.minHeight;\n    if (\n      posX % sizeInImageScale.width !== 0 ||\n      posY % sizeInImageScale.height !== 0\n    ) {\n      return null;\n    }\n    var startPrecinctRowIndex =\n      (posY / sizeInImageScale.width) *\n      resolution.precinctParameters.numprecinctswide;\n    return posX / sizeInImageScale.height + startPrecinctRowIndex;\n  }\n  function getPrecinctSizesInImageScale(tile) {\n    var componentsCount = tile.components.length;\n    var minWidth = Number.MAX_VALUE;\n    var minHeight = Number.MAX_VALUE;\n    var maxNumWide = 0;\n    var maxNumHigh = 0;\n    var sizePerComponent = new Array(componentsCount);\n    for (var c = 0; c < componentsCount; c++) {\n      var component = tile.components[c];\n      var decompositionLevelsCount =\n        component.codingStyleParameters.decompositionLevelsCount;\n      var sizePerResolution = new Array(decompositionLevelsCount + 1);\n      var minWidthCurrentComponent = Number.MAX_VALUE;\n      var minHeightCurrentComponent = Number.MAX_VALUE;\n      var maxNumWideCurrentComponent = 0;\n      var maxNumHighCurrentComponent = 0;\n      var scale = 1;\n      for (var r = decompositionLevelsCount; r >= 0; --r) {\n        var resolution = component.resolutions[r];\n        var widthCurrentResolution =\n          scale * resolution.precinctParameters.precinctWidth;\n        var heightCurrentResolution =\n          scale * resolution.precinctParameters.precinctHeight;\n        minWidthCurrentComponent = Math.min(\n          minWidthCurrentComponent,\n          widthCurrentResolution\n        );\n        minHeightCurrentComponent = Math.min(\n          minHeightCurrentComponent,\n          heightCurrentResolution\n        );\n        maxNumWideCurrentComponent = Math.max(\n          maxNumWideCurrentComponent,\n          resolution.precinctParameters.numprecinctswide\n        );\n        maxNumHighCurrentComponent = Math.max(\n          maxNumHighCurrentComponent,\n          resolution.precinctParameters.numprecinctshigh\n        );\n        sizePerResolution[r] = {\n          width: widthCurrentResolution,\n          height: heightCurrentResolution,\n        };\n        scale <<= 1;\n      }\n      minWidth = Math.min(minWidth, minWidthCurrentComponent);\n      minHeight = Math.min(minHeight, minHeightCurrentComponent);\n      maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent);\n      maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent);\n      sizePerComponent[c] = {\n        resolutions: sizePerResolution,\n        minWidth: minWidthCurrentComponent,\n        minHeight: minHeightCurrentComponent,\n        maxNumWide: maxNumWideCurrentComponent,\n        maxNumHigh: maxNumHighCurrentComponent,\n      };\n    }\n    return {\n      components: sizePerComponent,\n      minWidth,\n      minHeight,\n      maxNumWide,\n      maxNumHigh,\n    };\n  }\n  function buildPackets(context) {\n    var siz = context.SIZ;\n    var tileIndex = context.currentTile.index;\n    var tile = context.tiles[tileIndex];\n    var componentsCount = siz.Csiz;\n    // Creating resolutions and sub-bands for each component\n    for (var c = 0; c < componentsCount; c++) {\n      var component = tile.components[c];\n      var decompositionLevelsCount =\n        component.codingStyleParameters.decompositionLevelsCount;\n      // Section B.5 Resolution levels and sub-bands\n      var resolutions = [];\n      var subbands = [];\n      for (var r = 0; r <= decompositionLevelsCount; r++) {\n        var blocksDimensions = getBlocksDimensions(context, component, r);\n        var resolution = {};\n        var scale = 1 << (decompositionLevelsCount - r);\n        resolution.trx0 = Math.ceil(component.tcx0 / scale);\n        resolution.try0 = Math.ceil(component.tcy0 / scale);\n        resolution.trx1 = Math.ceil(component.tcx1 / scale);\n        resolution.try1 = Math.ceil(component.tcy1 / scale);\n        resolution.resLevel = r;\n        buildPrecincts(context, resolution, blocksDimensions);\n        resolutions.push(resolution);\n\n        var subband;\n        if (r === 0) {\n          // one sub-band (LL) with last decomposition\n          subband = {};\n          subband.type = \"LL\";\n          subband.tbx0 = Math.ceil(component.tcx0 / scale);\n          subband.tby0 = Math.ceil(component.tcy0 / scale);\n          subband.tbx1 = Math.ceil(component.tcx1 / scale);\n          subband.tby1 = Math.ceil(component.tcy1 / scale);\n          subband.resolution = resolution;\n          buildCodeblocks(context, subband, blocksDimensions);\n          subbands.push(subband);\n          resolution.subbands = [subband];\n        } else {\n          var bscale = 1 << (decompositionLevelsCount - r + 1);\n          var resolutionSubbands = [];\n          // three sub-bands (HL, LH and HH) with rest of decompositions\n          subband = {};\n          subband.type = \"HL\";\n          subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);\n          subband.tby0 = Math.ceil(component.tcy0 / bscale);\n          subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);\n          subband.tby1 = Math.ceil(component.tcy1 / bscale);\n          subband.resolution = resolution;\n          buildCodeblocks(context, subband, blocksDimensions);\n          subbands.push(subband);\n          resolutionSubbands.push(subband);\n\n          subband = {};\n          subband.type = \"LH\";\n          subband.tbx0 = Math.ceil(component.tcx0 / bscale);\n          subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);\n          subband.tbx1 = Math.ceil(component.tcx1 / bscale);\n          subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);\n          subband.resolution = resolution;\n          buildCodeblocks(context, subband, blocksDimensions);\n          subbands.push(subband);\n          resolutionSubbands.push(subband);\n\n          subband = {};\n          subband.type = \"HH\";\n          subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);\n          subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);\n          subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);\n          subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);\n          subband.resolution = resolution;\n          buildCodeblocks(context, subband, blocksDimensions);\n          subbands.push(subband);\n          resolutionSubbands.push(subband);\n\n          resolution.subbands = resolutionSubbands;\n        }\n      }\n      component.resolutions = resolutions;\n      component.subbands = subbands;\n    }\n    // Generate the packets sequence\n    var progressionOrder = tile.codingStyleDefaultParameters.progressionOrder;\n    switch (progressionOrder) {\n      case 0:\n        tile.packetsIterator = new LayerResolutionComponentPositionIterator(\n          context\n        );\n        break;\n      case 1:\n        tile.packetsIterator = new ResolutionLayerComponentPositionIterator(\n          context\n        );\n        break;\n      case 2:\n        tile.packetsIterator = new ResolutionPositionComponentLayerIterator(\n          context\n        );\n        break;\n      case 3:\n        tile.packetsIterator = new PositionComponentResolutionLayerIterator(\n          context\n        );\n        break;\n      case 4:\n        tile.packetsIterator = new ComponentPositionResolutionLayerIterator(\n          context\n        );\n        break;\n      default:\n        throw new JpxError(`Unsupported progression order ${progressionOrder}`);\n    }\n  }\n  function parseTilePackets(context, data, offset, dataLength) {\n    var position = 0;\n    var buffer,\n      bufferSize = 0,\n      skipNextBit = false;\n    function readBits(count) {\n      while (bufferSize < count) {\n        var b = data[offset + position];\n        position++;\n        if (skipNextBit) {\n          buffer = (buffer << 7) | b;\n          bufferSize += 7;\n          skipNextBit = false;\n        } else {\n          buffer = (buffer << 8) | b;\n          bufferSize += 8;\n        }\n        if (b === 0xff) {\n          skipNextBit = true;\n        }\n      }\n      bufferSize -= count;\n      return (buffer >>> bufferSize) & ((1 << count) - 1);\n    }\n    function skipMarkerIfEqual(value) {\n      if (\n        data[offset + position - 1] === 0xff &&\n        data[offset + position] === value\n      ) {\n        skipBytes(1);\n        return true;\n      } else if (\n        data[offset + position] === 0xff &&\n        data[offset + position + 1] === value\n      ) {\n        skipBytes(2);\n        return true;\n      }\n      return false;\n    }\n    function skipBytes(count) {\n      position += count;\n    }\n    function alignToByte() {\n      bufferSize = 0;\n      if (skipNextBit) {\n        position++;\n        skipNextBit = false;\n      }\n    }\n    function readCodingpasses() {\n      if (readBits(1) === 0) {\n        return 1;\n      }\n      if (readBits(1) === 0) {\n        return 2;\n      }\n      var value = readBits(2);\n      if (value < 3) {\n        return value + 3;\n      }\n      value = readBits(5);\n      if (value < 31) {\n        return value + 6;\n      }\n      value = readBits(7);\n      return value + 37;\n    }\n    var tileIndex = context.currentTile.index;\n    var tile = context.tiles[tileIndex];\n    var sopMarkerUsed = context.COD.sopMarkerUsed;\n    var ephMarkerUsed = context.COD.ephMarkerUsed;\n    var packetsIterator = tile.packetsIterator;\n    while (position < dataLength) {\n      alignToByte();\n      if (sopMarkerUsed && skipMarkerIfEqual(0x91)) {\n        // Skip also marker segment length and packet sequence ID\n        skipBytes(4);\n      }\n      var packet = packetsIterator.nextPacket();\n      if (!readBits(1)) {\n        continue;\n      }\n      var layerNumber = packet.layerNumber;\n      var queue = [],\n        codeblock;\n      for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) {\n        codeblock = packet.codeblocks[i];\n        var precinct = codeblock.precinct;\n        var codeblockColumn = codeblock.cbx - precinct.cbxMin;\n        var codeblockRow = codeblock.cby - precinct.cbyMin;\n        var codeblockIncluded = false;\n        var firstTimeInclusion = false;\n        var valueReady;\n        if (codeblock.included !== undefined) {\n          codeblockIncluded = !!readBits(1);\n        } else {\n          // reading inclusion tree\n          precinct = codeblock.precinct;\n          var inclusionTree, zeroBitPlanesTree;\n          if (precinct.inclusionTree !== undefined) {\n            inclusionTree = precinct.inclusionTree;\n          } else {\n            // building inclusion and zero bit-planes trees\n            var width = precinct.cbxMax - precinct.cbxMin + 1;\n            var height = precinct.cbyMax - precinct.cbyMin + 1;\n            inclusionTree = new InclusionTree(width, height, layerNumber);\n            zeroBitPlanesTree = new TagTree(width, height);\n            precinct.inclusionTree = inclusionTree;\n            precinct.zeroBitPlanesTree = zeroBitPlanesTree;\n          }\n\n          if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) {\n            while (true) {\n              if (readBits(1)) {\n                valueReady = !inclusionTree.nextLevel();\n                if (valueReady) {\n                  codeblock.included = true;\n                  codeblockIncluded = firstTimeInclusion = true;\n                  break;\n                }\n              } else {\n                inclusionTree.incrementValue(layerNumber);\n                break;\n              }\n            }\n          }\n        }\n        if (!codeblockIncluded) {\n          continue;\n        }\n        if (firstTimeInclusion) {\n          zeroBitPlanesTree = precinct.zeroBitPlanesTree;\n          zeroBitPlanesTree.reset(codeblockColumn, codeblockRow);\n          while (true) {\n            if (readBits(1)) {\n              valueReady = !zeroBitPlanesTree.nextLevel();\n              if (valueReady) {\n                break;\n              }\n            } else {\n              zeroBitPlanesTree.incrementValue();\n            }\n          }\n          codeblock.zeroBitPlanes = zeroBitPlanesTree.value;\n        }\n        var codingpasses = readCodingpasses();\n        while (readBits(1)) {\n          codeblock.Lblock++;\n        }\n        var codingpassesLog2 = log2(codingpasses);\n        // rounding down log2\n        var bits =\n          (codingpasses < 1 << codingpassesLog2\n            ? codingpassesLog2 - 1\n            : codingpassesLog2) + codeblock.Lblock;\n        var codedDataLength = readBits(bits);\n        queue.push({\n          codeblock,\n          codingpasses,\n          dataLength: codedDataLength,\n        });\n      }\n      alignToByte();\n      if (ephMarkerUsed) {\n        skipMarkerIfEqual(0x92);\n      }\n      while (queue.length > 0) {\n        var packetItem = queue.shift();\n        codeblock = packetItem.codeblock;\n        if (codeblock.data === undefined) {\n          codeblock.data = [];\n        }\n        codeblock.data.push({\n          data,\n          start: offset + position,\n          end: offset + position + packetItem.dataLength,\n          codingpasses: packetItem.codingpasses,\n        });\n        position += packetItem.dataLength;\n      }\n    }\n    return position;\n  }\n  function copyCoefficients(\n    coefficients,\n    levelWidth,\n    levelHeight,\n    subband,\n    delta,\n    mb,\n    reversible,\n    segmentationSymbolUsed\n  ) {\n    var x0 = subband.tbx0;\n    var y0 = subband.tby0;\n    var width = subband.tbx1 - subband.tbx0;\n    var codeblocks = subband.codeblocks;\n    var right = subband.type.charAt(0) === \"H\" ? 1 : 0;\n    var bottom = subband.type.charAt(1) === \"H\" ? levelWidth : 0;\n\n    for (var i = 0, ii = codeblocks.length; i < ii; ++i) {\n      var codeblock = codeblocks[i];\n      var blockWidth = codeblock.tbx1_ - codeblock.tbx0_;\n      var blockHeight = codeblock.tby1_ - codeblock.tby0_;\n      if (blockWidth === 0 || blockHeight === 0) {\n        continue;\n      }\n      if (codeblock.data === undefined) {\n        continue;\n      }\n\n      var bitModel, currentCodingpassType;\n      bitModel = new BitModel(\n        blockWidth,\n        blockHeight,\n        codeblock.subbandType,\n        codeblock.zeroBitPlanes,\n        mb\n      );\n      currentCodingpassType = 2; // first bit plane starts from cleanup\n\n      // collect data\n      var data = codeblock.data,\n        totalLength = 0,\n        codingpasses = 0;\n      var j, jj, dataItem;\n      for (j = 0, jj = data.length; j < jj; j++) {\n        dataItem = data[j];\n        totalLength += dataItem.end - dataItem.start;\n        codingpasses += dataItem.codingpasses;\n      }\n      var encodedData = new Uint8Array(totalLength);\n      var position = 0;\n      for (j = 0, jj = data.length; j < jj; j++) {\n        dataItem = data[j];\n        var chunk = dataItem.data.subarray(dataItem.start, dataItem.end);\n        encodedData.set(chunk, position);\n        position += chunk.length;\n      }\n      // decoding the item\n      var decoder = new ArithmeticDecoder(encodedData, 0, totalLength);\n      bitModel.setDecoder(decoder);\n\n      for (j = 0; j < codingpasses; j++) {\n        switch (currentCodingpassType) {\n          case 0:\n            bitModel.runSignificancePropagationPass();\n            break;\n          case 1:\n            bitModel.runMagnitudeRefinementPass();\n            break;\n          case 2:\n            bitModel.runCleanupPass();\n            if (segmentationSymbolUsed) {\n              bitModel.checkSegmentationSymbol();\n            }\n            break;\n        }\n        currentCodingpassType = (currentCodingpassType + 1) % 3;\n      }\n\n      var offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width;\n      var sign = bitModel.coefficentsSign;\n      var magnitude = bitModel.coefficentsMagnitude;\n      var bitsDecoded = bitModel.bitsDecoded;\n      var magnitudeCorrection = reversible ? 0 : 0.5;\n      var k, n, nb;\n      position = 0;\n      // Do the interleaving of Section F.3.3 here, so we do not need\n      // to copy later. LL level is not interleaved, just copied.\n      var interleave = subband.type !== \"LL\";\n      for (j = 0; j < blockHeight; j++) {\n        var row = (offset / width) | 0; // row in the non-interleaved subband\n        var levelOffset = 2 * row * (levelWidth - width) + right + bottom;\n        for (k = 0; k < blockWidth; k++) {\n          n = magnitude[position];\n          if (n !== 0) {\n            n = (n + magnitudeCorrection) * delta;\n            if (sign[position] !== 0) {\n              n = -n;\n            }\n            nb = bitsDecoded[position];\n            var pos = interleave ? levelOffset + (offset << 1) : offset;\n            if (reversible && nb >= mb) {\n              coefficients[pos] = n;\n            } else {\n              coefficients[pos] = n * (1 << (mb - nb));\n            }\n          }\n          offset++;\n          position++;\n        }\n        offset += width - blockWidth;\n      }\n    }\n  }\n  function transformTile(context, tile, c) {\n    var component = tile.components[c];\n    var codingStyleParameters = component.codingStyleParameters;\n    var quantizationParameters = component.quantizationParameters;\n    var decompositionLevelsCount =\n      codingStyleParameters.decompositionLevelsCount;\n    var spqcds = quantizationParameters.SPqcds;\n    var scalarExpounded = quantizationParameters.scalarExpounded;\n    var guardBits = quantizationParameters.guardBits;\n    var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed;\n    var precision = context.components[c].precision;\n\n    var reversible = codingStyleParameters.reversibleTransformation;\n    var transform = reversible\n      ? new ReversibleTransform()\n      : new IrreversibleTransform();\n\n    var subbandCoefficients = [];\n    var b = 0;\n    for (var i = 0; i <= decompositionLevelsCount; i++) {\n      var resolution = component.resolutions[i];\n\n      var width = resolution.trx1 - resolution.trx0;\n      var height = resolution.try1 - resolution.try0;\n      // Allocate space for the whole sublevel.\n      var coefficients = new Float32Array(width * height);\n\n      for (var j = 0, jj = resolution.subbands.length; j < jj; j++) {\n        var mu, epsilon;\n        if (!scalarExpounded) {\n          // formula E-5\n          mu = spqcds[0].mu;\n          epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0);\n        } else {\n          mu = spqcds[b].mu;\n          epsilon = spqcds[b].epsilon;\n          b++;\n        }\n\n        var subband = resolution.subbands[j];\n        var gainLog2 = SubbandsGainLog2[subband.type];\n\n        // calculate quantization coefficient (Section E.1.1.1)\n        var delta = reversible\n          ? 1\n          : 2 ** (precision + gainLog2 - epsilon) * (1 + mu / 2048);\n        var mb = guardBits + epsilon - 1;\n\n        // In the first resolution level, copyCoefficients will fill the\n        // whole array with coefficients. In the succeeding passes,\n        // copyCoefficients will consecutively fill in the values that belong\n        // to the interleaved positions of the HL, LH, and HH coefficients.\n        // The LL coefficients will then be interleaved in Transform.iterate().\n        copyCoefficients(\n          coefficients,\n          width,\n          height,\n          subband,\n          delta,\n          mb,\n          reversible,\n          segmentationSymbolUsed\n        );\n      }\n      subbandCoefficients.push({\n        width,\n        height,\n        items: coefficients,\n      });\n    }\n\n    var result = transform.calculate(\n      subbandCoefficients,\n      component.tcx0,\n      component.tcy0\n    );\n    return {\n      left: component.tcx0,\n      top: component.tcy0,\n      width: result.width,\n      height: result.height,\n      items: result.items,\n    };\n  }\n  function transformComponents(context) {\n    var siz = context.SIZ;\n    var components = context.components;\n    var componentsCount = siz.Csiz;\n    var resultImages = [];\n    for (var i = 0, ii = context.tiles.length; i < ii; i++) {\n      var tile = context.tiles[i];\n      var transformedTiles = [];\n      var c;\n      for (c = 0; c < componentsCount; c++) {\n        transformedTiles[c] = transformTile(context, tile, c);\n      }\n      var tile0 = transformedTiles[0];\n      var out = new Uint8ClampedArray(tile0.items.length * componentsCount);\n      var result = {\n        left: tile0.left,\n        top: tile0.top,\n        width: tile0.width,\n        height: tile0.height,\n        items: out,\n      };\n\n      // Section G.2.2 Inverse multi component transform\n      var shift, offset;\n      var pos = 0,\n        j,\n        jj,\n        y0,\n        y1,\n        y2;\n      if (tile.codingStyleDefaultParameters.multipleComponentTransform) {\n        var fourComponents = componentsCount === 4;\n        var y0items = transformedTiles[0].items;\n        var y1items = transformedTiles[1].items;\n        var y2items = transformedTiles[2].items;\n        var y3items = fourComponents ? transformedTiles[3].items : null;\n\n        // HACK: The multiple component transform formulas below assume that\n        // all components have the same precision. With this in mind, we\n        // compute shift and offset only once.\n        shift = components[0].precision - 8;\n        offset = (128 << shift) + 0.5;\n\n        var component0 = tile.components[0];\n        var alpha01 = componentsCount - 3;\n        jj = y0items.length;\n        if (!component0.codingStyleParameters.reversibleTransformation) {\n          // inverse irreversible multiple component transform\n          for (j = 0; j < jj; j++, pos += alpha01) {\n            y0 = y0items[j] + offset;\n            y1 = y1items[j];\n            y2 = y2items[j];\n            out[pos++] = (y0 + 1.402 * y2) >> shift;\n            out[pos++] = (y0 - 0.34413 * y1 - 0.71414 * y2) >> shift;\n            out[pos++] = (y0 + 1.772 * y1) >> shift;\n          }\n        } else {\n          // inverse reversible multiple component transform\n          for (j = 0; j < jj; j++, pos += alpha01) {\n            y0 = y0items[j] + offset;\n            y1 = y1items[j];\n            y2 = y2items[j];\n            const g = y0 - ((y2 + y1) >> 2);\n\n            out[pos++] = (g + y2) >> shift;\n            out[pos++] = g >> shift;\n            out[pos++] = (g + y1) >> shift;\n          }\n        }\n        if (fourComponents) {\n          for (j = 0, pos = 3; j < jj; j++, pos += 4) {\n            out[pos] = (y3items[j] + offset) >> shift;\n          }\n        }\n      } else {\n        // no multi-component transform\n        for (c = 0; c < componentsCount; c++) {\n          var items = transformedTiles[c].items;\n          shift = components[c].precision - 8;\n          offset = (128 << shift) + 0.5;\n          for (pos = c, j = 0, jj = items.length; j < jj; j++) {\n            out[pos] = (items[j] + offset) >> shift;\n            pos += componentsCount;\n          }\n        }\n      }\n      resultImages.push(result);\n    }\n    return resultImages;\n  }\n  function initializeTile(context, tileIndex) {\n    var siz = context.SIZ;\n    var componentsCount = siz.Csiz;\n    var tile = context.tiles[tileIndex];\n    for (var c = 0; c < componentsCount; c++) {\n      var component = tile.components[c];\n      var qcdOrQcc =\n        context.currentTile.QCC[c] !== undefined\n          ? context.currentTile.QCC[c]\n          : context.currentTile.QCD;\n      component.quantizationParameters = qcdOrQcc;\n      var codOrCoc =\n        context.currentTile.COC[c] !== undefined\n          ? context.currentTile.COC[c]\n          : context.currentTile.COD;\n      component.codingStyleParameters = codOrCoc;\n    }\n    tile.codingStyleDefaultParameters = context.currentTile.COD;\n  }\n\n  // Section B.10.2 Tag trees\n  var TagTree = (function TagTreeClosure() {\n    // eslint-disable-next-line no-shadow\n    function TagTree(width, height) {\n      var levelsLength = log2(Math.max(width, height)) + 1;\n      this.levels = [];\n      for (var i = 0; i < levelsLength; i++) {\n        var level = {\n          width,\n          height,\n          items: [],\n        };\n        this.levels.push(level);\n        width = Math.ceil(width / 2);\n        height = Math.ceil(height / 2);\n      }\n    }\n    TagTree.prototype = {\n      reset: function TagTree_reset(i, j) {\n        var currentLevel = 0,\n          value = 0,\n          level;\n        while (currentLevel < this.levels.length) {\n          level = this.levels[currentLevel];\n          var index = i + j * level.width;\n          if (level.items[index] !== undefined) {\n            value = level.items[index];\n            break;\n          }\n          level.index = index;\n          i >>= 1;\n          j >>= 1;\n          currentLevel++;\n        }\n        currentLevel--;\n        level = this.levels[currentLevel];\n        level.items[level.index] = value;\n        this.currentLevel = currentLevel;\n        delete this.value;\n      },\n      incrementValue: function TagTree_incrementValue() {\n        var level = this.levels[this.currentLevel];\n        level.items[level.index]++;\n      },\n      nextLevel: function TagTree_nextLevel() {\n        var currentLevel = this.currentLevel;\n        var level = this.levels[currentLevel];\n        var value = level.items[level.index];\n        currentLevel--;\n        if (currentLevel < 0) {\n          this.value = value;\n          return false;\n        }\n\n        this.currentLevel = currentLevel;\n        level = this.levels[currentLevel];\n        level.items[level.index] = value;\n        return true;\n      },\n    };\n    return TagTree;\n  })();\n\n  var InclusionTree = (function InclusionTreeClosure() {\n    // eslint-disable-next-line no-shadow\n    function InclusionTree(width, height, defaultValue) {\n      var levelsLength = log2(Math.max(width, height)) + 1;\n      this.levels = [];\n      for (var i = 0; i < levelsLength; i++) {\n        var items = new Uint8Array(width * height);\n        for (var j = 0, jj = items.length; j < jj; j++) {\n          items[j] = defaultValue;\n        }\n\n        var level = {\n          width,\n          height,\n          items,\n        };\n        this.levels.push(level);\n\n        width = Math.ceil(width / 2);\n        height = Math.ceil(height / 2);\n      }\n    }\n    InclusionTree.prototype = {\n      reset: function InclusionTree_reset(i, j, stopValue) {\n        var currentLevel = 0;\n        while (currentLevel < this.levels.length) {\n          var level = this.levels[currentLevel];\n          var index = i + j * level.width;\n          level.index = index;\n          var value = level.items[index];\n\n          if (value === 0xff) {\n            break;\n          }\n\n          if (value > stopValue) {\n            this.currentLevel = currentLevel;\n            // already know about this one, propagating the value to top levels\n            this.propagateValues();\n            return false;\n          }\n\n          i >>= 1;\n          j >>= 1;\n          currentLevel++;\n        }\n        this.currentLevel = currentLevel - 1;\n        return true;\n      },\n      incrementValue: function InclusionTree_incrementValue(stopValue) {\n        var level = this.levels[this.currentLevel];\n        level.items[level.index] = stopValue + 1;\n        this.propagateValues();\n      },\n      propagateValues: function InclusionTree_propagateValues() {\n        var levelIndex = this.currentLevel;\n        var level = this.levels[levelIndex];\n        var currentValue = level.items[level.index];\n        while (--levelIndex >= 0) {\n          level = this.levels[levelIndex];\n          level.items[level.index] = currentValue;\n        }\n      },\n      nextLevel: function InclusionTree_nextLevel() {\n        var currentLevel = this.currentLevel;\n        var level = this.levels[currentLevel];\n        var value = level.items[level.index];\n        level.items[level.index] = 0xff;\n        currentLevel--;\n        if (currentLevel < 0) {\n          return false;\n        }\n\n        this.currentLevel = currentLevel;\n        level = this.levels[currentLevel];\n        level.items[level.index] = value;\n        return true;\n      },\n    };\n    return InclusionTree;\n  })();\n\n  // Section D. Coefficient bit modeling\n  var BitModel = (function BitModelClosure() {\n    var UNIFORM_CONTEXT = 17;\n    var RUNLENGTH_CONTEXT = 18;\n    // Table D-1\n    // The index is binary presentation: 0dddvvhh, ddd - sum of Di (0..4),\n    // vv - sum of Vi (0..2), and hh - sum of Hi (0..2)\n    // prettier-ignore\n    var LLAndLHContextsLabel = new Uint8Array([\n      0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4,\n      7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6,\n      8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8\n    ]);\n    // prettier-ignore\n    var HLContextLabel = new Uint8Array([\n      0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8,\n      8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3,\n      4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8\n    ]);\n    // prettier-ignore\n    var HHContextLabel = new Uint8Array([\n      0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5,\n      5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8,\n      8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8\n    ]);\n\n    // eslint-disable-next-line no-shadow\n    function BitModel(width, height, subband, zeroBitPlanes, mb) {\n      this.width = width;\n      this.height = height;\n\n      let contextLabelTable;\n      if (subband === \"HH\") {\n        contextLabelTable = HHContextLabel;\n      } else if (subband === \"HL\") {\n        contextLabelTable = HLContextLabel;\n      } else {\n        contextLabelTable = LLAndLHContextsLabel;\n      }\n      this.contextLabelTable = contextLabelTable;\n\n      var coefficientCount = width * height;\n\n      // coefficients outside the encoding region treated as insignificant\n      // add border state cells for significanceState\n      this.neighborsSignificance = new Uint8Array(coefficientCount);\n      this.coefficentsSign = new Uint8Array(coefficientCount);\n      let coefficentsMagnitude;\n      if (mb > 14) {\n        coefficentsMagnitude = new Uint32Array(coefficientCount);\n      } else if (mb > 6) {\n        coefficentsMagnitude = new Uint16Array(coefficientCount);\n      } else {\n        coefficentsMagnitude = new Uint8Array(coefficientCount);\n      }\n      this.coefficentsMagnitude = coefficentsMagnitude;\n      this.processingFlags = new Uint8Array(coefficientCount);\n\n      var bitsDecoded = new Uint8Array(coefficientCount);\n      if (zeroBitPlanes !== 0) {\n        for (var i = 0; i < coefficientCount; i++) {\n          bitsDecoded[i] = zeroBitPlanes;\n        }\n      }\n      this.bitsDecoded = bitsDecoded;\n\n      this.reset();\n    }\n\n    BitModel.prototype = {\n      setDecoder: function BitModel_setDecoder(decoder) {\n        this.decoder = decoder;\n      },\n      reset: function BitModel_reset() {\n        // We have 17 contexts that are accessed via context labels,\n        // plus the uniform and runlength context.\n        this.contexts = new Int8Array(19);\n\n        // Contexts are packed into 1 byte:\n        // highest 7 bits carry the index, lowest bit carries mps\n        this.contexts[0] = (4 << 1) | 0;\n        this.contexts[UNIFORM_CONTEXT] = (46 << 1) | 0;\n        this.contexts[RUNLENGTH_CONTEXT] = (3 << 1) | 0;\n      },\n      setNeighborsSignificance: function BitModel_setNeighborsSignificance(\n        row,\n        column,\n        index\n      ) {\n        var neighborsSignificance = this.neighborsSignificance;\n        var width = this.width,\n          height = this.height;\n        var left = column > 0;\n        var right = column + 1 < width;\n        var i;\n\n        if (row > 0) {\n          i = index - width;\n          if (left) {\n            neighborsSignificance[i - 1] += 0x10;\n          }\n          if (right) {\n            neighborsSignificance[i + 1] += 0x10;\n          }\n          neighborsSignificance[i] += 0x04;\n        }\n\n        if (row + 1 < height) {\n          i = index + width;\n          if (left) {\n            neighborsSignificance[i - 1] += 0x10;\n          }\n          if (right) {\n            neighborsSignificance[i + 1] += 0x10;\n          }\n          neighborsSignificance[i] += 0x04;\n        }\n\n        if (left) {\n          neighborsSignificance[index - 1] += 0x01;\n        }\n        if (right) {\n          neighborsSignificance[index + 1] += 0x01;\n        }\n        neighborsSignificance[index] |= 0x80;\n      },\n      runSignificancePropagationPass: function BitModel_runSignificancePropagationPass() {\n        var decoder = this.decoder;\n        var width = this.width,\n          height = this.height;\n        var coefficentsMagnitude = this.coefficentsMagnitude;\n        var coefficentsSign = this.coefficentsSign;\n        var neighborsSignificance = this.neighborsSignificance;\n        var processingFlags = this.processingFlags;\n        var contexts = this.contexts;\n        var labels = this.contextLabelTable;\n        var bitsDecoded = this.bitsDecoded;\n        var processedInverseMask = ~1;\n        var processedMask = 1;\n        var firstMagnitudeBitMask = 2;\n\n        for (var i0 = 0; i0 < height; i0 += 4) {\n          for (var j = 0; j < width; j++) {\n            var index = i0 * width + j;\n            for (var i1 = 0; i1 < 4; i1++, index += width) {\n              var i = i0 + i1;\n              if (i >= height) {\n                break;\n              }\n              // clear processed flag first\n              processingFlags[index] &= processedInverseMask;\n\n              if (\n                coefficentsMagnitude[index] ||\n                !neighborsSignificance[index]\n              ) {\n                continue;\n              }\n\n              var contextLabel = labels[neighborsSignificance[index]];\n              var decision = decoder.readBit(contexts, contextLabel);\n              if (decision) {\n                var sign = this.decodeSignBit(i, j, index);\n                coefficentsSign[index] = sign;\n                coefficentsMagnitude[index] = 1;\n                this.setNeighborsSignificance(i, j, index);\n                processingFlags[index] |= firstMagnitudeBitMask;\n              }\n              bitsDecoded[index]++;\n              processingFlags[index] |= processedMask;\n            }\n          }\n        }\n      },\n      decodeSignBit: function BitModel_decodeSignBit(row, column, index) {\n        var width = this.width,\n          height = this.height;\n        var coefficentsMagnitude = this.coefficentsMagnitude;\n        var coefficentsSign = this.coefficentsSign;\n        var contribution, sign0, sign1, significance1;\n        var contextLabel, decoded;\n\n        // calculate horizontal contribution\n        significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0;\n        if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) {\n          sign1 = coefficentsSign[index + 1];\n          if (significance1) {\n            sign0 = coefficentsSign[index - 1];\n            contribution = 1 - sign1 - sign0;\n          } else {\n            contribution = 1 - sign1 - sign1;\n          }\n        } else if (significance1) {\n          sign0 = coefficentsSign[index - 1];\n          contribution = 1 - sign0 - sign0;\n        } else {\n          contribution = 0;\n        }\n        var horizontalContribution = 3 * contribution;\n\n        // calculate vertical contribution and combine with the horizontal\n        significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0;\n        if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) {\n          sign1 = coefficentsSign[index + width];\n          if (significance1) {\n            sign0 = coefficentsSign[index - width];\n            contribution = 1 - sign1 - sign0 + horizontalContribution;\n          } else {\n            contribution = 1 - sign1 - sign1 + horizontalContribution;\n          }\n        } else if (significance1) {\n          sign0 = coefficentsSign[index - width];\n          contribution = 1 - sign0 - sign0 + horizontalContribution;\n        } else {\n          contribution = horizontalContribution;\n        }\n\n        if (contribution >= 0) {\n          contextLabel = 9 + contribution;\n          decoded = this.decoder.readBit(this.contexts, contextLabel);\n        } else {\n          contextLabel = 9 - contribution;\n          decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1;\n        }\n        return decoded;\n      },\n      runMagnitudeRefinementPass: function BitModel_runMagnitudeRefinementPass() {\n        var decoder = this.decoder;\n        var width = this.width,\n          height = this.height;\n        var coefficentsMagnitude = this.coefficentsMagnitude;\n        var neighborsSignificance = this.neighborsSignificance;\n        var contexts = this.contexts;\n        var bitsDecoded = this.bitsDecoded;\n        var processingFlags = this.processingFlags;\n        var processedMask = 1;\n        var firstMagnitudeBitMask = 2;\n        var length = width * height;\n        var width4 = width * 4;\n\n        for (var index0 = 0, indexNext; index0 < length; index0 = indexNext) {\n          indexNext = Math.min(length, index0 + width4);\n          for (var j = 0; j < width; j++) {\n            for (var index = index0 + j; index < indexNext; index += width) {\n              // significant but not those that have just become\n              if (\n                !coefficentsMagnitude[index] ||\n                (processingFlags[index] & processedMask) !== 0\n              ) {\n                continue;\n              }\n\n              var contextLabel = 16;\n              if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) {\n                processingFlags[index] ^= firstMagnitudeBitMask;\n                // first refinement\n                var significance = neighborsSignificance[index] & 127;\n                contextLabel = significance === 0 ? 15 : 14;\n              }\n\n              var bit = decoder.readBit(contexts, contextLabel);\n              coefficentsMagnitude[index] =\n                (coefficentsMagnitude[index] << 1) | bit;\n              bitsDecoded[index]++;\n              processingFlags[index] |= processedMask;\n            }\n          }\n        }\n      },\n      runCleanupPass: function BitModel_runCleanupPass() {\n        var decoder = this.decoder;\n        var width = this.width,\n          height = this.height;\n        var neighborsSignificance = this.neighborsSignificance;\n        var coefficentsMagnitude = this.coefficentsMagnitude;\n        var coefficentsSign = this.coefficentsSign;\n        var contexts = this.contexts;\n        var labels = this.contextLabelTable;\n        var bitsDecoded = this.bitsDecoded;\n        var processingFlags = this.processingFlags;\n        var processedMask = 1;\n        var firstMagnitudeBitMask = 2;\n        var oneRowDown = width;\n        var twoRowsDown = width * 2;\n        var threeRowsDown = width * 3;\n        var iNext;\n        for (var i0 = 0; i0 < height; i0 = iNext) {\n          iNext = Math.min(i0 + 4, height);\n          var indexBase = i0 * width;\n          var checkAllEmpty = i0 + 3 < height;\n          for (var j = 0; j < width; j++) {\n            var index0 = indexBase + j;\n            // using the property: labels[neighborsSignificance[index]] === 0\n            // when neighborsSignificance[index] === 0\n            var allEmpty =\n              checkAllEmpty &&\n              processingFlags[index0] === 0 &&\n              processingFlags[index0 + oneRowDown] === 0 &&\n              processingFlags[index0 + twoRowsDown] === 0 &&\n              processingFlags[index0 + threeRowsDown] === 0 &&\n              neighborsSignificance[index0] === 0 &&\n              neighborsSignificance[index0 + oneRowDown] === 0 &&\n              neighborsSignificance[index0 + twoRowsDown] === 0 &&\n              neighborsSignificance[index0 + threeRowsDown] === 0;\n            var i1 = 0,\n              index = index0;\n            var i = i0,\n              sign;\n            if (allEmpty) {\n              var hasSignificantCoefficent = decoder.readBit(\n                contexts,\n                RUNLENGTH_CONTEXT\n              );\n              if (!hasSignificantCoefficent) {\n                bitsDecoded[index0]++;\n                bitsDecoded[index0 + oneRowDown]++;\n                bitsDecoded[index0 + twoRowsDown]++;\n                bitsDecoded[index0 + threeRowsDown]++;\n                continue; // next column\n              }\n              i1 =\n                (decoder.readBit(contexts, UNIFORM_CONTEXT) << 1) |\n                decoder.readBit(contexts, UNIFORM_CONTEXT);\n              if (i1 !== 0) {\n                i = i0 + i1;\n                index += i1 * width;\n              }\n\n              sign = this.decodeSignBit(i, j, index);\n              coefficentsSign[index] = sign;\n              coefficentsMagnitude[index] = 1;\n              this.setNeighborsSignificance(i, j, index);\n              processingFlags[index] |= firstMagnitudeBitMask;\n\n              index = index0;\n              for (var i2 = i0; i2 <= i; i2++, index += width) {\n                bitsDecoded[index]++;\n              }\n\n              i1++;\n            }\n            for (i = i0 + i1; i < iNext; i++, index += width) {\n              if (\n                coefficentsMagnitude[index] ||\n                (processingFlags[index] & processedMask) !== 0\n              ) {\n                continue;\n              }\n\n              var contextLabel = labels[neighborsSignificance[index]];\n              var decision = decoder.readBit(contexts, contextLabel);\n              if (decision === 1) {\n                sign = this.decodeSignBit(i, j, index);\n                coefficentsSign[index] = sign;\n                coefficentsMagnitude[index] = 1;\n                this.setNeighborsSignificance(i, j, index);\n                processingFlags[index] |= firstMagnitudeBitMask;\n              }\n              bitsDecoded[index]++;\n            }\n          }\n        }\n      },\n      checkSegmentationSymbol: function BitModel_checkSegmentationSymbol() {\n        var decoder = this.decoder;\n        var contexts = this.contexts;\n        var symbol =\n          (decoder.readBit(contexts, UNIFORM_CONTEXT) << 3) |\n          (decoder.readBit(contexts, UNIFORM_CONTEXT) << 2) |\n          (decoder.readBit(contexts, UNIFORM_CONTEXT) << 1) |\n          decoder.readBit(contexts, UNIFORM_CONTEXT);\n        if (symbol !== 0xa) {\n          throw new JpxError(\"Invalid segmentation symbol\");\n        }\n      },\n    };\n\n    return BitModel;\n  })();\n\n  // Section F, Discrete wavelet transformation\n  var Transform = (function TransformClosure() {\n    // eslint-disable-next-line no-shadow\n    function Transform() {}\n\n    Transform.prototype.calculate = function transformCalculate(\n      subbands,\n      u0,\n      v0\n    ) {\n      var ll = subbands[0];\n      for (var i = 1, ii = subbands.length; i < ii; i++) {\n        ll = this.iterate(ll, subbands[i], u0, v0);\n      }\n      return ll;\n    };\n    Transform.prototype.extend = function extend(buffer, offset, size) {\n      // Section F.3.7 extending... using max extension of 4\n      var i1 = offset - 1,\n        j1 = offset + 1;\n      var i2 = offset + size - 2,\n        j2 = offset + size;\n      buffer[i1--] = buffer[j1++];\n      buffer[j2++] = buffer[i2--];\n      buffer[i1--] = buffer[j1++];\n      buffer[j2++] = buffer[i2--];\n      buffer[i1--] = buffer[j1++];\n      buffer[j2++] = buffer[i2--];\n      buffer[i1] = buffer[j1];\n      buffer[j2] = buffer[i2];\n    };\n    Transform.prototype.iterate = function Transform_iterate(\n      ll,\n      hl_lh_hh,\n      u0,\n      v0\n    ) {\n      var llWidth = ll.width,\n        llHeight = ll.height,\n        llItems = ll.items;\n      var width = hl_lh_hh.width;\n      var height = hl_lh_hh.height;\n      var items = hl_lh_hh.items;\n      var i, j, k, l, u, v;\n\n      // Interleave LL according to Section F.3.3\n      for (k = 0, i = 0; i < llHeight; i++) {\n        l = i * 2 * width;\n        for (j = 0; j < llWidth; j++, k++, l += 2) {\n          items[l] = llItems[k];\n        }\n      }\n      // The LL band is not needed anymore.\n      llItems = ll.items = null;\n\n      var bufferPadding = 4;\n      var rowBuffer = new Float32Array(width + 2 * bufferPadding);\n\n      // Section F.3.4 HOR_SR\n      if (width === 1) {\n        // if width = 1, when u0 even keep items as is, when odd divide by 2\n        if ((u0 & 1) !== 0) {\n          for (v = 0, k = 0; v < height; v++, k += width) {\n            items[k] *= 0.5;\n          }\n        }\n      } else {\n        for (v = 0, k = 0; v < height; v++, k += width) {\n          rowBuffer.set(items.subarray(k, k + width), bufferPadding);\n\n          this.extend(rowBuffer, bufferPadding, width);\n          this.filter(rowBuffer, bufferPadding, width);\n\n          items.set(\n            rowBuffer.subarray(bufferPadding, bufferPadding + width),\n            k\n          );\n        }\n      }\n\n      // Accesses to the items array can take long, because it may not fit into\n      // CPU cache and has to be fetched from main memory. Since subsequent\n      // accesses to the items array are not local when reading columns, we\n      // have a cache miss every time. To reduce cache misses, get up to\n      // 'numBuffers' items at a time and store them into the individual\n      // buffers. The colBuffers should be small enough to fit into CPU cache.\n      var numBuffers = 16;\n      var colBuffers = [];\n      for (i = 0; i < numBuffers; i++) {\n        colBuffers.push(new Float32Array(height + 2 * bufferPadding));\n      }\n      var b,\n        currentBuffer = 0;\n      ll = bufferPadding + height;\n\n      // Section F.3.5 VER_SR\n      if (height === 1) {\n        // if height = 1, when v0 even keep items as is, when odd divide by 2\n        if ((v0 & 1) !== 0) {\n          for (u = 0; u < width; u++) {\n            items[u] *= 0.5;\n          }\n        }\n      } else {\n        for (u = 0; u < width; u++) {\n          // if we ran out of buffers, copy several image columns at once\n          if (currentBuffer === 0) {\n            numBuffers = Math.min(width - u, numBuffers);\n            for (k = u, l = bufferPadding; l < ll; k += width, l++) {\n              for (b = 0; b < numBuffers; b++) {\n                colBuffers[b][l] = items[k + b];\n              }\n            }\n            currentBuffer = numBuffers;\n          }\n\n          currentBuffer--;\n          var buffer = colBuffers[currentBuffer];\n          this.extend(buffer, bufferPadding, height);\n          this.filter(buffer, bufferPadding, height);\n\n          // If this is last buffer in this group of buffers, flush all buffers.\n          if (currentBuffer === 0) {\n            k = u - numBuffers + 1;\n            for (l = bufferPadding; l < ll; k += width, l++) {\n              for (b = 0; b < numBuffers; b++) {\n                items[k + b] = colBuffers[b][l];\n              }\n            }\n          }\n        }\n      }\n\n      return {\n        width,\n        height,\n        items,\n      };\n    };\n    return Transform;\n  })();\n\n  // Section 3.8.2 Irreversible 9-7 filter\n  var IrreversibleTransform = (function IrreversibleTransformClosure() {\n    // eslint-disable-next-line no-shadow\n    function IrreversibleTransform() {\n      Transform.call(this);\n    }\n\n    IrreversibleTransform.prototype = Object.create(Transform.prototype);\n    IrreversibleTransform.prototype.filter = function irreversibleTransformFilter(\n      x,\n      offset,\n      length\n    ) {\n      var len = length >> 1;\n      offset = offset | 0;\n      var j, n, current, next;\n\n      var alpha = -1.586134342059924;\n      var beta = -0.052980118572961;\n      var gamma = 0.882911075530934;\n      var delta = 0.443506852043971;\n      var K = 1.230174104914001;\n      var K_ = 1 / K;\n\n      // step 1 is combined with step 3\n\n      // step 2\n      j = offset - 3;\n      for (n = len + 4; n--; j += 2) {\n        x[j] *= K_;\n      }\n\n      // step 1 & 3\n      j = offset - 2;\n      current = delta * x[j - 1];\n      for (n = len + 3; n--; j += 2) {\n        next = delta * x[j + 1];\n        x[j] = K * x[j] - current - next;\n        if (n--) {\n          j += 2;\n          current = delta * x[j + 1];\n          x[j] = K * x[j] - current - next;\n        } else {\n          break;\n        }\n      }\n\n      // step 4\n      j = offset - 1;\n      current = gamma * x[j - 1];\n      for (n = len + 2; n--; j += 2) {\n        next = gamma * x[j + 1];\n        x[j] -= current + next;\n        if (n--) {\n          j += 2;\n          current = gamma * x[j + 1];\n          x[j] -= current + next;\n        } else {\n          break;\n        }\n      }\n\n      // step 5\n      j = offset;\n      current = beta * x[j - 1];\n      for (n = len + 1; n--; j += 2) {\n        next = beta * x[j + 1];\n        x[j] -= current + next;\n        if (n--) {\n          j += 2;\n          current = beta * x[j + 1];\n          x[j] -= current + next;\n        } else {\n          break;\n        }\n      }\n\n      // step 6\n      if (len !== 0) {\n        j = offset + 1;\n        current = alpha * x[j - 1];\n        for (n = len; n--; j += 2) {\n          next = alpha * x[j + 1];\n          x[j] -= current + next;\n          if (n--) {\n            j += 2;\n            current = alpha * x[j + 1];\n            x[j] -= current + next;\n          } else {\n            break;\n          }\n        }\n      }\n    };\n\n    return IrreversibleTransform;\n  })();\n\n  // Section 3.8.1 Reversible 5-3 filter\n  var ReversibleTransform = (function ReversibleTransformClosure() {\n    // eslint-disable-next-line no-shadow\n    function ReversibleTransform() {\n      Transform.call(this);\n    }\n\n    ReversibleTransform.prototype = Object.create(Transform.prototype);\n    ReversibleTransform.prototype.filter = function reversibleTransformFilter(\n      x,\n      offset,\n      length\n    ) {\n      var len = length >> 1;\n      offset = offset | 0;\n      var j, n;\n\n      for (j = offset, n = len + 1; n--; j += 2) {\n        x[j] -= (x[j - 1] + x[j + 1] + 2) >> 2;\n      }\n\n      for (j = offset + 1, n = len; n--; j += 2) {\n        x[j] += (x[j - 1] + x[j + 1]) >> 1;\n      }\n    };\n\n    return ReversibleTransform;\n  })();\n\n  return JpxImage;\n})();\n\nexport { JpxImage };\n"],"sourceRoot":""}