{"version":3,"file":"fritz2-template.js","mappings":"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","sources":["webpack://fritz2-template/webpack/universalModuleDefinition","webpack://fritz2-template/../../node_modules/murmurhash/murmurhash.js","webpack://fritz2-template/../../node_modules/onnxruntime-common/lib/backend-impl.ts","webpack://fritz2-template/../../node_modules/onnxruntime-common/lib/env.ts","webpack://fritz2-template/../../node_modules/onnxruntime-common/lib/env-impl.ts","webpack://fritz2-template/../../node_modules/onnxruntime-common/lib/tensor-impl.ts","webpack://fritz2-template/../../node_modules/onnxruntime-common/lib/tensor.ts","webpack://fritz2-template/../../node_modules/onnxruntime-common/lib/inference-session-impl.ts","webpack://fritz2-template/../../node_modules/onnxruntime-common/lib/inference-session.ts","webpack://fritz2-template/onnxruntime-web/webpack/universalModuleDefinition","webpack://fritz2-template/onnxruntime-web/./lib/wasm/binding/ort-wasm-threaded.min.js","webpack://fritz2-template/onnxruntime-web/./lib/wasm/binding/ort-wasm.js","webpack://fritz2-template/onnxruntime-web/./node_modules/@protobufjs/aspromise/index.js","webpack://fritz2-template/onnxruntime-web/./node_modules/@protobufjs/base64/index.js","webpack://fritz2-template/onnxruntime-web/./node_modules/@protobufjs/eventemitter/index.js","webpack://fritz2-template/onnxruntime-web/./node_modules/@protobufjs/float/index.js","webpack://fritz2-template/onnxruntime-web/./node_modules/@protobufjs/inquire/index.js","webpack://fritz2-template/onnxruntime-web/./node_modules/@protobufjs/pool/index.js","webpack://fritz2-template/onnxruntime-web/./node_modules/@protobufjs/utf8/index.js","webpack://fritz2-template/onnxruntime-web/./node_modules/flatbuffers/js/flatbuffers.mjs","webpack://fritz2-template/onnxruntime-web/./node_modules/guid-typescript/dist/guid.js","webpack://fritz2-template/onnxruntime-web/./node_modules/long/src/long.js","webpack://fritz2-template/onnxruntime-web/./node_modules/onnx-proto/dist/onnx.js","webpack://fritz2-template/onnxruntime-web/./node_modules/protobufjs/minimal.js","webpack://fritz2-template/onnxruntime-web/./node_modules/protobufjs/src/index-minimal.js","webpack://fritz2-template/onnxruntime-web/./node_modules/protobufjs/src/reader.js","webpack://fritz2-template/onnxruntime-web/./node_modules/protobufjs/src/reader_buffer.js","webpack://fritz2-template/onnxruntime-web/./node_modules/protobufjs/src/roots.js","webpack://fritz2-template/onnxruntime-web/./node_modules/protobufjs/src/rpc.js","webpack://fritz2-template/onnxruntime-web/./node_modules/protobufjs/src/rpc/service.js","webpack://fritz2-template/onnxruntime-web/./node_modules/protobufjs/src/util/longbits.js","webpack://fritz2-template/onnxruntime-web/./node_modules/protobufjs/src/util/minimal.js","webpack://fritz2-template/onnxruntime-web/./node_modules/protobufjs/src/writer.js","webpack://fritz2-template/onnxruntime-web/./node_modules/protobufjs/src/writer_buffer.js","webpack://fritz2-template/onnxruntime-web/./lib/backend-onnxjs.ts","webpack://fritz2-template/onnxruntime-web/./lib/backend-wasm.ts","webpack://fritz2-template/onnxruntime-web/./lib/index.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/attribute-with-cache-key.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/attribute.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backend.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/backend-webgl.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/glsl-coordinate-lib.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/glsl-definitions.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/glsl-encoding-lib.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/glsl-fragcolor-lib.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/glsl-function-inliner.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/glsl-preprocessor.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/glsl-registered-libs.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/glsl-shape-utils-lib.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/glsl-source.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/glsl-vec-lib.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/inference-handler.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/op-resolve-rules.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/batch-normalization.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/binary-op.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/cast.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/concat-packed.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/concat.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/conv-grouped.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/conv-pack.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/conv.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/depth-to-space.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/dot-product.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/flatten.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/fuse-utils.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/gather.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/gemm.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/im2col-pack.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/im2col.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/image-scaler.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/instance-normalization.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/matmul-pack.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/matmul.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/pack.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/packing-utils.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/pad.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/pool.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/reduce.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/reshape-packed.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/reshape.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/resize-packed.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/shape.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/slice.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/softmax.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/split.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/squeeze.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/sum.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/tile.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/transpose.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/uint8-encode.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/unary-op.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/unpack.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/unsqueeze.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/ops/upsample.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/program-manager.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/session-handler.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/texture-data-encoder.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/texture-layout-strategy.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/texture-layout.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/texture-manager.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/types.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/utils.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/webgl-context-factory.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/backends/webgl/webgl-context.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/execution-plan.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/graph.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/instrument.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/model.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/operators.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/opset.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/ort-schema/ort-generated.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/session-handler.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/session.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/tensor.ts","webpack://fritz2-template/onnxruntime-web/./lib/onnxjs/util.ts","webpack://fritz2-template/onnxruntime-web/./lib/wasm/options-utils.ts","webpack://fritz2-template/onnxruntime-web/./lib/wasm/proxy-wrapper.ts","webpack://fritz2-template/onnxruntime-web/./lib/wasm/run-options.ts","webpack://fritz2-template/onnxruntime-web/./lib/wasm/session-handler.ts","webpack://fritz2-template/onnxruntime-web/./lib/wasm/session-options.ts","webpack://fritz2-template/onnxruntime-web/./lib/wasm/string-utils.ts","webpack://fritz2-template/onnxruntime-web/./lib/wasm/wasm-core-impl.ts","webpack://fritz2-template/onnxruntime-web/./lib/wasm/wasm-factory.ts","webpack://fritz2-template/onnxruntime-web/./lib/wasm/proxy-worker/main.ts","webpack://fritz2-template/onnxruntime-web/./node_modules/worker-loader/dist/runtime/inline.js","webpack://fritz2-template/onnxruntime-web/external {\"commonjs\":\"onnxruntime-common\",\"commonjs2\":\"onnxruntime-common\",\"root\":\"ort\"}","webpack://fritz2-template/onnxruntime-web/webpack/bootstrap","webpack://fritz2-template/onnxruntime-web/webpack/runtime/compat get default export","webpack://fritz2-template/onnxruntime-web/webpack/runtime/define property getters","webpack://fritz2-template/onnxruntime-web/webpack/runtime/global","webpack://fritz2-template/onnxruntime-web/webpack/runtime/hasOwnProperty shorthand","webpack://fritz2-template/onnxruntime-web/webpack/runtime/make namespace object","webpack://fritz2-template/onnxruntime-web/webpack/startup","webpack://fritz2-template/../../../../../_Arrays.kt","webpack://fritz2-template/../../../../../Sets.kt","webpack://fritz2-template/../../../../../collections.kt","webpack://fritz2-template/../../../../../LinkedHashSet.kt","webpack://fritz2-template/../../../../../LinkedHashMap.kt","webpack://fritz2-template/../../../../../_Collections.kt","webpack://fritz2-template/../../../../../_CollectionsJs.kt","webpack://fritz2-template/../../../../../Preconditions.kt","webpack://fritz2-template/../../../../../_Ranges.kt","webpack://fritz2-template/../../../../../Ranges.kt","webpack://fritz2-template/../../../../../_Sequences.kt","webpack://fritz2-template/../../../../../_Strings.kt","webpack://fritz2-template/../../../../../string.kt","webpack://fritz2-template/../../../../../dynamic.kt","webpack://fritz2-template/../../../../../ExceptionsH.kt","webpack://fritz2-template/../../../../../AbstractList.kt","webpack://fritz2-template/../../../../../AbstractMap.kt","webpack://fritz2-template/../../../../../Collections.kt","webpack://fritz2-template/../../../../../IndexedValue.kt","webpack://fritz2-template/../../../../../Iterables.kt","webpack://fritz2-template/../../../../../Iterators.kt","webpack://fritz2-template/../../../../../ReversedViews.kt","webpack://fritz2-template/../../../../../SequenceBuilder.kt","webpack://fritz2-template/../../../../../Sequences.kt","webpack://fritz2-template/../../../../../CoroutineContextImpl.kt","webpack://fritz2-template/../../../../../Intrinsics.kt","webpack://fritz2-template/../../../../../Random.kt","webpack://fritz2-template/../../../../../","webpack://fritz2-template/../../../../../XorWowRandom.kt","webpack://fritz2-template/../../../../../Standard.kt","webpack://fritz2-template/../../../../../Appendable.kt","webpack://fritz2-template/../../../../../Char.kt","webpack://fritz2-template/../../../../../char.kt","webpack://fritz2-template/../../../../../Indent.kt","webpack://fritz2-template/../../../../../Strings.kt","webpack://fritz2-template/../../../../../StringBuilderJs.kt","webpack://fritz2-template/../../../../../StringBuilder.kt","webpack://fritz2-template/../../../../../StringNumberConversions.kt","webpack://fritz2-template/../../../../../numberConversions.kt","webpack://fritz2-template/../../../../../long.kt","webpack://fritz2-template/../../../../../stringsCode.kt","webpack://fritz2-template/../../../../../Lazy.kt","webpack://fritz2-template/../../../../../Result.kt","webpack://fritz2-template/../../../../../exceptions.kt","webpack://fritz2-template/../../../../../Tuples.kt","webpack://fritz2-template/../../../../../ProgressionIterators.kt","webpack://fritz2-template/../../../../../Progressions.kt","webpack://fritz2-template/../../../../../progressionUtil.kt","webpack://fritz2-template/../../../../../primitiveCompanionObjects.kt","webpack://fritz2-template/../../../../../kotlinHacks.kt","webpack://fritz2-template/../../../../../AbstractMutableCollection.kt","webpack://fritz2-template/../../../../../AbstractMutableList.kt","webpack://fritz2-template/../../../../../AbstractMutableMap.kt","webpack://fritz2-template/../../../../../AbstractMutableSet.kt","webpack://fritz2-template/../../../../../ArrayList.kt","webpack://fritz2-template/../../../../../HashMap.kt","webpack://fritz2-template/../../../../../HashSet.kt","webpack://fritz2-template/../../../../../InternalHashCodeMap.kt","webpack://fritz2-template/../../../../../CancellationException.kt","webpack://fritz2-template/../../../../../KClassImpl.kt","webpack://fritz2-template/../../../../../primitives.kt","webpack://fritz2-template/../../../../../reflection.kt","webpack://fritz2-template/../../../../../_WhitespaceChars.kt","webpack://fritz2-template/../../../../../CharCode.kt","webpack://fritz2-template/../../../../../_DigitChars.kt","webpack://fritz2-template/../../../../../noPackageHacks.kt","webpack://fritz2-template/../../../../../arrays.kt","webpack://fritz2-template/../../../../../throwableExtensions.kt","webpack://fritz2-template/../../../../../Mutations.kt","webpack://fritz2-template/../../../../../UShort.kt","webpack://fritz2-template/../../../../../Enum.kt","webpack://fritz2-template/../../../../../Library.kt","webpack://fritz2-template/../../../../../charSequence.kt","webpack://fritz2-template/../../../../../collectionsHacks.kt","webpack://fritz2-template/../../../../../compareTo.kt","webpack://fritz2-template/../../../../../coreRuntime.kt","webpack://fritz2-template/../../../../../typeCheckUtils.kt","webpack://fritz2-template/../../../../../bitUtils.kt","webpack://fritz2-template/../../../../../hacks.kt","webpack://fritz2-template/../../../../../longjs.kt","webpack://fritz2-template/../../../../../numbers.kt","webpack://fritz2-template/../../../../../misc.kt","webpack://fritz2-template/../../../../../numberConversion.kt","webpack://fritz2-template/../../../../../rangeTo.kt","webpack://fritz2-template/../../../../../reflectRuntime.kt","webpack://fritz2-template/../../../../../JsClass.kt","webpack://fritz2-template/../../../../../_ArraysJs.kt","webpack://fritz2-template/../../../../../CoroutineImpl.kt","webpack://fritz2-template/../../../../../IntrinsicsJs.kt","webpack://fritz2-template/../../../../../jsOperators.kt","webpack://fritz2-template/../../../../../Trace.common.kt","webpack://fritz2-template/../../../../../AtomicFU.kt","webpack://fritz2-template/../../../../../AbstractCoroutine.kt","webpack://fritz2-template/../../../../../Await.kt","webpack://fritz2-template/../../../../../Builders.common.kt","webpack://fritz2-template/../../../../../CancellableContinuation.kt","webpack://fritz2-template/../../../../../CompletionHandler.kt","webpack://fritz2-template/../../../../../DispatchedTask.kt","webpack://fritz2-template/../../../../../CancellableContinuationImpl.kt","webpack://fritz2-template/../../../../../AtomicFU.common.kt","webpack://fritz2-template/../../../../../CompletionState.kt","webpack://fritz2-template/../../../../../CoroutineDispatcher.kt","webpack://fritz2-template/../../../../../CoroutineExceptionHandler.kt","webpack://fritz2-template/../../../../../CoroutineScope.kt","webpack://fritz2-template/../../../../../Supervisor.kt","webpack://fritz2-template/../../../../../Delay.kt","webpack://fritz2-template/../../../../../EventLoop.common.kt","webpack://fritz2-template/../../../../../Exceptions.common.kt","webpack://fritz2-template/../../../../../Job.kt","webpack://fritz2-template/../../../../../JobSupport.kt","webpack://fritz2-template/../../../../../Concurrent.kt","webpack://fritz2-template/../../../../../LinkedList.kt","webpack://fritz2-template/../../../../../Synchronized.kt","webpack://fritz2-template/../../../../../MainCoroutineDispatcher.kt","webpack://fritz2-template/../../../../../Unconfined.kt","webpack://fritz2-template/../../../../../AbstractChannel.kt","webpack://fritz2-template/../../../../../Continuation.kt","webpack://fritz2-template/../../../../../InlineList.kt","webpack://fritz2-template/../../../../../ArrayChannel.kt","webpack://fritz2-template/../../../../../math.kt","webpack://fritz2-template/../../../../../Channel.kt","webpack://fritz2-template/../../../../../SystemProps.kt","webpack://fritz2-template/../../../../../SystemProps.common.kt","webpack://fritz2-template/../../../../../ChannelCoroutine.kt","webpack://fritz2-template/../../../../../Channels.common.kt","webpack://fritz2-template/../../../../../ConflatedChannel.kt","webpack://fritz2-template/../../../../../LinkedListChannel.kt","webpack://fritz2-template/../../../../../Produce.kt","webpack://fritz2-template/../../../../../RendezvousChannel.kt","webpack://fritz2-template/../../../../../Builders.kt","webpack://fritz2-template/../../../../../SafeCollector.common.kt","webpack://fritz2-template/../../../../../Channels.kt","webpack://fritz2-template/../../../../../SharedFlow.kt","webpack://fritz2-template/../../../../../_ComparisonsJs.kt","webpack://fritz2-template/../../../../../AbstractSharedFlow.kt","webpack://fritz2-template/../../../../../StateFlow.kt","webpack://fritz2-template/../../../../../ChannelFlow.kt","webpack://fritz2-template/../../../../../ThreadContext.kt","webpack://fritz2-template/../../../../../coroutineInternalJS.kt","webpack://fritz2-template/../../../../../FlowCoroutine.kt","webpack://fritz2-template/../../../../../Merge.kt","webpack://fritz2-template/../../../../../SendingCollector.kt","webpack://fritz2-template/../../../../../Distinct.kt","webpack://fritz2-template/../../../../../Emitters.kt","webpack://fritz2-template/../../../../../Errors.kt","webpack://fritz2-template/../../../../../Share.kt","webpack://fritz2-template/../../../../../Transform.kt","webpack://fritz2-template/../../../../../Collect.kt","webpack://fritz2-template/../../../../../ArrayQueue.kt","webpack://fritz2-template/../../../../../Atomic.kt","webpack://fritz2-template/../../../../../DispatchedContinuation.kt","webpack://fritz2-template/../../../../../CoroutineContext.kt","webpack://fritz2-template/../../../../../OnUndeliveredElement.kt","webpack://fritz2-template/../../../../../Scopes.kt","webpack://fritz2-template/../../../../../Symbol.kt","webpack://fritz2-template/../../../../../Cancellable.kt","webpack://fritz2-template/../../../../../Undispatched.kt","webpack://fritz2-template/../../../../../ProbesSupport.kt","webpack://fritz2-template/../../../../../Select.kt","webpack://fritz2-template/../../../../../Mutex.kt","webpack://fritz2-template/../../../../../Window.kt","webpack://fritz2-template/../../../../../CoroutineExceptionHandlerImpl.kt","webpack://fritz2-template/../../../../../Debug.kt","webpack://fritz2-template/../../../../../Dispatchers.kt","webpack://fritz2-template/../../../../../EventLoop.kt","webpack://fritz2-template/../../../../../Exceptions.kt","webpack://fritz2-template/../../../../../JSDispatcher.kt","webpack://fritz2-template/../../../../../Promise.kt","webpack://fritz2-template/../../../../../FlowExceptions.kt","webpack://fritz2-template/../../../../../SafeCollector.kt","webpack://fritz2-template/../../../../../StackTraceRecovery.kt","webpack://fritz2-template/../../../../../ThreadLocal.kt","webpack://fritz2-template/../../../../../id.kt","webpack://fritz2-template/../../../../../handlers.kt","webpack://fritz2-template/../../../../../patch.kt","webpack://fritz2-template/../../../../../store.kt","webpack://fritz2-template/../../../../../events.kt","webpack://fritz2-template/../../../../../elements.kt","webpack://fritz2-template/../../../../../render.kt","webpack://fritz2-template/../../../../../scope.kt","webpack://fritz2-template/../../../../../Maps.kt","webpack://fritz2-template/../../../../../listener.kt","webpack://fritz2-template/../../../../../mount.kt","webpack://fritz2-template/../../../../../tag.kt","webpack://fritz2-template/../../../../../text.kt","webpack://fritz2-template/../../../../../tracking.kt","webpack://fritz2-template/../../../../../classes.kt","webpack://fritz2-template/../../../../../myer.kt","webpack://fritz2-template/../../../../../alignment.kt","webpack://fritz2-template/../../../../../background.kt","webpack://fritz2-template/../../../../../border.kt","webpack://fritz2-template/../../../../../color.kt","webpack://fritz2-template/../../../../../flexbox.kt","webpack://fritz2-template/../../../../../layout.kt","webpack://fritz2-template/../../../../../params.kt","webpack://fritz2-template/../../../../../position.kt","webpack://fritz2-template/../../../../../shadow.kt","webpack://fritz2-template/../../../../../space.kt","webpack://fritz2-template/../../../../../typography.kt","webpack://fritz2-template/../../../../../style.kt","webpack://fritz2-template/../../../../../styling.kt","webpack://fritz2-template/../../../../../default.kt","webpack://fritz2-template/../../../../../AbstractCollection.kt","webpack://fritz2-template/../../../../../AbstractSet.kt","webpack://fritz2-template/../../../../../ContinuationInterceptor.kt","webpack://fritz2-template/../../../../../Unit.kt","webpack://fritz2-template/../../../../../EqualityComparator.kt","webpack://fritz2-template/../../../../../InternalMap.kt","webpack://fritz2-template/../../../../../CoroutineStart.kt","webpack://fritz2-template/../../../../../CompletionHandler.common.kt","webpack://fritz2-template/../../../../../HashCode.kt","webpack://fritz2-template/../../../../../definitions.kt","webpack://fritz2-template/../../../../../MonoIcons.kt","webpack://fritz2-template/../../../../../theme.kt","webpack://fritz2-template/../../../../../file.kt","webpack://fritz2-template/../../../../../component.kt","webpack://fritz2-template/../../../../../buttons.kt","webpack://fritz2-template/../../../../../SchedulerTask.kt","webpack://fritz2-template/../../../../../Runnable.kt","webpack://fritz2-template/../../../../../job.kt","webpack://fritz2-template/../../../../../managed.kt","webpack://fritz2-template/../../../../../mixins.kt","webpack://fritz2-template/../../../../../properties.kt","webpack://fritz2-template/../../../../../icons.kt","webpack://fritz2-template/../../../../../spinner.kt","webpack://fritz2-template/../../../../../toast.kt","webpack://fritz2-template/../../../../src/jsMain/kotlin/app.kt","webpack://fritz2-template/../../../../src/jsMain/kotlin/onnx/ONNX.kt","webpack://fritz2-template/../../../../src/jsMain/kotlin/onnx/TensorHelper.kt","webpack://fritz2-template/../../../../../gridLayout.kt","webpack://fritz2-template/../../../../../pseudos.kt","webpack://fritz2-template/../../../../../org.w3c.dom.css.kt","webpack://fritz2-template/../../../../../org.khronos.webgl.kt","webpack://fritz2-template/../../../../../NullSurrogate.kt","webpack://fritz2-template/../../../../../LockFreeLinkedList.common.kt","webpack://fritz2-template/../../../../../transitions.kt","webpack://fritz2-template/../../node_modules/stylis/dist/stylis.cjs","webpack://fritz2-template/webpack/bootstrap","webpack://fritz2-template/webpack/runtime/define property getters","webpack://fritz2-template/webpack/runtime/hasOwnProperty shorthand","webpack://fritz2-template/webpack/runtime/make namespace object","webpack://fritz2-template/webpack/startup"],"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([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"fritz2-template\"] = factory();\n\telse\n\t\troot[\"fritz2-template\"] = factory();\n})(this, function() {\nreturn ","(function(){\r\n var _global = this;\r\n\r\n const createBuffer = (val) => new TextEncoder().encode(val)\r\n\r\n /**\r\n * JS Implementation of MurmurHash2\r\n *\r\n * @author Gary Court\r\n * @see http://github.com/garycourt/murmurhash-js\r\n * @author Austin Appleby\r\n * @see http://sites.google.com/site/murmurhash/\r\n *\r\n * @param {Uint8Array | string} str ASCII only\r\n * @param {number} seed Positive integer only\r\n * @return {number} 32-bit positive integer hash\r\n */\r\n function MurmurHashV2(str, seed) {\r\n if (typeof str === 'string') str = createBuffer(str);\r\n var\r\n l = str.length,\r\n h = seed ^ l,\r\n i = 0,\r\n k;\r\n\r\n while (l >= 4) {\r\n k =\r\n ((str[i] & 0xff)) |\r\n ((str[++i] & 0xff) << 8) |\r\n ((str[++i] & 0xff) << 16) |\r\n ((str[++i] & 0xff) << 24);\r\n\r\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\r\n k ^= k >>> 24;\r\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\r\n\r\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^ k;\r\n\r\n l -= 4;\r\n ++i;\r\n }\r\n\r\n switch (l) {\r\n case 3: h ^= (str[i + 2] & 0xff) << 16;\r\n case 2: h ^= (str[i + 1] & 0xff) << 8;\r\n case 1: h ^= (str[i] & 0xff);\r\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\r\n }\r\n\r\n h ^= h >>> 13;\r\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\r\n h ^= h >>> 15;\r\n\r\n return h >>> 0;\r\n };\r\n\r\n /**\r\n * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)\r\n *\r\n * @author Gary Court\r\n * @see http://github.com/garycourt/murmurhash-js\r\n * @author Austin Appleby\r\n * @see http://sites.google.com/site/murmurhash/\r\n *\r\n * @param {Uint8Array | string} key ASCII only\r\n * @param {number} seed Positive integer only\r\n * @return {number} 32-bit positive integer hash\r\n */\r\n function MurmurHashV3(key, seed) {\r\n if (typeof key === 'string') key = createBuffer(key);\r\n\r\n var remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i;\r\n\r\n remainder = key.length & 3; // key.length % 4\r\n bytes = key.length - remainder;\r\n h1 = seed;\r\n c1 = 0xcc9e2d51;\r\n c2 = 0x1b873593;\r\n i = 0;\r\n\r\n while (i < bytes) {\r\n k1 =\r\n ((key[i] & 0xff)) |\r\n ((key[++i] & 0xff) << 8) |\r\n ((key[++i] & 0xff) << 16) |\r\n ((key[++i] & 0xff) << 24);\r\n ++i;\r\n\r\n k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;\r\n k1 = (k1 << 15) | (k1 >>> 17);\r\n k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;\r\n\r\n h1 ^= k1;\r\n h1 = (h1 << 13) | (h1 >>> 19);\r\n h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;\r\n h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));\r\n }\r\n\r\n k1 = 0;\r\n\r\n switch (remainder) {\r\n case 3: k1 ^= (key[i + 2] & 0xff) << 16;\r\n case 2: k1 ^= (key[i + 1] & 0xff) << 8;\r\n case 1: k1 ^= (key[i] & 0xff);\r\n\r\n k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;\r\n k1 = (k1 << 15) | (k1 >>> 17);\r\n k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;\r\n h1 ^= k1;\r\n }\r\n\r\n h1 ^= key.length;\r\n\r\n h1 ^= h1 >>> 16;\r\n h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;\r\n h1 ^= h1 >>> 13;\r\n h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;\r\n h1 ^= h1 >>> 16;\r\n\r\n return h1 >>> 0;\r\n }\r\n\r\n var murmur = MurmurHashV3;\r\n murmur.v2 = MurmurHashV2;\r\n murmur.v3 = MurmurHashV3;\r\n\r\n if (typeof(module) != 'undefined') {\r\n module.exports = murmur;\r\n } else {\r\n var _previousRoot = _global.murmur;\r\n murmur.noConflict = function() {\r\n _global.murmur = _previousRoot;\r\n return murmur;\r\n }\r\n _global.murmur = murmur;\r\n }\r\n}());\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Backend} from './backend';\r\n\r\ninterface BackendInfo {\r\n backend: Backend;\r\n priority: number;\r\n\r\n initializing?: boolean;\r\n initialized?: boolean;\r\n aborted?: boolean;\r\n}\r\n\r\nconst backends: {[name: string]: BackendInfo} = {};\r\nconst backendsSortedByPriority: string[] = [];\r\n\r\n/**\r\n * Register a backend.\r\n *\r\n * @param name - the name as a key to lookup as an execution provider.\r\n * @param backend - the backend object.\r\n * @param priority - an integer indicating the priority of the backend. Higher number means higher priority. if priority\r\n * < 0, it will be considered as a 'beta' version and will not be used as a fallback backend by default.\r\n *\r\n * @internal\r\n */\r\nexport const registerBackend = (name: string, backend: Backend, priority: number): void => {\r\n if (backend && typeof backend.init === 'function' && typeof backend.createSessionHandler === 'function') {\r\n const currentBackend = backends[name];\r\n if (currentBackend === undefined) {\r\n backends[name] = {backend, priority};\r\n } else if (currentBackend.backend === backend) {\r\n return;\r\n } else {\r\n throw new Error(`backend \"${name}\" is already registered`);\r\n }\r\n\r\n if (priority >= 0) {\r\n for (let i = 0; i < backendsSortedByPriority.length; i++) {\r\n if (backends[backendsSortedByPriority[i]].priority <= priority) {\r\n backendsSortedByPriority.splice(i, 0, name);\r\n return;\r\n }\r\n }\r\n backendsSortedByPriority.push(name);\r\n }\r\n return;\r\n }\r\n\r\n throw new TypeError('not a valid backend');\r\n};\r\n\r\n/**\r\n * Resolve backend by specified hints.\r\n *\r\n * @param backendHints - a list of execution provider names to lookup. If omitted use registered backends as list.\r\n * @returns a promise that resolves to the backend.\r\n *\r\n * @internal\r\n */\r\nexport const resolveBackend = async(backendHints: readonly string[]): Promise => {\r\n const backendNames = backendHints.length === 0 ? backendsSortedByPriority : backendHints;\r\n const errors = [];\r\n for (const backendName of backendNames) {\r\n const backendInfo = backends[backendName];\r\n if (backendInfo) {\r\n if (backendInfo.initialized) {\r\n return backendInfo.backend;\r\n } else if (backendInfo.initializing) {\r\n throw new Error(`backend \"${backendName}\" is being initialized; cannot initialize multiple times.`);\r\n } else if (backendInfo.aborted) {\r\n continue; // current backend is unavailable; try next\r\n }\r\n\r\n try {\r\n backendInfo.initializing = true;\r\n await backendInfo.backend.init();\r\n backendInfo.initialized = true;\r\n return backendInfo.backend;\r\n } catch (e) {\r\n errors.push({name: backendName, err: e});\r\n backendInfo.aborted = true;\r\n } finally {\r\n backendInfo.initializing = false;\r\n }\r\n }\r\n }\r\n\r\n throw new Error(`no available backend found. ERR: ${errors.map(e => `[${e.name}] ${e.err}`).join(', ')}`);\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {EnvImpl} from './env-impl';\r\nexport declare namespace Env {\r\n export type WasmPrefixOrFilePaths = string|{\r\n 'ort-wasm.wasm'?: string;\r\n 'ort-wasm-threaded.wasm'?: string;\r\n 'ort-wasm-simd.wasm'?: string;\r\n 'ort-wasm-simd-threaded.wasm'?: string;\r\n };\r\n export interface WebAssemblyFlags {\r\n /**\r\n * set or get number of thread(s). If omitted or set to 0, number of thread(s) will be determined by system. If set\r\n * to 1, no worker thread will be spawned.\r\n *\r\n * This setting is available only when WebAssembly multithread feature is available in current context.\r\n *\r\n * @defaultValue `0`\r\n */\r\n numThreads?: number;\r\n\r\n /**\r\n * set or get a boolean value indicating whether to enable SIMD. If set to false, SIMD will be forcely disabled.\r\n *\r\n * This setting is available only when WebAssembly SIMD feature is available in current context.\r\n *\r\n * @defaultValue `true`\r\n */\r\n simd?: boolean;\r\n\r\n /**\r\n * Set or get a number specifying the timeout for initialization of WebAssembly backend, in milliseconds. A zero\r\n * value indicates no timeout is set.\r\n *\r\n * @defaultValue `0`\r\n */\r\n initTimeout?: number;\r\n\r\n /**\r\n * Set a custom URL prefix to the .wasm files or a set of overrides for each .wasm file. The override path should be\r\n * an absolute path.\r\n */\r\n wasmPaths?: WasmPrefixOrFilePaths;\r\n\r\n /**\r\n * Set or get a boolean value indicating whether to proxy the execution of main thread to a worker thread.\r\n *\r\n * @defaultValue `false`\r\n */\r\n proxy?: boolean;\r\n }\r\n\r\n export interface WebGLFlags {\r\n /**\r\n * Set or get the WebGL Context ID (webgl or webgl2).\r\n *\r\n * @defaultValue `'webgl2'`\r\n */\r\n contextId?: 'webgl'|'webgl2';\r\n /**\r\n * Set or get the maximum batch size for matmul. 0 means to disable batching.\r\n *\r\n * @deprecated\r\n */\r\n matmulMaxBatchSize?: number;\r\n /**\r\n * Set or get the texture cache mode.\r\n *\r\n * @defaultValue `'full'`\r\n */\r\n textureCacheMode?: 'initializerOnly'|'full';\r\n /**\r\n * Set or get the packed texture mode\r\n *\r\n * @defaultValue `false`\r\n */\r\n pack?: boolean;\r\n /**\r\n * Set or get whether enable async download.\r\n *\r\n * @defaultValue `false`\r\n */\r\n async?: boolean;\r\n }\r\n}\r\n\r\nexport interface Env {\r\n /**\r\n * set the severity level for logging.\r\n *\r\n * @defaultValue `'warning'`\r\n */\r\n logLevel?: 'verbose'|'info'|'warning'|'error'|'fatal';\r\n /**\r\n * Indicate whether run in debug mode.\r\n *\r\n * @defaultValue `false`\r\n */\r\n debug?: boolean;\r\n\r\n /**\r\n * Represent a set of flags for WebAssembly\r\n */\r\n wasm: Env.WebAssemblyFlags;\r\n\r\n /**\r\n * Represent a set of flags for WebGL\r\n */\r\n webgl: Env.WebGLFlags;\r\n\r\n [name: string]: unknown;\r\n}\r\n\r\n/**\r\n * Represent a set of flags as a global singleton.\r\n */\r\nexport const env: Env = new EnvImpl();\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Env} from './env';\r\n\r\ntype LogLevelType = Env['logLevel'];\r\nexport class EnvImpl implements Env {\r\n constructor() {\r\n this.wasm = {};\r\n this.webgl = {};\r\n this.logLevelInternal = 'warning';\r\n }\r\n\r\n // TODO standadize the getter and setter convention in env for other fields.\r\n set logLevel(value: LogLevelType) {\r\n if (value === undefined) {\r\n return;\r\n }\r\n if (typeof value !== 'string' || ['verbose', 'info', 'warning', 'error', 'fatal'].indexOf(value) === -1) {\r\n throw new Error(`Unsupported logging level: ${value}`);\r\n }\r\n this.logLevelInternal = value;\r\n }\r\n get logLevel(): LogLevelType {\r\n return this.logLevelInternal;\r\n }\r\n\r\n debug?: boolean;\r\n\r\n wasm: Env.WebAssemblyFlags;\r\n\r\n webgl: Env.WebGLFlags;\r\n\r\n [name: string]: unknown;\r\n\r\n private logLevelInternal: Required;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Tensor as TensorInterface} from './tensor';\r\n\r\ntype TensorType = TensorInterface.Type;\r\ntype TensorDataType = TensorInterface.DataType;\r\n\r\ntype SupportedTypedArrayConstructors = Float32ArrayConstructor|Uint8ArrayConstructor|Int8ArrayConstructor|\r\n Uint16ArrayConstructor|Int16ArrayConstructor|Int32ArrayConstructor|BigInt64ArrayConstructor|Uint8ArrayConstructor|\r\n Float64ArrayConstructor|Uint32ArrayConstructor|BigUint64ArrayConstructor;\r\ntype SupportedTypedArray = InstanceType;\r\n\r\nconst isBigInt64ArrayAvailable = typeof BigInt64Array !== 'undefined' && typeof BigInt64Array.from === 'function';\r\nconst isBigUint64ArrayAvailable = typeof BigUint64Array !== 'undefined' && typeof BigUint64Array.from === 'function';\r\n\r\n// a runtime map that maps type string to TypedArray constructor. Should match Tensor.DataTypeMap.\r\nconst NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP = new Map([\r\n ['float32', Float32Array],\r\n ['uint8', Uint8Array],\r\n ['int8', Int8Array],\r\n ['uint16', Uint16Array],\r\n ['int16', Int16Array],\r\n ['int32', Int32Array],\r\n ['bool', Uint8Array],\r\n ['float64', Float64Array],\r\n ['uint32', Uint32Array],\r\n]);\r\n\r\n// a runtime map that maps type string to TypedArray constructor. Should match Tensor.DataTypeMap.\r\nconst NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP = new Map([\r\n [Float32Array, 'float32'],\r\n [Uint8Array, 'uint8'],\r\n [Int8Array, 'int8'],\r\n [Uint16Array, 'uint16'],\r\n [Int16Array, 'int16'],\r\n [Int32Array, 'int32'],\r\n [Float64Array, 'float64'],\r\n [Uint32Array, 'uint32'],\r\n]);\r\n\r\nif (isBigInt64ArrayAvailable) {\r\n NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set('int64', BigInt64Array);\r\n NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.set(BigInt64Array, 'int64');\r\n}\r\nif (isBigUint64ArrayAvailable) {\r\n NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set('uint64', BigUint64Array);\r\n NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.set(BigUint64Array, 'uint64');\r\n}\r\n\r\n/**\r\n * calculate size from dims.\r\n *\r\n * @param dims the dims array. May be an illegal input.\r\n */\r\nconst calculateSize = (dims: readonly unknown[]): number => {\r\n let size = 1;\r\n for (let i = 0; i < dims.length; i++) {\r\n const dim = dims[i];\r\n if (typeof dim !== 'number' || !Number.isSafeInteger(dim)) {\r\n throw new TypeError(`dims[${i}] must be an integer, got: ${dim}`);\r\n }\r\n if (dim < 0) {\r\n throw new RangeError(`dims[${i}] must be a non-negative integer, got: ${dim}`);\r\n }\r\n size *= dim;\r\n }\r\n return size;\r\n};\r\n\r\nexport class Tensor implements TensorInterface {\r\n //#region constructors\r\n constructor(type: TensorType, data: TensorDataType|readonly number[]|readonly boolean[], dims?: readonly number[]);\r\n constructor(data: TensorDataType|readonly boolean[], dims?: readonly number[]);\r\n constructor(\r\n arg0: TensorType|TensorDataType|readonly boolean[], arg1?: TensorDataType|readonly number[]|readonly boolean[],\r\n arg2?: readonly number[]) {\r\n let type: TensorType;\r\n let data: TensorDataType;\r\n let dims: typeof arg1|typeof arg2;\r\n // check whether arg0 is type or data\r\n if (typeof arg0 === 'string') {\r\n //\r\n // Override: constructor(type, data, ...)\r\n //\r\n type = arg0;\r\n dims = arg2;\r\n if (arg0 === 'string') {\r\n // string tensor\r\n if (!Array.isArray(arg1)) {\r\n throw new TypeError('A string tensor\\'s data must be a string array.');\r\n }\r\n // we don't check whether every element in the array is string; this is too slow. we assume it's correct and\r\n // error will be populated at inference\r\n data = arg1;\r\n } else {\r\n // numeric tensor\r\n const typedArrayConstructor = NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.get(arg0);\r\n if (typedArrayConstructor === undefined) {\r\n throw new TypeError(`Unsupported tensor type: ${arg0}.`);\r\n }\r\n if (Array.isArray(arg1)) {\r\n // use 'as any' here because TypeScript's check on type of 'SupportedTypedArrayConstructors.from()' produces\r\n // incorrect results.\r\n // 'typedArrayConstructor' should be one of the typed array prototype objects.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n data = (typedArrayConstructor as any).from(arg1);\r\n } else if (arg1 instanceof typedArrayConstructor) {\r\n data = arg1;\r\n } else {\r\n throw new TypeError(`A ${type} tensor's data must be type of ${typedArrayConstructor}`);\r\n }\r\n }\r\n } else {\r\n //\r\n // Override: constructor(data, ...)\r\n //\r\n dims = arg1;\r\n if (Array.isArray(arg0)) {\r\n // only boolean[] and string[] is supported\r\n if (arg0.length === 0) {\r\n throw new TypeError('Tensor type cannot be inferred from an empty array.');\r\n }\r\n const firstElementType = typeof arg0[0];\r\n if (firstElementType === 'string') {\r\n type = 'string';\r\n data = arg0;\r\n } else if (firstElementType === 'boolean') {\r\n type = 'bool';\r\n // 'arg0' is of type 'boolean[]'. Uint8Array.from(boolean[]) actually works, but typescript thinks this is\r\n // wrong type. We use 'as any' to make it happy.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n data = Uint8Array.from(arg0 as any[]);\r\n } else {\r\n throw new TypeError(`Invalid element type of data array: ${firstElementType}.`);\r\n }\r\n } else {\r\n // get tensor type from TypedArray\r\n const mappedType =\r\n NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.get(arg0.constructor as SupportedTypedArrayConstructors);\r\n if (mappedType === undefined) {\r\n throw new TypeError(`Unsupported type for tensor data: ${arg0.constructor}.`);\r\n }\r\n type = mappedType;\r\n data = arg0 as SupportedTypedArray;\r\n }\r\n }\r\n\r\n // type and data is processed, now processing dims\r\n if (dims === undefined) {\r\n // assume 1-D tensor if dims omitted\r\n dims = [data.length];\r\n } else if (!Array.isArray(dims)) {\r\n throw new TypeError('A tensor\\'s dims must be a number array');\r\n }\r\n\r\n // perform check\r\n const size = calculateSize(dims);\r\n if (size !== data.length) {\r\n throw new Error(`Tensor's size(${size}) does not match data length(${data.length}).`);\r\n }\r\n\r\n this.dims = dims as readonly number[];\r\n this.type = type;\r\n this.data = data;\r\n this.size = size;\r\n }\r\n //#endregion\r\n\r\n //#region fields\r\n readonly dims: readonly number[];\r\n readonly type: TensorType;\r\n readonly data: TensorDataType;\r\n readonly size: number;\r\n //#endregion\r\n\r\n //#region tensor utilities\r\n reshape(dims: readonly number[]): Tensor {\r\n return new Tensor(this.type, this.data, dims);\r\n }\r\n //#endregion\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Tensor as TensorImpl} from './tensor-impl';\r\nimport {TypedTensorUtils} from './tensor-utils';\r\n\r\n/* eslint-disable @typescript-eslint/no-redeclare */\r\n\r\n/**\r\n * represent a basic tensor with specified dimensions and data type.\r\n */\r\ninterface TypedTensorBase {\r\n /**\r\n * Get the dimensions of the tensor.\r\n */\r\n readonly dims: readonly number[];\r\n /**\r\n * Get the data type of the tensor.\r\n */\r\n readonly type: T;\r\n /**\r\n * Get the buffer data of the tensor.\r\n */\r\n readonly data: Tensor.DataTypeMap[T];\r\n}\r\n\r\nexport declare namespace Tensor {\r\n interface DataTypeMap {\r\n float32: Float32Array;\r\n uint8: Uint8Array;\r\n int8: Int8Array;\r\n uint16: Uint16Array;\r\n int16: Int16Array;\r\n int32: Int32Array;\r\n int64: BigInt64Array;\r\n string: string[];\r\n bool: Uint8Array;\r\n float16: never; // hold on using Uint16Array before we have a concrete solution for float 16\r\n float64: Float64Array;\r\n uint32: Uint32Array;\r\n uint64: BigUint64Array;\r\n // complex64: never;\r\n // complex128: never;\r\n // bfloat16: never;\r\n }\r\n\r\n interface ElementTypeMap {\r\n float32: number;\r\n uint8: number;\r\n int8: number;\r\n uint16: number;\r\n int16: number;\r\n int32: number;\r\n int64: bigint;\r\n string: string;\r\n bool: boolean;\r\n float16: never; // hold on before we have a concret solution for float 16\r\n float64: number;\r\n uint32: number;\r\n uint64: bigint;\r\n // complex64: never;\r\n // complex128: never;\r\n // bfloat16: never;\r\n }\r\n\r\n type DataType = DataTypeMap[Type];\r\n type ElementType = ElementTypeMap[Type];\r\n\r\n /**\r\n * represent the data type of a tensor\r\n */\r\n export type Type = keyof DataTypeMap;\r\n}\r\n\r\n/**\r\n * Represent multi-dimensional arrays to feed to or fetch from model inferencing.\r\n */\r\nexport interface TypedTensor extends TypedTensorBase, TypedTensorUtils {}\r\n/**\r\n * Represent multi-dimensional arrays to feed to or fetch from model inferencing.\r\n */\r\nexport interface Tensor extends TypedTensorBase, TypedTensorUtils {}\r\n\r\nexport interface TensorConstructor {\r\n //#region specify element type\r\n /**\r\n * Construct a new string tensor object from the given type, data and dims.\r\n *\r\n * @param type - Specify the element type.\r\n * @param data - Specify the tensor data\r\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\r\n */\r\n new(type: 'string', data: Tensor.DataTypeMap['string']|readonly string[],\r\n dims?: readonly number[]): TypedTensor<'string'>;\r\n\r\n /**\r\n * Construct a new bool tensor object from the given type, data and dims.\r\n *\r\n * @param type - Specify the element type.\r\n * @param data - Specify the tensor data\r\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\r\n */\r\n new(type: 'bool', data: Tensor.DataTypeMap['bool']|readonly boolean[], dims?: readonly number[]): TypedTensor<'bool'>;\r\n\r\n /**\r\n * Construct a new numeric tensor object from the given type, data and dims.\r\n *\r\n * @param type - Specify the element type.\r\n * @param data - Specify the tensor data\r\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\r\n */\r\n new>(\r\n type: T, data: Tensor.DataTypeMap[T]|readonly number[], dims?: readonly number[]): TypedTensor;\r\n //#endregion\r\n\r\n //#region infer element types\r\n\r\n /**\r\n * Construct a new float32 tensor object from the given data and dims.\r\n *\r\n * @param data - Specify the tensor data\r\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\r\n */\r\n new(data: Float32Array, dims?: readonly number[]): TypedTensor<'float32'>;\r\n\r\n /**\r\n * Construct a new int8 tensor object from the given data and dims.\r\n *\r\n * @param data - Specify the tensor data\r\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\r\n */\r\n new(data: Int8Array, dims?: readonly number[]): TypedTensor<'int8'>;\r\n\r\n /**\r\n * Construct a new uint8 tensor object from the given data and dims.\r\n *\r\n * @param data - Specify the tensor data\r\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\r\n */\r\n new(data: Uint8Array, dims?: readonly number[]): TypedTensor<'uint8'>;\r\n\r\n /**\r\n * Construct a new uint16 tensor object from the given data and dims.\r\n *\r\n * @param data - Specify the tensor data\r\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\r\n */\r\n new(data: Uint16Array, dims?: readonly number[]): TypedTensor<'uint16'>;\r\n\r\n /**\r\n * Construct a new int16 tensor object from the given data and dims.\r\n *\r\n * @param data - Specify the tensor data\r\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\r\n */\r\n new(data: Int16Array, dims?: readonly number[]): TypedTensor<'int16'>;\r\n\r\n /**\r\n * Construct a new int32 tensor object from the given data and dims.\r\n *\r\n * @param data - Specify the tensor data\r\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\r\n */\r\n new(data: Int32Array, dims?: readonly number[]): TypedTensor<'int32'>;\r\n\r\n /**\r\n * Construct a new int64 tensor object from the given data and dims.\r\n *\r\n * @param data - Specify the tensor data\r\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\r\n */\r\n new(data: BigInt64Array, dims?: readonly number[]): TypedTensor<'int64'>;\r\n\r\n /**\r\n * Construct a new string tensor object from the given data and dims.\r\n *\r\n * @param data - Specify the tensor data\r\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\r\n */\r\n new(data: readonly string[], dims?: readonly number[]): TypedTensor<'string'>;\r\n\r\n /**\r\n * Construct a new bool tensor object from the given data and dims.\r\n *\r\n * @param data - Specify the tensor data\r\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\r\n */\r\n new(data: readonly boolean[], dims?: readonly number[]): TypedTensor<'bool'>;\r\n\r\n /**\r\n * Construct a new float64 tensor object from the given data and dims.\r\n *\r\n * @param data - Specify the tensor data\r\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\r\n */\r\n new(data: Float64Array, dims?: readonly number[]): TypedTensor<'float64'>;\r\n\r\n /**\r\n * Construct a new uint32 tensor object from the given data and dims.\r\n *\r\n * @param data - Specify the tensor data\r\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\r\n */\r\n new(data: Uint32Array, dims?: readonly number[]): TypedTensor<'uint32'>;\r\n\r\n /**\r\n * Construct a new uint64 tensor object from the given data and dims.\r\n *\r\n * @param data - Specify the tensor data\r\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\r\n */\r\n new(data: BigUint64Array, dims?: readonly number[]): TypedTensor<'uint64'>;\r\n\r\n //#endregion\r\n\r\n //#region fall back to non-generic tensor type declaration\r\n\r\n /**\r\n * Construct a new tensor object from the given type, data and dims.\r\n *\r\n * @param type - Specify the element type.\r\n * @param data - Specify the tensor data\r\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\r\n */\r\n new(type: Tensor.Type, data: Tensor.DataType|readonly number[]|readonly boolean[], dims?: readonly number[]): Tensor;\r\n\r\n /**\r\n * Construct a new tensor object from the given data and dims.\r\n *\r\n * @param data - Specify the tensor data\r\n * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\r\n */\r\n new(data: Tensor.DataType, dims?: readonly number[]): Tensor;\r\n //#endregion\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const Tensor = TensorImpl as TensorConstructor;\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {SessionHandler} from './backend';\r\nimport {resolveBackend} from './backend-impl';\r\nimport {InferenceSession as InferenceSessionInterface} from './inference-session';\r\nimport {OnnxValue} from './onnx-value';\r\nimport {Tensor} from './tensor';\r\n\r\ntype SessionOptions = InferenceSessionInterface.SessionOptions;\r\ntype RunOptions = InferenceSessionInterface.RunOptions;\r\ntype FeedsType = InferenceSessionInterface.FeedsType;\r\ntype FetchesType = InferenceSessionInterface.FetchesType;\r\ntype ReturnType = InferenceSessionInterface.ReturnType;\r\n\r\nexport class InferenceSession implements InferenceSessionInterface {\r\n private constructor(handler: SessionHandler) {\r\n this.handler = handler;\r\n }\r\n run(feeds: FeedsType, options?: RunOptions): Promise;\r\n run(feeds: FeedsType, fetches: FetchesType, options?: RunOptions): Promise;\r\n async run(feeds: FeedsType, arg1?: FetchesType|RunOptions, arg2?: RunOptions): Promise {\r\n const fetches: {[name: string]: OnnxValue|null} = {};\r\n let options: RunOptions = {};\r\n // check inputs\r\n if (typeof feeds !== 'object' || feeds === null || feeds instanceof Tensor || Array.isArray(feeds)) {\r\n throw new TypeError(\r\n '\\'feeds\\' must be an object that use input names as keys and OnnxValue as corresponding values.');\r\n }\r\n\r\n let isFetchesEmpty = true;\r\n // determine which override is being used\r\n if (typeof arg1 === 'object') {\r\n if (arg1 === null) {\r\n throw new TypeError('Unexpected argument[1]: cannot be null.');\r\n }\r\n if (arg1 instanceof Tensor) {\r\n throw new TypeError('\\'fetches\\' cannot be a Tensor');\r\n }\r\n\r\n if (Array.isArray(arg1)) {\r\n if (arg1.length === 0) {\r\n throw new TypeError('\\'fetches\\' cannot be an empty array.');\r\n }\r\n isFetchesEmpty = false;\r\n // output names\r\n for (const name of arg1) {\r\n if (typeof name !== 'string') {\r\n throw new TypeError('\\'fetches\\' must be a string array or an object.');\r\n }\r\n if (this.outputNames.indexOf(name) === -1) {\r\n throw new RangeError(`'fetches' contains invalid output name: ${name}.`);\r\n }\r\n fetches[name] = null;\r\n }\r\n\r\n if (typeof arg2 === 'object' && arg2 !== null) {\r\n options = arg2;\r\n } else if (typeof arg2 !== 'undefined') {\r\n throw new TypeError('\\'options\\' must be an object.');\r\n }\r\n } else {\r\n // decide whether arg1 is fetches or options\r\n // if any output name is present and its value is valid OnnxValue, we consider it fetches\r\n let isFetches = false;\r\n const arg1Keys = Object.getOwnPropertyNames(arg1);\r\n for (const name of this.outputNames) {\r\n if (arg1Keys.indexOf(name) !== -1) {\r\n const v = (arg1 as InferenceSessionInterface.NullableOnnxValueMapType)[name];\r\n if (v === null || v instanceof Tensor) {\r\n isFetches = true;\r\n isFetchesEmpty = false;\r\n fetches[name] = v;\r\n }\r\n }\r\n }\r\n\r\n if (isFetches) {\r\n if (typeof arg2 === 'object' && arg2 !== null) {\r\n options = arg2;\r\n } else if (typeof arg2 !== 'undefined') {\r\n throw new TypeError('\\'options\\' must be an object.');\r\n }\r\n } else {\r\n options = arg1 as RunOptions;\r\n }\r\n }\r\n } else if (typeof arg1 !== 'undefined') {\r\n throw new TypeError('Unexpected argument[1]: must be \\'fetches\\' or \\'options\\'.');\r\n }\r\n\r\n // check if all inputs are in feed\r\n for (const name of this.inputNames) {\r\n if (typeof feeds[name] === 'undefined') {\r\n throw new Error(`input '${name}' is missing in 'feeds'.`);\r\n }\r\n }\r\n\r\n // if no fetches is specified, we use the full output names list\r\n if (isFetchesEmpty) {\r\n for (const name of this.outputNames) {\r\n fetches[name] = null;\r\n }\r\n }\r\n\r\n // feeds, fetches and options are prepared\r\n\r\n const results = await this.handler.run(feeds, fetches, options);\r\n const returnValue: {[name: string]: OnnxValue} = {};\r\n for (const key in results) {\r\n if (Object.hasOwnProperty.call(results, key)) {\r\n returnValue[key] = new Tensor(results[key].type, results[key].data, results[key].dims);\r\n }\r\n }\r\n return returnValue;\r\n }\r\n\r\n static create(path: string, options?: SessionOptions): Promise;\r\n static create(buffer: ArrayBufferLike, options?: SessionOptions): Promise;\r\n static create(buffer: ArrayBufferLike, byteOffset: number, byteLength?: number, options?: SessionOptions):\r\n Promise;\r\n static create(buffer: Uint8Array, options?: SessionOptions): Promise;\r\n static async create(\r\n arg0: string|ArrayBufferLike|Uint8Array, arg1?: SessionOptions|number, arg2?: number,\r\n arg3?: SessionOptions): Promise {\r\n // either load from a file or buffer\r\n let filePathOrUint8Array: string|Uint8Array;\r\n let options: SessionOptions = {};\r\n\r\n if (typeof arg0 === 'string') {\r\n filePathOrUint8Array = arg0;\r\n if (typeof arg1 === 'object' && arg1 !== null) {\r\n options = arg1;\r\n } else if (typeof arg1 !== 'undefined') {\r\n throw new TypeError('\\'options\\' must be an object.');\r\n }\r\n } else if (arg0 instanceof Uint8Array) {\r\n filePathOrUint8Array = arg0;\r\n if (typeof arg1 === 'object' && arg1 !== null) {\r\n options = arg1;\r\n } else if (typeof arg1 !== 'undefined') {\r\n throw new TypeError('\\'options\\' must be an object.');\r\n }\r\n } else if (\r\n arg0 instanceof ArrayBuffer ||\r\n (typeof SharedArrayBuffer !== 'undefined' && arg0 instanceof SharedArrayBuffer)) {\r\n const buffer = arg0;\r\n let byteOffset = 0;\r\n let byteLength = arg0.byteLength;\r\n if (typeof arg1 === 'object' && arg1 !== null) {\r\n options = arg1;\r\n } else if (typeof arg1 === 'number') {\r\n byteOffset = arg1;\r\n if (!Number.isSafeInteger(byteOffset)) {\r\n throw new RangeError('\\'byteOffset\\' must be an integer.');\r\n }\r\n if (byteOffset < 0 || byteOffset >= buffer.byteLength) {\r\n throw new RangeError(`'byteOffset' is out of range [0, ${buffer.byteLength}).`);\r\n }\r\n byteLength = arg0.byteLength - byteOffset;\r\n if (typeof arg2 === 'number') {\r\n byteLength = arg2;\r\n if (!Number.isSafeInteger(byteLength)) {\r\n throw new RangeError('\\'byteLength\\' must be an integer.');\r\n }\r\n if (byteLength <= 0 || byteOffset + byteLength > buffer.byteLength) {\r\n throw new RangeError(`'byteLength' is out of range (0, ${buffer.byteLength - byteOffset}].`);\r\n }\r\n if (typeof arg3 === 'object' && arg3 !== null) {\r\n options = arg3;\r\n } else if (typeof arg3 !== 'undefined') {\r\n throw new TypeError('\\'options\\' must be an object.');\r\n }\r\n } else if (typeof arg2 !== 'undefined') {\r\n throw new TypeError('\\'byteLength\\' must be a number.');\r\n }\r\n } else if (typeof arg1 !== 'undefined') {\r\n throw new TypeError('\\'options\\' must be an object.');\r\n }\r\n filePathOrUint8Array = new Uint8Array(buffer, byteOffset, byteLength);\r\n } else {\r\n throw new TypeError('Unexpected argument[0]: must be \\'path\\' or \\'buffer\\'.');\r\n }\r\n\r\n // get backend hints\r\n const eps = options.executionProviders || [];\r\n const backendHints = eps.map(i => typeof i === 'string' ? i : i.name);\r\n const backend = await resolveBackend(backendHints);\r\n const handler = await backend.createSessionHandler(filePathOrUint8Array, options);\r\n return new InferenceSession(handler);\r\n }\r\n\r\n startProfiling(): void {\r\n this.handler.startProfiling();\r\n }\r\n endProfiling(): void {\r\n this.handler.endProfiling();\r\n }\r\n\r\n get inputNames(): readonly string[] {\r\n return this.handler.inputNames;\r\n }\r\n get outputNames(): readonly string[] {\r\n return this.handler.outputNames;\r\n }\r\n\r\n private handler: SessionHandler;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {InferenceSession as InferenceSessionImpl} from './inference-session-impl';\r\nimport {OnnxValue} from './onnx-value';\r\n\r\n/* eslint-disable @typescript-eslint/no-redeclare */\r\n\r\nexport declare namespace InferenceSession {\r\n //#region input/output types\r\n\r\n type OnnxValueMapType = {readonly [name: string]: OnnxValue};\r\n type NullableOnnxValueMapType = {readonly [name: string]: OnnxValue | null};\r\n\r\n /**\r\n * A feeds (model inputs) is an object that uses input names as keys and OnnxValue as corresponding values.\r\n */\r\n type FeedsType = OnnxValueMapType;\r\n\r\n /**\r\n * A fetches (model outputs) could be one of the following:\r\n *\r\n * - Omitted. Use model's output names definition.\r\n * - An array of string indicating the output names.\r\n * - An object that use output names as keys and OnnxValue or null as corresponding values.\r\n *\r\n * @remark\r\n * different from input argument, in output, OnnxValue is optional. If an OnnxValue is present it will be\r\n * used as a pre-allocated value by the inference engine; if omitted, inference engine will allocate buffer\r\n * internally.\r\n */\r\n type FetchesType = readonly string[]|NullableOnnxValueMapType;\r\n\r\n /**\r\n * A inferencing return type is an object that uses output names as keys and OnnxValue as corresponding values.\r\n */\r\n type ReturnType = OnnxValueMapType;\r\n\r\n //#endregion\r\n\r\n //#region session options\r\n\r\n /**\r\n * A set of configurations for session behavior.\r\n */\r\n export interface SessionOptions {\r\n /**\r\n * An array of execution provider options.\r\n *\r\n * An execution provider option can be a string indicating the name of the execution provider,\r\n * or an object of corresponding type.\r\n */\r\n executionProviders?: readonly ExecutionProviderConfig[];\r\n\r\n /**\r\n * The intra OP threads number.\r\n *\r\n * This setting is available only in ONNXRuntime (Node.js binding and react-native).\r\n */\r\n intraOpNumThreads?: number;\r\n\r\n /**\r\n * The inter OP threads number.\r\n *\r\n * This setting is available only in ONNXRuntime (Node.js binding and react-native).\r\n */\r\n interOpNumThreads?: number;\r\n\r\n /**\r\n * The optimization level.\r\n *\r\n * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\r\n */\r\n graphOptimizationLevel?: 'disabled'|'basic'|'extended'|'all';\r\n\r\n /**\r\n * Whether enable CPU memory arena.\r\n *\r\n * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\r\n */\r\n enableCpuMemArena?: boolean;\r\n\r\n /**\r\n * Whether enable memory pattern.\r\n *\r\n * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\r\n */\r\n enableMemPattern?: boolean;\r\n\r\n /**\r\n * Execution mode.\r\n *\r\n * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\r\n */\r\n executionMode?: 'sequential'|'parallel';\r\n\r\n /**\r\n * Wether enable profiling.\r\n *\r\n * This setting is a placeholder for a future use.\r\n */\r\n enableProfiling?: boolean;\r\n\r\n /**\r\n * File prefix for profiling.\r\n *\r\n * This setting is a placeholder for a future use.\r\n */\r\n profileFilePrefix?: string;\r\n\r\n /**\r\n * Log ID.\r\n *\r\n * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\r\n */\r\n logId?: string;\r\n\r\n /**\r\n * Log severity level. See\r\n * https://github.com/microsoft/onnxruntime/blob/master/include/onnxruntime/core/common/logging/severity.h\r\n *\r\n * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\r\n */\r\n logSeverityLevel?: 0|1|2|3|4;\r\n\r\n /**\r\n * Log verbosity level.\r\n *\r\n * This setting is available only in WebAssembly backend. Will support Node.js binding and react-native later\r\n */\r\n logVerbosityLevel?: number;\r\n\r\n /**\r\n * Store configurations for a session. See\r\n * https://github.com/microsoft/onnxruntime/blob/master/include/onnxruntime/core/session/\r\n * onnxruntime_session_options_config_keys.h\r\n *\r\n * This setting is available only in WebAssembly backend. Will support Node.js binding and react-native later\r\n *\r\n * @example\r\n * ```js\r\n * extra: {\r\n * session: {\r\n * set_denormal_as_zero: \"1\",\r\n * disable_prepacking: \"1\"\r\n * },\r\n * optimization: {\r\n * enable_gelu_approximation: \"1\"\r\n * }\r\n * }\r\n * ```\r\n */\r\n extra?: Record;\r\n }\r\n\r\n //#region execution providers\r\n\r\n // Currently, we have the following backends to support execution providers:\r\n // Backend Node.js binding: supports 'cpu' and 'cuda'.\r\n // Backend WebAssembly: supports 'wasm'.\r\n // Backend ONNX.js: supports 'webgl'.\r\n interface ExecutionProviderOptionMap {\r\n cpu: CpuExecutionProviderOption;\r\n cuda: CudaExecutionProviderOption;\r\n wasm: WebAssemblyExecutionProviderOption;\r\n webgl: WebGLExecutionProviderOption;\r\n }\r\n\r\n type ExecutionProviderName = keyof ExecutionProviderOptionMap;\r\n type ExecutionProviderConfig =\r\n ExecutionProviderOptionMap[ExecutionProviderName]|ExecutionProviderOption|ExecutionProviderName|string;\r\n\r\n export interface ExecutionProviderOption {\r\n readonly name: string;\r\n }\r\n export interface CpuExecutionProviderOption extends ExecutionProviderOption {\r\n readonly name: 'cpu';\r\n useArena?: boolean;\r\n }\r\n export interface CudaExecutionProviderOption extends ExecutionProviderOption {\r\n readonly name: 'cuda';\r\n deviceId?: number;\r\n }\r\n export interface WebAssemblyExecutionProviderOption extends ExecutionProviderOption {\r\n readonly name: 'wasm';\r\n // TODO: add flags\r\n }\r\n export interface WebGLExecutionProviderOption extends ExecutionProviderOption {\r\n readonly name: 'webgl';\r\n // TODO: add flags\r\n }\r\n //#endregion\r\n\r\n //#endregion\r\n\r\n //#region run options\r\n\r\n /**\r\n * A set of configurations for inference run behavior\r\n */\r\n export interface RunOptions {\r\n /**\r\n * Log severity level. See\r\n * https://github.com/microsoft/onnxruntime/blob/master/include/onnxruntime/core/common/logging/severity.h\r\n *\r\n * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\r\n */\r\n logSeverityLevel?: 0|1|2|3|4;\r\n\r\n /**\r\n * Log verbosity level.\r\n *\r\n * This setting is available only in WebAssembly backend. Will support Node.js binding and react-native later\r\n */\r\n logVerbosityLevel?: number;\r\n\r\n /**\r\n * Terminate all incomplete OrtRun calls as soon as possible if true\r\n *\r\n * This setting is available only in WebAssembly backend. Will support Node.js binding and react-native later\r\n */\r\n terminate?: boolean;\r\n\r\n /**\r\n * A tag for the Run() calls using this\r\n *\r\n * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\r\n */\r\n tag?: string;\r\n\r\n /**\r\n * Set a single run configuration entry. See\r\n * https://github.com/microsoft/onnxruntime/blob/master/include/onnxruntime/core/session/\r\n * onnxruntime_run_options_config_keys.h\r\n *\r\n * This setting is available only in WebAssembly backend. Will support Node.js binding and react-native later\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * extra: {\r\n * memory: {\r\n * enable_memory_arena_shrinkage: \"1\",\r\n * }\r\n * }\r\n * ```\r\n */\r\n extra?: Record;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region value metadata\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\r\n interface ValueMetadata {\r\n // TBD\r\n }\r\n\r\n //#endregion\r\n}\r\n\r\n/**\r\n * Represent a runtime instance of an ONNX model.\r\n */\r\nexport interface InferenceSession {\r\n //#region run()\r\n\r\n /**\r\n * Execute the model asynchronously with the given feeds and options.\r\n *\r\n * @param feeds - Representation of the model input. See type description of `InferenceSession.InputType` for detail.\r\n * @param options - Optional. A set of options that controls the behavior of model inference.\r\n * @returns A promise that resolves to a map, which uses output names as keys and OnnxValue as corresponding values.\r\n */\r\n run(feeds: InferenceSession.FeedsType, options?: InferenceSession.RunOptions): Promise;\r\n\r\n /**\r\n * Execute the model asynchronously with the given feeds, fetches and options.\r\n *\r\n * @param feeds - Representation of the model input. See type description of `InferenceSession.InputType` for detail.\r\n * @param fetches - Representation of the model output. See type description of `InferenceSession.OutputType` for\r\n * detail.\r\n * @param options - Optional. A set of options that controls the behavior of model inference.\r\n * @returns A promise that resolves to a map, which uses output names as keys and OnnxValue as corresponding values.\r\n */\r\n run(feeds: InferenceSession.FeedsType, fetches: InferenceSession.FetchesType,\r\n options?: InferenceSession.RunOptions): Promise;\r\n\r\n //#endregion\r\n\r\n //#region profiling\r\n\r\n /**\r\n * Start profiling.\r\n */\r\n startProfiling(): void;\r\n\r\n /**\r\n * End profiling.\r\n */\r\n endProfiling(): void;\r\n\r\n //#endregion\r\n\r\n //#region metadata\r\n\r\n /**\r\n * Get input names of the loaded model.\r\n */\r\n readonly inputNames: readonly string[];\r\n\r\n /**\r\n * Get output names of the loaded model.\r\n */\r\n readonly outputNames: readonly string[];\r\n\r\n // /**\r\n // * Get input metadata of the loaded model.\r\n // */\r\n // readonly inputMetadata: ReadonlyArray>;\r\n\r\n // /**\r\n // * Get output metadata of the loaded model.\r\n // */\r\n // readonly outputMetadata: ReadonlyArray>;\r\n\r\n //#endregion\r\n}\r\n\r\nexport interface InferenceSessionFactory {\r\n //#region create()\r\n\r\n /**\r\n * Create a new inference session and load model asynchronously from an ONNX model file.\r\n *\r\n * @param uri - The URI or file path of the model to load.\r\n * @param options - specify configuration for creating a new inference session.\r\n * @returns A promise that resolves to an InferenceSession object.\r\n */\r\n create(uri: string, options?: InferenceSession.SessionOptions): Promise;\r\n\r\n /**\r\n * Create a new inference session and load model asynchronously from an array bufer.\r\n *\r\n * @param buffer - An ArrayBuffer representation of an ONNX model.\r\n * @param options - specify configuration for creating a new inference session.\r\n * @returns A promise that resolves to an InferenceSession object.\r\n */\r\n create(buffer: ArrayBufferLike, options?: InferenceSession.SessionOptions): Promise;\r\n\r\n /**\r\n * Create a new inference session and load model asynchronously from segment of an array bufer.\r\n *\r\n * @param buffer - An ArrayBuffer representation of an ONNX model.\r\n * @param byteOffset - The beginning of the specified portion of the array buffer.\r\n * @param byteLength - The length in bytes of the array buffer.\r\n * @param options - specify configuration for creating a new inference session.\r\n * @returns A promise that resolves to an InferenceSession object.\r\n */\r\n create(buffer: ArrayBufferLike, byteOffset: number, byteLength?: number, options?: InferenceSession.SessionOptions):\r\n Promise;\r\n\r\n /**\r\n * Create a new inference session and load model asynchronously from a Uint8Array.\r\n *\r\n * @param buffer - A Uint8Array representation of an ONNX model.\r\n * @param options - specify configuration for creating a new inference session.\r\n * @returns A promise that resolves to an InferenceSession object.\r\n */\r\n create(buffer: Uint8Array, options?: InferenceSession.SessionOptions): Promise;\r\n\r\n //#endregion\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const InferenceSession: InferenceSessionFactory = InferenceSessionImpl;\r\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"onnxruntime-common\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"onnxruntime-common\")) : factory(root[\"ort\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function(__WEBPACK_EXTERNAL_MODULE__2174__) {\nreturn ","var _scriptDir,e=(_scriptDir=\"undefined\"!=typeof document&&document.currentScript?document.currentScript.src:void 0,\"undefined\"!=typeof __filename&&(_scriptDir=_scriptDir||__filename),function(e){function t(){return S.buffer!=Y&&Q(S.buffer),P}function n(){return S.buffer!=Y&&Q(S.buffer),W}function r(){return S.buffer!=Y&&Q(S.buffer),q}function a(){return S.buffer!=Y&&Q(S.buffer),U}function i(){return S.buffer!=Y&&Q(S.buffer),B}var o,u,s;e=e||{},o||(o=void 0!==e?e:{}),o.ready=new Promise((function(e,t){u=e,s=t}));var c,f={};for(c in o)o.hasOwnProperty(c)&&(f[c]=o[c]);var l=\"./this.program\";function p(e,t){throw t}var d,m,b,h,g,_=\"object\"==typeof window,y=\"function\"==typeof importScripts,w=\"object\"==typeof process&&\"object\"==typeof process.versions&&\"string\"==typeof process.versions.node,v=o.ENVIRONMENT_IS_PTHREAD||!1,A=\"\";function T(e){return o.locateFile?o.locateFile(e,A):A+e}if(w){var O;A=y?require(\"path\").dirname(A)+\"/\":__dirname+\"/\",d=function(e,t){return h||(h=require(\"fs\")),g||(g=require(\"path\")),e=g.normalize(e),h.readFileSync(e,t?null:\"utf8\")},b=function(e){return(e=d(e,!0)).buffer||(e=new Uint8Array(e)),F(e.buffer),e},m=function(e,t,n){h||(h=require(\"fs\")),g||(g=require(\"path\")),e=g.normalize(e),h.readFile(e,(function(e,r){e?n(e):t(r.buffer)}))},1=r);)++n;if(16(a=224==(240&a)?(15&a)<<12|i<<6|o:(7&a)<<18|i<<12|o<<6|63&e[t++])?r+=String.fromCharCode(a):(a-=65536,r+=String.fromCharCode(55296|a>>10,56320|1023&a))}}else r+=String.fromCharCode(a)}return r}function z(e,t){return e?H(n(),e,t):\"\"}function L(e,t,n,r){if(!(0=o&&(o=65536+((1023&o)<<10)|1023&e.charCodeAt(++i)),127>=o){if(n>=r)break;t[n++]=o}else{if(2047>=o){if(n+1>=r)break;t[n++]=192|o>>6}else{if(65535>=o){if(n+2>=r)break;t[n++]=224|o>>12}else{if(n+3>=r)break;t[n++]=240|o>>18,t[n++]=128|o>>12&63}t[n++]=128|o>>6&63}t[n++]=128|63&o}}return t[n]=0,n-a}function N(e,t,r){return L(e,n(),t,r)}function V(e){for(var t=0,n=0;n=r&&(r=65536+((1023&r)<<10)|1023&e.charCodeAt(++n)),127>=r?++t:t=2047>=r?t+2:65535>=r?t+3:t+4}return t}function X(e){var n=V(e)+1,r=ht(n);return r&&L(e,t(),r,n),r}function Q(e){Y=e,o.HEAP8=P=new Int8Array(e),o.HEAP16=new Int16Array(e),o.HEAP32=q=new Int32Array(e),o.HEAPU8=W=new Uint8Array(e),o.HEAPU16=new Uint16Array(e),o.HEAPU32=U=new Uint32Array(e),o.HEAPF32=new Float32Array(e),o.HEAPF64=B=new Float64Array(e)}\"undefined\"!=typeof TextDecoder&&new j(\"utf-16le\"),v&&(Y=o.buffer);var J=o.INITIAL_MEMORY||16777216;if(v)S=o.wasmMemory,Y=o.buffer;else if(o.wasmMemory)S=o.wasmMemory;else if(!((S=new WebAssembly.Memory({initial:J/65536,maximum:32768,shared:!0})).buffer instanceof SharedArrayBuffer))throw M(\"requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag\"),w&&console.log(\"(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)\"),Error(\"bad memory\");S&&(Y=S.buffer),J=Y.byteLength,Q(Y);var Z,$=[],K=[],ee=[],te=[],ne=0;function re(){return D||0=e||e>t().length||1&e||0>n)return-28;if(0==n)return 0;2147483647<=n&&(n=1/0);var a=Atomics.load(r(),Bt>>2),i=0;if(a==e&&Atomics.compareExchange(r(),Bt>>2,a,0)==a&&(i=1,0>=--n))return 1;if(0<=(e=Atomics.notify(r(),e>>2,n)))return e+i;throw\"Atomics.notify returned an unexpected value \"+e}function be(e){if(v)throw\"Internal Error! cleanupThread() can only ever be called from main application thread!\";if(!e)throw\"Internal Error! Null pthread_ptr in cleanupThread!\";var t=ge.cb[e];t&&(r()[e+12>>2]=0,ge.sb(t.worker))}o._emscripten_futex_wake=me;var he,ge={gb:[],fb:[],zb:[],xc:function(){},Rb:function(){for(var e=ht(228),t=0;57>t;++t)a()[e/4+t]=0;r()[e+12>>2]=e,t=e+152,r()[t>>2]=t;var n=ht(512);for(t=0;128>t;++t)a()[n/4+t]=0;Atomics.store(a(),e+100>>2,n),Atomics.store(a(),e+40>>2,e),Dt(e,!y,1),vt(e)},Sb:function(){ge.receiveObjectTransfer=ge.Xb,ge.threadInit=ge.hc,ge.threadCancel=ge.fc,ge.threadExit=ge.Hb,ge.setExitStatus=ge.Zb},cb:{},yb:[],Eb:function(){for(;0>2,1),Atomics.store(a(),e+60>>2,0),ge.Eb(),Atomics.store(a(),e+4>>2,t),Atomics.store(a(),e+0>>2,1),me(e+0,2147483647),Dt(0,0,0)},Zb:function(e){R=e},Hb:function(e){var t=yt();t&&(ge.Fb(t,e),v&&postMessage({cmd:\"exit\"}))},fc:function(){ge.Fb(yt(),-1),postMessage({cmd:\"cancelDone\"})},Gb:function(){for(var e in ge.cb){var t=ge.cb[e];t&&t.worker&&ge.sb(t.worker)}for(ge.cb={},e=0;e>2];r()[e.eb+100>>2]=0,_t(t),_t(e.eb)}e.eb=0,e.wb&&e.hb&&_t(e.hb),e.hb=0,e.worker&&(e.worker.bb=null)}},sb:function(e){ge.Yb((function(){delete ge.cb[e.bb.eb],ge.gb.push(e),ge.fb.splice(ge.fb.indexOf(e),1),ge.xb(e.bb),e.bb=void 0}))},Yb:function(e){r()[Ut>>2]=0;try{e()}finally{r()[Ut>>2]=1}},Xb:function(){},hc:function(){for(var e in ge.zb)ge.zb[e]()},Ub:function(e,t){e.onmessage=function(n){var i=n.data,o=i.cmd;if(e.bb&&(ge.Lb=e.bb.eb),i.targetThread&&i.targetThread!=yt()){var u=ge.cb[i.Dc];u?u.worker.postMessage(n.data,i.transferList):M('Internal error! Worker sent a message \"'+o+'\" to target pthread '+i.targetThread+\", but that thread no longer exists!\")}else if(\"processQueuedMainThreadWork\"===o)Ot();else if(\"spawnThread\"===o)ve(n.data);else if(\"cleanupThread\"===o)be(i.thread);else if(\"killThread\"===o){if(n=i.thread,v)throw\"Internal Error! killThread() can only ever be called from main application thread!\";if(!n)throw\"Internal Error! Null pthread_ptr in killThread!\";r()[n+12>>2]=0,i=ge.cb[n],delete ge.cb[n],i.worker.terminate(),ge.xb(i),ge.fb.splice(ge.fb.indexOf(i.worker),1),i.worker.bb=void 0}else if(\"cancelThread\"===o){if(n=i.thread,v)throw\"Internal Error! cancelThread() can only ever be called from main application thread!\";if(!n)throw\"Internal Error! Null pthread_ptr in cancelThread!\";ge.cb[n].worker.postMessage({cmd:\"cancel\"})}else if(\"loaded\"===o)e.loaded=!0,t&&t(e),e.mb&&(e.mb(),delete e.mb);else if(\"print\"===o)x(\"Thread \"+i.threadId+\": \"+i.text);else if(\"printErr\"===o)M(\"Thread \"+i.threadId+\": \"+i.text);else if(\"alert\"===o)alert(\"Thread \"+i.threadId+\": \"+i.text);else if(\"exit\"===o)e.bb&&Atomics.load(a(),e.bb.eb+64>>2)&&ge.sb(e);else if(\"exitProcess\"===o)try{zt(i.returnCode)}catch(e){if(e instanceof Gt)return;throw e}else\"cancelDone\"===o?ge.sb(e):\"objectTransfer\"!==o&&(\"setimmediate\"===n.data.target?e.postMessage(n.data):M(\"worker sent an unknown command \"+o));ge.Lb=void 0},e.onerror=function(e){M(\"pthread sent an error! \"+e.filename+\":\"+e.lineno+\": \"+e.message)},w&&(e.on(\"message\",(function(t){e.onmessage({data:t})})),e.on(\"error\",(function(t){e.onerror(t)})),e.on(\"exit\",(function(){}))),e.postMessage({cmd:\"load\",urlOrBlob:o.mainScriptUrlOrBlob||_scriptDir,wasmMemory:S,wasmModule:C})},Ib:function(){var e=T(\"ort-wasm-threaded.worker.js\");ge.gb.push(new Worker(e))},Ob:function(){return 0==ge.gb.length&&(ge.Ib(),ge.Ub(ge.gb[0])),ge.gb.pop()},nc:function(e){for(e=performance.now()+e;performance.now()>2]=28,-1;e=he()}return r()[t>>2]=e/1e3|0,r()[t+4>>2]=e%1e3*1e6|0,0}function ye(e,t){if(v)return ze(1,1,e,t);ee.unshift({Nb:e,ib:t})}function we(e){this.lb=e-16,this.dc=function(e){r()[this.lb+4>>2]=e},this.ac=function(e){r()[this.lb+8>>2]=e},this.bc=function(){r()[this.lb>>2]=0},this.$b=function(){t()[this.lb+12>>0]=0},this.cc=function(){t()[this.lb+13>>0]=0},this.Pb=function(e,t){this.dc(e),this.ac(t),this.bc(),this.$b(),this.cc()}}function ve(e){if(v)throw\"Internal Error! spawnThread() can only ever be called from main application thread!\";var t=ge.Ob();if(!t)return 6;if(void 0!==t.bb)throw\"Internal error!\";if(!e.rb)throw\"Internal error, no pthread ptr!\";ge.fb.push(t);for(var n=ht(512),i=0;128>i;++i)r()[n+4*i>>2]=0;var o=e.hb+e.jb,u=(i=ge.cb[e.rb]={worker:t,hb:e.hb,jb:e.jb,wb:e.wb,eb:e.rb}).eb>>2;Atomics.store(a(),u+16,e.detached),Atomics.store(a(),u+25,n),Atomics.store(a(),u+10,i.eb),Atomics.store(a(),u+20,e.jb),Atomics.store(a(),u+19,o),Atomics.store(a(),u+26,e.jb),Atomics.store(a(),u+28,o),Atomics.store(a(),u+29,e.detached),n=St()+40,Atomics.store(a(),u+43,n),t.bb=i;var s={cmd:\"run\",start_routine:e.ec,arg:e.ib,threadInfoStruct:e.rb,stackBase:e.hb,stackSize:e.jb};return t.mb=function(){s.time=performance.now(),t.postMessage(s,e.mc)},t.loaded&&(t.mb(),delete t.mb),0}function Ae(e,n,a){if(0>=e||e>t().length||1&e)return-28;if(_){if(Atomics.load(r(),e>>2)!=n)return-6;var i=performance.now();for(a=i+a,Atomics.exchange(r(),Bt>>2,e);;){if((i=performance.now())>a)return Atomics.exchange(r(),Bt>>2,0),-73;if(0==(i=Atomics.exchange(r(),Bt>>2,0)))break;if(Ot(),Atomics.load(r(),e>>2)!=n)return-6;Atomics.exchange(r(),Bt>>2,e)}return 0}if(\"timed-out\"===(e=Atomics.wait(r(),e>>2,n,a)))return-73;if(\"not-equal\"===e)return-6;if(\"ok\"===e)return 0;throw\"Atomics.wait returned an unexpected value \"+e}function Te(){w||y||(k||(k={}),k[\"Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread\"]||(k[\"Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread\"]=1,M(\"Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread\")))}o.establishStackSpace=function(e,t){Wt(e,t),Yt(e)},o.invokeEntryPoint=function(e,t){return Z.get(e)(t)},he=w?function(){var e=process.hrtime();return 1e3*e[0]+e[1]/1e6}:v?function(){return performance.now()-o.__performance_now_clock_drift}:function(){return performance.now()};var Oe={},ke=[null,[],[]];function Ee(e,t){var n=ke[e];0===t||10===t?((1===e?x:M)(H(n,0)),n.length=0):n.push(t)}var xe={};function Me(e,t){return v?ze(2,1,e,t):(e=z(e),xe.rc(e,t))}function De(e,t,n){return v?ze(3,1,e,t,n):0}function Se(e,t){if(v)return ze(4,1,e,t)}function Ce(e,t,n){if(v)return ze(5,1,e,t,n)}function Re(e,t,n){return v?ze(6,1,e,t,n):0}function Ie(e,t){if(v)return ze(7,1,e,t)}function Fe(e,t){return v?ze(8,1,e,t):(e=z(e),xe.sc(e,t))}function je(e,t,r,a,i,o){if(v)t=ze(9,1,e,t,r,a,i,o);else if(o<<=12,0!=(16&a)&&0!=e%65536)t=-28;else if(0!=(32&a)){var u=65536*Math.ceil(t/65536);(e=qt(65536,u))?n().fill(0,e,e+u):e=0,e?(Oe[e]={Wb:e,Tb:t,Jb:!0,fd:i,Ac:r,flags:a,offset:o},t=e):t=-48}else t=-52;return t}function Ye(e,t){if(v)e=ze(10,1,e,t);else{var n=Oe[e];0!==t&&n?(t===n.Tb&&(Oe[e]=null,n.Jb&&_t(n.Wb)),e=0):e=-28}return e}function Pe(e,t,n){if(v)return ze(11,1,e,t,n)}function We(e,t,n){return v?ze(12,1,e,t,n):(e=z(e),xe.tc(e,t,n))}function qe(e){if(v)return ze(13,1,e)}function Ue(e,t){if(v)return ze(14,1,e,t)}function Be(e){if(v)return ze(15,1,e)}function Ge(){if(v)return ze(16,1);ce()}var He=[];function ze(e,t){for(var n=arguments.length-2,r=jt(),a=Pt(8*n),o=a>>3,u=0;u>2]=t,r()[a.qb+4>>2]=n),!a.Db&&a.pc){if(a.qb){a=r()[a.qb+8>>2],e=e?z(e):\"\";var i=jt(),o=Pt(12),u=0;if(e){u=V(e)+1;var s=ht(u);N(e,s,u),u=s}return r()[o>>2]=u,r()[o+4>>2]=t,r()[o+8>>2]=n,Et(0,a,657457152,0,u,o),Yt(i),1}return-4}return a.Db&&(a=a.Db),e=!1,a.pb&&a.pb.ob&&(e=0===(e=a.pb.ob.getParameter(2978))[0]&&0===e[1]&&e[2]===a.width&&e[3]===a.height),a.width=t,a.height=n,e&&a.pb.ob.viewport(0,0,t,n),0}function Qe(e,t,n){return v?ze(17,1,e,t,n):Xe(e,t,n)}var Je,Ze=[\"default\",\"low-power\",\"high-performance\"],$e={};function Ke(){if(!Je){var e,t={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:(\"object\"==typeof navigator&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",_:l||\"./this.program\"};for(e in $e)void 0===$e[e]?delete t[e]:t[e]=$e[e];var n=[];for(e in t)n.push(e+\"=\"+t[e]);Je=n}return Je}function et(e,n){if(v)return ze(18,1,e,n);var a=0;return Ke().forEach((function(i,o){var u=n+a;for(o=r()[e+4*o>>2]=u,u=0;u>0]=i.charCodeAt(u);t()[o>>0]=0,a+=i.length+1})),0}function tt(e,t){if(v)return ze(19,1,e,t);var n=Ke();r()[e>>2]=n.length;var a=0;return n.forEach((function(e){a+=e.length+1})),r()[t>>2]=a,0}function nt(e){return v?ze(20,1,e):0}function rt(e,n){return v?ze(21,1,e,n):(e=1==e||2==e?2:ce(),t()[n>>0]=e,0)}function at(e,t,n,a){return v?ze(22,1,e,t,n,a):(e=xe.vc(e),t=xe.uc(e,t,n),r()[a>>2]=t,0)}function it(e,t,n,r,a){if(v)return ze(23,1,e,t,n,r,a)}function ot(e,t,a,i){if(v)return ze(24,1,e,t,a,i);for(var o=0,u=0;u>2],c=r()[t+(8*u+4)>>2],f=0;f>2]=o,0}function ut(){function e(e){return(e=e.toTimeString().match(/\\(([A-Za-z ]+)\\)$/))?e[1]:\"GMT\"}if(v)return ze(25,1);if(!ut.Kb){ut.Kb=!0;var t=(new Date).getFullYear(),n=new Date(t,0,1),a=new Date(t,6,1);t=n.getTimezoneOffset();var i=a.getTimezoneOffset(),o=Math.max(t,i);r()[Ft()>>2]=60*o,r()[It()>>2]=Number(t!=i),n=e(n),a=e(a),n=X(n),a=X(a),i>2]=n,r()[Rt()+4>>2]=a):(r()[Rt()>>2]=a,r()[Rt()+4>>2]=n)}}function st(e){return 0==e%4&&(0!=e%100||0==e%400)}function ct(e,t){for(var n=0,r=0;r<=t;n+=e[r++]);return n}var ft=[31,29,31,30,31,30,31,31,30,31,30,31],lt=[31,28,31,30,31,30,31,31,30,31,30,31];function pt(e,t){for(e=new Date(e.getTime());0r-e.getDate())){e.setDate(e.getDate()+t);break}t-=r-e.getDate()+1,e.setDate(1),11>n?e.setMonth(n+1):(e.setMonth(0),e.setFullYear(e.getFullYear()+1))}return e}function dt(e,n,a,i){function o(e,t,n){for(e=\"number\"==typeof e?e.toString():e||\"\";e.lengthe?-1:0=s(n,e)?0>=s(t,e)?e.getFullYear()+1:e.getFullYear():e.getFullYear()-1}var l=r()[i+40>>2];for(var p in i={kc:r()[i>>2],jc:r()[i+4>>2],tb:r()[i+8>>2],nb:r()[i+12>>2],kb:r()[i+16>>2],ab:r()[i+20>>2],ub:r()[i+24>>2],vb:r()[i+28>>2],Ec:r()[i+32>>2],ic:r()[i+36>>2],lc:l?z(l):\"\"},a=z(a),l={\"%c\":\"%a %b %d %H:%M:%S %Y\",\"%D\":\"%m/%d/%y\",\"%F\":\"%Y-%m-%d\",\"%h\":\"%b\",\"%r\":\"%I:%M:%S %p\",\"%R\":\"%H:%M\",\"%T\":\"%H:%M:%S\",\"%x\":\"%m/%d/%y\",\"%X\":\"%H:%M:%S\",\"%Ec\":\"%c\",\"%EC\":\"%C\",\"%Ex\":\"%m/%d/%y\",\"%EX\":\"%H:%M:%S\",\"%Ey\":\"%y\",\"%EY\":\"%Y\",\"%Od\":\"%d\",\"%Oe\":\"%e\",\"%OH\":\"%H\",\"%OI\":\"%I\",\"%Om\":\"%m\",\"%OM\":\"%M\",\"%OS\":\"%S\",\"%Ou\":\"%u\",\"%OU\":\"%U\",\"%OV\":\"%V\",\"%Ow\":\"%w\",\"%OW\":\"%W\",\"%Oy\":\"%y\"})a=a.replace(new RegExp(p,\"g\"),l[p]);var d=\"Sunday Monday Tuesday Wednesday Thursday Friday Saturday\".split(\" \"),m=\"January February March April May June July August September October November December\".split(\" \");for(p in l={\"%a\":function(e){return d[e.ub].substring(0,3)},\"%A\":function(e){return d[e.ub]},\"%b\":function(e){return m[e.kb].substring(0,3)},\"%B\":function(e){return m[e.kb]},\"%C\":function(e){return u((e.ab+1900)/100|0,2)},\"%d\":function(e){return u(e.nb,2)},\"%e\":function(e){return o(e.nb,2,\" \")},\"%g\":function(e){return f(e).toString().substring(2)},\"%G\":function(e){return f(e)},\"%H\":function(e){return u(e.tb,2)},\"%I\":function(e){return 0==(e=e.tb)?e=12:12e.tb?\"AM\":\"PM\"},\"%S\":function(e){return u(e.kc,2)},\"%t\":function(){return\"\\t\"},\"%u\":function(e){return e.ub||7},\"%U\":function(e){var t=new Date(e.ab+1900,0,1),n=0===t.getDay()?t:pt(t,7-t.getDay());return 0>s(n,e=new Date(e.ab+1900,e.kb,e.nb))?u(Math.ceil((31-n.getDate()+(ct(st(e.getFullYear())?ft:lt,e.getMonth()-1)-31)+e.getDate())/7),2):0===s(n,t)?\"01\":\"00\"},\"%V\":function(e){var t=new Date(e.ab+1901,0,4),n=c(new Date(e.ab+1900,0,4));t=c(t);var r=pt(new Date(e.ab+1900,0,1),e.vb);return 0>s(r,n)?\"53\":0>=s(t,r)?\"01\":u(Math.ceil((n.getFullYear()s(n,e=new Date(e.ab+1900,e.kb,e.nb))?u(Math.ceil((31-n.getDate()+(ct(st(e.getFullYear())?ft:lt,e.getMonth()-1)-31)+e.getDate())/7),2):0===s(n,t)?\"01\":\"00\"},\"%y\":function(e){return(e.ab+1900).toString().substring(2)},\"%Y\":function(e){return e.ab+1900},\"%z\":function(e){var t=0<=(e=e.ic);return e=Math.abs(e)/60,(t?\"+\":\"-\")+String(\"0000\"+(e/60*100+e%60)).slice(-4)},\"%Z\":function(e){return e.lc},\"%%\":function(){return\"%\"}})a.includes(p)&&(a=a.replace(new RegExp(p,\"g\"),l[p](i)));return p=function(e){var t=Array(V(e)+1);return L(e,t,0,t.length),t}(a),p.length>n?0:(function(e,n){t().set(e,n)}(p,e),p.length-1)}var mt=[null,ye,Me,De,Se,Ce,Re,Ie,Fe,je,Ye,Pe,We,qe,Ue,Be,Ge,Qe,et,tt,nt,rt,at,it,ot,ut],bt={h:function(e,t,n,r){ce(\"Assertion failed: \"+z(e)+\", at: \"+[t?z(t):\"unknown filename\",n,r?z(r):\"unknown function\"])},M:function(e,t){return _e(e,t)},b:function(e){return ht(e+16)+16},d:function(e,t){return ye(e,t)},e:function(e,t){ge.yb.push((function(){Z.get(e)(t)}))},c:function(e,t,n){throw new we(e).Pb(t,n),e},Z:function(e,t,n,i){if(\"undefined\"==typeof SharedArrayBuffer)return M(\"Current environment does not support SharedArrayBuffer, pthreads are not available!\"),6;if(!e)return M(\"pthread_create called with a null thread pointer!\"),28;var o=[];if(v&&0===o.length)return Tt(687865856,e,t,n,i);var u=0,s=0;if(t&&-1!=t){var c=r()[t>>2];c+=81920,u=r()[t+8>>2],s=0!==r()[t+12>>2]}else c=2097152;(t=0==u)?u=qt(16,c):F(0<(u-=c));for(var f=ht(228),l=0;57>l;++l)a()[(f>>2)+l]=0;return r()[e>>2]=f,r()[f+12>>2]=f,e=f+152,r()[e>>2]=e,n={hb:u,jb:c,wb:t,detached:s,ec:n,rb:f,ib:i,mc:o},v?(n.oc=\"spawnThread\",postMessage(n,o),0):ve(n)},X:function(e){throw v?ge.Hb(e):(ge.Eb(),zt(e)),\"unwind\"},Y:function(e,t){return function(e,t){if(!e)return M(\"pthread_join attempted on a null thread pointer!\"),71;if(v&&yt()==e)return M(\"PThread \"+e+\" is attempting to join to itself!\"),16;if(!v&&At()==e)return M(\"Main thread \"+e+\" is attempting to join to itself!\"),16;if(r()[e+12>>2]!==e)return M(\"pthread_join attempted on thread \"+e+\", which does not point to a valid thread, or does not exist anymore!\"),71;if(Atomics.load(a(),e+64>>2))return M(\"Attempted to join thread \"+e+\", which was already detached!\"),28;for(Te();;){var n=Atomics.load(a(),e+0>>2);if(1==n)return n=Atomics.load(a(),e+4>>2),t&&(r()[t>>2]=n),Atomics.store(a(),e+64>>2,1),v?postMessage({cmd:\"cleanupThread\",thread:e}):be(e),0;xt(),v||Ot(),Ae(e+0,n,v?100:1)}}(e,t)},L:Me,s:De,S:Se,V:Ce,u:function(){return 42},F:Re,Q:Ie,P:Fe,U:je,T:Ye,q:Pe,K:We,N:qe,v:Ue,O:Be,da:function(e,t){if(e==t)postMessage({cmd:\"processQueuedMainThreadWork\"});else if(v)postMessage({targetThread:e,cmd:\"processThreadQueue\"});else{if(!(e=(e=ge.cb[e])&&e.worker))return;e.postMessage({cmd:\"processThreadQueue\"})}return 1},f:Ge,w:_e,ga:function(e,t){return e-t},A:function(){ce(\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\")},l:function(){ce(\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\")},C:function(){ce(\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\")},z:function(){ce(\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\")},ea:function(e,t,a){var o;for(He.length=0,a>>=2;o=n()[t++];)(o=105>o)&&1&a&&a++,He.push(o?i()[a++>>1]:r()[a]),++a;return pe[e].apply(null,He)},G:Te,n:function(){},k:Ae,j:me,W:function(){return 2147483648},i:he,D:function(e,t,r){n().copyWithin(e,t,t+r)},o:function(){return w?require(\"os\").cpus().length:navigator.hardwareConcurrency},aa:function(e,t,n){Le.length=t,n>>=3;for(var r=0;re?pe[-e-1]:mt[e]).apply(null,Le)},E:function(e){var t=n().length;if((e>>>=0)<=t||2147483648=r;r*=2){var a=t*(1+.2/r);a=Math.min(a,e+100663296),0<(a=Math.max(e,a))%65536&&(a+=65536-a%65536);e:{try{S.grow(Math.min(2147483648,a)-Y.byteLength+65535>>>16),Q(S.buffer);var i=1;break e}catch(e){}i=void 0}if(i)return!0}return!1},ba:function(e,t,n){return Ve(e)?Xe(e,t,n):Qe(e,t,n)},x:function(){},$:function(e,t,n){return ne+=1,setTimeout((function(){--ne,function(e){if(!I){try{e()}catch(e){if(e instanceof Gt)return;if(\"unwind\"!==e)throw e&&\"object\"==typeof e&&e.stack&&M(\"exception thrown: \"+[e,e.stack]),e}if(!re())try{v?Mt(R):zt(R)}catch(e){if(!(e instanceof Gt))throw e}}}((function(){Z.get(e)(n)}))}),t)},ca:function(e,t){t>>=2;var n=r()[t+6];return t={alpha:!!r()[t],depth:!!r()[t+1],stencil:!!r()[t+2],antialias:!!r()[t+3],premultipliedAlpha:!!r()[t+4],preserveDrawingBuffer:!!r()[t+5],powerPreference:Ze[n],failIfMajorPerformanceCaveat:!!r()[t+7],Vb:r()[t+8],yc:r()[t+9],Bb:r()[t+10],Mb:r()[t+11],Bc:r()[t+12],Cc:r()[t+13]},!(e=Ve(e))||t.Mb?0:function(e,t){e.Cb||(e.Cb=e.getContext,e.getContext=function(t,n){return\"webgl\"==t==(n=e.Cb(t,n))instanceof WebGLRenderingContext?n:null});var n=e.getContext(\"webgl\",t);return n?function(e,t){var n=ht(8);r()[n+4>>2]=yt();var a={wc:n,attributes:t,version:t.Vb,ob:e};return e.canvas&&(e.canvas.pb=a),(void 0===t.Bb||t.Bb)&&function(e){if(e||(e=void 0),!e.Qb){e.Qb=!0;var t=e.ob;!function(e){var t=e.getExtension(\"ANGLE_instanced_arrays\");t&&(e.vertexAttribDivisor=function(e,n){t.vertexAttribDivisorANGLE(e,n)},e.drawArraysInstanced=function(e,n,r,a){t.drawArraysInstancedANGLE(e,n,r,a)},e.drawElementsInstanced=function(e,n,r,a,i){t.drawElementsInstancedANGLE(e,n,r,a,i)})}(t),function(e){var t=e.getExtension(\"OES_vertex_array_object\");t&&(e.createVertexArray=function(){return t.createVertexArrayOES()},e.deleteVertexArray=function(e){t.deleteVertexArrayOES(e)},e.bindVertexArray=function(e){t.bindVertexArrayOES(e)},e.isVertexArray=function(e){return t.isVertexArrayOES(e)})}(t),function(e){var t=e.getExtension(\"WEBGL_draw_buffers\");t&&(e.drawBuffers=function(e,n){t.drawBuffersWEBGL(e,n)})}(t),t.qc=t.getExtension(\"EXT_disjoint_timer_query\"),t.zc=t.getExtension(\"WEBGL_multi_draw\"),(t.getSupportedExtensions()||[]).forEach((function(e){e.includes(\"lose_context\")||e.includes(\"debug\")||t.getExtension(e)}))}}(a),n}(n,t):0}(e,t)},I:et,J:tt,m:nt,H:rt,t:at,B:it,p:ot,R:function(e){var t=Date.now();return r()[e>>2]=t/1e3|0,r()[e+4>>2]=t%1e3*1e3|0,0},ha:function e(t,n){return t=new Date(1e3*r()[t>>2]),r()[n>>2]=t.getUTCSeconds(),r()[n+4>>2]=t.getUTCMinutes(),r()[n+8>>2]=t.getUTCHours(),r()[n+12>>2]=t.getUTCDate(),r()[n+16>>2]=t.getUTCMonth(),r()[n+20>>2]=t.getUTCFullYear()-1900,r()[n+24>>2]=t.getUTCDay(),r()[n+36>>2]=0,r()[n+32>>2]=0,t=(t.getTime()-Date.UTC(t.getUTCFullYear(),0,1,0,0,0,0))/864e5|0,r()[n+28>>2]=t,e.Ab||(e.Ab=X(\"GMT\")),r()[n+40>>2]=e.Ab,n},_:function(){ge.Rb()},r:function(e,t){ut(),e=new Date(1e3*r()[e>>2]),r()[t>>2]=e.getSeconds(),r()[t+4>>2]=e.getMinutes(),r()[t+8>>2]=e.getHours(),r()[t+12>>2]=e.getDate(),r()[t+16>>2]=e.getMonth(),r()[t+20>>2]=e.getFullYear()-1900,r()[t+24>>2]=e.getDay();var n=new Date(e.getFullYear(),0,1),a=(e.getTime()-n.getTime())/864e5|0;return r()[t+28>>2]=a,r()[t+36>>2]=-60*e.getTimezoneOffset(),a=new Date(e.getFullYear(),6,1).getTimezoneOffset(),e=0|(a!=(n=n.getTimezoneOffset())&&e.getTimezoneOffset()==Math.min(n,a)),r()[t+32>>2]=e,e=r()[Rt()+(e?4:0)>>2],r()[t+40>>2]=e,t},a:S||o.wasmMemory,y:function(e){ut();var t=new Date(r()[e+20>>2]+1900,r()[e+16>>2],r()[e+12>>2],r()[e+8>>2],r()[e+4>>2],r()[e>>2],0),n=r()[e+32>>2],a=t.getTimezoneOffset(),i=new Date(t.getFullYear(),0,1),o=new Date(t.getFullYear(),6,1).getTimezoneOffset(),u=i.getTimezoneOffset(),s=Math.min(u,o);return 0>n?r()[e+32>>2]=Number(o!=u&&s==a):0>2]=t.getDay(),n=(t.getTime()-i.getTime())/864e5|0,r()[e+28>>2]=n,r()[e>>2]=t.getSeconds(),r()[e+4>>2]=t.getMinutes(),r()[e+8>>2]=t.getHours(),r()[e+12>>2]=t.getDate(),r()[e+16>>2]=t.getMonth(),t.getTime()/1e3|0},fa:dt,g:function(e,t,n,r){return dt(e,t,n,r)}};!function(){function e(e,t){o.asm=e.exports,Z=o.asm.Ca,K.unshift(o.asm.ia),ge.zb.push(o.asm.Ha),C=t,v||(oe--,o.monitorRunDependencies&&o.monitorRunDependencies(oe),0==oe&&(null!==ue&&(clearInterval(ue),ue=null),se&&(e=se,se=null,e())))}function t(t){e(t.instance,t.module)}function n(e){return function(){if(!E&&(_||y)){if(\"function\"==typeof fetch&&!ie.startsWith(\"file://\"))return fetch(ie,{credentials:\"same-origin\"}).then((function(e){if(!e.ok)throw\"failed to load wasm binary file at '\"+ie+\"'\";return e.arrayBuffer()})).catch((function(){return le()}));if(m)return new Promise((function(e,t){m(ie,(function(t){e(new Uint8Array(t))}),t)}))}return Promise.resolve().then((function(){return le()}))}().then((function(e){return WebAssembly.instantiate(e,r)})).then(e,(function(e){M(\"failed to asynchronously prepare wasm: \"+e),ce(e)}))}var r={a:bt};if(v||(oe++,o.monitorRunDependencies&&o.monitorRunDependencies(oe)),o.instantiateWasm)try{return o.instantiateWasm(r,e)}catch(e){return M(\"Module.instantiateWasm callback failed with error: \"+e),!1}(E||\"function\"!=typeof WebAssembly.instantiateStreaming||fe()||ie.startsWith(\"file://\")||\"function\"!=typeof fetch?n(t):fetch(ie,{credentials:\"same-origin\"}).then((function(e){return WebAssembly.instantiateStreaming(e,r).then(t,(function(e){return M(\"wasm streaming compile failed: \"+e),M(\"falling back to ArrayBuffer instantiation\"),n(t)}))}))).catch(s)}(),o.___wasm_call_ctors=function(){return(o.___wasm_call_ctors=o.asm.ia).apply(null,arguments)},o._OrtInit=function(){return(o._OrtInit=o.asm.ja).apply(null,arguments)},o._OrtCreateSessionOptions=function(){return(o._OrtCreateSessionOptions=o.asm.ka).apply(null,arguments)},o._OrtAddSessionConfigEntry=function(){return(o._OrtAddSessionConfigEntry=o.asm.la).apply(null,arguments)},o._OrtReleaseSessionOptions=function(){return(o._OrtReleaseSessionOptions=o.asm.ma).apply(null,arguments)},o._OrtCreateSession=function(){return(o._OrtCreateSession=o.asm.na).apply(null,arguments)},o._OrtReleaseSession=function(){return(o._OrtReleaseSession=o.asm.oa).apply(null,arguments)},o._OrtGetInputCount=function(){return(o._OrtGetInputCount=o.asm.pa).apply(null,arguments)},o._OrtGetOutputCount=function(){return(o._OrtGetOutputCount=o.asm.qa).apply(null,arguments)},o._OrtGetInputName=function(){return(o._OrtGetInputName=o.asm.ra).apply(null,arguments)},o._OrtGetOutputName=function(){return(o._OrtGetOutputName=o.asm.sa).apply(null,arguments)},o._OrtFree=function(){return(o._OrtFree=o.asm.ta).apply(null,arguments)},o._OrtCreateTensor=function(){return(o._OrtCreateTensor=o.asm.ua).apply(null,arguments)},o._OrtGetTensorData=function(){return(o._OrtGetTensorData=o.asm.va).apply(null,arguments)},o._OrtReleaseTensor=function(){return(o._OrtReleaseTensor=o.asm.wa).apply(null,arguments)},o._OrtCreateRunOptions=function(){return(o._OrtCreateRunOptions=o.asm.xa).apply(null,arguments)},o._OrtAddRunConfigEntry=function(){return(o._OrtAddRunConfigEntry=o.asm.ya).apply(null,arguments)},o._OrtReleaseRunOptions=function(){return(o._OrtReleaseRunOptions=o.asm.za).apply(null,arguments)},o._OrtRun=function(){return(o._OrtRun=o.asm.Aa).apply(null,arguments)},o._OrtEndProfiling=function(){return(o._OrtEndProfiling=o.asm.Ba).apply(null,arguments)};var ht=o._malloc=function(){return(ht=o._malloc=o.asm.Da).apply(null,arguments)},gt=o.___errno_location=function(){return(gt=o.___errno_location=o.asm.Ea).apply(null,arguments)},_t=o._free=function(){return(_t=o._free=o.asm.Fa).apply(null,arguments)},yt=o._pthread_self=function(){return(yt=o._pthread_self=o.asm.Ga).apply(null,arguments)};o._emscripten_tls_init=function(){return(o._emscripten_tls_init=o.asm.Ha).apply(null,arguments)},o._emscripten_current_thread_process_queued_calls=function(){return(o._emscripten_current_thread_process_queued_calls=o.asm.Ia).apply(null,arguments)};var wt,vt=o._emscripten_register_main_browser_thread_id=function(){return(vt=o._emscripten_register_main_browser_thread_id=o.asm.Ja).apply(null,arguments)},At=o._emscripten_main_browser_thread_id=function(){return(At=o._emscripten_main_browser_thread_id=o.asm.Ka).apply(null,arguments)},Tt=o._emscripten_sync_run_in_main_thread_4=function(){return(Tt=o._emscripten_sync_run_in_main_thread_4=o.asm.La).apply(null,arguments)},Ot=o._emscripten_main_thread_process_queued_calls=function(){return(Ot=o._emscripten_main_thread_process_queued_calls=o.asm.Ma).apply(null,arguments)},kt=o._emscripten_run_in_main_runtime_thread_js=function(){return(kt=o._emscripten_run_in_main_runtime_thread_js=o.asm.Na).apply(null,arguments)},Et=o.__emscripten_call_on_thread=function(){return(Et=o.__emscripten_call_on_thread=o.asm.Oa).apply(null,arguments)},xt=o._pthread_testcancel=function(){return(xt=o._pthread_testcancel=o.asm.Pa).apply(null,arguments)},Mt=o._pthread_exit=function(){return(Mt=o._pthread_exit=o.asm.Qa).apply(null,arguments)},Dt=o.__emscripten_thread_init=function(){return(Dt=o.__emscripten_thread_init=o.asm.Ra).apply(null,arguments)},St=o._emscripten_get_global_libc=function(){return(St=o._emscripten_get_global_libc=o.asm.Sa).apply(null,arguments)},Ct=o.___pthread_tsd_run_dtors=function(){return(Ct=o.___pthread_tsd_run_dtors=o.asm.Ta).apply(null,arguments)},Rt=o.__get_tzname=function(){return(Rt=o.__get_tzname=o.asm.Ua).apply(null,arguments)},It=o.__get_daylight=function(){return(It=o.__get_daylight=o.asm.Va).apply(null,arguments)},Ft=o.__get_timezone=function(){return(Ft=o.__get_timezone=o.asm.Wa).apply(null,arguments)},jt=o.stackSave=function(){return(jt=o.stackSave=o.asm.Xa).apply(null,arguments)},Yt=o.stackRestore=function(){return(Yt=o.stackRestore=o.asm.Ya).apply(null,arguments)},Pt=o.stackAlloc=function(){return(Pt=o.stackAlloc=o.asm.Za).apply(null,arguments)},Wt=o._emscripten_stack_set_limits=function(){return(Wt=o._emscripten_stack_set_limits=o.asm._a).apply(null,arguments)},qt=o._memalign=function(){return(qt=o._memalign=o.asm.$a).apply(null,arguments)},Ut=o.__emscripten_allow_main_runtime_queued_calls=688928,Bt=o.__emscripten_main_thread_futex=694164;function Gt(e){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+e+\")\",this.status=e}function Ht(){function e(){if(!wt&&(wt=!0,o.calledRun=!0,!I)&&(v||de(K),u(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),!v)){if(o.postRun)for(\"function\"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;){var e=o.postRun.shift();te.unshift(e)}de(te)}}if(!(0=f);)++e;if(16h?f+=String.fromCharCode(h):(h-=65536,f+=String.fromCharCode(55296|h>>10,56320|h&1023))}}else f+=String.fromCharCode(h)}return f}function J(a,b){return a?ha(K,a,b):\"\"}\r\nfunction L(a,b,e,f){if(!(0=l){var q=a.charCodeAt(++k);l=65536+((l&1023)<<10)|q&1023}if(127>=l){if(e>=f)break;b[e++]=l}else{if(2047>=l){if(e+1>=f)break;b[e++]=192|l>>6}else{if(65535>=l){if(e+2>=f)break;b[e++]=224|l>>12}else{if(e+3>=f)break;b[e++]=240|l>>18;b[e++]=128|l>>12&63}b[e++]=128|l>>6&63}b[e++]=128|l&63}}b[e]=0;return e-h}\r\nfunction ia(a){for(var b=0,e=0;e=f&&(f=65536+((f&1023)<<10)|a.charCodeAt(++e)&1023);127>=f?++b:b=2047>=f?b+2:65535>=f?b+3:b+4}return b}function ja(a){var b=ia(a)+1,e=ka(b);e&&L(a,M,e,b);return e}var la,M,K,N;\r\nfunction ma(){var a=I.buffer;la=a;c.HEAP8=M=new Int8Array(a);c.HEAP16=new Int16Array(a);c.HEAP32=N=new Int32Array(a);c.HEAPU8=K=new Uint8Array(a);c.HEAPU16=new Uint16Array(a);c.HEAPU32=new Uint32Array(a);c.HEAPF32=new Float32Array(a);c.HEAPF64=new Float64Array(a)}var na,oa=[],pa=[],qa=[],ra=[];function sa(){var a=c.preRun.shift();oa.unshift(a)}var O=0,ta=null,P=null;c.preloadedImages={};c.preloadedAudios={};\r\nfunction E(a){if(c.onAbort)c.onAbort(a);F(a);ea=!0;a=new WebAssembly.RuntimeError(\"abort(\"+a+\"). Build with -s ASSERTIONS=1 for more info.\");g(a);throw a;}function ua(){return Q.startsWith(\"data:application/octet-stream;base64,\")}var Q;Q=\"ort-wasm.wasm\";if(!ua()){var va=Q;Q=c.locateFile?c.locateFile(va,x):x+va}function wa(){var a=Q;try{if(a==Q&&H)return new Uint8Array(H);if(B)return B(a);throw\"both async and sync fetching of the wasm failed\";}catch(b){E(b)}}\r\nfunction xa(){if(!H&&(ba||w)){if(\"function\"===typeof fetch&&!Q.startsWith(\"file://\"))return fetch(Q,{credentials:\"same-origin\"}).then(function(a){if(!a.ok)throw\"failed to load wasm binary file at '\"+Q+\"'\";return a.arrayBuffer()}).catch(function(){return wa()});if(z)return new Promise(function(a,b){z(Q,function(e){a(new Uint8Array(e))},b)})}return Promise.resolve().then(function(){return wa()})}\r\nfunction ya(a){for(;0>2]=b};this.Ka=function(b){N[this.ya+8>>2]=b};this.La=function(){N[this.ya>>2]=0};this.Ja=function(){M[this.ya+12>>0]=0};this.Ma=function(){M[this.ya+13>>0]=0};this.Ga=function(b,e){this.Na(b);this.Ka(e);this.La();this.Ja();this.Ma()}}\r\nvar Aa=0,Ba={},Ca=[null,[],[]],R={},S;S=ca?function(){var a=process.hrtime();return 1E3*a[0]+a[1]/1E6}:function(){return performance.now()};var Da={};function Ea(){if(!Fa){var a={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:(\"object\"===typeof navigator&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",_:v||\"./this.program\"},b;for(b in Da)void 0===Da[b]?delete a[b]:a[b]=Da[b];var e=[];for(b in a)e.push(b+\"=\"+a[b]);Fa=e}return Fa}var Fa;\r\nfunction T(a,b){a=new Date(1E3*N[a>>2]);N[b>>2]=a.getUTCSeconds();N[b+4>>2]=a.getUTCMinutes();N[b+8>>2]=a.getUTCHours();N[b+12>>2]=a.getUTCDate();N[b+16>>2]=a.getUTCMonth();N[b+20>>2]=a.getUTCFullYear()-1900;N[b+24>>2]=a.getUTCDay();N[b+36>>2]=0;N[b+32>>2]=0;N[b+28>>2]=(a.getTime()-Date.UTC(a.getUTCFullYear(),0,1,0,0,0,0))/864E5|0;T.Da||(T.Da=ja(\"GMT\"));N[b+40>>2]=T.Da;return b}\r\nfunction Ga(){function a(l){return(l=l.toTimeString().match(/\\(([A-Za-z ]+)\\)$/))?l[1]:\"GMT\"}if(!Ka){Ka=!0;var b=(new Date).getFullYear(),e=new Date(b,0,1),f=new Date(b,6,1);b=e.getTimezoneOffset();var h=f.getTimezoneOffset(),k=Math.max(b,h);N[La()>>2]=60*k;N[Ma()>>2]=Number(b!=h);e=a(e);f=a(f);e=ja(e);f=ja(f);h>2]=e,N[U()+4>>2]=f):(N[U()>>2]=f,N[U()+4>>2]=e)}}var Ka;function V(a){return 0===a%4&&(0!==a%100||0===a%400)}function Na(a,b){for(var e=0,f=0;f<=b;e+=a[f++]);return e}\r\nvar W=[31,29,31,30,31,30,31,31,30,31,30,31],X=[31,28,31,30,31,30,31,31,30,31,30,31];function Y(a,b){for(a=new Date(a.getTime());0f-a.getDate())b-=f-a.getDate()+1,a.setDate(1),11>e?a.setMonth(e+1):(a.setMonth(0),a.setFullYear(a.getFullYear()+1));else{a.setDate(a.getDate()+b);break}}return a}\r\nfunction Oa(a,b,e,f){function h(d,m,n){for(d=\"number\"===typeof d?d.toString():d||\"\";d.lengthHa?-1:0=l(n,d)?0>=l(m,d)?d.getFullYear()+1:d.getFullYear():d.getFullYear()-1}var u=N[f+40>>2];f={Qa:N[f>>2],Pa:N[f+4>>2],Aa:N[f+8>>2],za:N[f+12>>2],wa:N[f+16>>2],va:N[f+20>>2],Ba:N[f+24>>2],Ca:N[f+28>>2],Ya:N[f+32>>2],Oa:N[f+\r\n36>>2],Ra:u?J(u):\"\"};e=J(e);u={\"%c\":\"%a %b %d %H:%M:%S %Y\",\"%D\":\"%m/%d/%y\",\"%F\":\"%Y-%m-%d\",\"%h\":\"%b\",\"%r\":\"%I:%M:%S %p\",\"%R\":\"%H:%M\",\"%T\":\"%H:%M:%S\",\"%x\":\"%m/%d/%y\",\"%X\":\"%H:%M:%S\",\"%Ec\":\"%c\",\"%EC\":\"%C\",\"%Ex\":\"%m/%d/%y\",\"%EX\":\"%H:%M:%S\",\"%Ey\":\"%y\",\"%EY\":\"%Y\",\"%Od\":\"%d\",\"%Oe\":\"%e\",\"%OH\":\"%H\",\"%OI\":\"%I\",\"%Om\":\"%m\",\"%OM\":\"%M\",\"%OS\":\"%S\",\"%Ou\":\"%u\",\"%OU\":\"%U\",\"%OV\":\"%V\",\"%Ow\":\"%w\",\"%OW\":\"%W\",\"%Oy\":\"%y\"};for(var p in u)e=e.replace(new RegExp(p,\"g\"),u[p]);var Ia=\"Sunday Monday Tuesday Wednesday Thursday Friday Saturday\".split(\" \"),\r\nJa=\"January February March April May June July August September October November December\".split(\" \");u={\"%a\":function(d){return Ia[d.Ba].substring(0,3)},\"%A\":function(d){return Ia[d.Ba]},\"%b\":function(d){return Ja[d.wa].substring(0,3)},\"%B\":function(d){return Ja[d.wa]},\"%C\":function(d){return k((d.va+1900)/100|0,2)},\"%d\":function(d){return k(d.za,2)},\"%e\":function(d){return h(d.za,2,\" \")},\"%g\":function(d){return G(d).toString().substring(2)},\"%G\":function(d){return G(d)},\"%H\":function(d){return k(d.Aa,\r\n2)},\"%I\":function(d){d=d.Aa;0==d?d=12:12d.Aa?\"AM\":\"PM\"},\"%S\":function(d){return k(d.Qa,2)},\"%t\":function(){return\"\\t\"},\"%u\":function(d){return d.Ba||7},\"%U\":function(d){var m=new Date(d.va+1900,0,1),n=0===m.getDay()?m:Y(m,7-m.getDay());d=new Date(d.va+1900,d.wa,d.za);return 0>\r\nl(n,d)?k(Math.ceil((31-n.getDate()+(Na(V(d.getFullYear())?W:X,d.getMonth()-1)-31)+d.getDate())/7),2):0===l(n,m)?\"01\":\"00\"},\"%V\":function(d){var m=new Date(d.va+1901,0,4),n=q(new Date(d.va+1900,0,4));m=q(m);var A=Y(new Date(d.va+1900,0,1),d.Ca);return 0>l(A,n)?\"53\":0>=l(m,A)?\"01\":k(Math.ceil((n.getFullYear()l(n,d)?k(Math.ceil((31-n.getDate()+(Na(V(d.getFullYear())?W:X,d.getMonth()-1)-31)+d.getDate())/7),2):0===l(n,m)?\"01\":\"00\"},\"%y\":function(d){return(d.va+1900).toString().substring(2)},\"%Y\":function(d){return d.va+1900},\"%z\":function(d){d=d.Oa;var m=0<=d;d=Math.abs(d)/60;return(m?\"+\":\"-\")+String(\"0000\"+(d/60*100+d%60)).slice(-4)},\"%Z\":function(d){return d.Ra},\"%%\":function(){return\"%\"}};for(p in u)e.includes(p)&&(e=e.replace(new RegExp(p,\"g\"),u[p](f)));p=Pa(e);if(p.length>b)return 0;\r\nM.set(p,a);return p.length-1}function Pa(a){var b=Array(ia(a)+1);L(a,b,0,b.length);return b}\r\nvar Ta={a:function(a){return ka(a+16)+16},c:function(a,b){qa.unshift({Ea:a,xa:b})},d:function(a,b){qa.unshift({Ea:a,xa:b})},b:function(a,b,e){(new za(a)).Ga(b,e);Aa++;throw a;},D:function(a,b){a=J(a);return R.Sa(a,b)},m:function(){return 0},I:function(){},L:function(){},o:function(){return 42},x:function(){return 0},H:function(){},G:function(a,b){a=J(a);return R.Ta(a,b)},K:function(a,b,e,f,h,k){k<<=12;if(0!==(f&16)&&0!==a%65536)b=-28;else if(0!==(f&32)){a=65536*Math.ceil(b/65536);var l=Qa(65536,a);\r\nl?(K.fill(0,l,l+a),a=l):a=0;a?(Ba[a]={Ia:a,Ha:b,Fa:!0,fd:h,Xa:e,flags:f,offset:k},b=a):b=-48}else b=-52;return b},J:function(a,b){var e=Ba[a];0!==b&&e?(b===e.Ha&&(Ba[a]=null,e.Fa&&Ra(e.Ia)),a=0):a=-28;return a},j:function(){},C:function(a,b,e){a=J(a);return R.Ua(a,b,e)},E:function(){},r:function(){},F:function(){},h:function(){E()},p:function(a,b){if(0===a)a=Date.now();else if(1===a||4===a)a=S();else return N[Sa()>>2]=28,-1;N[b>>2]=a/1E3|0;N[b+4>>2]=a%1E3*1E6|0;return 0},s:function(a,b){return a-\r\nb},P:function(){E(\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\")},g:function(){E(\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\")},Q:function(){E(\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\")},O:function(){E(\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\")},\r\nM:function(){return 2147483648},v:function(a,b,e){K.copyWithin(a,b,b+e)},i:function(a){var b=K.length;a>>>=0;if(2147483648=e;e*=2){var f=b*(1+.2/e);f=Math.min(f,a+100663296);f=Math.max(a,f);0>>16);ma();var h=1;break a}catch(k){}h=void 0}if(h)return!0}return!1},B:function(a){for(var b=S();S()-b>2]=k;for(k=0;k>\r\n0]=f.charCodeAt(k);M[h>>0]=0;e+=f.length+1});return 0},A:function(a,b){var e=Ea();N[a>>2]=e.length;var f=0;e.forEach(function(h){f+=h.length+1});N[b>>2]=f;return 0},f:function(){return 0},y:function(a,b){a=1==a||2==a?2:E();M[b>>0]=a;return 0},n:function(a,b,e,f){a=R.Wa(a);b=R.Va(a,b,e);N[f>>2]=b;return 0},u:function(){},q:function(a,b,e,f){for(var h=0,k=0;k>2],q=N[b+(8*k+4)>>2],G=0;G>2]=h;return 0},w:function(a){var b=Date.now();N[a>>2]=b/1E3|0;N[a+4>>2]=b%1E3*1E3|0;return 0},t:T,l:function(a,b){Ga();a=new Date(1E3*N[a>>2]);N[b>>2]=a.getSeconds();N[b+4>>2]=a.getMinutes();N[b+8>>2]=a.getHours();N[b+12>>2]=a.getDate();N[b+16>>2]=a.getMonth();N[b+20>>2]=a.getFullYear()-1900;N[b+24>>2]=a.getDay();var e=new Date(a.getFullYear(),0,1);N[b+28>>2]=(a.getTime()-e.getTime())/864E5|0;N[b+36>>2]=-(60*a.getTimezoneOffset());var f=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();e=\r\ne.getTimezoneOffset();a=(f!=e&&a.getTimezoneOffset()==Math.min(e,f))|0;N[b+32>>2]=a;a=N[U()+(a?4:0)>>2];N[b+40>>2]=a;return b},k:function(a){Ga();var b=new Date(N[a+20>>2]+1900,N[a+16>>2],N[a+12>>2],N[a+8>>2],N[a+4>>2],N[a>>2],0),e=N[a+32>>2],f=b.getTimezoneOffset(),h=new Date(b.getFullYear(),0,1),k=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),l=h.getTimezoneOffset(),q=Math.min(l,k);0>e?N[a+32>>2]=Number(k!=l&&q==f):0>2]=b.getDay();N[a+28>>2]=(b.getTime()-h.getTime())/864E5|0;N[a>>2]=b.getSeconds();N[a+4>>2]=b.getMinutes();N[a+8>>2]=b.getHours();N[a+12>>2]=b.getDate();N[a+16>>2]=b.getMonth();return b.getTime()/1E3|0},N:Oa,e:function(a,b,e,f){return Oa(a,b,e,f)}};\r\n(function(){function a(h){c.asm=h.exports;I=c.asm.R;ma();na=c.asm.ua;pa.unshift(c.asm.S);O--;c.monitorRunDependencies&&c.monitorRunDependencies(O);0==O&&(null!==ta&&(clearInterval(ta),ta=null),P&&(h=P,P=null,h()))}function b(h){a(h.instance)}function e(h){return xa().then(function(k){return WebAssembly.instantiate(k,f)}).then(h,function(k){F(\"failed to asynchronously prepare wasm: \"+k);E(k)})}var f={a:Ta};O++;c.monitorRunDependencies&&c.monitorRunDependencies(O);if(c.instantiateWasm)try{return c.instantiateWasm(f,\r\na)}catch(h){return F(\"Module.instantiateWasm callback failed with error: \"+h),!1}(function(){return H||\"function\"!==typeof WebAssembly.instantiateStreaming||ua()||Q.startsWith(\"file://\")||\"function\"!==typeof fetch?e(b):fetch(Q,{credentials:\"same-origin\"}).then(function(h){return WebAssembly.instantiateStreaming(h,f).then(b,function(k){F(\"wasm streaming compile failed: \"+k);F(\"falling back to ArrayBuffer instantiation\");return e(b)})})})().catch(g);return{}})();\r\nc.___wasm_call_ctors=function(){return(c.___wasm_call_ctors=c.asm.S).apply(null,arguments)};c._OrtInit=function(){return(c._OrtInit=c.asm.T).apply(null,arguments)};c._OrtCreateSessionOptions=function(){return(c._OrtCreateSessionOptions=c.asm.U).apply(null,arguments)};c._OrtAddSessionConfigEntry=function(){return(c._OrtAddSessionConfigEntry=c.asm.V).apply(null,arguments)};c._OrtReleaseSessionOptions=function(){return(c._OrtReleaseSessionOptions=c.asm.W).apply(null,arguments)};\r\nc._OrtCreateSession=function(){return(c._OrtCreateSession=c.asm.X).apply(null,arguments)};c._OrtReleaseSession=function(){return(c._OrtReleaseSession=c.asm.Y).apply(null,arguments)};c._OrtGetInputCount=function(){return(c._OrtGetInputCount=c.asm.Z).apply(null,arguments)};c._OrtGetOutputCount=function(){return(c._OrtGetOutputCount=c.asm._).apply(null,arguments)};c._OrtGetInputName=function(){return(c._OrtGetInputName=c.asm.$).apply(null,arguments)};\r\nc._OrtGetOutputName=function(){return(c._OrtGetOutputName=c.asm.aa).apply(null,arguments)};c._OrtFree=function(){return(c._OrtFree=c.asm.ba).apply(null,arguments)};c._OrtCreateTensor=function(){return(c._OrtCreateTensor=c.asm.ca).apply(null,arguments)};c._OrtGetTensorData=function(){return(c._OrtGetTensorData=c.asm.da).apply(null,arguments)};c._OrtReleaseTensor=function(){return(c._OrtReleaseTensor=c.asm.ea).apply(null,arguments)};\r\nc._OrtCreateRunOptions=function(){return(c._OrtCreateRunOptions=c.asm.fa).apply(null,arguments)};c._OrtAddRunConfigEntry=function(){return(c._OrtAddRunConfigEntry=c.asm.ga).apply(null,arguments)};c._OrtReleaseRunOptions=function(){return(c._OrtReleaseRunOptions=c.asm.ha).apply(null,arguments)};c._OrtRun=function(){return(c._OrtRun=c.asm.ia).apply(null,arguments)};c._OrtEndProfiling=function(){return(c._OrtEndProfiling=c.asm.ja).apply(null,arguments)};\r\nvar ka=c._malloc=function(){return(ka=c._malloc=c.asm.ka).apply(null,arguments)},Sa=c.___errno_location=function(){return(Sa=c.___errno_location=c.asm.la).apply(null,arguments)},Ra=c._free=function(){return(Ra=c._free=c.asm.ma).apply(null,arguments)},U=c.__get_tzname=function(){return(U=c.__get_tzname=c.asm.na).apply(null,arguments)},Ma=c.__get_daylight=function(){return(Ma=c.__get_daylight=c.asm.oa).apply(null,arguments)},La=c.__get_timezone=function(){return(La=c.__get_timezone=c.asm.pa).apply(null,\r\narguments)},Ua=c.stackSave=function(){return(Ua=c.stackSave=c.asm.qa).apply(null,arguments)},Va=c.stackRestore=function(){return(Va=c.stackRestore=c.asm.ra).apply(null,arguments)},Wa=c.stackAlloc=function(){return(Wa=c.stackAlloc=c.asm.sa).apply(null,arguments)},Qa=c._memalign=function(){return(Qa=c._memalign=c.asm.ta).apply(null,arguments)};c.UTF8ToString=J;c.stringToUTF8=function(a,b,e){return L(a,K,b,e)};c.lengthBytesUTF8=ia;c.stackSave=Ua;c.stackRestore=Va;c.stackAlloc=Wa;var Z;\r\nP=function Xa(){Z||Ya();Z||(P=Xa)};\r\nfunction Ya(){function a(){if(!Z&&(Z=!0,c.calledRun=!0,!ea)){ya(pa);aa(c);if(c.onRuntimeInitialized)c.onRuntimeInitialized();if(c.postRun)for(\"function\"==typeof c.postRun&&(c.postRun=[c.postRun]);c.postRun.length;){var b=c.postRun.shift();ra.unshift(b)}ya(ra)}}if(!(0} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","/// @file\n/// @addtogroup flatbuffers_javascript_api\n/// @{\n/// @cond FLATBUFFERS_INTERNAL\n\n/**\n * @fileoverview\n *\n * Need to suppress 'global this' error so the Node.js export line doesn't cause\n * closure compile to error out.\n * @suppress {globalThis}\n */\n\n/**\n * @const\n * @namespace\n */\nvar flatbuffers = {};\n\n/**\n * @typedef {number}\n */\nflatbuffers.Offset;\n\n/**\n * @typedef {{\n * bb: flatbuffers.ByteBuffer,\n * bb_pos: number\n * }}\n */\nflatbuffers.Table;\n\n/**\n * @type {number}\n * @const\n */\nflatbuffers.SIZEOF_SHORT = 2;\n\n/**\n * @type {number}\n * @const\n */\nflatbuffers.SIZEOF_INT = 4;\n\n/**\n * @type {number}\n * @const\n */\nflatbuffers.FILE_IDENTIFIER_LENGTH = 4;\n\n/**\n * @type {number}\n * @const\n */\nflatbuffers.SIZE_PREFIX_LENGTH = 4;\n\n/**\n * @enum {number}\n */\nflatbuffers.Encoding = {\n UTF8_BYTES: 1,\n UTF16_STRING: 2\n};\n\n/**\n * @type {Int32Array}\n * @const\n */\nflatbuffers.int32 = new Int32Array(2);\n\n/**\n * @type {Float32Array}\n * @const\n */\nflatbuffers.float32 = new Float32Array(flatbuffers.int32.buffer);\n\n/**\n * @type {Float64Array}\n * @const\n */\nflatbuffers.float64 = new Float64Array(flatbuffers.int32.buffer);\n\n/**\n * @type {boolean}\n * @const\n */\nflatbuffers.isLittleEndian = new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\n\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @constructor\n * @param {number} low\n * @param {number} high\n */\nflatbuffers.Long = function(low, high) {\n /**\n * @type {number}\n * @const\n */\n this.low = low | 0;\n\n /**\n * @type {number}\n * @const\n */\n this.high = high | 0;\n};\n\n/**\n * @param {number} low\n * @param {number} high\n * @returns {!flatbuffers.Long}\n */\nflatbuffers.Long.create = function(low, high) {\n // Special-case zero to avoid GC overhead for default values\n return low == 0 && high == 0 ? flatbuffers.Long.ZERO : new flatbuffers.Long(low, high);\n};\n\n/**\n * @returns {number}\n */\nflatbuffers.Long.prototype.toFloat64 = function() {\n return (this.low >>> 0) + this.high * 0x100000000;\n};\n\n/**\n * @param {flatbuffers.Long} other\n * @returns {boolean}\n */\nflatbuffers.Long.prototype.equals = function(other) {\n return this.low == other.low && this.high == other.high;\n};\n\n/**\n * @type {!flatbuffers.Long}\n * @const\n */\nflatbuffers.Long.ZERO = new flatbuffers.Long(0, 0);\n\n/// @endcond\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Create a FlatBufferBuilder.\n *\n * @constructor\n * @param {number=} opt_initial_size\n */\nflatbuffers.Builder = function(opt_initial_size) {\n if (!opt_initial_size) {\n var initial_size = 1024;\n } else {\n var initial_size = opt_initial_size;\n }\n\n /**\n * @type {flatbuffers.ByteBuffer}\n * @private\n */\n this.bb = flatbuffers.ByteBuffer.allocate(initial_size);\n\n /**\n * Remaining space in the ByteBuffer.\n *\n * @type {number}\n * @private\n */\n this.space = initial_size;\n\n /**\n * Minimum alignment encountered so far.\n *\n * @type {number}\n * @private\n */\n this.minalign = 1;\n\n /**\n * The vtable for the current table.\n *\n * @type {Array.}\n * @private\n */\n this.vtable = null;\n\n /**\n * The amount of fields we're actually using.\n *\n * @type {number}\n * @private\n */\n this.vtable_in_use = 0;\n\n /**\n * Whether we are currently serializing a table.\n *\n * @type {boolean}\n * @private\n */\n this.isNested = false;\n\n /**\n * Starting offset of the current struct/table.\n *\n * @type {number}\n * @private\n */\n this.object_start = 0;\n\n /**\n * List of offsets of all vtables.\n *\n * @type {Array.}\n * @private\n */\n this.vtables = [];\n\n /**\n * For the current vector being built.\n *\n * @type {number}\n * @private\n */\n this.vector_num_elems = 0;\n\n /**\n * False omits default values from the serialized data\n *\n * @type {boolean}\n * @private\n */\n this.force_defaults = false;\n};\n\nflatbuffers.Builder.prototype.clear = function() {\n this.bb.clear();\n this.space = this.bb.capacity();\n this.minalign = 1;\n this.vtable = null;\n this.vtable_in_use = 0;\n this.isNested = false;\n this.object_start = 0;\n this.vtables = [];\n this.vector_num_elems = 0;\n this.force_defaults = false;\n};\n\n/**\n * In order to save space, fields that are set to their default value\n * don't get serialized into the buffer. Forcing defaults provides a\n * way to manually disable this optimization.\n *\n * @param {boolean} forceDefaults true always serializes default values\n */\nflatbuffers.Builder.prototype.forceDefaults = function(forceDefaults) {\n this.force_defaults = forceDefaults;\n};\n\n/**\n * Get the ByteBuffer representing the FlatBuffer. Only call this after you've\n * called finish(). The actual data starts at the ByteBuffer's current position,\n * not necessarily at 0.\n *\n * @returns {flatbuffers.ByteBuffer}\n */\nflatbuffers.Builder.prototype.dataBuffer = function() {\n return this.bb;\n};\n\n/**\n * Get the bytes representing the FlatBuffer. Only call this after you've\n * called finish().\n *\n * @returns {!Uint8Array}\n */\nflatbuffers.Builder.prototype.asUint8Array = function() {\n return this.bb.bytes().subarray(this.bb.position(), this.bb.position() + this.offset());\n};\n\n/// @cond FLATBUFFERS_INTERNAL\n/**\n * Prepare to write an element of `size` after `additional_bytes` have been\n * written, e.g. if you write a string, you need to align such the int length\n * field is aligned to 4 bytes, and the string data follows it directly. If all\n * you need to do is alignment, `additional_bytes` will be 0.\n *\n * @param {number} size This is the of the new element to write\n * @param {number} additional_bytes The padding size\n */\nflatbuffers.Builder.prototype.prep = function(size, additional_bytes) {\n // Track the biggest thing we've ever aligned to.\n if (size > this.minalign) {\n this.minalign = size;\n }\n\n // Find the amount of alignment needed such that `size` is properly\n // aligned after `additional_bytes`\n var align_size = ((~(this.bb.capacity() - this.space + additional_bytes)) + 1) & (size - 1);\n\n // Reallocate the buffer if needed.\n while (this.space < align_size + size + additional_bytes) {\n var old_buf_size = this.bb.capacity();\n this.bb = flatbuffers.Builder.growByteBuffer(this.bb);\n this.space += this.bb.capacity() - old_buf_size;\n }\n\n this.pad(align_size);\n};\n\n/**\n * @param {number} byte_size\n */\nflatbuffers.Builder.prototype.pad = function(byte_size) {\n for (var i = 0; i < byte_size; i++) {\n this.bb.writeInt8(--this.space, 0);\n }\n};\n\n/**\n * @param {number} value\n */\nflatbuffers.Builder.prototype.writeInt8 = function(value) {\n this.bb.writeInt8(this.space -= 1, value);\n};\n\n/**\n * @param {number} value\n */\nflatbuffers.Builder.prototype.writeInt16 = function(value) {\n this.bb.writeInt16(this.space -= 2, value);\n};\n\n/**\n * @param {number} value\n */\nflatbuffers.Builder.prototype.writeInt32 = function(value) {\n this.bb.writeInt32(this.space -= 4, value);\n};\n\n/**\n * @param {flatbuffers.Long} value\n */\nflatbuffers.Builder.prototype.writeInt64 = function(value) {\n this.bb.writeInt64(this.space -= 8, value);\n};\n\n/**\n * @param {number} value\n */\nflatbuffers.Builder.prototype.writeFloat32 = function(value) {\n this.bb.writeFloat32(this.space -= 4, value);\n};\n\n/**\n * @param {number} value\n */\nflatbuffers.Builder.prototype.writeFloat64 = function(value) {\n this.bb.writeFloat64(this.space -= 8, value);\n};\n/// @endcond\n\n/**\n * Add an `int8` to the buffer, properly aligned, and grows the buffer (if necessary).\n * @param {number} value The `int8` to add the the buffer.\n */\nflatbuffers.Builder.prototype.addInt8 = function(value) {\n this.prep(1, 0);\n this.writeInt8(value);\n};\n\n/**\n * Add an `int16` to the buffer, properly aligned, and grows the buffer (if necessary).\n * @param {number} value The `int16` to add the the buffer.\n */\nflatbuffers.Builder.prototype.addInt16 = function(value) {\n this.prep(2, 0);\n this.writeInt16(value);\n};\n\n/**\n * Add an `int32` to the buffer, properly aligned, and grows the buffer (if necessary).\n * @param {number} value The `int32` to add the the buffer.\n */\nflatbuffers.Builder.prototype.addInt32 = function(value) {\n this.prep(4, 0);\n this.writeInt32(value);\n};\n\n/**\n * Add an `int64` to the buffer, properly aligned, and grows the buffer (if necessary).\n * @param {flatbuffers.Long} value The `int64` to add the the buffer.\n */\nflatbuffers.Builder.prototype.addInt64 = function(value) {\n this.prep(8, 0);\n this.writeInt64(value);\n};\n\n/**\n * Add a `float32` to the buffer, properly aligned, and grows the buffer (if necessary).\n * @param {number} value The `float32` to add the the buffer.\n */\nflatbuffers.Builder.prototype.addFloat32 = function(value) {\n this.prep(4, 0);\n this.writeFloat32(value);\n};\n\n/**\n * Add a `float64` to the buffer, properly aligned, and grows the buffer (if necessary).\n * @param {number} value The `float64` to add the the buffer.\n */\nflatbuffers.Builder.prototype.addFloat64 = function(value) {\n this.prep(8, 0);\n this.writeFloat64(value);\n};\n\n/// @cond FLATBUFFERS_INTERNAL\n/**\n * @param {number} voffset\n * @param {number} value\n * @param {number} defaultValue\n */\nflatbuffers.Builder.prototype.addFieldInt8 = function(voffset, value, defaultValue) {\n if (this.force_defaults || value != defaultValue) {\n this.addInt8(value);\n this.slot(voffset);\n }\n};\n\n/**\n * @param {number} voffset\n * @param {number} value\n * @param {number} defaultValue\n */\nflatbuffers.Builder.prototype.addFieldInt16 = function(voffset, value, defaultValue) {\n if (this.force_defaults || value != defaultValue) {\n this.addInt16(value);\n this.slot(voffset);\n }\n};\n\n/**\n * @param {number} voffset\n * @param {number} value\n * @param {number} defaultValue\n */\nflatbuffers.Builder.prototype.addFieldInt32 = function(voffset, value, defaultValue) {\n if (this.force_defaults || value != defaultValue) {\n this.addInt32(value);\n this.slot(voffset);\n }\n};\n\n/**\n * @param {number} voffset\n * @param {flatbuffers.Long} value\n * @param {flatbuffers.Long} defaultValue\n */\nflatbuffers.Builder.prototype.addFieldInt64 = function(voffset, value, defaultValue) {\n if (this.force_defaults || !value.equals(defaultValue)) {\n this.addInt64(value);\n this.slot(voffset);\n }\n};\n\n/**\n * @param {number} voffset\n * @param {number} value\n * @param {number} defaultValue\n */\nflatbuffers.Builder.prototype.addFieldFloat32 = function(voffset, value, defaultValue) {\n if (this.force_defaults || value != defaultValue) {\n this.addFloat32(value);\n this.slot(voffset);\n }\n};\n\n/**\n * @param {number} voffset\n * @param {number} value\n * @param {number} defaultValue\n */\nflatbuffers.Builder.prototype.addFieldFloat64 = function(voffset, value, defaultValue) {\n if (this.force_defaults || value != defaultValue) {\n this.addFloat64(value);\n this.slot(voffset);\n }\n};\n\n/**\n * @param {number} voffset\n * @param {flatbuffers.Offset} value\n * @param {flatbuffers.Offset} defaultValue\n */\nflatbuffers.Builder.prototype.addFieldOffset = function(voffset, value, defaultValue) {\n if (this.force_defaults || value != defaultValue) {\n this.addOffset(value);\n this.slot(voffset);\n }\n};\n\n/**\n * Structs are stored inline, so nothing additional is being added. `d` is always 0.\n *\n * @param {number} voffset\n * @param {flatbuffers.Offset} value\n * @param {flatbuffers.Offset} defaultValue\n */\nflatbuffers.Builder.prototype.addFieldStruct = function(voffset, value, defaultValue) {\n if (value != defaultValue) {\n this.nested(value);\n this.slot(voffset);\n }\n};\n\n/**\n * Structures are always stored inline, they need to be created right\n * where they're used. You'll get this assertion failure if you\n * created it elsewhere.\n *\n * @param {flatbuffers.Offset} obj The offset of the created object\n */\nflatbuffers.Builder.prototype.nested = function(obj) {\n if (obj != this.offset()) {\n throw new Error('FlatBuffers: struct must be serialized inline.');\n }\n};\n\n/**\n * Should not be creating any other object, string or vector\n * while an object is being constructed\n */\nflatbuffers.Builder.prototype.notNested = function() {\n if (this.isNested) {\n throw new Error('FlatBuffers: object serialization must not be nested.');\n }\n};\n\n/**\n * Set the current vtable at `voffset` to the current location in the buffer.\n *\n * @param {number} voffset\n */\nflatbuffers.Builder.prototype.slot = function(voffset) {\n this.vtable[voffset] = this.offset();\n};\n\n/**\n * @returns {flatbuffers.Offset} Offset relative to the end of the buffer.\n */\nflatbuffers.Builder.prototype.offset = function() {\n return this.bb.capacity() - this.space;\n};\n\n/**\n * Doubles the size of the backing ByteBuffer and copies the old data towards\n * the end of the new buffer (since we build the buffer backwards).\n *\n * @param {flatbuffers.ByteBuffer} bb The current buffer with the existing data\n * @returns {!flatbuffers.ByteBuffer} A new byte buffer with the old data copied\n * to it. The data is located at the end of the buffer.\n *\n * uint8Array.set() formally takes {Array|ArrayBufferView}, so to pass\n * it a uint8Array we need to suppress the type check:\n * @suppress {checkTypes}\n */\nflatbuffers.Builder.growByteBuffer = function(bb) {\n var old_buf_size = bb.capacity();\n\n // Ensure we don't grow beyond what fits in an int.\n if (old_buf_size & 0xC0000000) {\n throw new Error('FlatBuffers: cannot grow buffer beyond 2 gigabytes.');\n }\n\n var new_buf_size = old_buf_size << 1;\n var nbb = flatbuffers.ByteBuffer.allocate(new_buf_size);\n nbb.setPosition(new_buf_size - old_buf_size);\n nbb.bytes().set(bb.bytes(), new_buf_size - old_buf_size);\n return nbb;\n};\n/// @endcond\n\n/**\n * Adds on offset, relative to where it will be written.\n *\n * @param {flatbuffers.Offset} offset The offset to add.\n */\nflatbuffers.Builder.prototype.addOffset = function(offset) {\n this.prep(flatbuffers.SIZEOF_INT, 0); // Ensure alignment is already done.\n this.writeInt32(this.offset() - offset + flatbuffers.SIZEOF_INT);\n};\n\n/// @cond FLATBUFFERS_INTERNAL\n/**\n * Start encoding a new object in the buffer. Users will not usually need to\n * call this directly. The FlatBuffers compiler will generate helper methods\n * that call this method internally.\n *\n * @param {number} numfields\n */\nflatbuffers.Builder.prototype.startObject = function(numfields) {\n this.notNested();\n if (this.vtable == null) {\n this.vtable = [];\n }\n this.vtable_in_use = numfields;\n for (var i = 0; i < numfields; i++) {\n this.vtable[i] = 0; // This will push additional elements as needed\n }\n this.isNested = true;\n this.object_start = this.offset();\n};\n\n/**\n * Finish off writing the object that is under construction.\n *\n * @returns {flatbuffers.Offset} The offset to the object inside `dataBuffer`\n */\nflatbuffers.Builder.prototype.endObject = function() {\n if (this.vtable == null || !this.isNested) {\n throw new Error('FlatBuffers: endObject called without startObject');\n }\n\n this.addInt32(0);\n var vtableloc = this.offset();\n\n // Trim trailing zeroes.\n var i = this.vtable_in_use - 1;\n for (; i >= 0 && this.vtable[i] == 0; i--) {}\n var trimmed_size = i + 1;\n\n // Write out the current vtable.\n for (; i >= 0; i--) {\n // Offset relative to the start of the table.\n this.addInt16(this.vtable[i] != 0 ? vtableloc - this.vtable[i] : 0);\n }\n\n var standard_fields = 2; // The fields below:\n this.addInt16(vtableloc - this.object_start);\n var len = (trimmed_size + standard_fields) * flatbuffers.SIZEOF_SHORT;\n this.addInt16(len);\n\n // Search for an existing vtable that matches the current one.\n var existing_vtable = 0;\n var vt1 = this.space;\nouter_loop:\n for (i = 0; i < this.vtables.length; i++) {\n var vt2 = this.bb.capacity() - this.vtables[i];\n if (len == this.bb.readInt16(vt2)) {\n for (var j = flatbuffers.SIZEOF_SHORT; j < len; j += flatbuffers.SIZEOF_SHORT) {\n if (this.bb.readInt16(vt1 + j) != this.bb.readInt16(vt2 + j)) {\n continue outer_loop;\n }\n }\n existing_vtable = this.vtables[i];\n break;\n }\n }\n\n if (existing_vtable) {\n // Found a match:\n // Remove the current vtable.\n this.space = this.bb.capacity() - vtableloc;\n\n // Point table to existing vtable.\n this.bb.writeInt32(this.space, existing_vtable - vtableloc);\n } else {\n // No match:\n // Add the location of the current vtable to the list of vtables.\n this.vtables.push(this.offset());\n\n // Point table to current vtable.\n this.bb.writeInt32(this.bb.capacity() - vtableloc, this.offset() - vtableloc);\n }\n\n this.isNested = false;\n return vtableloc;\n};\n/// @endcond\n\n/**\n * Finalize a buffer, poiting to the given `root_table`.\n *\n * @param {flatbuffers.Offset} root_table\n * @param {string=} opt_file_identifier\n * @param {boolean=} opt_size_prefix\n */\nflatbuffers.Builder.prototype.finish = function(root_table, opt_file_identifier, opt_size_prefix) {\n var size_prefix = opt_size_prefix ? flatbuffers.SIZE_PREFIX_LENGTH : 0;\n if (opt_file_identifier) {\n var file_identifier = opt_file_identifier;\n this.prep(this.minalign, flatbuffers.SIZEOF_INT +\n flatbuffers.FILE_IDENTIFIER_LENGTH + size_prefix);\n if (file_identifier.length != flatbuffers.FILE_IDENTIFIER_LENGTH) {\n throw new Error('FlatBuffers: file identifier must be length ' +\n flatbuffers.FILE_IDENTIFIER_LENGTH);\n }\n for (var i = flatbuffers.FILE_IDENTIFIER_LENGTH - 1; i >= 0; i--) {\n this.writeInt8(file_identifier.charCodeAt(i));\n }\n }\n this.prep(this.minalign, flatbuffers.SIZEOF_INT + size_prefix);\n this.addOffset(root_table);\n if (size_prefix) {\n this.addInt32(this.bb.capacity() - this.space);\n }\n this.bb.setPosition(this.space);\n};\n\n/**\n * Finalize a size prefixed buffer, pointing to the given `root_table`.\n *\n * @param {flatbuffers.Offset} root_table\n * @param {string=} opt_file_identifier\n */\nflatbuffers.Builder.prototype.finishSizePrefixed = function (root_table, opt_file_identifier) {\n this.finish(root_table, opt_file_identifier, true);\n};\n\n/// @cond FLATBUFFERS_INTERNAL\n/**\n * This checks a required field has been set in a given table that has\n * just been constructed.\n *\n * @param {flatbuffers.Offset} table\n * @param {number} field\n */\nflatbuffers.Builder.prototype.requiredField = function(table, field) {\n var table_start = this.bb.capacity() - table;\n var vtable_start = table_start - this.bb.readInt32(table_start);\n var ok = this.bb.readInt16(vtable_start + field) != 0;\n\n // If this fails, the caller will show what field needs to be set.\n if (!ok) {\n throw new Error('FlatBuffers: field ' + field + ' must be set');\n }\n};\n\n/**\n * Start a new array/vector of objects. Users usually will not call\n * this directly. The FlatBuffers compiler will create a start/end\n * method for vector types in generated code.\n *\n * @param {number} elem_size The size of each element in the array\n * @param {number} num_elems The number of elements in the array\n * @param {number} alignment The alignment of the array\n */\nflatbuffers.Builder.prototype.startVector = function(elem_size, num_elems, alignment) {\n this.notNested();\n this.vector_num_elems = num_elems;\n this.prep(flatbuffers.SIZEOF_INT, elem_size * num_elems);\n this.prep(alignment, elem_size * num_elems); // Just in case alignment > int.\n};\n\n/**\n * Finish off the creation of an array and all its elements. The array must be\n * created with `startVector`.\n *\n * @returns {flatbuffers.Offset} The offset at which the newly created array\n * starts.\n */\nflatbuffers.Builder.prototype.endVector = function() {\n this.writeInt32(this.vector_num_elems);\n return this.offset();\n};\n/// @endcond\n\n/**\n * Encode the string `s` in the buffer using UTF-8. If a Uint8Array is passed\n * instead of a string, it is assumed to contain valid UTF-8 encoded data.\n *\n * @param {string|Uint8Array} s The string to encode\n * @return {flatbuffers.Offset} The offset in the buffer where the encoded string starts\n */\nflatbuffers.Builder.prototype.createString = function(s) {\n if (s instanceof Uint8Array) {\n var utf8 = s;\n } else {\n var utf8 = [];\n var i = 0;\n\n while (i < s.length) {\n var codePoint;\n\n // Decode UTF-16\n var a = s.charCodeAt(i++);\n if (a < 0xD800 || a >= 0xDC00) {\n codePoint = a;\n } else {\n var b = s.charCodeAt(i++);\n codePoint = (a << 10) + b + (0x10000 - (0xD800 << 10) - 0xDC00);\n }\n\n // Encode UTF-8\n if (codePoint < 0x80) {\n utf8.push(codePoint);\n } else {\n if (codePoint < 0x800) {\n utf8.push(((codePoint >> 6) & 0x1F) | 0xC0);\n } else {\n if (codePoint < 0x10000) {\n utf8.push(((codePoint >> 12) & 0x0F) | 0xE0);\n } else {\n utf8.push(\n ((codePoint >> 18) & 0x07) | 0xF0,\n ((codePoint >> 12) & 0x3F) | 0x80);\n }\n utf8.push(((codePoint >> 6) & 0x3F) | 0x80);\n }\n utf8.push((codePoint & 0x3F) | 0x80);\n }\n }\n }\n\n this.addInt8(0);\n this.startVector(1, utf8.length, 1);\n this.bb.setPosition(this.space -= utf8.length);\n for (var i = 0, offset = this.space, bytes = this.bb.bytes(); i < utf8.length; i++) {\n bytes[offset++] = utf8[i];\n }\n return this.endVector();\n};\n\n/**\n * A helper function to avoid generated code depending on this file directly.\n *\n * @param {number} low\n * @param {number} high\n * @returns {!flatbuffers.Long}\n */\nflatbuffers.Builder.prototype.createLong = function(low, high) {\n return flatbuffers.Long.create(low, high);\n};\n////////////////////////////////////////////////////////////////////////////////\n/// @cond FLATBUFFERS_INTERNAL\n/**\n * Create a new ByteBuffer with a given array of bytes (`Uint8Array`).\n *\n * @constructor\n * @param {Uint8Array} bytes\n */\nflatbuffers.ByteBuffer = function(bytes) {\n /**\n * @type {Uint8Array}\n * @private\n */\n this.bytes_ = bytes;\n\n /**\n * @type {number}\n * @private\n */\n this.position_ = 0;\n};\n\n/**\n * Create and allocate a new ByteBuffer with a given size.\n *\n * @param {number} byte_size\n * @returns {!flatbuffers.ByteBuffer}\n */\nflatbuffers.ByteBuffer.allocate = function(byte_size) {\n return new flatbuffers.ByteBuffer(new Uint8Array(byte_size));\n};\n\nflatbuffers.ByteBuffer.prototype.clear = function() {\n this.position_ = 0;\n};\n\n/**\n * Get the underlying `Uint8Array`.\n *\n * @returns {Uint8Array}\n */\nflatbuffers.ByteBuffer.prototype.bytes = function() {\n return this.bytes_;\n};\n\n/**\n * Get the buffer's position.\n *\n * @returns {number}\n */\nflatbuffers.ByteBuffer.prototype.position = function() {\n return this.position_;\n};\n\n/**\n * Set the buffer's position.\n *\n * @param {number} position\n */\nflatbuffers.ByteBuffer.prototype.setPosition = function(position) {\n this.position_ = position;\n};\n\n/**\n * Get the buffer's capacity.\n *\n * @returns {number}\n */\nflatbuffers.ByteBuffer.prototype.capacity = function() {\n return this.bytes_.length;\n};\n\n/**\n * @param {number} offset\n * @returns {number}\n */\nflatbuffers.ByteBuffer.prototype.readInt8 = function(offset) {\n return this.readUint8(offset) << 24 >> 24;\n};\n\n/**\n * @param {number} offset\n * @returns {number}\n */\nflatbuffers.ByteBuffer.prototype.readUint8 = function(offset) {\n return this.bytes_[offset];\n};\n\n/**\n * @param {number} offset\n * @returns {number}\n */\nflatbuffers.ByteBuffer.prototype.readInt16 = function(offset) {\n return this.readUint16(offset) << 16 >> 16;\n};\n\n/**\n * @param {number} offset\n * @returns {number}\n */\nflatbuffers.ByteBuffer.prototype.readUint16 = function(offset) {\n return this.bytes_[offset] | this.bytes_[offset + 1] << 8;\n};\n\n/**\n * @param {number} offset\n * @returns {number}\n */\nflatbuffers.ByteBuffer.prototype.readInt32 = function(offset) {\n return this.bytes_[offset] | this.bytes_[offset + 1] << 8 | this.bytes_[offset + 2] << 16 | this.bytes_[offset + 3] << 24;\n};\n\n/**\n * @param {number} offset\n * @returns {number}\n */\nflatbuffers.ByteBuffer.prototype.readUint32 = function(offset) {\n return this.readInt32(offset) >>> 0;\n};\n\n/**\n * @param {number} offset\n * @returns {!flatbuffers.Long}\n */\nflatbuffers.ByteBuffer.prototype.readInt64 = function(offset) {\n return new flatbuffers.Long(this.readInt32(offset), this.readInt32(offset + 4));\n};\n\n/**\n * @param {number} offset\n * @returns {!flatbuffers.Long}\n */\nflatbuffers.ByteBuffer.prototype.readUint64 = function(offset) {\n return new flatbuffers.Long(this.readUint32(offset), this.readUint32(offset + 4));\n};\n\n/**\n * @param {number} offset\n * @returns {number}\n */\nflatbuffers.ByteBuffer.prototype.readFloat32 = function(offset) {\n flatbuffers.int32[0] = this.readInt32(offset);\n return flatbuffers.float32[0];\n};\n\n/**\n * @param {number} offset\n * @returns {number}\n */\nflatbuffers.ByteBuffer.prototype.readFloat64 = function(offset) {\n flatbuffers.int32[flatbuffers.isLittleEndian ? 0 : 1] = this.readInt32(offset);\n flatbuffers.int32[flatbuffers.isLittleEndian ? 1 : 0] = this.readInt32(offset + 4);\n return flatbuffers.float64[0];\n};\n\n/**\n * @param {number} offset\n * @param {number|boolean} value\n */\nflatbuffers.ByteBuffer.prototype.writeInt8 = function(offset, value) {\n this.bytes_[offset] = /** @type {number} */(value);\n};\n\n/**\n * @param {number} offset\n * @param {number} value\n */\nflatbuffers.ByteBuffer.prototype.writeUint8 = function(offset, value) {\n this.bytes_[offset] = value;\n};\n\n/**\n * @param {number} offset\n * @param {number} value\n */\nflatbuffers.ByteBuffer.prototype.writeInt16 = function(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n};\n\n/**\n * @param {number} offset\n * @param {number} value\n */\nflatbuffers.ByteBuffer.prototype.writeUint16 = function(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n};\n\n/**\n * @param {number} offset\n * @param {number} value\n */\nflatbuffers.ByteBuffer.prototype.writeInt32 = function(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n this.bytes_[offset + 2] = value >> 16;\n this.bytes_[offset + 3] = value >> 24;\n};\n\n/**\n * @param {number} offset\n * @param {number} value\n */\nflatbuffers.ByteBuffer.prototype.writeUint32 = function(offset, value) {\n this.bytes_[offset] = value;\n this.bytes_[offset + 1] = value >> 8;\n this.bytes_[offset + 2] = value >> 16;\n this.bytes_[offset + 3] = value >> 24;\n};\n\n/**\n * @param {number} offset\n * @param {flatbuffers.Long} value\n */\nflatbuffers.ByteBuffer.prototype.writeInt64 = function(offset, value) {\n this.writeInt32(offset, value.low);\n this.writeInt32(offset + 4, value.high);\n};\n\n/**\n * @param {number} offset\n * @param {flatbuffers.Long} value\n */\nflatbuffers.ByteBuffer.prototype.writeUint64 = function(offset, value) {\n this.writeUint32(offset, value.low);\n this.writeUint32(offset + 4, value.high);\n};\n\n/**\n * @param {number} offset\n * @param {number} value\n */\nflatbuffers.ByteBuffer.prototype.writeFloat32 = function(offset, value) {\n flatbuffers.float32[0] = value;\n this.writeInt32(offset, flatbuffers.int32[0]);\n};\n\n/**\n * @param {number} offset\n * @param {number} value\n */\nflatbuffers.ByteBuffer.prototype.writeFloat64 = function(offset, value) {\n flatbuffers.float64[0] = value;\n this.writeInt32(offset, flatbuffers.int32[flatbuffers.isLittleEndian ? 0 : 1]);\n this.writeInt32(offset + 4, flatbuffers.int32[flatbuffers.isLittleEndian ? 1 : 0]);\n};\n\n/**\n * Return the file identifier. Behavior is undefined for FlatBuffers whose\n * schema does not include a file_identifier (likely points at padding or the\n * start of a the root vtable).\n * @returns {string}\n */\nflatbuffers.ByteBuffer.prototype.getBufferIdentifier = function() {\n if (this.bytes_.length < this.position_ + flatbuffers.SIZEOF_INT +\n flatbuffers.FILE_IDENTIFIER_LENGTH) {\n throw new Error(\n 'FlatBuffers: ByteBuffer is too short to contain an identifier.');\n }\n var result = \"\";\n for (var i = 0; i < flatbuffers.FILE_IDENTIFIER_LENGTH; i++) {\n result += String.fromCharCode(\n this.readInt8(this.position_ + flatbuffers.SIZEOF_INT + i));\n }\n return result;\n};\n\n/**\n * Look up a field in the vtable, return an offset into the object, or 0 if the\n * field is not present.\n *\n * @param {number} bb_pos\n * @param {number} vtable_offset\n * @returns {number}\n */\nflatbuffers.ByteBuffer.prototype.__offset = function(bb_pos, vtable_offset) {\n var vtable = bb_pos - this.readInt32(bb_pos);\n return vtable_offset < this.readInt16(vtable) ? this.readInt16(vtable + vtable_offset) : 0;\n};\n\n/**\n * Initialize any Table-derived type to point to the union at the given offset.\n *\n * @param {flatbuffers.Table} t\n * @param {number} offset\n * @returns {flatbuffers.Table}\n */\nflatbuffers.ByteBuffer.prototype.__union = function(t, offset) {\n t.bb_pos = offset + this.readInt32(offset);\n t.bb = this;\n return t;\n};\n\n/**\n * Create a JavaScript string from UTF-8 data stored inside the FlatBuffer.\n * This allocates a new string and converts to wide chars upon each access.\n *\n * To avoid the conversion to UTF-16, pass flatbuffers.Encoding.UTF8_BYTES as\n * the \"optionalEncoding\" argument. This is useful for avoiding conversion to\n * and from UTF-16 when the data will just be packaged back up in another\n * FlatBuffer later on.\n *\n * @param {number} offset\n * @param {flatbuffers.Encoding=} opt_encoding Defaults to UTF16_STRING\n * @returns {string|!Uint8Array}\n */\nflatbuffers.ByteBuffer.prototype.__string = function(offset, opt_encoding) {\n offset += this.readInt32(offset);\n\n var length = this.readInt32(offset);\n var result = '';\n var i = 0;\n\n offset += flatbuffers.SIZEOF_INT;\n\n if (opt_encoding === flatbuffers.Encoding.UTF8_BYTES) {\n return this.bytes_.subarray(offset, offset + length);\n }\n\n while (i < length) {\n var codePoint;\n\n // Decode UTF-8\n var a = this.readUint8(offset + i++);\n if (a < 0xC0) {\n codePoint = a;\n } else {\n var b = this.readUint8(offset + i++);\n if (a < 0xE0) {\n codePoint =\n ((a & 0x1F) << 6) |\n (b & 0x3F);\n } else {\n var c = this.readUint8(offset + i++);\n if (a < 0xF0) {\n codePoint =\n ((a & 0x0F) << 12) |\n ((b & 0x3F) << 6) |\n (c & 0x3F);\n } else {\n var d = this.readUint8(offset + i++);\n codePoint =\n ((a & 0x07) << 18) |\n ((b & 0x3F) << 12) |\n ((c & 0x3F) << 6) |\n (d & 0x3F);\n }\n }\n }\n\n // Encode UTF-16\n if (codePoint < 0x10000) {\n result += String.fromCharCode(codePoint);\n } else {\n codePoint -= 0x10000;\n result += String.fromCharCode(\n (codePoint >> 10) + 0xD800,\n (codePoint & ((1 << 10) - 1)) + 0xDC00);\n }\n }\n\n return result;\n};\n\n/**\n * Retrieve the relative offset stored at \"offset\"\n * @param {number} offset\n * @returns {number}\n */\nflatbuffers.ByteBuffer.prototype.__indirect = function(offset) {\n return offset + this.readInt32(offset);\n};\n\n/**\n * Get the start of data of a vector whose offset is stored at \"offset\" in this object.\n *\n * @param {number} offset\n * @returns {number}\n */\nflatbuffers.ByteBuffer.prototype.__vector = function(offset) {\n return offset + this.readInt32(offset) + flatbuffers.SIZEOF_INT; // data starts after the length\n};\n\n/**\n * Get the length of a vector whose offset is stored at \"offset\" in this object.\n *\n * @param {number} offset\n * @returns {number}\n */\nflatbuffers.ByteBuffer.prototype.__vector_len = function(offset) {\n return this.readInt32(offset + this.readInt32(offset));\n};\n\n/**\n * @param {string} ident\n * @returns {boolean}\n */\nflatbuffers.ByteBuffer.prototype.__has_identifier = function(ident) {\n if (ident.length != flatbuffers.FILE_IDENTIFIER_LENGTH) {\n throw new Error('FlatBuffers: file identifier must be length ' +\n flatbuffers.FILE_IDENTIFIER_LENGTH);\n }\n for (var i = 0; i < flatbuffers.FILE_IDENTIFIER_LENGTH; i++) {\n if (ident.charCodeAt(i) != this.readInt8(this.position_ + flatbuffers.SIZEOF_INT + i)) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * A helper function to avoid generated code depending on this file directly.\n *\n * @param {number} low\n * @param {number} high\n * @returns {!flatbuffers.Long}\n */\nflatbuffers.ByteBuffer.prototype.createLong = function(low, high) {\n return flatbuffers.Long.create(low, high);\n};\n\n// Exports for Node.js and RequireJS\nexport { flatbuffers };\n\n/// @endcond\n/// @}\n","\"use strict\";\r\nexports.__esModule = true;\r\nvar Guid = /** @class */ (function () {\r\n function Guid(guid) {\r\n if (!guid) {\r\n throw new TypeError(\"Invalid argument; `value` has no value.\");\r\n }\r\n this.value = Guid.EMPTY;\r\n if (guid && Guid.isGuid(guid)) {\r\n this.value = guid;\r\n }\r\n }\r\n Guid.isGuid = function (guid) {\r\n var value = guid.toString();\r\n return guid && (guid instanceof Guid || Guid.validator.test(value));\r\n };\r\n Guid.create = function () {\r\n return new Guid([Guid.gen(2), Guid.gen(1), Guid.gen(1), Guid.gen(1), Guid.gen(3)].join(\"-\"));\r\n };\r\n Guid.createEmpty = function () {\r\n return new Guid(\"emptyguid\");\r\n };\r\n Guid.parse = function (guid) {\r\n return new Guid(guid);\r\n };\r\n Guid.raw = function () {\r\n return [Guid.gen(2), Guid.gen(1), Guid.gen(1), Guid.gen(1), Guid.gen(3)].join(\"-\");\r\n };\r\n Guid.gen = function (count) {\r\n var out = \"\";\r\n for (var i = 0; i < count; i++) {\r\n // tslint:disable-next-line:no-bitwise\r\n out += (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\r\n }\r\n return out;\r\n };\r\n Guid.prototype.equals = function (other) {\r\n // Comparing string `value` against provided `guid` will auto-call\r\n // toString on `guid` for comparison\r\n return Guid.isGuid(other) && this.value === other.toString();\r\n };\r\n Guid.prototype.isEmpty = function () {\r\n return this.value === Guid.EMPTY;\r\n };\r\n Guid.prototype.toString = function () {\r\n return this.value;\r\n };\r\n Guid.prototype.toJSON = function () {\r\n return {\r\n value: this.value\r\n };\r\n };\r\n Guid.validator = new RegExp(\"^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$\", \"i\");\r\n Guid.EMPTY = \"00000000-0000-0000-0000-000000000000\";\r\n return Guid;\r\n}());\r\nexports.Guid = Guid;\r\n","module.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n","/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/minimal\");\n\n// Common aliases\nvar $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nvar $root = $protobuf.roots[\"default\"] || ($protobuf.roots[\"default\"] = {});\n\n$root.onnx = (function() {\n\n /**\n * Namespace onnx.\n * @exports onnx\n * @namespace\n */\n var onnx = {};\n\n /**\n * Version enum.\n * @name onnx.Version\n * @enum {string}\n * @property {number} _START_VERSION=0 _START_VERSION value\n * @property {number} IR_VERSION_2017_10_10=1 IR_VERSION_2017_10_10 value\n * @property {number} IR_VERSION_2017_10_30=2 IR_VERSION_2017_10_30 value\n * @property {number} IR_VERSION_2017_11_3=3 IR_VERSION_2017_11_3 value\n * @property {number} IR_VERSION_2019_1_22=4 IR_VERSION_2019_1_22 value\n * @property {number} IR_VERSION=5 IR_VERSION value\n */\n onnx.Version = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[0] = \"_START_VERSION\"] = 0;\n values[valuesById[1] = \"IR_VERSION_2017_10_10\"] = 1;\n values[valuesById[2] = \"IR_VERSION_2017_10_30\"] = 2;\n values[valuesById[3] = \"IR_VERSION_2017_11_3\"] = 3;\n values[valuesById[4] = \"IR_VERSION_2019_1_22\"] = 4;\n values[valuesById[5] = \"IR_VERSION\"] = 5;\n return values;\n })();\n\n onnx.AttributeProto = (function() {\n\n /**\n * Properties of an AttributeProto.\n * @memberof onnx\n * @interface IAttributeProto\n * @property {string|null} [name] AttributeProto name\n * @property {string|null} [refAttrName] AttributeProto refAttrName\n * @property {string|null} [docString] AttributeProto docString\n * @property {onnx.AttributeProto.AttributeType|null} [type] AttributeProto type\n * @property {number|null} [f] AttributeProto f\n * @property {number|Long|null} [i] AttributeProto i\n * @property {Uint8Array|null} [s] AttributeProto s\n * @property {onnx.ITensorProto|null} [t] AttributeProto t\n * @property {onnx.IGraphProto|null} [g] AttributeProto g\n * @property {Array.|null} [floats] AttributeProto floats\n * @property {Array.|null} [ints] AttributeProto ints\n * @property {Array.|null} [strings] AttributeProto strings\n * @property {Array.|null} [tensors] AttributeProto tensors\n * @property {Array.|null} [graphs] AttributeProto graphs\n */\n\n /**\n * Constructs a new AttributeProto.\n * @memberof onnx\n * @classdesc Represents an AttributeProto.\n * @implements IAttributeProto\n * @constructor\n * @param {onnx.IAttributeProto=} [properties] Properties to set\n */\n function AttributeProto(properties) {\n this.floats = [];\n this.ints = [];\n this.strings = [];\n this.tensors = [];\n this.graphs = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * AttributeProto name.\n * @member {string} name\n * @memberof onnx.AttributeProto\n * @instance\n */\n AttributeProto.prototype.name = \"\";\n\n /**\n * AttributeProto refAttrName.\n * @member {string} refAttrName\n * @memberof onnx.AttributeProto\n * @instance\n */\n AttributeProto.prototype.refAttrName = \"\";\n\n /**\n * AttributeProto docString.\n * @member {string} docString\n * @memberof onnx.AttributeProto\n * @instance\n */\n AttributeProto.prototype.docString = \"\";\n\n /**\n * AttributeProto type.\n * @member {onnx.AttributeProto.AttributeType} type\n * @memberof onnx.AttributeProto\n * @instance\n */\n AttributeProto.prototype.type = 0;\n\n /**\n * AttributeProto f.\n * @member {number} f\n * @memberof onnx.AttributeProto\n * @instance\n */\n AttributeProto.prototype.f = 0;\n\n /**\n * AttributeProto i.\n * @member {number|Long} i\n * @memberof onnx.AttributeProto\n * @instance\n */\n AttributeProto.prototype.i = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n /**\n * AttributeProto s.\n * @member {Uint8Array} s\n * @memberof onnx.AttributeProto\n * @instance\n */\n AttributeProto.prototype.s = $util.newBuffer([]);\n\n /**\n * AttributeProto t.\n * @member {onnx.ITensorProto|null|undefined} t\n * @memberof onnx.AttributeProto\n * @instance\n */\n AttributeProto.prototype.t = null;\n\n /**\n * AttributeProto g.\n * @member {onnx.IGraphProto|null|undefined} g\n * @memberof onnx.AttributeProto\n * @instance\n */\n AttributeProto.prototype.g = null;\n\n /**\n * AttributeProto floats.\n * @member {Array.} floats\n * @memberof onnx.AttributeProto\n * @instance\n */\n AttributeProto.prototype.floats = $util.emptyArray;\n\n /**\n * AttributeProto ints.\n * @member {Array.} ints\n * @memberof onnx.AttributeProto\n * @instance\n */\n AttributeProto.prototype.ints = $util.emptyArray;\n\n /**\n * AttributeProto strings.\n * @member {Array.} strings\n * @memberof onnx.AttributeProto\n * @instance\n */\n AttributeProto.prototype.strings = $util.emptyArray;\n\n /**\n * AttributeProto tensors.\n * @member {Array.} tensors\n * @memberof onnx.AttributeProto\n * @instance\n */\n AttributeProto.prototype.tensors = $util.emptyArray;\n\n /**\n * AttributeProto graphs.\n * @member {Array.} graphs\n * @memberof onnx.AttributeProto\n * @instance\n */\n AttributeProto.prototype.graphs = $util.emptyArray;\n\n /**\n * Creates a new AttributeProto instance using the specified properties.\n * @function create\n * @memberof onnx.AttributeProto\n * @static\n * @param {onnx.IAttributeProto=} [properties] Properties to set\n * @returns {onnx.AttributeProto} AttributeProto instance\n */\n AttributeProto.create = function create(properties) {\n return new AttributeProto(properties);\n };\n\n /**\n * Encodes the specified AttributeProto message. Does not implicitly {@link onnx.AttributeProto.verify|verify} messages.\n * @function encode\n * @memberof onnx.AttributeProto\n * @static\n * @param {onnx.IAttributeProto} message AttributeProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n AttributeProto.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.name != null && message.hasOwnProperty(\"name\"))\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);\n if (message.f != null && message.hasOwnProperty(\"f\"))\n writer.uint32(/* id 2, wireType 5 =*/21).float(message.f);\n if (message.i != null && message.hasOwnProperty(\"i\"))\n writer.uint32(/* id 3, wireType 0 =*/24).int64(message.i);\n if (message.s != null && message.hasOwnProperty(\"s\"))\n writer.uint32(/* id 4, wireType 2 =*/34).bytes(message.s);\n if (message.t != null && message.hasOwnProperty(\"t\"))\n $root.onnx.TensorProto.encode(message.t, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();\n if (message.g != null && message.hasOwnProperty(\"g\"))\n $root.onnx.GraphProto.encode(message.g, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();\n if (message.floats != null && message.floats.length) {\n writer.uint32(/* id 7, wireType 2 =*/58).fork();\n for (var i = 0; i < message.floats.length; ++i)\n writer.float(message.floats[i]);\n writer.ldelim();\n }\n if (message.ints != null && message.ints.length) {\n writer.uint32(/* id 8, wireType 2 =*/66).fork();\n for (var i = 0; i < message.ints.length; ++i)\n writer.int64(message.ints[i]);\n writer.ldelim();\n }\n if (message.strings != null && message.strings.length)\n for (var i = 0; i < message.strings.length; ++i)\n writer.uint32(/* id 9, wireType 2 =*/74).bytes(message.strings[i]);\n if (message.tensors != null && message.tensors.length)\n for (var i = 0; i < message.tensors.length; ++i)\n $root.onnx.TensorProto.encode(message.tensors[i], writer.uint32(/* id 10, wireType 2 =*/82).fork()).ldelim();\n if (message.graphs != null && message.graphs.length)\n for (var i = 0; i < message.graphs.length; ++i)\n $root.onnx.GraphProto.encode(message.graphs[i], writer.uint32(/* id 11, wireType 2 =*/90).fork()).ldelim();\n if (message.docString != null && message.hasOwnProperty(\"docString\"))\n writer.uint32(/* id 13, wireType 2 =*/106).string(message.docString);\n if (message.type != null && message.hasOwnProperty(\"type\"))\n writer.uint32(/* id 20, wireType 0 =*/160).int32(message.type);\n if (message.refAttrName != null && message.hasOwnProperty(\"refAttrName\"))\n writer.uint32(/* id 21, wireType 2 =*/170).string(message.refAttrName);\n return writer;\n };\n\n /**\n * Encodes the specified AttributeProto message, length delimited. Does not implicitly {@link onnx.AttributeProto.verify|verify} messages.\n * @function encodeDelimited\n * @memberof onnx.AttributeProto\n * @static\n * @param {onnx.IAttributeProto} message AttributeProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n AttributeProto.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes an AttributeProto message from the specified reader or buffer.\n * @function decode\n * @memberof onnx.AttributeProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {onnx.AttributeProto} AttributeProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n AttributeProto.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.onnx.AttributeProto();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.name = reader.string();\n break;\n case 21:\n message.refAttrName = reader.string();\n break;\n case 13:\n message.docString = reader.string();\n break;\n case 20:\n message.type = reader.int32();\n break;\n case 2:\n message.f = reader.float();\n break;\n case 3:\n message.i = reader.int64();\n break;\n case 4:\n message.s = reader.bytes();\n break;\n case 5:\n message.t = $root.onnx.TensorProto.decode(reader, reader.uint32());\n break;\n case 6:\n message.g = $root.onnx.GraphProto.decode(reader, reader.uint32());\n break;\n case 7:\n if (!(message.floats && message.floats.length))\n message.floats = [];\n if ((tag & 7) === 2) {\n var end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2)\n message.floats.push(reader.float());\n } else\n message.floats.push(reader.float());\n break;\n case 8:\n if (!(message.ints && message.ints.length))\n message.ints = [];\n if ((tag & 7) === 2) {\n var end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2)\n message.ints.push(reader.int64());\n } else\n message.ints.push(reader.int64());\n break;\n case 9:\n if (!(message.strings && message.strings.length))\n message.strings = [];\n message.strings.push(reader.bytes());\n break;\n case 10:\n if (!(message.tensors && message.tensors.length))\n message.tensors = [];\n message.tensors.push($root.onnx.TensorProto.decode(reader, reader.uint32()));\n break;\n case 11:\n if (!(message.graphs && message.graphs.length))\n message.graphs = [];\n message.graphs.push($root.onnx.GraphProto.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes an AttributeProto message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof onnx.AttributeProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {onnx.AttributeProto} AttributeProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n AttributeProto.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies an AttributeProto message.\n * @function verify\n * @memberof onnx.AttributeProto\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n AttributeProto.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.name != null && message.hasOwnProperty(\"name\"))\n if (!$util.isString(message.name))\n return \"name: string expected\";\n if (message.refAttrName != null && message.hasOwnProperty(\"refAttrName\"))\n if (!$util.isString(message.refAttrName))\n return \"refAttrName: string expected\";\n if (message.docString != null && message.hasOwnProperty(\"docString\"))\n if (!$util.isString(message.docString))\n return \"docString: string expected\";\n if (message.type != null && message.hasOwnProperty(\"type\"))\n switch (message.type) {\n default:\n return \"type: enum value expected\";\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n case 8:\n case 9:\n case 10:\n break;\n }\n if (message.f != null && message.hasOwnProperty(\"f\"))\n if (typeof message.f !== \"number\")\n return \"f: number expected\";\n if (message.i != null && message.hasOwnProperty(\"i\"))\n if (!$util.isInteger(message.i) && !(message.i && $util.isInteger(message.i.low) && $util.isInteger(message.i.high)))\n return \"i: integer|Long expected\";\n if (message.s != null && message.hasOwnProperty(\"s\"))\n if (!(message.s && typeof message.s.length === \"number\" || $util.isString(message.s)))\n return \"s: buffer expected\";\n if (message.t != null && message.hasOwnProperty(\"t\")) {\n var error = $root.onnx.TensorProto.verify(message.t);\n if (error)\n return \"t.\" + error;\n }\n if (message.g != null && message.hasOwnProperty(\"g\")) {\n var error = $root.onnx.GraphProto.verify(message.g);\n if (error)\n return \"g.\" + error;\n }\n if (message.floats != null && message.hasOwnProperty(\"floats\")) {\n if (!Array.isArray(message.floats))\n return \"floats: array expected\";\n for (var i = 0; i < message.floats.length; ++i)\n if (typeof message.floats[i] !== \"number\")\n return \"floats: number[] expected\";\n }\n if (message.ints != null && message.hasOwnProperty(\"ints\")) {\n if (!Array.isArray(message.ints))\n return \"ints: array expected\";\n for (var i = 0; i < message.ints.length; ++i)\n if (!$util.isInteger(message.ints[i]) && !(message.ints[i] && $util.isInteger(message.ints[i].low) && $util.isInteger(message.ints[i].high)))\n return \"ints: integer|Long[] expected\";\n }\n if (message.strings != null && message.hasOwnProperty(\"strings\")) {\n if (!Array.isArray(message.strings))\n return \"strings: array expected\";\n for (var i = 0; i < message.strings.length; ++i)\n if (!(message.strings[i] && typeof message.strings[i].length === \"number\" || $util.isString(message.strings[i])))\n return \"strings: buffer[] expected\";\n }\n if (message.tensors != null && message.hasOwnProperty(\"tensors\")) {\n if (!Array.isArray(message.tensors))\n return \"tensors: array expected\";\n for (var i = 0; i < message.tensors.length; ++i) {\n var error = $root.onnx.TensorProto.verify(message.tensors[i]);\n if (error)\n return \"tensors.\" + error;\n }\n }\n if (message.graphs != null && message.hasOwnProperty(\"graphs\")) {\n if (!Array.isArray(message.graphs))\n return \"graphs: array expected\";\n for (var i = 0; i < message.graphs.length; ++i) {\n var error = $root.onnx.GraphProto.verify(message.graphs[i]);\n if (error)\n return \"graphs.\" + error;\n }\n }\n return null;\n };\n\n /**\n * Creates an AttributeProto message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof onnx.AttributeProto\n * @static\n * @param {Object.} object Plain object\n * @returns {onnx.AttributeProto} AttributeProto\n */\n AttributeProto.fromObject = function fromObject(object) {\n if (object instanceof $root.onnx.AttributeProto)\n return object;\n var message = new $root.onnx.AttributeProto();\n if (object.name != null)\n message.name = String(object.name);\n if (object.refAttrName != null)\n message.refAttrName = String(object.refAttrName);\n if (object.docString != null)\n message.docString = String(object.docString);\n switch (object.type) {\n case \"UNDEFINED\":\n case 0:\n message.type = 0;\n break;\n case \"FLOAT\":\n case 1:\n message.type = 1;\n break;\n case \"INT\":\n case 2:\n message.type = 2;\n break;\n case \"STRING\":\n case 3:\n message.type = 3;\n break;\n case \"TENSOR\":\n case 4:\n message.type = 4;\n break;\n case \"GRAPH\":\n case 5:\n message.type = 5;\n break;\n case \"FLOATS\":\n case 6:\n message.type = 6;\n break;\n case \"INTS\":\n case 7:\n message.type = 7;\n break;\n case \"STRINGS\":\n case 8:\n message.type = 8;\n break;\n case \"TENSORS\":\n case 9:\n message.type = 9;\n break;\n case \"GRAPHS\":\n case 10:\n message.type = 10;\n break;\n }\n if (object.f != null)\n message.f = Number(object.f);\n if (object.i != null)\n if ($util.Long)\n (message.i = $util.Long.fromValue(object.i)).unsigned = false;\n else if (typeof object.i === \"string\")\n message.i = parseInt(object.i, 10);\n else if (typeof object.i === \"number\")\n message.i = object.i;\n else if (typeof object.i === \"object\")\n message.i = new $util.LongBits(object.i.low >>> 0, object.i.high >>> 0).toNumber();\n if (object.s != null)\n if (typeof object.s === \"string\")\n $util.base64.decode(object.s, message.s = $util.newBuffer($util.base64.length(object.s)), 0);\n else if (object.s.length)\n message.s = object.s;\n if (object.t != null) {\n if (typeof object.t !== \"object\")\n throw TypeError(\".onnx.AttributeProto.t: object expected\");\n message.t = $root.onnx.TensorProto.fromObject(object.t);\n }\n if (object.g != null) {\n if (typeof object.g !== \"object\")\n throw TypeError(\".onnx.AttributeProto.g: object expected\");\n message.g = $root.onnx.GraphProto.fromObject(object.g);\n }\n if (object.floats) {\n if (!Array.isArray(object.floats))\n throw TypeError(\".onnx.AttributeProto.floats: array expected\");\n message.floats = [];\n for (var i = 0; i < object.floats.length; ++i)\n message.floats[i] = Number(object.floats[i]);\n }\n if (object.ints) {\n if (!Array.isArray(object.ints))\n throw TypeError(\".onnx.AttributeProto.ints: array expected\");\n message.ints = [];\n for (var i = 0; i < object.ints.length; ++i)\n if ($util.Long)\n (message.ints[i] = $util.Long.fromValue(object.ints[i])).unsigned = false;\n else if (typeof object.ints[i] === \"string\")\n message.ints[i] = parseInt(object.ints[i], 10);\n else if (typeof object.ints[i] === \"number\")\n message.ints[i] = object.ints[i];\n else if (typeof object.ints[i] === \"object\")\n message.ints[i] = new $util.LongBits(object.ints[i].low >>> 0, object.ints[i].high >>> 0).toNumber();\n }\n if (object.strings) {\n if (!Array.isArray(object.strings))\n throw TypeError(\".onnx.AttributeProto.strings: array expected\");\n message.strings = [];\n for (var i = 0; i < object.strings.length; ++i)\n if (typeof object.strings[i] === \"string\")\n $util.base64.decode(object.strings[i], message.strings[i] = $util.newBuffer($util.base64.length(object.strings[i])), 0);\n else if (object.strings[i].length)\n message.strings[i] = object.strings[i];\n }\n if (object.tensors) {\n if (!Array.isArray(object.tensors))\n throw TypeError(\".onnx.AttributeProto.tensors: array expected\");\n message.tensors = [];\n for (var i = 0; i < object.tensors.length; ++i) {\n if (typeof object.tensors[i] !== \"object\")\n throw TypeError(\".onnx.AttributeProto.tensors: object expected\");\n message.tensors[i] = $root.onnx.TensorProto.fromObject(object.tensors[i]);\n }\n }\n if (object.graphs) {\n if (!Array.isArray(object.graphs))\n throw TypeError(\".onnx.AttributeProto.graphs: array expected\");\n message.graphs = [];\n for (var i = 0; i < object.graphs.length; ++i) {\n if (typeof object.graphs[i] !== \"object\")\n throw TypeError(\".onnx.AttributeProto.graphs: object expected\");\n message.graphs[i] = $root.onnx.GraphProto.fromObject(object.graphs[i]);\n }\n }\n return message;\n };\n\n /**\n * Creates a plain object from an AttributeProto message. Also converts values to other types if specified.\n * @function toObject\n * @memberof onnx.AttributeProto\n * @static\n * @param {onnx.AttributeProto} message AttributeProto\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n AttributeProto.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults) {\n object.floats = [];\n object.ints = [];\n object.strings = [];\n object.tensors = [];\n object.graphs = [];\n }\n if (options.defaults) {\n object.name = \"\";\n object.f = 0;\n if ($util.Long) {\n var long = new $util.Long(0, 0, false);\n object.i = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n } else\n object.i = options.longs === String ? \"0\" : 0;\n if (options.bytes === String)\n object.s = \"\";\n else {\n object.s = [];\n if (options.bytes !== Array)\n object.s = $util.newBuffer(object.s);\n }\n object.t = null;\n object.g = null;\n object.docString = \"\";\n object.type = options.enums === String ? \"UNDEFINED\" : 0;\n object.refAttrName = \"\";\n }\n if (message.name != null && message.hasOwnProperty(\"name\"))\n object.name = message.name;\n if (message.f != null && message.hasOwnProperty(\"f\"))\n object.f = options.json && !isFinite(message.f) ? String(message.f) : message.f;\n if (message.i != null && message.hasOwnProperty(\"i\"))\n if (typeof message.i === \"number\")\n object.i = options.longs === String ? String(message.i) : message.i;\n else\n object.i = options.longs === String ? $util.Long.prototype.toString.call(message.i) : options.longs === Number ? new $util.LongBits(message.i.low >>> 0, message.i.high >>> 0).toNumber() : message.i;\n if (message.s != null && message.hasOwnProperty(\"s\"))\n object.s = options.bytes === String ? $util.base64.encode(message.s, 0, message.s.length) : options.bytes === Array ? Array.prototype.slice.call(message.s) : message.s;\n if (message.t != null && message.hasOwnProperty(\"t\"))\n object.t = $root.onnx.TensorProto.toObject(message.t, options);\n if (message.g != null && message.hasOwnProperty(\"g\"))\n object.g = $root.onnx.GraphProto.toObject(message.g, options);\n if (message.floats && message.floats.length) {\n object.floats = [];\n for (var j = 0; j < message.floats.length; ++j)\n object.floats[j] = options.json && !isFinite(message.floats[j]) ? String(message.floats[j]) : message.floats[j];\n }\n if (message.ints && message.ints.length) {\n object.ints = [];\n for (var j = 0; j < message.ints.length; ++j)\n if (typeof message.ints[j] === \"number\")\n object.ints[j] = options.longs === String ? String(message.ints[j]) : message.ints[j];\n else\n object.ints[j] = options.longs === String ? $util.Long.prototype.toString.call(message.ints[j]) : options.longs === Number ? new $util.LongBits(message.ints[j].low >>> 0, message.ints[j].high >>> 0).toNumber() : message.ints[j];\n }\n if (message.strings && message.strings.length) {\n object.strings = [];\n for (var j = 0; j < message.strings.length; ++j)\n object.strings[j] = options.bytes === String ? $util.base64.encode(message.strings[j], 0, message.strings[j].length) : options.bytes === Array ? Array.prototype.slice.call(message.strings[j]) : message.strings[j];\n }\n if (message.tensors && message.tensors.length) {\n object.tensors = [];\n for (var j = 0; j < message.tensors.length; ++j)\n object.tensors[j] = $root.onnx.TensorProto.toObject(message.tensors[j], options);\n }\n if (message.graphs && message.graphs.length) {\n object.graphs = [];\n for (var j = 0; j < message.graphs.length; ++j)\n object.graphs[j] = $root.onnx.GraphProto.toObject(message.graphs[j], options);\n }\n if (message.docString != null && message.hasOwnProperty(\"docString\"))\n object.docString = message.docString;\n if (message.type != null && message.hasOwnProperty(\"type\"))\n object.type = options.enums === String ? $root.onnx.AttributeProto.AttributeType[message.type] : message.type;\n if (message.refAttrName != null && message.hasOwnProperty(\"refAttrName\"))\n object.refAttrName = message.refAttrName;\n return object;\n };\n\n /**\n * Converts this AttributeProto to JSON.\n * @function toJSON\n * @memberof onnx.AttributeProto\n * @instance\n * @returns {Object.} JSON object\n */\n AttributeProto.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * AttributeType enum.\n * @name onnx.AttributeProto.AttributeType\n * @enum {string}\n * @property {number} UNDEFINED=0 UNDEFINED value\n * @property {number} FLOAT=1 FLOAT value\n * @property {number} INT=2 INT value\n * @property {number} STRING=3 STRING value\n * @property {number} TENSOR=4 TENSOR value\n * @property {number} GRAPH=5 GRAPH value\n * @property {number} FLOATS=6 FLOATS value\n * @property {number} INTS=7 INTS value\n * @property {number} STRINGS=8 STRINGS value\n * @property {number} TENSORS=9 TENSORS value\n * @property {number} GRAPHS=10 GRAPHS value\n */\n AttributeProto.AttributeType = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[0] = \"UNDEFINED\"] = 0;\n values[valuesById[1] = \"FLOAT\"] = 1;\n values[valuesById[2] = \"INT\"] = 2;\n values[valuesById[3] = \"STRING\"] = 3;\n values[valuesById[4] = \"TENSOR\"] = 4;\n values[valuesById[5] = \"GRAPH\"] = 5;\n values[valuesById[6] = \"FLOATS\"] = 6;\n values[valuesById[7] = \"INTS\"] = 7;\n values[valuesById[8] = \"STRINGS\"] = 8;\n values[valuesById[9] = \"TENSORS\"] = 9;\n values[valuesById[10] = \"GRAPHS\"] = 10;\n return values;\n })();\n\n return AttributeProto;\n })();\n\n onnx.ValueInfoProto = (function() {\n\n /**\n * Properties of a ValueInfoProto.\n * @memberof onnx\n * @interface IValueInfoProto\n * @property {string|null} [name] ValueInfoProto name\n * @property {onnx.ITypeProto|null} [type] ValueInfoProto type\n * @property {string|null} [docString] ValueInfoProto docString\n */\n\n /**\n * Constructs a new ValueInfoProto.\n * @memberof onnx\n * @classdesc Represents a ValueInfoProto.\n * @implements IValueInfoProto\n * @constructor\n * @param {onnx.IValueInfoProto=} [properties] Properties to set\n */\n function ValueInfoProto(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * ValueInfoProto name.\n * @member {string} name\n * @memberof onnx.ValueInfoProto\n * @instance\n */\n ValueInfoProto.prototype.name = \"\";\n\n /**\n * ValueInfoProto type.\n * @member {onnx.ITypeProto|null|undefined} type\n * @memberof onnx.ValueInfoProto\n * @instance\n */\n ValueInfoProto.prototype.type = null;\n\n /**\n * ValueInfoProto docString.\n * @member {string} docString\n * @memberof onnx.ValueInfoProto\n * @instance\n */\n ValueInfoProto.prototype.docString = \"\";\n\n /**\n * Creates a new ValueInfoProto instance using the specified properties.\n * @function create\n * @memberof onnx.ValueInfoProto\n * @static\n * @param {onnx.IValueInfoProto=} [properties] Properties to set\n * @returns {onnx.ValueInfoProto} ValueInfoProto instance\n */\n ValueInfoProto.create = function create(properties) {\n return new ValueInfoProto(properties);\n };\n\n /**\n * Encodes the specified ValueInfoProto message. Does not implicitly {@link onnx.ValueInfoProto.verify|verify} messages.\n * @function encode\n * @memberof onnx.ValueInfoProto\n * @static\n * @param {onnx.IValueInfoProto} message ValueInfoProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n ValueInfoProto.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.name != null && message.hasOwnProperty(\"name\"))\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);\n if (message.type != null && message.hasOwnProperty(\"type\"))\n $root.onnx.TypeProto.encode(message.type, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\n if (message.docString != null && message.hasOwnProperty(\"docString\"))\n writer.uint32(/* id 3, wireType 2 =*/26).string(message.docString);\n return writer;\n };\n\n /**\n * Encodes the specified ValueInfoProto message, length delimited. Does not implicitly {@link onnx.ValueInfoProto.verify|verify} messages.\n * @function encodeDelimited\n * @memberof onnx.ValueInfoProto\n * @static\n * @param {onnx.IValueInfoProto} message ValueInfoProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n ValueInfoProto.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a ValueInfoProto message from the specified reader or buffer.\n * @function decode\n * @memberof onnx.ValueInfoProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {onnx.ValueInfoProto} ValueInfoProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n ValueInfoProto.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.onnx.ValueInfoProto();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.name = reader.string();\n break;\n case 2:\n message.type = $root.onnx.TypeProto.decode(reader, reader.uint32());\n break;\n case 3:\n message.docString = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a ValueInfoProto message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof onnx.ValueInfoProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {onnx.ValueInfoProto} ValueInfoProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n ValueInfoProto.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a ValueInfoProto message.\n * @function verify\n * @memberof onnx.ValueInfoProto\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n ValueInfoProto.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.name != null && message.hasOwnProperty(\"name\"))\n if (!$util.isString(message.name))\n return \"name: string expected\";\n if (message.type != null && message.hasOwnProperty(\"type\")) {\n var error = $root.onnx.TypeProto.verify(message.type);\n if (error)\n return \"type.\" + error;\n }\n if (message.docString != null && message.hasOwnProperty(\"docString\"))\n if (!$util.isString(message.docString))\n return \"docString: string expected\";\n return null;\n };\n\n /**\n * Creates a ValueInfoProto message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof onnx.ValueInfoProto\n * @static\n * @param {Object.} object Plain object\n * @returns {onnx.ValueInfoProto} ValueInfoProto\n */\n ValueInfoProto.fromObject = function fromObject(object) {\n if (object instanceof $root.onnx.ValueInfoProto)\n return object;\n var message = new $root.onnx.ValueInfoProto();\n if (object.name != null)\n message.name = String(object.name);\n if (object.type != null) {\n if (typeof object.type !== \"object\")\n throw TypeError(\".onnx.ValueInfoProto.type: object expected\");\n message.type = $root.onnx.TypeProto.fromObject(object.type);\n }\n if (object.docString != null)\n message.docString = String(object.docString);\n return message;\n };\n\n /**\n * Creates a plain object from a ValueInfoProto message. Also converts values to other types if specified.\n * @function toObject\n * @memberof onnx.ValueInfoProto\n * @static\n * @param {onnx.ValueInfoProto} message ValueInfoProto\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n ValueInfoProto.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.name = \"\";\n object.type = null;\n object.docString = \"\";\n }\n if (message.name != null && message.hasOwnProperty(\"name\"))\n object.name = message.name;\n if (message.type != null && message.hasOwnProperty(\"type\"))\n object.type = $root.onnx.TypeProto.toObject(message.type, options);\n if (message.docString != null && message.hasOwnProperty(\"docString\"))\n object.docString = message.docString;\n return object;\n };\n\n /**\n * Converts this ValueInfoProto to JSON.\n * @function toJSON\n * @memberof onnx.ValueInfoProto\n * @instance\n * @returns {Object.} JSON object\n */\n ValueInfoProto.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return ValueInfoProto;\n })();\n\n onnx.NodeProto = (function() {\n\n /**\n * Properties of a NodeProto.\n * @memberof onnx\n * @interface INodeProto\n * @property {Array.|null} [input] NodeProto input\n * @property {Array.|null} [output] NodeProto output\n * @property {string|null} [name] NodeProto name\n * @property {string|null} [opType] NodeProto opType\n * @property {string|null} [domain] NodeProto domain\n * @property {Array.|null} [attribute] NodeProto attribute\n * @property {string|null} [docString] NodeProto docString\n */\n\n /**\n * Constructs a new NodeProto.\n * @memberof onnx\n * @classdesc Represents a NodeProto.\n * @implements INodeProto\n * @constructor\n * @param {onnx.INodeProto=} [properties] Properties to set\n */\n function NodeProto(properties) {\n this.input = [];\n this.output = [];\n this.attribute = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * NodeProto input.\n * @member {Array.} input\n * @memberof onnx.NodeProto\n * @instance\n */\n NodeProto.prototype.input = $util.emptyArray;\n\n /**\n * NodeProto output.\n * @member {Array.} output\n * @memberof onnx.NodeProto\n * @instance\n */\n NodeProto.prototype.output = $util.emptyArray;\n\n /**\n * NodeProto name.\n * @member {string} name\n * @memberof onnx.NodeProto\n * @instance\n */\n NodeProto.prototype.name = \"\";\n\n /**\n * NodeProto opType.\n * @member {string} opType\n * @memberof onnx.NodeProto\n * @instance\n */\n NodeProto.prototype.opType = \"\";\n\n /**\n * NodeProto domain.\n * @member {string} domain\n * @memberof onnx.NodeProto\n * @instance\n */\n NodeProto.prototype.domain = \"\";\n\n /**\n * NodeProto attribute.\n * @member {Array.} attribute\n * @memberof onnx.NodeProto\n * @instance\n */\n NodeProto.prototype.attribute = $util.emptyArray;\n\n /**\n * NodeProto docString.\n * @member {string} docString\n * @memberof onnx.NodeProto\n * @instance\n */\n NodeProto.prototype.docString = \"\";\n\n /**\n * Creates a new NodeProto instance using the specified properties.\n * @function create\n * @memberof onnx.NodeProto\n * @static\n * @param {onnx.INodeProto=} [properties] Properties to set\n * @returns {onnx.NodeProto} NodeProto instance\n */\n NodeProto.create = function create(properties) {\n return new NodeProto(properties);\n };\n\n /**\n * Encodes the specified NodeProto message. Does not implicitly {@link onnx.NodeProto.verify|verify} messages.\n * @function encode\n * @memberof onnx.NodeProto\n * @static\n * @param {onnx.INodeProto} message NodeProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n NodeProto.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.input != null && message.input.length)\n for (var i = 0; i < message.input.length; ++i)\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.input[i]);\n if (message.output != null && message.output.length)\n for (var i = 0; i < message.output.length; ++i)\n writer.uint32(/* id 2, wireType 2 =*/18).string(message.output[i]);\n if (message.name != null && message.hasOwnProperty(\"name\"))\n writer.uint32(/* id 3, wireType 2 =*/26).string(message.name);\n if (message.opType != null && message.hasOwnProperty(\"opType\"))\n writer.uint32(/* id 4, wireType 2 =*/34).string(message.opType);\n if (message.attribute != null && message.attribute.length)\n for (var i = 0; i < message.attribute.length; ++i)\n $root.onnx.AttributeProto.encode(message.attribute[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();\n if (message.docString != null && message.hasOwnProperty(\"docString\"))\n writer.uint32(/* id 6, wireType 2 =*/50).string(message.docString);\n if (message.domain != null && message.hasOwnProperty(\"domain\"))\n writer.uint32(/* id 7, wireType 2 =*/58).string(message.domain);\n return writer;\n };\n\n /**\n * Encodes the specified NodeProto message, length delimited. Does not implicitly {@link onnx.NodeProto.verify|verify} messages.\n * @function encodeDelimited\n * @memberof onnx.NodeProto\n * @static\n * @param {onnx.INodeProto} message NodeProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n NodeProto.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a NodeProto message from the specified reader or buffer.\n * @function decode\n * @memberof onnx.NodeProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {onnx.NodeProto} NodeProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n NodeProto.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.onnx.NodeProto();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (!(message.input && message.input.length))\n message.input = [];\n message.input.push(reader.string());\n break;\n case 2:\n if (!(message.output && message.output.length))\n message.output = [];\n message.output.push(reader.string());\n break;\n case 3:\n message.name = reader.string();\n break;\n case 4:\n message.opType = reader.string();\n break;\n case 7:\n message.domain = reader.string();\n break;\n case 5:\n if (!(message.attribute && message.attribute.length))\n message.attribute = [];\n message.attribute.push($root.onnx.AttributeProto.decode(reader, reader.uint32()));\n break;\n case 6:\n message.docString = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a NodeProto message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof onnx.NodeProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {onnx.NodeProto} NodeProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n NodeProto.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a NodeProto message.\n * @function verify\n * @memberof onnx.NodeProto\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n NodeProto.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.input != null && message.hasOwnProperty(\"input\")) {\n if (!Array.isArray(message.input))\n return \"input: array expected\";\n for (var i = 0; i < message.input.length; ++i)\n if (!$util.isString(message.input[i]))\n return \"input: string[] expected\";\n }\n if (message.output != null && message.hasOwnProperty(\"output\")) {\n if (!Array.isArray(message.output))\n return \"output: array expected\";\n for (var i = 0; i < message.output.length; ++i)\n if (!$util.isString(message.output[i]))\n return \"output: string[] expected\";\n }\n if (message.name != null && message.hasOwnProperty(\"name\"))\n if (!$util.isString(message.name))\n return \"name: string expected\";\n if (message.opType != null && message.hasOwnProperty(\"opType\"))\n if (!$util.isString(message.opType))\n return \"opType: string expected\";\n if (message.domain != null && message.hasOwnProperty(\"domain\"))\n if (!$util.isString(message.domain))\n return \"domain: string expected\";\n if (message.attribute != null && message.hasOwnProperty(\"attribute\")) {\n if (!Array.isArray(message.attribute))\n return \"attribute: array expected\";\n for (var i = 0; i < message.attribute.length; ++i) {\n var error = $root.onnx.AttributeProto.verify(message.attribute[i]);\n if (error)\n return \"attribute.\" + error;\n }\n }\n if (message.docString != null && message.hasOwnProperty(\"docString\"))\n if (!$util.isString(message.docString))\n return \"docString: string expected\";\n return null;\n };\n\n /**\n * Creates a NodeProto message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof onnx.NodeProto\n * @static\n * @param {Object.} object Plain object\n * @returns {onnx.NodeProto} NodeProto\n */\n NodeProto.fromObject = function fromObject(object) {\n if (object instanceof $root.onnx.NodeProto)\n return object;\n var message = new $root.onnx.NodeProto();\n if (object.input) {\n if (!Array.isArray(object.input))\n throw TypeError(\".onnx.NodeProto.input: array expected\");\n message.input = [];\n for (var i = 0; i < object.input.length; ++i)\n message.input[i] = String(object.input[i]);\n }\n if (object.output) {\n if (!Array.isArray(object.output))\n throw TypeError(\".onnx.NodeProto.output: array expected\");\n message.output = [];\n for (var i = 0; i < object.output.length; ++i)\n message.output[i] = String(object.output[i]);\n }\n if (object.name != null)\n message.name = String(object.name);\n if (object.opType != null)\n message.opType = String(object.opType);\n if (object.domain != null)\n message.domain = String(object.domain);\n if (object.attribute) {\n if (!Array.isArray(object.attribute))\n throw TypeError(\".onnx.NodeProto.attribute: array expected\");\n message.attribute = [];\n for (var i = 0; i < object.attribute.length; ++i) {\n if (typeof object.attribute[i] !== \"object\")\n throw TypeError(\".onnx.NodeProto.attribute: object expected\");\n message.attribute[i] = $root.onnx.AttributeProto.fromObject(object.attribute[i]);\n }\n }\n if (object.docString != null)\n message.docString = String(object.docString);\n return message;\n };\n\n /**\n * Creates a plain object from a NodeProto message. Also converts values to other types if specified.\n * @function toObject\n * @memberof onnx.NodeProto\n * @static\n * @param {onnx.NodeProto} message NodeProto\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n NodeProto.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults) {\n object.input = [];\n object.output = [];\n object.attribute = [];\n }\n if (options.defaults) {\n object.name = \"\";\n object.opType = \"\";\n object.docString = \"\";\n object.domain = \"\";\n }\n if (message.input && message.input.length) {\n object.input = [];\n for (var j = 0; j < message.input.length; ++j)\n object.input[j] = message.input[j];\n }\n if (message.output && message.output.length) {\n object.output = [];\n for (var j = 0; j < message.output.length; ++j)\n object.output[j] = message.output[j];\n }\n if (message.name != null && message.hasOwnProperty(\"name\"))\n object.name = message.name;\n if (message.opType != null && message.hasOwnProperty(\"opType\"))\n object.opType = message.opType;\n if (message.attribute && message.attribute.length) {\n object.attribute = [];\n for (var j = 0; j < message.attribute.length; ++j)\n object.attribute[j] = $root.onnx.AttributeProto.toObject(message.attribute[j], options);\n }\n if (message.docString != null && message.hasOwnProperty(\"docString\"))\n object.docString = message.docString;\n if (message.domain != null && message.hasOwnProperty(\"domain\"))\n object.domain = message.domain;\n return object;\n };\n\n /**\n * Converts this NodeProto to JSON.\n * @function toJSON\n * @memberof onnx.NodeProto\n * @instance\n * @returns {Object.} JSON object\n */\n NodeProto.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return NodeProto;\n })();\n\n onnx.ModelProto = (function() {\n\n /**\n * Properties of a ModelProto.\n * @memberof onnx\n * @interface IModelProto\n * @property {number|Long|null} [irVersion] ModelProto irVersion\n * @property {Array.|null} [opsetImport] ModelProto opsetImport\n * @property {string|null} [producerName] ModelProto producerName\n * @property {string|null} [producerVersion] ModelProto producerVersion\n * @property {string|null} [domain] ModelProto domain\n * @property {number|Long|null} [modelVersion] ModelProto modelVersion\n * @property {string|null} [docString] ModelProto docString\n * @property {onnx.IGraphProto|null} [graph] ModelProto graph\n * @property {Array.|null} [metadataProps] ModelProto metadataProps\n */\n\n /**\n * Constructs a new ModelProto.\n * @memberof onnx\n * @classdesc Represents a ModelProto.\n * @implements IModelProto\n * @constructor\n * @param {onnx.IModelProto=} [properties] Properties to set\n */\n function ModelProto(properties) {\n this.opsetImport = [];\n this.metadataProps = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * ModelProto irVersion.\n * @member {number|Long} irVersion\n * @memberof onnx.ModelProto\n * @instance\n */\n ModelProto.prototype.irVersion = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n /**\n * ModelProto opsetImport.\n * @member {Array.} opsetImport\n * @memberof onnx.ModelProto\n * @instance\n */\n ModelProto.prototype.opsetImport = $util.emptyArray;\n\n /**\n * ModelProto producerName.\n * @member {string} producerName\n * @memberof onnx.ModelProto\n * @instance\n */\n ModelProto.prototype.producerName = \"\";\n\n /**\n * ModelProto producerVersion.\n * @member {string} producerVersion\n * @memberof onnx.ModelProto\n * @instance\n */\n ModelProto.prototype.producerVersion = \"\";\n\n /**\n * ModelProto domain.\n * @member {string} domain\n * @memberof onnx.ModelProto\n * @instance\n */\n ModelProto.prototype.domain = \"\";\n\n /**\n * ModelProto modelVersion.\n * @member {number|Long} modelVersion\n * @memberof onnx.ModelProto\n * @instance\n */\n ModelProto.prototype.modelVersion = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n /**\n * ModelProto docString.\n * @member {string} docString\n * @memberof onnx.ModelProto\n * @instance\n */\n ModelProto.prototype.docString = \"\";\n\n /**\n * ModelProto graph.\n * @member {onnx.IGraphProto|null|undefined} graph\n * @memberof onnx.ModelProto\n * @instance\n */\n ModelProto.prototype.graph = null;\n\n /**\n * ModelProto metadataProps.\n * @member {Array.} metadataProps\n * @memberof onnx.ModelProto\n * @instance\n */\n ModelProto.prototype.metadataProps = $util.emptyArray;\n\n /**\n * Creates a new ModelProto instance using the specified properties.\n * @function create\n * @memberof onnx.ModelProto\n * @static\n * @param {onnx.IModelProto=} [properties] Properties to set\n * @returns {onnx.ModelProto} ModelProto instance\n */\n ModelProto.create = function create(properties) {\n return new ModelProto(properties);\n };\n\n /**\n * Encodes the specified ModelProto message. Does not implicitly {@link onnx.ModelProto.verify|verify} messages.\n * @function encode\n * @memberof onnx.ModelProto\n * @static\n * @param {onnx.IModelProto} message ModelProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n ModelProto.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.irVersion != null && message.hasOwnProperty(\"irVersion\"))\n writer.uint32(/* id 1, wireType 0 =*/8).int64(message.irVersion);\n if (message.producerName != null && message.hasOwnProperty(\"producerName\"))\n writer.uint32(/* id 2, wireType 2 =*/18).string(message.producerName);\n if (message.producerVersion != null && message.hasOwnProperty(\"producerVersion\"))\n writer.uint32(/* id 3, wireType 2 =*/26).string(message.producerVersion);\n if (message.domain != null && message.hasOwnProperty(\"domain\"))\n writer.uint32(/* id 4, wireType 2 =*/34).string(message.domain);\n if (message.modelVersion != null && message.hasOwnProperty(\"modelVersion\"))\n writer.uint32(/* id 5, wireType 0 =*/40).int64(message.modelVersion);\n if (message.docString != null && message.hasOwnProperty(\"docString\"))\n writer.uint32(/* id 6, wireType 2 =*/50).string(message.docString);\n if (message.graph != null && message.hasOwnProperty(\"graph\"))\n $root.onnx.GraphProto.encode(message.graph, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();\n if (message.opsetImport != null && message.opsetImport.length)\n for (var i = 0; i < message.opsetImport.length; ++i)\n $root.onnx.OperatorSetIdProto.encode(message.opsetImport[i], writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim();\n if (message.metadataProps != null && message.metadataProps.length)\n for (var i = 0; i < message.metadataProps.length; ++i)\n $root.onnx.StringStringEntryProto.encode(message.metadataProps[i], writer.uint32(/* id 14, wireType 2 =*/114).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified ModelProto message, length delimited. Does not implicitly {@link onnx.ModelProto.verify|verify} messages.\n * @function encodeDelimited\n * @memberof onnx.ModelProto\n * @static\n * @param {onnx.IModelProto} message ModelProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n ModelProto.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a ModelProto message from the specified reader or buffer.\n * @function decode\n * @memberof onnx.ModelProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {onnx.ModelProto} ModelProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n ModelProto.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.onnx.ModelProto();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.irVersion = reader.int64();\n break;\n case 8:\n if (!(message.opsetImport && message.opsetImport.length))\n message.opsetImport = [];\n message.opsetImport.push($root.onnx.OperatorSetIdProto.decode(reader, reader.uint32()));\n break;\n case 2:\n message.producerName = reader.string();\n break;\n case 3:\n message.producerVersion = reader.string();\n break;\n case 4:\n message.domain = reader.string();\n break;\n case 5:\n message.modelVersion = reader.int64();\n break;\n case 6:\n message.docString = reader.string();\n break;\n case 7:\n message.graph = $root.onnx.GraphProto.decode(reader, reader.uint32());\n break;\n case 14:\n if (!(message.metadataProps && message.metadataProps.length))\n message.metadataProps = [];\n message.metadataProps.push($root.onnx.StringStringEntryProto.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a ModelProto message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof onnx.ModelProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {onnx.ModelProto} ModelProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n ModelProto.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a ModelProto message.\n * @function verify\n * @memberof onnx.ModelProto\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n ModelProto.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.irVersion != null && message.hasOwnProperty(\"irVersion\"))\n if (!$util.isInteger(message.irVersion) && !(message.irVersion && $util.isInteger(message.irVersion.low) && $util.isInteger(message.irVersion.high)))\n return \"irVersion: integer|Long expected\";\n if (message.opsetImport != null && message.hasOwnProperty(\"opsetImport\")) {\n if (!Array.isArray(message.opsetImport))\n return \"opsetImport: array expected\";\n for (var i = 0; i < message.opsetImport.length; ++i) {\n var error = $root.onnx.OperatorSetIdProto.verify(message.opsetImport[i]);\n if (error)\n return \"opsetImport.\" + error;\n }\n }\n if (message.producerName != null && message.hasOwnProperty(\"producerName\"))\n if (!$util.isString(message.producerName))\n return \"producerName: string expected\";\n if (message.producerVersion != null && message.hasOwnProperty(\"producerVersion\"))\n if (!$util.isString(message.producerVersion))\n return \"producerVersion: string expected\";\n if (message.domain != null && message.hasOwnProperty(\"domain\"))\n if (!$util.isString(message.domain))\n return \"domain: string expected\";\n if (message.modelVersion != null && message.hasOwnProperty(\"modelVersion\"))\n if (!$util.isInteger(message.modelVersion) && !(message.modelVersion && $util.isInteger(message.modelVersion.low) && $util.isInteger(message.modelVersion.high)))\n return \"modelVersion: integer|Long expected\";\n if (message.docString != null && message.hasOwnProperty(\"docString\"))\n if (!$util.isString(message.docString))\n return \"docString: string expected\";\n if (message.graph != null && message.hasOwnProperty(\"graph\")) {\n var error = $root.onnx.GraphProto.verify(message.graph);\n if (error)\n return \"graph.\" + error;\n }\n if (message.metadataProps != null && message.hasOwnProperty(\"metadataProps\")) {\n if (!Array.isArray(message.metadataProps))\n return \"metadataProps: array expected\";\n for (var i = 0; i < message.metadataProps.length; ++i) {\n var error = $root.onnx.StringStringEntryProto.verify(message.metadataProps[i]);\n if (error)\n return \"metadataProps.\" + error;\n }\n }\n return null;\n };\n\n /**\n * Creates a ModelProto message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof onnx.ModelProto\n * @static\n * @param {Object.} object Plain object\n * @returns {onnx.ModelProto} ModelProto\n */\n ModelProto.fromObject = function fromObject(object) {\n if (object instanceof $root.onnx.ModelProto)\n return object;\n var message = new $root.onnx.ModelProto();\n if (object.irVersion != null)\n if ($util.Long)\n (message.irVersion = $util.Long.fromValue(object.irVersion)).unsigned = false;\n else if (typeof object.irVersion === \"string\")\n message.irVersion = parseInt(object.irVersion, 10);\n else if (typeof object.irVersion === \"number\")\n message.irVersion = object.irVersion;\n else if (typeof object.irVersion === \"object\")\n message.irVersion = new $util.LongBits(object.irVersion.low >>> 0, object.irVersion.high >>> 0).toNumber();\n if (object.opsetImport) {\n if (!Array.isArray(object.opsetImport))\n throw TypeError(\".onnx.ModelProto.opsetImport: array expected\");\n message.opsetImport = [];\n for (var i = 0; i < object.opsetImport.length; ++i) {\n if (typeof object.opsetImport[i] !== \"object\")\n throw TypeError(\".onnx.ModelProto.opsetImport: object expected\");\n message.opsetImport[i] = $root.onnx.OperatorSetIdProto.fromObject(object.opsetImport[i]);\n }\n }\n if (object.producerName != null)\n message.producerName = String(object.producerName);\n if (object.producerVersion != null)\n message.producerVersion = String(object.producerVersion);\n if (object.domain != null)\n message.domain = String(object.domain);\n if (object.modelVersion != null)\n if ($util.Long)\n (message.modelVersion = $util.Long.fromValue(object.modelVersion)).unsigned = false;\n else if (typeof object.modelVersion === \"string\")\n message.modelVersion = parseInt(object.modelVersion, 10);\n else if (typeof object.modelVersion === \"number\")\n message.modelVersion = object.modelVersion;\n else if (typeof object.modelVersion === \"object\")\n message.modelVersion = new $util.LongBits(object.modelVersion.low >>> 0, object.modelVersion.high >>> 0).toNumber();\n if (object.docString != null)\n message.docString = String(object.docString);\n if (object.graph != null) {\n if (typeof object.graph !== \"object\")\n throw TypeError(\".onnx.ModelProto.graph: object expected\");\n message.graph = $root.onnx.GraphProto.fromObject(object.graph);\n }\n if (object.metadataProps) {\n if (!Array.isArray(object.metadataProps))\n throw TypeError(\".onnx.ModelProto.metadataProps: array expected\");\n message.metadataProps = [];\n for (var i = 0; i < object.metadataProps.length; ++i) {\n if (typeof object.metadataProps[i] !== \"object\")\n throw TypeError(\".onnx.ModelProto.metadataProps: object expected\");\n message.metadataProps[i] = $root.onnx.StringStringEntryProto.fromObject(object.metadataProps[i]);\n }\n }\n return message;\n };\n\n /**\n * Creates a plain object from a ModelProto message. Also converts values to other types if specified.\n * @function toObject\n * @memberof onnx.ModelProto\n * @static\n * @param {onnx.ModelProto} message ModelProto\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n ModelProto.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults) {\n object.opsetImport = [];\n object.metadataProps = [];\n }\n if (options.defaults) {\n if ($util.Long) {\n var long = new $util.Long(0, 0, false);\n object.irVersion = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n } else\n object.irVersion = options.longs === String ? \"0\" : 0;\n object.producerName = \"\";\n object.producerVersion = \"\";\n object.domain = \"\";\n if ($util.Long) {\n var long = new $util.Long(0, 0, false);\n object.modelVersion = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n } else\n object.modelVersion = options.longs === String ? \"0\" : 0;\n object.docString = \"\";\n object.graph = null;\n }\n if (message.irVersion != null && message.hasOwnProperty(\"irVersion\"))\n if (typeof message.irVersion === \"number\")\n object.irVersion = options.longs === String ? String(message.irVersion) : message.irVersion;\n else\n object.irVersion = options.longs === String ? $util.Long.prototype.toString.call(message.irVersion) : options.longs === Number ? new $util.LongBits(message.irVersion.low >>> 0, message.irVersion.high >>> 0).toNumber() : message.irVersion;\n if (message.producerName != null && message.hasOwnProperty(\"producerName\"))\n object.producerName = message.producerName;\n if (message.producerVersion != null && message.hasOwnProperty(\"producerVersion\"))\n object.producerVersion = message.producerVersion;\n if (message.domain != null && message.hasOwnProperty(\"domain\"))\n object.domain = message.domain;\n if (message.modelVersion != null && message.hasOwnProperty(\"modelVersion\"))\n if (typeof message.modelVersion === \"number\")\n object.modelVersion = options.longs === String ? String(message.modelVersion) : message.modelVersion;\n else\n object.modelVersion = options.longs === String ? $util.Long.prototype.toString.call(message.modelVersion) : options.longs === Number ? new $util.LongBits(message.modelVersion.low >>> 0, message.modelVersion.high >>> 0).toNumber() : message.modelVersion;\n if (message.docString != null && message.hasOwnProperty(\"docString\"))\n object.docString = message.docString;\n if (message.graph != null && message.hasOwnProperty(\"graph\"))\n object.graph = $root.onnx.GraphProto.toObject(message.graph, options);\n if (message.opsetImport && message.opsetImport.length) {\n object.opsetImport = [];\n for (var j = 0; j < message.opsetImport.length; ++j)\n object.opsetImport[j] = $root.onnx.OperatorSetIdProto.toObject(message.opsetImport[j], options);\n }\n if (message.metadataProps && message.metadataProps.length) {\n object.metadataProps = [];\n for (var j = 0; j < message.metadataProps.length; ++j)\n object.metadataProps[j] = $root.onnx.StringStringEntryProto.toObject(message.metadataProps[j], options);\n }\n return object;\n };\n\n /**\n * Converts this ModelProto to JSON.\n * @function toJSON\n * @memberof onnx.ModelProto\n * @instance\n * @returns {Object.} JSON object\n */\n ModelProto.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return ModelProto;\n })();\n\n onnx.StringStringEntryProto = (function() {\n\n /**\n * Properties of a StringStringEntryProto.\n * @memberof onnx\n * @interface IStringStringEntryProto\n * @property {string|null} [key] StringStringEntryProto key\n * @property {string|null} [value] StringStringEntryProto value\n */\n\n /**\n * Constructs a new StringStringEntryProto.\n * @memberof onnx\n * @classdesc Represents a StringStringEntryProto.\n * @implements IStringStringEntryProto\n * @constructor\n * @param {onnx.IStringStringEntryProto=} [properties] Properties to set\n */\n function StringStringEntryProto(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * StringStringEntryProto key.\n * @member {string} key\n * @memberof onnx.StringStringEntryProto\n * @instance\n */\n StringStringEntryProto.prototype.key = \"\";\n\n /**\n * StringStringEntryProto value.\n * @member {string} value\n * @memberof onnx.StringStringEntryProto\n * @instance\n */\n StringStringEntryProto.prototype.value = \"\";\n\n /**\n * Creates a new StringStringEntryProto instance using the specified properties.\n * @function create\n * @memberof onnx.StringStringEntryProto\n * @static\n * @param {onnx.IStringStringEntryProto=} [properties] Properties to set\n * @returns {onnx.StringStringEntryProto} StringStringEntryProto instance\n */\n StringStringEntryProto.create = function create(properties) {\n return new StringStringEntryProto(properties);\n };\n\n /**\n * Encodes the specified StringStringEntryProto message. Does not implicitly {@link onnx.StringStringEntryProto.verify|verify} messages.\n * @function encode\n * @memberof onnx.StringStringEntryProto\n * @static\n * @param {onnx.IStringStringEntryProto} message StringStringEntryProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n StringStringEntryProto.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.key != null && message.hasOwnProperty(\"key\"))\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.key);\n if (message.value != null && message.hasOwnProperty(\"value\"))\n writer.uint32(/* id 2, wireType 2 =*/18).string(message.value);\n return writer;\n };\n\n /**\n * Encodes the specified StringStringEntryProto message, length delimited. Does not implicitly {@link onnx.StringStringEntryProto.verify|verify} messages.\n * @function encodeDelimited\n * @memberof onnx.StringStringEntryProto\n * @static\n * @param {onnx.IStringStringEntryProto} message StringStringEntryProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n StringStringEntryProto.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a StringStringEntryProto message from the specified reader or buffer.\n * @function decode\n * @memberof onnx.StringStringEntryProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {onnx.StringStringEntryProto} StringStringEntryProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n StringStringEntryProto.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.onnx.StringStringEntryProto();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.key = reader.string();\n break;\n case 2:\n message.value = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a StringStringEntryProto message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof onnx.StringStringEntryProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {onnx.StringStringEntryProto} StringStringEntryProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n StringStringEntryProto.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a StringStringEntryProto message.\n * @function verify\n * @memberof onnx.StringStringEntryProto\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n StringStringEntryProto.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.key != null && message.hasOwnProperty(\"key\"))\n if (!$util.isString(message.key))\n return \"key: string expected\";\n if (message.value != null && message.hasOwnProperty(\"value\"))\n if (!$util.isString(message.value))\n return \"value: string expected\";\n return null;\n };\n\n /**\n * Creates a StringStringEntryProto message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof onnx.StringStringEntryProto\n * @static\n * @param {Object.} object Plain object\n * @returns {onnx.StringStringEntryProto} StringStringEntryProto\n */\n StringStringEntryProto.fromObject = function fromObject(object) {\n if (object instanceof $root.onnx.StringStringEntryProto)\n return object;\n var message = new $root.onnx.StringStringEntryProto();\n if (object.key != null)\n message.key = String(object.key);\n if (object.value != null)\n message.value = String(object.value);\n return message;\n };\n\n /**\n * Creates a plain object from a StringStringEntryProto message. Also converts values to other types if specified.\n * @function toObject\n * @memberof onnx.StringStringEntryProto\n * @static\n * @param {onnx.StringStringEntryProto} message StringStringEntryProto\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n StringStringEntryProto.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.key = \"\";\n object.value = \"\";\n }\n if (message.key != null && message.hasOwnProperty(\"key\"))\n object.key = message.key;\n if (message.value != null && message.hasOwnProperty(\"value\"))\n object.value = message.value;\n return object;\n };\n\n /**\n * Converts this StringStringEntryProto to JSON.\n * @function toJSON\n * @memberof onnx.StringStringEntryProto\n * @instance\n * @returns {Object.} JSON object\n */\n StringStringEntryProto.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return StringStringEntryProto;\n })();\n\n onnx.TensorAnnotation = (function() {\n\n /**\n * Properties of a TensorAnnotation.\n * @memberof onnx\n * @interface ITensorAnnotation\n * @property {string|null} [tensorName] TensorAnnotation tensorName\n * @property {Array.|null} [quantParameterTensorNames] TensorAnnotation quantParameterTensorNames\n */\n\n /**\n * Constructs a new TensorAnnotation.\n * @memberof onnx\n * @classdesc Represents a TensorAnnotation.\n * @implements ITensorAnnotation\n * @constructor\n * @param {onnx.ITensorAnnotation=} [properties] Properties to set\n */\n function TensorAnnotation(properties) {\n this.quantParameterTensorNames = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * TensorAnnotation tensorName.\n * @member {string} tensorName\n * @memberof onnx.TensorAnnotation\n * @instance\n */\n TensorAnnotation.prototype.tensorName = \"\";\n\n /**\n * TensorAnnotation quantParameterTensorNames.\n * @member {Array.} quantParameterTensorNames\n * @memberof onnx.TensorAnnotation\n * @instance\n */\n TensorAnnotation.prototype.quantParameterTensorNames = $util.emptyArray;\n\n /**\n * Creates a new TensorAnnotation instance using the specified properties.\n * @function create\n * @memberof onnx.TensorAnnotation\n * @static\n * @param {onnx.ITensorAnnotation=} [properties] Properties to set\n * @returns {onnx.TensorAnnotation} TensorAnnotation instance\n */\n TensorAnnotation.create = function create(properties) {\n return new TensorAnnotation(properties);\n };\n\n /**\n * Encodes the specified TensorAnnotation message. Does not implicitly {@link onnx.TensorAnnotation.verify|verify} messages.\n * @function encode\n * @memberof onnx.TensorAnnotation\n * @static\n * @param {onnx.ITensorAnnotation} message TensorAnnotation message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n TensorAnnotation.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.tensorName != null && message.hasOwnProperty(\"tensorName\"))\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.tensorName);\n if (message.quantParameterTensorNames != null && message.quantParameterTensorNames.length)\n for (var i = 0; i < message.quantParameterTensorNames.length; ++i)\n $root.onnx.StringStringEntryProto.encode(message.quantParameterTensorNames[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified TensorAnnotation message, length delimited. Does not implicitly {@link onnx.TensorAnnotation.verify|verify} messages.\n * @function encodeDelimited\n * @memberof onnx.TensorAnnotation\n * @static\n * @param {onnx.ITensorAnnotation} message TensorAnnotation message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n TensorAnnotation.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a TensorAnnotation message from the specified reader or buffer.\n * @function decode\n * @memberof onnx.TensorAnnotation\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {onnx.TensorAnnotation} TensorAnnotation\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n TensorAnnotation.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.onnx.TensorAnnotation();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.tensorName = reader.string();\n break;\n case 2:\n if (!(message.quantParameterTensorNames && message.quantParameterTensorNames.length))\n message.quantParameterTensorNames = [];\n message.quantParameterTensorNames.push($root.onnx.StringStringEntryProto.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a TensorAnnotation message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof onnx.TensorAnnotation\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {onnx.TensorAnnotation} TensorAnnotation\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n TensorAnnotation.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a TensorAnnotation message.\n * @function verify\n * @memberof onnx.TensorAnnotation\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n TensorAnnotation.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.tensorName != null && message.hasOwnProperty(\"tensorName\"))\n if (!$util.isString(message.tensorName))\n return \"tensorName: string expected\";\n if (message.quantParameterTensorNames != null && message.hasOwnProperty(\"quantParameterTensorNames\")) {\n if (!Array.isArray(message.quantParameterTensorNames))\n return \"quantParameterTensorNames: array expected\";\n for (var i = 0; i < message.quantParameterTensorNames.length; ++i) {\n var error = $root.onnx.StringStringEntryProto.verify(message.quantParameterTensorNames[i]);\n if (error)\n return \"quantParameterTensorNames.\" + error;\n }\n }\n return null;\n };\n\n /**\n * Creates a TensorAnnotation message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof onnx.TensorAnnotation\n * @static\n * @param {Object.} object Plain object\n * @returns {onnx.TensorAnnotation} TensorAnnotation\n */\n TensorAnnotation.fromObject = function fromObject(object) {\n if (object instanceof $root.onnx.TensorAnnotation)\n return object;\n var message = new $root.onnx.TensorAnnotation();\n if (object.tensorName != null)\n message.tensorName = String(object.tensorName);\n if (object.quantParameterTensorNames) {\n if (!Array.isArray(object.quantParameterTensorNames))\n throw TypeError(\".onnx.TensorAnnotation.quantParameterTensorNames: array expected\");\n message.quantParameterTensorNames = [];\n for (var i = 0; i < object.quantParameterTensorNames.length; ++i) {\n if (typeof object.quantParameterTensorNames[i] !== \"object\")\n throw TypeError(\".onnx.TensorAnnotation.quantParameterTensorNames: object expected\");\n message.quantParameterTensorNames[i] = $root.onnx.StringStringEntryProto.fromObject(object.quantParameterTensorNames[i]);\n }\n }\n return message;\n };\n\n /**\n * Creates a plain object from a TensorAnnotation message. Also converts values to other types if specified.\n * @function toObject\n * @memberof onnx.TensorAnnotation\n * @static\n * @param {onnx.TensorAnnotation} message TensorAnnotation\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n TensorAnnotation.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults)\n object.quantParameterTensorNames = [];\n if (options.defaults)\n object.tensorName = \"\";\n if (message.tensorName != null && message.hasOwnProperty(\"tensorName\"))\n object.tensorName = message.tensorName;\n if (message.quantParameterTensorNames && message.quantParameterTensorNames.length) {\n object.quantParameterTensorNames = [];\n for (var j = 0; j < message.quantParameterTensorNames.length; ++j)\n object.quantParameterTensorNames[j] = $root.onnx.StringStringEntryProto.toObject(message.quantParameterTensorNames[j], options);\n }\n return object;\n };\n\n /**\n * Converts this TensorAnnotation to JSON.\n * @function toJSON\n * @memberof onnx.TensorAnnotation\n * @instance\n * @returns {Object.} JSON object\n */\n TensorAnnotation.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return TensorAnnotation;\n })();\n\n onnx.GraphProto = (function() {\n\n /**\n * Properties of a GraphProto.\n * @memberof onnx\n * @interface IGraphProto\n * @property {Array.|null} [node] GraphProto node\n * @property {string|null} [name] GraphProto name\n * @property {Array.|null} [initializer] GraphProto initializer\n * @property {string|null} [docString] GraphProto docString\n * @property {Array.|null} [input] GraphProto input\n * @property {Array.|null} [output] GraphProto output\n * @property {Array.|null} [valueInfo] GraphProto valueInfo\n * @property {Array.|null} [quantizationAnnotation] GraphProto quantizationAnnotation\n */\n\n /**\n * Constructs a new GraphProto.\n * @memberof onnx\n * @classdesc Represents a GraphProto.\n * @implements IGraphProto\n * @constructor\n * @param {onnx.IGraphProto=} [properties] Properties to set\n */\n function GraphProto(properties) {\n this.node = [];\n this.initializer = [];\n this.input = [];\n this.output = [];\n this.valueInfo = [];\n this.quantizationAnnotation = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * GraphProto node.\n * @member {Array.} node\n * @memberof onnx.GraphProto\n * @instance\n */\n GraphProto.prototype.node = $util.emptyArray;\n\n /**\n * GraphProto name.\n * @member {string} name\n * @memberof onnx.GraphProto\n * @instance\n */\n GraphProto.prototype.name = \"\";\n\n /**\n * GraphProto initializer.\n * @member {Array.} initializer\n * @memberof onnx.GraphProto\n * @instance\n */\n GraphProto.prototype.initializer = $util.emptyArray;\n\n /**\n * GraphProto docString.\n * @member {string} docString\n * @memberof onnx.GraphProto\n * @instance\n */\n GraphProto.prototype.docString = \"\";\n\n /**\n * GraphProto input.\n * @member {Array.} input\n * @memberof onnx.GraphProto\n * @instance\n */\n GraphProto.prototype.input = $util.emptyArray;\n\n /**\n * GraphProto output.\n * @member {Array.} output\n * @memberof onnx.GraphProto\n * @instance\n */\n GraphProto.prototype.output = $util.emptyArray;\n\n /**\n * GraphProto valueInfo.\n * @member {Array.} valueInfo\n * @memberof onnx.GraphProto\n * @instance\n */\n GraphProto.prototype.valueInfo = $util.emptyArray;\n\n /**\n * GraphProto quantizationAnnotation.\n * @member {Array.} quantizationAnnotation\n * @memberof onnx.GraphProto\n * @instance\n */\n GraphProto.prototype.quantizationAnnotation = $util.emptyArray;\n\n /**\n * Creates a new GraphProto instance using the specified properties.\n * @function create\n * @memberof onnx.GraphProto\n * @static\n * @param {onnx.IGraphProto=} [properties] Properties to set\n * @returns {onnx.GraphProto} GraphProto instance\n */\n GraphProto.create = function create(properties) {\n return new GraphProto(properties);\n };\n\n /**\n * Encodes the specified GraphProto message. Does not implicitly {@link onnx.GraphProto.verify|verify} messages.\n * @function encode\n * @memberof onnx.GraphProto\n * @static\n * @param {onnx.IGraphProto} message GraphProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n GraphProto.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.node != null && message.node.length)\n for (var i = 0; i < message.node.length; ++i)\n $root.onnx.NodeProto.encode(message.node[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n if (message.name != null && message.hasOwnProperty(\"name\"))\n writer.uint32(/* id 2, wireType 2 =*/18).string(message.name);\n if (message.initializer != null && message.initializer.length)\n for (var i = 0; i < message.initializer.length; ++i)\n $root.onnx.TensorProto.encode(message.initializer[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();\n if (message.docString != null && message.hasOwnProperty(\"docString\"))\n writer.uint32(/* id 10, wireType 2 =*/82).string(message.docString);\n if (message.input != null && message.input.length)\n for (var i = 0; i < message.input.length; ++i)\n $root.onnx.ValueInfoProto.encode(message.input[i], writer.uint32(/* id 11, wireType 2 =*/90).fork()).ldelim();\n if (message.output != null && message.output.length)\n for (var i = 0; i < message.output.length; ++i)\n $root.onnx.ValueInfoProto.encode(message.output[i], writer.uint32(/* id 12, wireType 2 =*/98).fork()).ldelim();\n if (message.valueInfo != null && message.valueInfo.length)\n for (var i = 0; i < message.valueInfo.length; ++i)\n $root.onnx.ValueInfoProto.encode(message.valueInfo[i], writer.uint32(/* id 13, wireType 2 =*/106).fork()).ldelim();\n if (message.quantizationAnnotation != null && message.quantizationAnnotation.length)\n for (var i = 0; i < message.quantizationAnnotation.length; ++i)\n $root.onnx.TensorAnnotation.encode(message.quantizationAnnotation[i], writer.uint32(/* id 14, wireType 2 =*/114).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified GraphProto message, length delimited. Does not implicitly {@link onnx.GraphProto.verify|verify} messages.\n * @function encodeDelimited\n * @memberof onnx.GraphProto\n * @static\n * @param {onnx.IGraphProto} message GraphProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n GraphProto.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a GraphProto message from the specified reader or buffer.\n * @function decode\n * @memberof onnx.GraphProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {onnx.GraphProto} GraphProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n GraphProto.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.onnx.GraphProto();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (!(message.node && message.node.length))\n message.node = [];\n message.node.push($root.onnx.NodeProto.decode(reader, reader.uint32()));\n break;\n case 2:\n message.name = reader.string();\n break;\n case 5:\n if (!(message.initializer && message.initializer.length))\n message.initializer = [];\n message.initializer.push($root.onnx.TensorProto.decode(reader, reader.uint32()));\n break;\n case 10:\n message.docString = reader.string();\n break;\n case 11:\n if (!(message.input && message.input.length))\n message.input = [];\n message.input.push($root.onnx.ValueInfoProto.decode(reader, reader.uint32()));\n break;\n case 12:\n if (!(message.output && message.output.length))\n message.output = [];\n message.output.push($root.onnx.ValueInfoProto.decode(reader, reader.uint32()));\n break;\n case 13:\n if (!(message.valueInfo && message.valueInfo.length))\n message.valueInfo = [];\n message.valueInfo.push($root.onnx.ValueInfoProto.decode(reader, reader.uint32()));\n break;\n case 14:\n if (!(message.quantizationAnnotation && message.quantizationAnnotation.length))\n message.quantizationAnnotation = [];\n message.quantizationAnnotation.push($root.onnx.TensorAnnotation.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a GraphProto message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof onnx.GraphProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {onnx.GraphProto} GraphProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n GraphProto.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a GraphProto message.\n * @function verify\n * @memberof onnx.GraphProto\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n GraphProto.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.node != null && message.hasOwnProperty(\"node\")) {\n if (!Array.isArray(message.node))\n return \"node: array expected\";\n for (var i = 0; i < message.node.length; ++i) {\n var error = $root.onnx.NodeProto.verify(message.node[i]);\n if (error)\n return \"node.\" + error;\n }\n }\n if (message.name != null && message.hasOwnProperty(\"name\"))\n if (!$util.isString(message.name))\n return \"name: string expected\";\n if (message.initializer != null && message.hasOwnProperty(\"initializer\")) {\n if (!Array.isArray(message.initializer))\n return \"initializer: array expected\";\n for (var i = 0; i < message.initializer.length; ++i) {\n var error = $root.onnx.TensorProto.verify(message.initializer[i]);\n if (error)\n return \"initializer.\" + error;\n }\n }\n if (message.docString != null && message.hasOwnProperty(\"docString\"))\n if (!$util.isString(message.docString))\n return \"docString: string expected\";\n if (message.input != null && message.hasOwnProperty(\"input\")) {\n if (!Array.isArray(message.input))\n return \"input: array expected\";\n for (var i = 0; i < message.input.length; ++i) {\n var error = $root.onnx.ValueInfoProto.verify(message.input[i]);\n if (error)\n return \"input.\" + error;\n }\n }\n if (message.output != null && message.hasOwnProperty(\"output\")) {\n if (!Array.isArray(message.output))\n return \"output: array expected\";\n for (var i = 0; i < message.output.length; ++i) {\n var error = $root.onnx.ValueInfoProto.verify(message.output[i]);\n if (error)\n return \"output.\" + error;\n }\n }\n if (message.valueInfo != null && message.hasOwnProperty(\"valueInfo\")) {\n if (!Array.isArray(message.valueInfo))\n return \"valueInfo: array expected\";\n for (var i = 0; i < message.valueInfo.length; ++i) {\n var error = $root.onnx.ValueInfoProto.verify(message.valueInfo[i]);\n if (error)\n return \"valueInfo.\" + error;\n }\n }\n if (message.quantizationAnnotation != null && message.hasOwnProperty(\"quantizationAnnotation\")) {\n if (!Array.isArray(message.quantizationAnnotation))\n return \"quantizationAnnotation: array expected\";\n for (var i = 0; i < message.quantizationAnnotation.length; ++i) {\n var error = $root.onnx.TensorAnnotation.verify(message.quantizationAnnotation[i]);\n if (error)\n return \"quantizationAnnotation.\" + error;\n }\n }\n return null;\n };\n\n /**\n * Creates a GraphProto message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof onnx.GraphProto\n * @static\n * @param {Object.} object Plain object\n * @returns {onnx.GraphProto} GraphProto\n */\n GraphProto.fromObject = function fromObject(object) {\n if (object instanceof $root.onnx.GraphProto)\n return object;\n var message = new $root.onnx.GraphProto();\n if (object.node) {\n if (!Array.isArray(object.node))\n throw TypeError(\".onnx.GraphProto.node: array expected\");\n message.node = [];\n for (var i = 0; i < object.node.length; ++i) {\n if (typeof object.node[i] !== \"object\")\n throw TypeError(\".onnx.GraphProto.node: object expected\");\n message.node[i] = $root.onnx.NodeProto.fromObject(object.node[i]);\n }\n }\n if (object.name != null)\n message.name = String(object.name);\n if (object.initializer) {\n if (!Array.isArray(object.initializer))\n throw TypeError(\".onnx.GraphProto.initializer: array expected\");\n message.initializer = [];\n for (var i = 0; i < object.initializer.length; ++i) {\n if (typeof object.initializer[i] !== \"object\")\n throw TypeError(\".onnx.GraphProto.initializer: object expected\");\n message.initializer[i] = $root.onnx.TensorProto.fromObject(object.initializer[i]);\n }\n }\n if (object.docString != null)\n message.docString = String(object.docString);\n if (object.input) {\n if (!Array.isArray(object.input))\n throw TypeError(\".onnx.GraphProto.input: array expected\");\n message.input = [];\n for (var i = 0; i < object.input.length; ++i) {\n if (typeof object.input[i] !== \"object\")\n throw TypeError(\".onnx.GraphProto.input: object expected\");\n message.input[i] = $root.onnx.ValueInfoProto.fromObject(object.input[i]);\n }\n }\n if (object.output) {\n if (!Array.isArray(object.output))\n throw TypeError(\".onnx.GraphProto.output: array expected\");\n message.output = [];\n for (var i = 0; i < object.output.length; ++i) {\n if (typeof object.output[i] !== \"object\")\n throw TypeError(\".onnx.GraphProto.output: object expected\");\n message.output[i] = $root.onnx.ValueInfoProto.fromObject(object.output[i]);\n }\n }\n if (object.valueInfo) {\n if (!Array.isArray(object.valueInfo))\n throw TypeError(\".onnx.GraphProto.valueInfo: array expected\");\n message.valueInfo = [];\n for (var i = 0; i < object.valueInfo.length; ++i) {\n if (typeof object.valueInfo[i] !== \"object\")\n throw TypeError(\".onnx.GraphProto.valueInfo: object expected\");\n message.valueInfo[i] = $root.onnx.ValueInfoProto.fromObject(object.valueInfo[i]);\n }\n }\n if (object.quantizationAnnotation) {\n if (!Array.isArray(object.quantizationAnnotation))\n throw TypeError(\".onnx.GraphProto.quantizationAnnotation: array expected\");\n message.quantizationAnnotation = [];\n for (var i = 0; i < object.quantizationAnnotation.length; ++i) {\n if (typeof object.quantizationAnnotation[i] !== \"object\")\n throw TypeError(\".onnx.GraphProto.quantizationAnnotation: object expected\");\n message.quantizationAnnotation[i] = $root.onnx.TensorAnnotation.fromObject(object.quantizationAnnotation[i]);\n }\n }\n return message;\n };\n\n /**\n * Creates a plain object from a GraphProto message. Also converts values to other types if specified.\n * @function toObject\n * @memberof onnx.GraphProto\n * @static\n * @param {onnx.GraphProto} message GraphProto\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n GraphProto.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults) {\n object.node = [];\n object.initializer = [];\n object.input = [];\n object.output = [];\n object.valueInfo = [];\n object.quantizationAnnotation = [];\n }\n if (options.defaults) {\n object.name = \"\";\n object.docString = \"\";\n }\n if (message.node && message.node.length) {\n object.node = [];\n for (var j = 0; j < message.node.length; ++j)\n object.node[j] = $root.onnx.NodeProto.toObject(message.node[j], options);\n }\n if (message.name != null && message.hasOwnProperty(\"name\"))\n object.name = message.name;\n if (message.initializer && message.initializer.length) {\n object.initializer = [];\n for (var j = 0; j < message.initializer.length; ++j)\n object.initializer[j] = $root.onnx.TensorProto.toObject(message.initializer[j], options);\n }\n if (message.docString != null && message.hasOwnProperty(\"docString\"))\n object.docString = message.docString;\n if (message.input && message.input.length) {\n object.input = [];\n for (var j = 0; j < message.input.length; ++j)\n object.input[j] = $root.onnx.ValueInfoProto.toObject(message.input[j], options);\n }\n if (message.output && message.output.length) {\n object.output = [];\n for (var j = 0; j < message.output.length; ++j)\n object.output[j] = $root.onnx.ValueInfoProto.toObject(message.output[j], options);\n }\n if (message.valueInfo && message.valueInfo.length) {\n object.valueInfo = [];\n for (var j = 0; j < message.valueInfo.length; ++j)\n object.valueInfo[j] = $root.onnx.ValueInfoProto.toObject(message.valueInfo[j], options);\n }\n if (message.quantizationAnnotation && message.quantizationAnnotation.length) {\n object.quantizationAnnotation = [];\n for (var j = 0; j < message.quantizationAnnotation.length; ++j)\n object.quantizationAnnotation[j] = $root.onnx.TensorAnnotation.toObject(message.quantizationAnnotation[j], options);\n }\n return object;\n };\n\n /**\n * Converts this GraphProto to JSON.\n * @function toJSON\n * @memberof onnx.GraphProto\n * @instance\n * @returns {Object.} JSON object\n */\n GraphProto.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return GraphProto;\n })();\n\n onnx.TensorProto = (function() {\n\n /**\n * Properties of a TensorProto.\n * @memberof onnx\n * @interface ITensorProto\n * @property {Array.|null} [dims] TensorProto dims\n * @property {number|null} [dataType] TensorProto dataType\n * @property {onnx.TensorProto.ISegment|null} [segment] TensorProto segment\n * @property {Array.|null} [floatData] TensorProto floatData\n * @property {Array.|null} [int32Data] TensorProto int32Data\n * @property {Array.|null} [stringData] TensorProto stringData\n * @property {Array.|null} [int64Data] TensorProto int64Data\n * @property {string|null} [name] TensorProto name\n * @property {string|null} [docString] TensorProto docString\n * @property {Uint8Array|null} [rawData] TensorProto rawData\n * @property {Array.|null} [externalData] TensorProto externalData\n * @property {onnx.TensorProto.DataLocation|null} [dataLocation] TensorProto dataLocation\n * @property {Array.|null} [doubleData] TensorProto doubleData\n * @property {Array.|null} [uint64Data] TensorProto uint64Data\n */\n\n /**\n * Constructs a new TensorProto.\n * @memberof onnx\n * @classdesc Represents a TensorProto.\n * @implements ITensorProto\n * @constructor\n * @param {onnx.ITensorProto=} [properties] Properties to set\n */\n function TensorProto(properties) {\n this.dims = [];\n this.floatData = [];\n this.int32Data = [];\n this.stringData = [];\n this.int64Data = [];\n this.externalData = [];\n this.doubleData = [];\n this.uint64Data = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * TensorProto dims.\n * @member {Array.} dims\n * @memberof onnx.TensorProto\n * @instance\n */\n TensorProto.prototype.dims = $util.emptyArray;\n\n /**\n * TensorProto dataType.\n * @member {number} dataType\n * @memberof onnx.TensorProto\n * @instance\n */\n TensorProto.prototype.dataType = 0;\n\n /**\n * TensorProto segment.\n * @member {onnx.TensorProto.ISegment|null|undefined} segment\n * @memberof onnx.TensorProto\n * @instance\n */\n TensorProto.prototype.segment = null;\n\n /**\n * TensorProto floatData.\n * @member {Array.} floatData\n * @memberof onnx.TensorProto\n * @instance\n */\n TensorProto.prototype.floatData = $util.emptyArray;\n\n /**\n * TensorProto int32Data.\n * @member {Array.} int32Data\n * @memberof onnx.TensorProto\n * @instance\n */\n TensorProto.prototype.int32Data = $util.emptyArray;\n\n /**\n * TensorProto stringData.\n * @member {Array.} stringData\n * @memberof onnx.TensorProto\n * @instance\n */\n TensorProto.prototype.stringData = $util.emptyArray;\n\n /**\n * TensorProto int64Data.\n * @member {Array.} int64Data\n * @memberof onnx.TensorProto\n * @instance\n */\n TensorProto.prototype.int64Data = $util.emptyArray;\n\n /**\n * TensorProto name.\n * @member {string} name\n * @memberof onnx.TensorProto\n * @instance\n */\n TensorProto.prototype.name = \"\";\n\n /**\n * TensorProto docString.\n * @member {string} docString\n * @memberof onnx.TensorProto\n * @instance\n */\n TensorProto.prototype.docString = \"\";\n\n /**\n * TensorProto rawData.\n * @member {Uint8Array} rawData\n * @memberof onnx.TensorProto\n * @instance\n */\n TensorProto.prototype.rawData = $util.newBuffer([]);\n\n /**\n * TensorProto externalData.\n * @member {Array.} externalData\n * @memberof onnx.TensorProto\n * @instance\n */\n TensorProto.prototype.externalData = $util.emptyArray;\n\n /**\n * TensorProto dataLocation.\n * @member {onnx.TensorProto.DataLocation} dataLocation\n * @memberof onnx.TensorProto\n * @instance\n */\n TensorProto.prototype.dataLocation = 0;\n\n /**\n * TensorProto doubleData.\n * @member {Array.} doubleData\n * @memberof onnx.TensorProto\n * @instance\n */\n TensorProto.prototype.doubleData = $util.emptyArray;\n\n /**\n * TensorProto uint64Data.\n * @member {Array.} uint64Data\n * @memberof onnx.TensorProto\n * @instance\n */\n TensorProto.prototype.uint64Data = $util.emptyArray;\n\n /**\n * Creates a new TensorProto instance using the specified properties.\n * @function create\n * @memberof onnx.TensorProto\n * @static\n * @param {onnx.ITensorProto=} [properties] Properties to set\n * @returns {onnx.TensorProto} TensorProto instance\n */\n TensorProto.create = function create(properties) {\n return new TensorProto(properties);\n };\n\n /**\n * Encodes the specified TensorProto message. Does not implicitly {@link onnx.TensorProto.verify|verify} messages.\n * @function encode\n * @memberof onnx.TensorProto\n * @static\n * @param {onnx.ITensorProto} message TensorProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n TensorProto.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.dims != null && message.dims.length) {\n writer.uint32(/* id 1, wireType 2 =*/10).fork();\n for (var i = 0; i < message.dims.length; ++i)\n writer.int64(message.dims[i]);\n writer.ldelim();\n }\n if (message.dataType != null && message.hasOwnProperty(\"dataType\"))\n writer.uint32(/* id 2, wireType 0 =*/16).int32(message.dataType);\n if (message.segment != null && message.hasOwnProperty(\"segment\"))\n $root.onnx.TensorProto.Segment.encode(message.segment, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();\n if (message.floatData != null && message.floatData.length) {\n writer.uint32(/* id 4, wireType 2 =*/34).fork();\n for (var i = 0; i < message.floatData.length; ++i)\n writer.float(message.floatData[i]);\n writer.ldelim();\n }\n if (message.int32Data != null && message.int32Data.length) {\n writer.uint32(/* id 5, wireType 2 =*/42).fork();\n for (var i = 0; i < message.int32Data.length; ++i)\n writer.int32(message.int32Data[i]);\n writer.ldelim();\n }\n if (message.stringData != null && message.stringData.length)\n for (var i = 0; i < message.stringData.length; ++i)\n writer.uint32(/* id 6, wireType 2 =*/50).bytes(message.stringData[i]);\n if (message.int64Data != null && message.int64Data.length) {\n writer.uint32(/* id 7, wireType 2 =*/58).fork();\n for (var i = 0; i < message.int64Data.length; ++i)\n writer.int64(message.int64Data[i]);\n writer.ldelim();\n }\n if (message.name != null && message.hasOwnProperty(\"name\"))\n writer.uint32(/* id 8, wireType 2 =*/66).string(message.name);\n if (message.rawData != null && message.hasOwnProperty(\"rawData\"))\n writer.uint32(/* id 9, wireType 2 =*/74).bytes(message.rawData);\n if (message.doubleData != null && message.doubleData.length) {\n writer.uint32(/* id 10, wireType 2 =*/82).fork();\n for (var i = 0; i < message.doubleData.length; ++i)\n writer.double(message.doubleData[i]);\n writer.ldelim();\n }\n if (message.uint64Data != null && message.uint64Data.length) {\n writer.uint32(/* id 11, wireType 2 =*/90).fork();\n for (var i = 0; i < message.uint64Data.length; ++i)\n writer.uint64(message.uint64Data[i]);\n writer.ldelim();\n }\n if (message.docString != null && message.hasOwnProperty(\"docString\"))\n writer.uint32(/* id 12, wireType 2 =*/98).string(message.docString);\n if (message.externalData != null && message.externalData.length)\n for (var i = 0; i < message.externalData.length; ++i)\n $root.onnx.StringStringEntryProto.encode(message.externalData[i], writer.uint32(/* id 13, wireType 2 =*/106).fork()).ldelim();\n if (message.dataLocation != null && message.hasOwnProperty(\"dataLocation\"))\n writer.uint32(/* id 14, wireType 0 =*/112).int32(message.dataLocation);\n return writer;\n };\n\n /**\n * Encodes the specified TensorProto message, length delimited. Does not implicitly {@link onnx.TensorProto.verify|verify} messages.\n * @function encodeDelimited\n * @memberof onnx.TensorProto\n * @static\n * @param {onnx.ITensorProto} message TensorProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n TensorProto.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a TensorProto message from the specified reader or buffer.\n * @function decode\n * @memberof onnx.TensorProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {onnx.TensorProto} TensorProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n TensorProto.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.onnx.TensorProto();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (!(message.dims && message.dims.length))\n message.dims = [];\n if ((tag & 7) === 2) {\n var end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2)\n message.dims.push(reader.int64());\n } else\n message.dims.push(reader.int64());\n break;\n case 2:\n message.dataType = reader.int32();\n break;\n case 3:\n message.segment = $root.onnx.TensorProto.Segment.decode(reader, reader.uint32());\n break;\n case 4:\n if (!(message.floatData && message.floatData.length))\n message.floatData = [];\n if ((tag & 7) === 2) {\n var end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2)\n message.floatData.push(reader.float());\n } else\n message.floatData.push(reader.float());\n break;\n case 5:\n if (!(message.int32Data && message.int32Data.length))\n message.int32Data = [];\n if ((tag & 7) === 2) {\n var end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2)\n message.int32Data.push(reader.int32());\n } else\n message.int32Data.push(reader.int32());\n break;\n case 6:\n if (!(message.stringData && message.stringData.length))\n message.stringData = [];\n message.stringData.push(reader.bytes());\n break;\n case 7:\n if (!(message.int64Data && message.int64Data.length))\n message.int64Data = [];\n if ((tag & 7) === 2) {\n var end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2)\n message.int64Data.push(reader.int64());\n } else\n message.int64Data.push(reader.int64());\n break;\n case 8:\n message.name = reader.string();\n break;\n case 12:\n message.docString = reader.string();\n break;\n case 9:\n message.rawData = reader.bytes();\n break;\n case 13:\n if (!(message.externalData && message.externalData.length))\n message.externalData = [];\n message.externalData.push($root.onnx.StringStringEntryProto.decode(reader, reader.uint32()));\n break;\n case 14:\n message.dataLocation = reader.int32();\n break;\n case 10:\n if (!(message.doubleData && message.doubleData.length))\n message.doubleData = [];\n if ((tag & 7) === 2) {\n var end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2)\n message.doubleData.push(reader.double());\n } else\n message.doubleData.push(reader.double());\n break;\n case 11:\n if (!(message.uint64Data && message.uint64Data.length))\n message.uint64Data = [];\n if ((tag & 7) === 2) {\n var end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2)\n message.uint64Data.push(reader.uint64());\n } else\n message.uint64Data.push(reader.uint64());\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a TensorProto message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof onnx.TensorProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {onnx.TensorProto} TensorProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n TensorProto.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a TensorProto message.\n * @function verify\n * @memberof onnx.TensorProto\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n TensorProto.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.dims != null && message.hasOwnProperty(\"dims\")) {\n if (!Array.isArray(message.dims))\n return \"dims: array expected\";\n for (var i = 0; i < message.dims.length; ++i)\n if (!$util.isInteger(message.dims[i]) && !(message.dims[i] && $util.isInteger(message.dims[i].low) && $util.isInteger(message.dims[i].high)))\n return \"dims: integer|Long[] expected\";\n }\n if (message.dataType != null && message.hasOwnProperty(\"dataType\"))\n if (!$util.isInteger(message.dataType))\n return \"dataType: integer expected\";\n if (message.segment != null && message.hasOwnProperty(\"segment\")) {\n var error = $root.onnx.TensorProto.Segment.verify(message.segment);\n if (error)\n return \"segment.\" + error;\n }\n if (message.floatData != null && message.hasOwnProperty(\"floatData\")) {\n if (!Array.isArray(message.floatData))\n return \"floatData: array expected\";\n for (var i = 0; i < message.floatData.length; ++i)\n if (typeof message.floatData[i] !== \"number\")\n return \"floatData: number[] expected\";\n }\n if (message.int32Data != null && message.hasOwnProperty(\"int32Data\")) {\n if (!Array.isArray(message.int32Data))\n return \"int32Data: array expected\";\n for (var i = 0; i < message.int32Data.length; ++i)\n if (!$util.isInteger(message.int32Data[i]))\n return \"int32Data: integer[] expected\";\n }\n if (message.stringData != null && message.hasOwnProperty(\"stringData\")) {\n if (!Array.isArray(message.stringData))\n return \"stringData: array expected\";\n for (var i = 0; i < message.stringData.length; ++i)\n if (!(message.stringData[i] && typeof message.stringData[i].length === \"number\" || $util.isString(message.stringData[i])))\n return \"stringData: buffer[] expected\";\n }\n if (message.int64Data != null && message.hasOwnProperty(\"int64Data\")) {\n if (!Array.isArray(message.int64Data))\n return \"int64Data: array expected\";\n for (var i = 0; i < message.int64Data.length; ++i)\n if (!$util.isInteger(message.int64Data[i]) && !(message.int64Data[i] && $util.isInteger(message.int64Data[i].low) && $util.isInteger(message.int64Data[i].high)))\n return \"int64Data: integer|Long[] expected\";\n }\n if (message.name != null && message.hasOwnProperty(\"name\"))\n if (!$util.isString(message.name))\n return \"name: string expected\";\n if (message.docString != null && message.hasOwnProperty(\"docString\"))\n if (!$util.isString(message.docString))\n return \"docString: string expected\";\n if (message.rawData != null && message.hasOwnProperty(\"rawData\"))\n if (!(message.rawData && typeof message.rawData.length === \"number\" || $util.isString(message.rawData)))\n return \"rawData: buffer expected\";\n if (message.externalData != null && message.hasOwnProperty(\"externalData\")) {\n if (!Array.isArray(message.externalData))\n return \"externalData: array expected\";\n for (var i = 0; i < message.externalData.length; ++i) {\n var error = $root.onnx.StringStringEntryProto.verify(message.externalData[i]);\n if (error)\n return \"externalData.\" + error;\n }\n }\n if (message.dataLocation != null && message.hasOwnProperty(\"dataLocation\"))\n switch (message.dataLocation) {\n default:\n return \"dataLocation: enum value expected\";\n case 0:\n case 1:\n break;\n }\n if (message.doubleData != null && message.hasOwnProperty(\"doubleData\")) {\n if (!Array.isArray(message.doubleData))\n return \"doubleData: array expected\";\n for (var i = 0; i < message.doubleData.length; ++i)\n if (typeof message.doubleData[i] !== \"number\")\n return \"doubleData: number[] expected\";\n }\n if (message.uint64Data != null && message.hasOwnProperty(\"uint64Data\")) {\n if (!Array.isArray(message.uint64Data))\n return \"uint64Data: array expected\";\n for (var i = 0; i < message.uint64Data.length; ++i)\n if (!$util.isInteger(message.uint64Data[i]) && !(message.uint64Data[i] && $util.isInteger(message.uint64Data[i].low) && $util.isInteger(message.uint64Data[i].high)))\n return \"uint64Data: integer|Long[] expected\";\n }\n return null;\n };\n\n /**\n * Creates a TensorProto message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof onnx.TensorProto\n * @static\n * @param {Object.} object Plain object\n * @returns {onnx.TensorProto} TensorProto\n */\n TensorProto.fromObject = function fromObject(object) {\n if (object instanceof $root.onnx.TensorProto)\n return object;\n var message = new $root.onnx.TensorProto();\n if (object.dims) {\n if (!Array.isArray(object.dims))\n throw TypeError(\".onnx.TensorProto.dims: array expected\");\n message.dims = [];\n for (var i = 0; i < object.dims.length; ++i)\n if ($util.Long)\n (message.dims[i] = $util.Long.fromValue(object.dims[i])).unsigned = false;\n else if (typeof object.dims[i] === \"string\")\n message.dims[i] = parseInt(object.dims[i], 10);\n else if (typeof object.dims[i] === \"number\")\n message.dims[i] = object.dims[i];\n else if (typeof object.dims[i] === \"object\")\n message.dims[i] = new $util.LongBits(object.dims[i].low >>> 0, object.dims[i].high >>> 0).toNumber();\n }\n if (object.dataType != null)\n message.dataType = object.dataType | 0;\n if (object.segment != null) {\n if (typeof object.segment !== \"object\")\n throw TypeError(\".onnx.TensorProto.segment: object expected\");\n message.segment = $root.onnx.TensorProto.Segment.fromObject(object.segment);\n }\n if (object.floatData) {\n if (!Array.isArray(object.floatData))\n throw TypeError(\".onnx.TensorProto.floatData: array expected\");\n message.floatData = [];\n for (var i = 0; i < object.floatData.length; ++i)\n message.floatData[i] = Number(object.floatData[i]);\n }\n if (object.int32Data) {\n if (!Array.isArray(object.int32Data))\n throw TypeError(\".onnx.TensorProto.int32Data: array expected\");\n message.int32Data = [];\n for (var i = 0; i < object.int32Data.length; ++i)\n message.int32Data[i] = object.int32Data[i] | 0;\n }\n if (object.stringData) {\n if (!Array.isArray(object.stringData))\n throw TypeError(\".onnx.TensorProto.stringData: array expected\");\n message.stringData = [];\n for (var i = 0; i < object.stringData.length; ++i)\n if (typeof object.stringData[i] === \"string\")\n $util.base64.decode(object.stringData[i], message.stringData[i] = $util.newBuffer($util.base64.length(object.stringData[i])), 0);\n else if (object.stringData[i].length)\n message.stringData[i] = object.stringData[i];\n }\n if (object.int64Data) {\n if (!Array.isArray(object.int64Data))\n throw TypeError(\".onnx.TensorProto.int64Data: array expected\");\n message.int64Data = [];\n for (var i = 0; i < object.int64Data.length; ++i)\n if ($util.Long)\n (message.int64Data[i] = $util.Long.fromValue(object.int64Data[i])).unsigned = false;\n else if (typeof object.int64Data[i] === \"string\")\n message.int64Data[i] = parseInt(object.int64Data[i], 10);\n else if (typeof object.int64Data[i] === \"number\")\n message.int64Data[i] = object.int64Data[i];\n else if (typeof object.int64Data[i] === \"object\")\n message.int64Data[i] = new $util.LongBits(object.int64Data[i].low >>> 0, object.int64Data[i].high >>> 0).toNumber();\n }\n if (object.name != null)\n message.name = String(object.name);\n if (object.docString != null)\n message.docString = String(object.docString);\n if (object.rawData != null)\n if (typeof object.rawData === \"string\")\n $util.base64.decode(object.rawData, message.rawData = $util.newBuffer($util.base64.length(object.rawData)), 0);\n else if (object.rawData.length)\n message.rawData = object.rawData;\n if (object.externalData) {\n if (!Array.isArray(object.externalData))\n throw TypeError(\".onnx.TensorProto.externalData: array expected\");\n message.externalData = [];\n for (var i = 0; i < object.externalData.length; ++i) {\n if (typeof object.externalData[i] !== \"object\")\n throw TypeError(\".onnx.TensorProto.externalData: object expected\");\n message.externalData[i] = $root.onnx.StringStringEntryProto.fromObject(object.externalData[i]);\n }\n }\n switch (object.dataLocation) {\n case \"DEFAULT\":\n case 0:\n message.dataLocation = 0;\n break;\n case \"EXTERNAL\":\n case 1:\n message.dataLocation = 1;\n break;\n }\n if (object.doubleData) {\n if (!Array.isArray(object.doubleData))\n throw TypeError(\".onnx.TensorProto.doubleData: array expected\");\n message.doubleData = [];\n for (var i = 0; i < object.doubleData.length; ++i)\n message.doubleData[i] = Number(object.doubleData[i]);\n }\n if (object.uint64Data) {\n if (!Array.isArray(object.uint64Data))\n throw TypeError(\".onnx.TensorProto.uint64Data: array expected\");\n message.uint64Data = [];\n for (var i = 0; i < object.uint64Data.length; ++i)\n if ($util.Long)\n (message.uint64Data[i] = $util.Long.fromValue(object.uint64Data[i])).unsigned = true;\n else if (typeof object.uint64Data[i] === \"string\")\n message.uint64Data[i] = parseInt(object.uint64Data[i], 10);\n else if (typeof object.uint64Data[i] === \"number\")\n message.uint64Data[i] = object.uint64Data[i];\n else if (typeof object.uint64Data[i] === \"object\")\n message.uint64Data[i] = new $util.LongBits(object.uint64Data[i].low >>> 0, object.uint64Data[i].high >>> 0).toNumber(true);\n }\n return message;\n };\n\n /**\n * Creates a plain object from a TensorProto message. Also converts values to other types if specified.\n * @function toObject\n * @memberof onnx.TensorProto\n * @static\n * @param {onnx.TensorProto} message TensorProto\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n TensorProto.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults) {\n object.dims = [];\n object.floatData = [];\n object.int32Data = [];\n object.stringData = [];\n object.int64Data = [];\n object.doubleData = [];\n object.uint64Data = [];\n object.externalData = [];\n }\n if (options.defaults) {\n object.dataType = 0;\n object.segment = null;\n object.name = \"\";\n if (options.bytes === String)\n object.rawData = \"\";\n else {\n object.rawData = [];\n if (options.bytes !== Array)\n object.rawData = $util.newBuffer(object.rawData);\n }\n object.docString = \"\";\n object.dataLocation = options.enums === String ? \"DEFAULT\" : 0;\n }\n if (message.dims && message.dims.length) {\n object.dims = [];\n for (var j = 0; j < message.dims.length; ++j)\n if (typeof message.dims[j] === \"number\")\n object.dims[j] = options.longs === String ? String(message.dims[j]) : message.dims[j];\n else\n object.dims[j] = options.longs === String ? $util.Long.prototype.toString.call(message.dims[j]) : options.longs === Number ? new $util.LongBits(message.dims[j].low >>> 0, message.dims[j].high >>> 0).toNumber() : message.dims[j];\n }\n if (message.dataType != null && message.hasOwnProperty(\"dataType\"))\n object.dataType = message.dataType;\n if (message.segment != null && message.hasOwnProperty(\"segment\"))\n object.segment = $root.onnx.TensorProto.Segment.toObject(message.segment, options);\n if (message.floatData && message.floatData.length) {\n object.floatData = [];\n for (var j = 0; j < message.floatData.length; ++j)\n object.floatData[j] = options.json && !isFinite(message.floatData[j]) ? String(message.floatData[j]) : message.floatData[j];\n }\n if (message.int32Data && message.int32Data.length) {\n object.int32Data = [];\n for (var j = 0; j < message.int32Data.length; ++j)\n object.int32Data[j] = message.int32Data[j];\n }\n if (message.stringData && message.stringData.length) {\n object.stringData = [];\n for (var j = 0; j < message.stringData.length; ++j)\n object.stringData[j] = options.bytes === String ? $util.base64.encode(message.stringData[j], 0, message.stringData[j].length) : options.bytes === Array ? Array.prototype.slice.call(message.stringData[j]) : message.stringData[j];\n }\n if (message.int64Data && message.int64Data.length) {\n object.int64Data = [];\n for (var j = 0; j < message.int64Data.length; ++j)\n if (typeof message.int64Data[j] === \"number\")\n object.int64Data[j] = options.longs === String ? String(message.int64Data[j]) : message.int64Data[j];\n else\n object.int64Data[j] = options.longs === String ? $util.Long.prototype.toString.call(message.int64Data[j]) : options.longs === Number ? new $util.LongBits(message.int64Data[j].low >>> 0, message.int64Data[j].high >>> 0).toNumber() : message.int64Data[j];\n }\n if (message.name != null && message.hasOwnProperty(\"name\"))\n object.name = message.name;\n if (message.rawData != null && message.hasOwnProperty(\"rawData\"))\n object.rawData = options.bytes === String ? $util.base64.encode(message.rawData, 0, message.rawData.length) : options.bytes === Array ? Array.prototype.slice.call(message.rawData) : message.rawData;\n if (message.doubleData && message.doubleData.length) {\n object.doubleData = [];\n for (var j = 0; j < message.doubleData.length; ++j)\n object.doubleData[j] = options.json && !isFinite(message.doubleData[j]) ? String(message.doubleData[j]) : message.doubleData[j];\n }\n if (message.uint64Data && message.uint64Data.length) {\n object.uint64Data = [];\n for (var j = 0; j < message.uint64Data.length; ++j)\n if (typeof message.uint64Data[j] === \"number\")\n object.uint64Data[j] = options.longs === String ? String(message.uint64Data[j]) : message.uint64Data[j];\n else\n object.uint64Data[j] = options.longs === String ? $util.Long.prototype.toString.call(message.uint64Data[j]) : options.longs === Number ? new $util.LongBits(message.uint64Data[j].low >>> 0, message.uint64Data[j].high >>> 0).toNumber(true) : message.uint64Data[j];\n }\n if (message.docString != null && message.hasOwnProperty(\"docString\"))\n object.docString = message.docString;\n if (message.externalData && message.externalData.length) {\n object.externalData = [];\n for (var j = 0; j < message.externalData.length; ++j)\n object.externalData[j] = $root.onnx.StringStringEntryProto.toObject(message.externalData[j], options);\n }\n if (message.dataLocation != null && message.hasOwnProperty(\"dataLocation\"))\n object.dataLocation = options.enums === String ? $root.onnx.TensorProto.DataLocation[message.dataLocation] : message.dataLocation;\n return object;\n };\n\n /**\n * Converts this TensorProto to JSON.\n * @function toJSON\n * @memberof onnx.TensorProto\n * @instance\n * @returns {Object.} JSON object\n */\n TensorProto.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * DataType enum.\n * @name onnx.TensorProto.DataType\n * @enum {string}\n * @property {number} UNDEFINED=0 UNDEFINED value\n * @property {number} FLOAT=1 FLOAT value\n * @property {number} UINT8=2 UINT8 value\n * @property {number} INT8=3 INT8 value\n * @property {number} UINT16=4 UINT16 value\n * @property {number} INT16=5 INT16 value\n * @property {number} INT32=6 INT32 value\n * @property {number} INT64=7 INT64 value\n * @property {number} STRING=8 STRING value\n * @property {number} BOOL=9 BOOL value\n * @property {number} FLOAT16=10 FLOAT16 value\n * @property {number} DOUBLE=11 DOUBLE value\n * @property {number} UINT32=12 UINT32 value\n * @property {number} UINT64=13 UINT64 value\n * @property {number} COMPLEX64=14 COMPLEX64 value\n * @property {number} COMPLEX128=15 COMPLEX128 value\n * @property {number} BFLOAT16=16 BFLOAT16 value\n */\n TensorProto.DataType = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[0] = \"UNDEFINED\"] = 0;\n values[valuesById[1] = \"FLOAT\"] = 1;\n values[valuesById[2] = \"UINT8\"] = 2;\n values[valuesById[3] = \"INT8\"] = 3;\n values[valuesById[4] = \"UINT16\"] = 4;\n values[valuesById[5] = \"INT16\"] = 5;\n values[valuesById[6] = \"INT32\"] = 6;\n values[valuesById[7] = \"INT64\"] = 7;\n values[valuesById[8] = \"STRING\"] = 8;\n values[valuesById[9] = \"BOOL\"] = 9;\n values[valuesById[10] = \"FLOAT16\"] = 10;\n values[valuesById[11] = \"DOUBLE\"] = 11;\n values[valuesById[12] = \"UINT32\"] = 12;\n values[valuesById[13] = \"UINT64\"] = 13;\n values[valuesById[14] = \"COMPLEX64\"] = 14;\n values[valuesById[15] = \"COMPLEX128\"] = 15;\n values[valuesById[16] = \"BFLOAT16\"] = 16;\n return values;\n })();\n\n TensorProto.Segment = (function() {\n\n /**\n * Properties of a Segment.\n * @memberof onnx.TensorProto\n * @interface ISegment\n * @property {number|Long|null} [begin] Segment begin\n * @property {number|Long|null} [end] Segment end\n */\n\n /**\n * Constructs a new Segment.\n * @memberof onnx.TensorProto\n * @classdesc Represents a Segment.\n * @implements ISegment\n * @constructor\n * @param {onnx.TensorProto.ISegment=} [properties] Properties to set\n */\n function Segment(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * Segment begin.\n * @member {number|Long} begin\n * @memberof onnx.TensorProto.Segment\n * @instance\n */\n Segment.prototype.begin = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n /**\n * Segment end.\n * @member {number|Long} end\n * @memberof onnx.TensorProto.Segment\n * @instance\n */\n Segment.prototype.end = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n /**\n * Creates a new Segment instance using the specified properties.\n * @function create\n * @memberof onnx.TensorProto.Segment\n * @static\n * @param {onnx.TensorProto.ISegment=} [properties] Properties to set\n * @returns {onnx.TensorProto.Segment} Segment instance\n */\n Segment.create = function create(properties) {\n return new Segment(properties);\n };\n\n /**\n * Encodes the specified Segment message. Does not implicitly {@link onnx.TensorProto.Segment.verify|verify} messages.\n * @function encode\n * @memberof onnx.TensorProto.Segment\n * @static\n * @param {onnx.TensorProto.ISegment} message Segment message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Segment.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.begin != null && message.hasOwnProperty(\"begin\"))\n writer.uint32(/* id 1, wireType 0 =*/8).int64(message.begin);\n if (message.end != null && message.hasOwnProperty(\"end\"))\n writer.uint32(/* id 2, wireType 0 =*/16).int64(message.end);\n return writer;\n };\n\n /**\n * Encodes the specified Segment message, length delimited. Does not implicitly {@link onnx.TensorProto.Segment.verify|verify} messages.\n * @function encodeDelimited\n * @memberof onnx.TensorProto.Segment\n * @static\n * @param {onnx.TensorProto.ISegment} message Segment message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Segment.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a Segment message from the specified reader or buffer.\n * @function decode\n * @memberof onnx.TensorProto.Segment\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {onnx.TensorProto.Segment} Segment\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Segment.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.onnx.TensorProto.Segment();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.begin = reader.int64();\n break;\n case 2:\n message.end = reader.int64();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a Segment message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof onnx.TensorProto.Segment\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {onnx.TensorProto.Segment} Segment\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Segment.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a Segment message.\n * @function verify\n * @memberof onnx.TensorProto.Segment\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n Segment.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.begin != null && message.hasOwnProperty(\"begin\"))\n if (!$util.isInteger(message.begin) && !(message.begin && $util.isInteger(message.begin.low) && $util.isInteger(message.begin.high)))\n return \"begin: integer|Long expected\";\n if (message.end != null && message.hasOwnProperty(\"end\"))\n if (!$util.isInteger(message.end) && !(message.end && $util.isInteger(message.end.low) && $util.isInteger(message.end.high)))\n return \"end: integer|Long expected\";\n return null;\n };\n\n /**\n * Creates a Segment message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof onnx.TensorProto.Segment\n * @static\n * @param {Object.} object Plain object\n * @returns {onnx.TensorProto.Segment} Segment\n */\n Segment.fromObject = function fromObject(object) {\n if (object instanceof $root.onnx.TensorProto.Segment)\n return object;\n var message = new $root.onnx.TensorProto.Segment();\n if (object.begin != null)\n if ($util.Long)\n (message.begin = $util.Long.fromValue(object.begin)).unsigned = false;\n else if (typeof object.begin === \"string\")\n message.begin = parseInt(object.begin, 10);\n else if (typeof object.begin === \"number\")\n message.begin = object.begin;\n else if (typeof object.begin === \"object\")\n message.begin = new $util.LongBits(object.begin.low >>> 0, object.begin.high >>> 0).toNumber();\n if (object.end != null)\n if ($util.Long)\n (message.end = $util.Long.fromValue(object.end)).unsigned = false;\n else if (typeof object.end === \"string\")\n message.end = parseInt(object.end, 10);\n else if (typeof object.end === \"number\")\n message.end = object.end;\n else if (typeof object.end === \"object\")\n message.end = new $util.LongBits(object.end.low >>> 0, object.end.high >>> 0).toNumber();\n return message;\n };\n\n /**\n * Creates a plain object from a Segment message. Also converts values to other types if specified.\n * @function toObject\n * @memberof onnx.TensorProto.Segment\n * @static\n * @param {onnx.TensorProto.Segment} message Segment\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n Segment.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n if ($util.Long) {\n var long = new $util.Long(0, 0, false);\n object.begin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n } else\n object.begin = options.longs === String ? \"0\" : 0;\n if ($util.Long) {\n var long = new $util.Long(0, 0, false);\n object.end = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n } else\n object.end = options.longs === String ? \"0\" : 0;\n }\n if (message.begin != null && message.hasOwnProperty(\"begin\"))\n if (typeof message.begin === \"number\")\n object.begin = options.longs === String ? String(message.begin) : message.begin;\n else\n object.begin = options.longs === String ? $util.Long.prototype.toString.call(message.begin) : options.longs === Number ? new $util.LongBits(message.begin.low >>> 0, message.begin.high >>> 0).toNumber() : message.begin;\n if (message.end != null && message.hasOwnProperty(\"end\"))\n if (typeof message.end === \"number\")\n object.end = options.longs === String ? String(message.end) : message.end;\n else\n object.end = options.longs === String ? $util.Long.prototype.toString.call(message.end) : options.longs === Number ? new $util.LongBits(message.end.low >>> 0, message.end.high >>> 0).toNumber() : message.end;\n return object;\n };\n\n /**\n * Converts this Segment to JSON.\n * @function toJSON\n * @memberof onnx.TensorProto.Segment\n * @instance\n * @returns {Object.} JSON object\n */\n Segment.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return Segment;\n })();\n\n /**\n * DataLocation enum.\n * @name onnx.TensorProto.DataLocation\n * @enum {string}\n * @property {number} DEFAULT=0 DEFAULT value\n * @property {number} EXTERNAL=1 EXTERNAL value\n */\n TensorProto.DataLocation = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[0] = \"DEFAULT\"] = 0;\n values[valuesById[1] = \"EXTERNAL\"] = 1;\n return values;\n })();\n\n return TensorProto;\n })();\n\n onnx.TensorShapeProto = (function() {\n\n /**\n * Properties of a TensorShapeProto.\n * @memberof onnx\n * @interface ITensorShapeProto\n * @property {Array.|null} [dim] TensorShapeProto dim\n */\n\n /**\n * Constructs a new TensorShapeProto.\n * @memberof onnx\n * @classdesc Represents a TensorShapeProto.\n * @implements ITensorShapeProto\n * @constructor\n * @param {onnx.ITensorShapeProto=} [properties] Properties to set\n */\n function TensorShapeProto(properties) {\n this.dim = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * TensorShapeProto dim.\n * @member {Array.} dim\n * @memberof onnx.TensorShapeProto\n * @instance\n */\n TensorShapeProto.prototype.dim = $util.emptyArray;\n\n /**\n * Creates a new TensorShapeProto instance using the specified properties.\n * @function create\n * @memberof onnx.TensorShapeProto\n * @static\n * @param {onnx.ITensorShapeProto=} [properties] Properties to set\n * @returns {onnx.TensorShapeProto} TensorShapeProto instance\n */\n TensorShapeProto.create = function create(properties) {\n return new TensorShapeProto(properties);\n };\n\n /**\n * Encodes the specified TensorShapeProto message. Does not implicitly {@link onnx.TensorShapeProto.verify|verify} messages.\n * @function encode\n * @memberof onnx.TensorShapeProto\n * @static\n * @param {onnx.ITensorShapeProto} message TensorShapeProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n TensorShapeProto.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.dim != null && message.dim.length)\n for (var i = 0; i < message.dim.length; ++i)\n $root.onnx.TensorShapeProto.Dimension.encode(message.dim[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified TensorShapeProto message, length delimited. Does not implicitly {@link onnx.TensorShapeProto.verify|verify} messages.\n * @function encodeDelimited\n * @memberof onnx.TensorShapeProto\n * @static\n * @param {onnx.ITensorShapeProto} message TensorShapeProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n TensorShapeProto.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a TensorShapeProto message from the specified reader or buffer.\n * @function decode\n * @memberof onnx.TensorShapeProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {onnx.TensorShapeProto} TensorShapeProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n TensorShapeProto.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.onnx.TensorShapeProto();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (!(message.dim && message.dim.length))\n message.dim = [];\n message.dim.push($root.onnx.TensorShapeProto.Dimension.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a TensorShapeProto message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof onnx.TensorShapeProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {onnx.TensorShapeProto} TensorShapeProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n TensorShapeProto.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a TensorShapeProto message.\n * @function verify\n * @memberof onnx.TensorShapeProto\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n TensorShapeProto.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.dim != null && message.hasOwnProperty(\"dim\")) {\n if (!Array.isArray(message.dim))\n return \"dim: array expected\";\n for (var i = 0; i < message.dim.length; ++i) {\n var error = $root.onnx.TensorShapeProto.Dimension.verify(message.dim[i]);\n if (error)\n return \"dim.\" + error;\n }\n }\n return null;\n };\n\n /**\n * Creates a TensorShapeProto message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof onnx.TensorShapeProto\n * @static\n * @param {Object.} object Plain object\n * @returns {onnx.TensorShapeProto} TensorShapeProto\n */\n TensorShapeProto.fromObject = function fromObject(object) {\n if (object instanceof $root.onnx.TensorShapeProto)\n return object;\n var message = new $root.onnx.TensorShapeProto();\n if (object.dim) {\n if (!Array.isArray(object.dim))\n throw TypeError(\".onnx.TensorShapeProto.dim: array expected\");\n message.dim = [];\n for (var i = 0; i < object.dim.length; ++i) {\n if (typeof object.dim[i] !== \"object\")\n throw TypeError(\".onnx.TensorShapeProto.dim: object expected\");\n message.dim[i] = $root.onnx.TensorShapeProto.Dimension.fromObject(object.dim[i]);\n }\n }\n return message;\n };\n\n /**\n * Creates a plain object from a TensorShapeProto message. Also converts values to other types if specified.\n * @function toObject\n * @memberof onnx.TensorShapeProto\n * @static\n * @param {onnx.TensorShapeProto} message TensorShapeProto\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n TensorShapeProto.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults)\n object.dim = [];\n if (message.dim && message.dim.length) {\n object.dim = [];\n for (var j = 0; j < message.dim.length; ++j)\n object.dim[j] = $root.onnx.TensorShapeProto.Dimension.toObject(message.dim[j], options);\n }\n return object;\n };\n\n /**\n * Converts this TensorShapeProto to JSON.\n * @function toJSON\n * @memberof onnx.TensorShapeProto\n * @instance\n * @returns {Object.} JSON object\n */\n TensorShapeProto.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n TensorShapeProto.Dimension = (function() {\n\n /**\n * Properties of a Dimension.\n * @memberof onnx.TensorShapeProto\n * @interface IDimension\n * @property {number|Long|null} [dimValue] Dimension dimValue\n * @property {string|null} [dimParam] Dimension dimParam\n * @property {string|null} [denotation] Dimension denotation\n */\n\n /**\n * Constructs a new Dimension.\n * @memberof onnx.TensorShapeProto\n * @classdesc Represents a Dimension.\n * @implements IDimension\n * @constructor\n * @param {onnx.TensorShapeProto.IDimension=} [properties] Properties to set\n */\n function Dimension(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * Dimension dimValue.\n * @member {number|Long} dimValue\n * @memberof onnx.TensorShapeProto.Dimension\n * @instance\n */\n Dimension.prototype.dimValue = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n /**\n * Dimension dimParam.\n * @member {string} dimParam\n * @memberof onnx.TensorShapeProto.Dimension\n * @instance\n */\n Dimension.prototype.dimParam = \"\";\n\n /**\n * Dimension denotation.\n * @member {string} denotation\n * @memberof onnx.TensorShapeProto.Dimension\n * @instance\n */\n Dimension.prototype.denotation = \"\";\n\n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n\n /**\n * Dimension value.\n * @member {\"dimValue\"|\"dimParam\"|undefined} value\n * @memberof onnx.TensorShapeProto.Dimension\n * @instance\n */\n Object.defineProperty(Dimension.prototype, \"value\", {\n get: $util.oneOfGetter($oneOfFields = [\"dimValue\", \"dimParam\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Creates a new Dimension instance using the specified properties.\n * @function create\n * @memberof onnx.TensorShapeProto.Dimension\n * @static\n * @param {onnx.TensorShapeProto.IDimension=} [properties] Properties to set\n * @returns {onnx.TensorShapeProto.Dimension} Dimension instance\n */\n Dimension.create = function create(properties) {\n return new Dimension(properties);\n };\n\n /**\n * Encodes the specified Dimension message. Does not implicitly {@link onnx.TensorShapeProto.Dimension.verify|verify} messages.\n * @function encode\n * @memberof onnx.TensorShapeProto.Dimension\n * @static\n * @param {onnx.TensorShapeProto.IDimension} message Dimension message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Dimension.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.dimValue != null && message.hasOwnProperty(\"dimValue\"))\n writer.uint32(/* id 1, wireType 0 =*/8).int64(message.dimValue);\n if (message.dimParam != null && message.hasOwnProperty(\"dimParam\"))\n writer.uint32(/* id 2, wireType 2 =*/18).string(message.dimParam);\n if (message.denotation != null && message.hasOwnProperty(\"denotation\"))\n writer.uint32(/* id 3, wireType 2 =*/26).string(message.denotation);\n return writer;\n };\n\n /**\n * Encodes the specified Dimension message, length delimited. Does not implicitly {@link onnx.TensorShapeProto.Dimension.verify|verify} messages.\n * @function encodeDelimited\n * @memberof onnx.TensorShapeProto.Dimension\n * @static\n * @param {onnx.TensorShapeProto.IDimension} message Dimension message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Dimension.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a Dimension message from the specified reader or buffer.\n * @function decode\n * @memberof onnx.TensorShapeProto.Dimension\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {onnx.TensorShapeProto.Dimension} Dimension\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Dimension.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.onnx.TensorShapeProto.Dimension();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.dimValue = reader.int64();\n break;\n case 2:\n message.dimParam = reader.string();\n break;\n case 3:\n message.denotation = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a Dimension message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof onnx.TensorShapeProto.Dimension\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {onnx.TensorShapeProto.Dimension} Dimension\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Dimension.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a Dimension message.\n * @function verify\n * @memberof onnx.TensorShapeProto.Dimension\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n Dimension.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n var properties = {};\n if (message.dimValue != null && message.hasOwnProperty(\"dimValue\")) {\n properties.value = 1;\n if (!$util.isInteger(message.dimValue) && !(message.dimValue && $util.isInteger(message.dimValue.low) && $util.isInteger(message.dimValue.high)))\n return \"dimValue: integer|Long expected\";\n }\n if (message.dimParam != null && message.hasOwnProperty(\"dimParam\")) {\n if (properties.value === 1)\n return \"value: multiple values\";\n properties.value = 1;\n if (!$util.isString(message.dimParam))\n return \"dimParam: string expected\";\n }\n if (message.denotation != null && message.hasOwnProperty(\"denotation\"))\n if (!$util.isString(message.denotation))\n return \"denotation: string expected\";\n return null;\n };\n\n /**\n * Creates a Dimension message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof onnx.TensorShapeProto.Dimension\n * @static\n * @param {Object.} object Plain object\n * @returns {onnx.TensorShapeProto.Dimension} Dimension\n */\n Dimension.fromObject = function fromObject(object) {\n if (object instanceof $root.onnx.TensorShapeProto.Dimension)\n return object;\n var message = new $root.onnx.TensorShapeProto.Dimension();\n if (object.dimValue != null)\n if ($util.Long)\n (message.dimValue = $util.Long.fromValue(object.dimValue)).unsigned = false;\n else if (typeof object.dimValue === \"string\")\n message.dimValue = parseInt(object.dimValue, 10);\n else if (typeof object.dimValue === \"number\")\n message.dimValue = object.dimValue;\n else if (typeof object.dimValue === \"object\")\n message.dimValue = new $util.LongBits(object.dimValue.low >>> 0, object.dimValue.high >>> 0).toNumber();\n if (object.dimParam != null)\n message.dimParam = String(object.dimParam);\n if (object.denotation != null)\n message.denotation = String(object.denotation);\n return message;\n };\n\n /**\n * Creates a plain object from a Dimension message. Also converts values to other types if specified.\n * @function toObject\n * @memberof onnx.TensorShapeProto.Dimension\n * @static\n * @param {onnx.TensorShapeProto.Dimension} message Dimension\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n Dimension.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults)\n object.denotation = \"\";\n if (message.dimValue != null && message.hasOwnProperty(\"dimValue\")) {\n if (typeof message.dimValue === \"number\")\n object.dimValue = options.longs === String ? String(message.dimValue) : message.dimValue;\n else\n object.dimValue = options.longs === String ? $util.Long.prototype.toString.call(message.dimValue) : options.longs === Number ? new $util.LongBits(message.dimValue.low >>> 0, message.dimValue.high >>> 0).toNumber() : message.dimValue;\n if (options.oneofs)\n object.value = \"dimValue\";\n }\n if (message.dimParam != null && message.hasOwnProperty(\"dimParam\")) {\n object.dimParam = message.dimParam;\n if (options.oneofs)\n object.value = \"dimParam\";\n }\n if (message.denotation != null && message.hasOwnProperty(\"denotation\"))\n object.denotation = message.denotation;\n return object;\n };\n\n /**\n * Converts this Dimension to JSON.\n * @function toJSON\n * @memberof onnx.TensorShapeProto.Dimension\n * @instance\n * @returns {Object.} JSON object\n */\n Dimension.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return Dimension;\n })();\n\n return TensorShapeProto;\n })();\n\n onnx.TypeProto = (function() {\n\n /**\n * Properties of a TypeProto.\n * @memberof onnx\n * @interface ITypeProto\n * @property {onnx.TypeProto.ITensor|null} [tensorType] TypeProto tensorType\n * @property {string|null} [denotation] TypeProto denotation\n */\n\n /**\n * Constructs a new TypeProto.\n * @memberof onnx\n * @classdesc Represents a TypeProto.\n * @implements ITypeProto\n * @constructor\n * @param {onnx.ITypeProto=} [properties] Properties to set\n */\n function TypeProto(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * TypeProto tensorType.\n * @member {onnx.TypeProto.ITensor|null|undefined} tensorType\n * @memberof onnx.TypeProto\n * @instance\n */\n TypeProto.prototype.tensorType = null;\n\n /**\n * TypeProto denotation.\n * @member {string} denotation\n * @memberof onnx.TypeProto\n * @instance\n */\n TypeProto.prototype.denotation = \"\";\n\n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n\n /**\n * TypeProto value.\n * @member {\"tensorType\"|undefined} value\n * @memberof onnx.TypeProto\n * @instance\n */\n Object.defineProperty(TypeProto.prototype, \"value\", {\n get: $util.oneOfGetter($oneOfFields = [\"tensorType\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Creates a new TypeProto instance using the specified properties.\n * @function create\n * @memberof onnx.TypeProto\n * @static\n * @param {onnx.ITypeProto=} [properties] Properties to set\n * @returns {onnx.TypeProto} TypeProto instance\n */\n TypeProto.create = function create(properties) {\n return new TypeProto(properties);\n };\n\n /**\n * Encodes the specified TypeProto message. Does not implicitly {@link onnx.TypeProto.verify|verify} messages.\n * @function encode\n * @memberof onnx.TypeProto\n * @static\n * @param {onnx.ITypeProto} message TypeProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n TypeProto.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.tensorType != null && message.hasOwnProperty(\"tensorType\"))\n $root.onnx.TypeProto.Tensor.encode(message.tensorType, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n if (message.denotation != null && message.hasOwnProperty(\"denotation\"))\n writer.uint32(/* id 6, wireType 2 =*/50).string(message.denotation);\n return writer;\n };\n\n /**\n * Encodes the specified TypeProto message, length delimited. Does not implicitly {@link onnx.TypeProto.verify|verify} messages.\n * @function encodeDelimited\n * @memberof onnx.TypeProto\n * @static\n * @param {onnx.ITypeProto} message TypeProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n TypeProto.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a TypeProto message from the specified reader or buffer.\n * @function decode\n * @memberof onnx.TypeProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {onnx.TypeProto} TypeProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n TypeProto.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.onnx.TypeProto();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.tensorType = $root.onnx.TypeProto.Tensor.decode(reader, reader.uint32());\n break;\n case 6:\n message.denotation = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a TypeProto message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof onnx.TypeProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {onnx.TypeProto} TypeProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n TypeProto.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a TypeProto message.\n * @function verify\n * @memberof onnx.TypeProto\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n TypeProto.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n var properties = {};\n if (message.tensorType != null && message.hasOwnProperty(\"tensorType\")) {\n properties.value = 1;\n {\n var error = $root.onnx.TypeProto.Tensor.verify(message.tensorType);\n if (error)\n return \"tensorType.\" + error;\n }\n }\n if (message.denotation != null && message.hasOwnProperty(\"denotation\"))\n if (!$util.isString(message.denotation))\n return \"denotation: string expected\";\n return null;\n };\n\n /**\n * Creates a TypeProto message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof onnx.TypeProto\n * @static\n * @param {Object.} object Plain object\n * @returns {onnx.TypeProto} TypeProto\n */\n TypeProto.fromObject = function fromObject(object) {\n if (object instanceof $root.onnx.TypeProto)\n return object;\n var message = new $root.onnx.TypeProto();\n if (object.tensorType != null) {\n if (typeof object.tensorType !== \"object\")\n throw TypeError(\".onnx.TypeProto.tensorType: object expected\");\n message.tensorType = $root.onnx.TypeProto.Tensor.fromObject(object.tensorType);\n }\n if (object.denotation != null)\n message.denotation = String(object.denotation);\n return message;\n };\n\n /**\n * Creates a plain object from a TypeProto message. Also converts values to other types if specified.\n * @function toObject\n * @memberof onnx.TypeProto\n * @static\n * @param {onnx.TypeProto} message TypeProto\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n TypeProto.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults)\n object.denotation = \"\";\n if (message.tensorType != null && message.hasOwnProperty(\"tensorType\")) {\n object.tensorType = $root.onnx.TypeProto.Tensor.toObject(message.tensorType, options);\n if (options.oneofs)\n object.value = \"tensorType\";\n }\n if (message.denotation != null && message.hasOwnProperty(\"denotation\"))\n object.denotation = message.denotation;\n return object;\n };\n\n /**\n * Converts this TypeProto to JSON.\n * @function toJSON\n * @memberof onnx.TypeProto\n * @instance\n * @returns {Object.} JSON object\n */\n TypeProto.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n TypeProto.Tensor = (function() {\n\n /**\n * Properties of a Tensor.\n * @memberof onnx.TypeProto\n * @interface ITensor\n * @property {number|null} [elemType] Tensor elemType\n * @property {onnx.ITensorShapeProto|null} [shape] Tensor shape\n */\n\n /**\n * Constructs a new Tensor.\n * @memberof onnx.TypeProto\n * @classdesc Represents a Tensor.\n * @implements ITensor\n * @constructor\n * @param {onnx.TypeProto.ITensor=} [properties] Properties to set\n */\n function Tensor(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * Tensor elemType.\n * @member {number} elemType\n * @memberof onnx.TypeProto.Tensor\n * @instance\n */\n Tensor.prototype.elemType = 0;\n\n /**\n * Tensor shape.\n * @member {onnx.ITensorShapeProto|null|undefined} shape\n * @memberof onnx.TypeProto.Tensor\n * @instance\n */\n Tensor.prototype.shape = null;\n\n /**\n * Creates a new Tensor instance using the specified properties.\n * @function create\n * @memberof onnx.TypeProto.Tensor\n * @static\n * @param {onnx.TypeProto.ITensor=} [properties] Properties to set\n * @returns {onnx.TypeProto.Tensor} Tensor instance\n */\n Tensor.create = function create(properties) {\n return new Tensor(properties);\n };\n\n /**\n * Encodes the specified Tensor message. Does not implicitly {@link onnx.TypeProto.Tensor.verify|verify} messages.\n * @function encode\n * @memberof onnx.TypeProto.Tensor\n * @static\n * @param {onnx.TypeProto.ITensor} message Tensor message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Tensor.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.elemType != null && message.hasOwnProperty(\"elemType\"))\n writer.uint32(/* id 1, wireType 0 =*/8).int32(message.elemType);\n if (message.shape != null && message.hasOwnProperty(\"shape\"))\n $root.onnx.TensorShapeProto.encode(message.shape, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified Tensor message, length delimited. Does not implicitly {@link onnx.TypeProto.Tensor.verify|verify} messages.\n * @function encodeDelimited\n * @memberof onnx.TypeProto.Tensor\n * @static\n * @param {onnx.TypeProto.ITensor} message Tensor message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Tensor.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a Tensor message from the specified reader or buffer.\n * @function decode\n * @memberof onnx.TypeProto.Tensor\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {onnx.TypeProto.Tensor} Tensor\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Tensor.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.onnx.TypeProto.Tensor();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.elemType = reader.int32();\n break;\n case 2:\n message.shape = $root.onnx.TensorShapeProto.decode(reader, reader.uint32());\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a Tensor message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof onnx.TypeProto.Tensor\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {onnx.TypeProto.Tensor} Tensor\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Tensor.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a Tensor message.\n * @function verify\n * @memberof onnx.TypeProto.Tensor\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n Tensor.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.elemType != null && message.hasOwnProperty(\"elemType\"))\n if (!$util.isInteger(message.elemType))\n return \"elemType: integer expected\";\n if (message.shape != null && message.hasOwnProperty(\"shape\")) {\n var error = $root.onnx.TensorShapeProto.verify(message.shape);\n if (error)\n return \"shape.\" + error;\n }\n return null;\n };\n\n /**\n * Creates a Tensor message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof onnx.TypeProto.Tensor\n * @static\n * @param {Object.} object Plain object\n * @returns {onnx.TypeProto.Tensor} Tensor\n */\n Tensor.fromObject = function fromObject(object) {\n if (object instanceof $root.onnx.TypeProto.Tensor)\n return object;\n var message = new $root.onnx.TypeProto.Tensor();\n if (object.elemType != null)\n message.elemType = object.elemType | 0;\n if (object.shape != null) {\n if (typeof object.shape !== \"object\")\n throw TypeError(\".onnx.TypeProto.Tensor.shape: object expected\");\n message.shape = $root.onnx.TensorShapeProto.fromObject(object.shape);\n }\n return message;\n };\n\n /**\n * Creates a plain object from a Tensor message. Also converts values to other types if specified.\n * @function toObject\n * @memberof onnx.TypeProto.Tensor\n * @static\n * @param {onnx.TypeProto.Tensor} message Tensor\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n Tensor.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.elemType = 0;\n object.shape = null;\n }\n if (message.elemType != null && message.hasOwnProperty(\"elemType\"))\n object.elemType = message.elemType;\n if (message.shape != null && message.hasOwnProperty(\"shape\"))\n object.shape = $root.onnx.TensorShapeProto.toObject(message.shape, options);\n return object;\n };\n\n /**\n * Converts this Tensor to JSON.\n * @function toJSON\n * @memberof onnx.TypeProto.Tensor\n * @instance\n * @returns {Object.} JSON object\n */\n Tensor.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return Tensor;\n })();\n\n return TypeProto;\n })();\n\n onnx.OperatorSetIdProto = (function() {\n\n /**\n * Properties of an OperatorSetIdProto.\n * @memberof onnx\n * @interface IOperatorSetIdProto\n * @property {string|null} [domain] OperatorSetIdProto domain\n * @property {number|Long|null} [version] OperatorSetIdProto version\n */\n\n /**\n * Constructs a new OperatorSetIdProto.\n * @memberof onnx\n * @classdesc Represents an OperatorSetIdProto.\n * @implements IOperatorSetIdProto\n * @constructor\n * @param {onnx.IOperatorSetIdProto=} [properties] Properties to set\n */\n function OperatorSetIdProto(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * OperatorSetIdProto domain.\n * @member {string} domain\n * @memberof onnx.OperatorSetIdProto\n * @instance\n */\n OperatorSetIdProto.prototype.domain = \"\";\n\n /**\n * OperatorSetIdProto version.\n * @member {number|Long} version\n * @memberof onnx.OperatorSetIdProto\n * @instance\n */\n OperatorSetIdProto.prototype.version = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n /**\n * Creates a new OperatorSetIdProto instance using the specified properties.\n * @function create\n * @memberof onnx.OperatorSetIdProto\n * @static\n * @param {onnx.IOperatorSetIdProto=} [properties] Properties to set\n * @returns {onnx.OperatorSetIdProto} OperatorSetIdProto instance\n */\n OperatorSetIdProto.create = function create(properties) {\n return new OperatorSetIdProto(properties);\n };\n\n /**\n * Encodes the specified OperatorSetIdProto message. Does not implicitly {@link onnx.OperatorSetIdProto.verify|verify} messages.\n * @function encode\n * @memberof onnx.OperatorSetIdProto\n * @static\n * @param {onnx.IOperatorSetIdProto} message OperatorSetIdProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n OperatorSetIdProto.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.domain != null && message.hasOwnProperty(\"domain\"))\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.domain);\n if (message.version != null && message.hasOwnProperty(\"version\"))\n writer.uint32(/* id 2, wireType 0 =*/16).int64(message.version);\n return writer;\n };\n\n /**\n * Encodes the specified OperatorSetIdProto message, length delimited. Does not implicitly {@link onnx.OperatorSetIdProto.verify|verify} messages.\n * @function encodeDelimited\n * @memberof onnx.OperatorSetIdProto\n * @static\n * @param {onnx.IOperatorSetIdProto} message OperatorSetIdProto message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n OperatorSetIdProto.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes an OperatorSetIdProto message from the specified reader or buffer.\n * @function decode\n * @memberof onnx.OperatorSetIdProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {onnx.OperatorSetIdProto} OperatorSetIdProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n OperatorSetIdProto.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.onnx.OperatorSetIdProto();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.domain = reader.string();\n break;\n case 2:\n message.version = reader.int64();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes an OperatorSetIdProto message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof onnx.OperatorSetIdProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {onnx.OperatorSetIdProto} OperatorSetIdProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n OperatorSetIdProto.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies an OperatorSetIdProto message.\n * @function verify\n * @memberof onnx.OperatorSetIdProto\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n OperatorSetIdProto.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.domain != null && message.hasOwnProperty(\"domain\"))\n if (!$util.isString(message.domain))\n return \"domain: string expected\";\n if (message.version != null && message.hasOwnProperty(\"version\"))\n if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))\n return \"version: integer|Long expected\";\n return null;\n };\n\n /**\n * Creates an OperatorSetIdProto message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof onnx.OperatorSetIdProto\n * @static\n * @param {Object.} object Plain object\n * @returns {onnx.OperatorSetIdProto} OperatorSetIdProto\n */\n OperatorSetIdProto.fromObject = function fromObject(object) {\n if (object instanceof $root.onnx.OperatorSetIdProto)\n return object;\n var message = new $root.onnx.OperatorSetIdProto();\n if (object.domain != null)\n message.domain = String(object.domain);\n if (object.version != null)\n if ($util.Long)\n (message.version = $util.Long.fromValue(object.version)).unsigned = false;\n else if (typeof object.version === \"string\")\n message.version = parseInt(object.version, 10);\n else if (typeof object.version === \"number\")\n message.version = object.version;\n else if (typeof object.version === \"object\")\n message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber();\n return message;\n };\n\n /**\n * Creates a plain object from an OperatorSetIdProto message. Also converts values to other types if specified.\n * @function toObject\n * @memberof onnx.OperatorSetIdProto\n * @static\n * @param {onnx.OperatorSetIdProto} message OperatorSetIdProto\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n OperatorSetIdProto.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.domain = \"\";\n if ($util.Long) {\n var long = new $util.Long(0, 0, false);\n object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n } else\n object.version = options.longs === String ? \"0\" : 0;\n }\n if (message.domain != null && message.hasOwnProperty(\"domain\"))\n object.domain = message.domain;\n if (message.version != null && message.hasOwnProperty(\"version\"))\n if (typeof message.version === \"number\")\n object.version = options.longs === String ? String(message.version) : message.version;\n else\n object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber() : message.version;\n return object;\n };\n\n /**\n * Converts this OperatorSetIdProto to JSON.\n * @function toJSON\n * @memberof onnx.OperatorSetIdProto\n * @instance\n * @returns {Object.} JSON object\n */\n OperatorSetIdProto.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return OperatorSetIdProto;\n })();\n\n return onnx;\n})();\n\nmodule.exports = $root;\n","// minimal library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-minimal\");\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message\n * @template TRes extends Message\n * @type {function}\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod} method Reflected or static method\n * @param {Constructor} requestCtor Request constructor\n * @param {Constructor} responseCtor Response constructor\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message\n * @template TRes extends Message\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.} dst Destination object\n * @param {Object.} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message\n * @constructor\n * @param {string} message Error message\n * @param {Object.} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n/* eslint-disable import/no-internal-modules */\r\nimport {Backend, InferenceSession, SessionHandler} from 'onnxruntime-common';\r\nimport {Session} from './onnxjs/session';\r\nimport {OnnxjsSessionHandler} from './onnxjs/session-handler';\r\n\r\nclass OnnxjsBackend implements Backend {\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n async init(): Promise {}\r\n\r\n async createSessionHandler(pathOrBuffer: string|Uint8Array, options?: InferenceSession.SessionOptions):\r\n Promise {\r\n // NOTE: Session.Config(from onnx.js) is not compatible with InferenceSession.SessionOptions(from\r\n // onnxruntime-common).\r\n // In future we should remove Session.Config and use InferenceSession.SessionOptions.\r\n // Currently we allow this to happen to make test runner work.\r\n const session = new Session(options as unknown as Session.Config);\r\n\r\n // typescript cannot merge method override correctly (so far in 4.2.3). need if-else to call the method.\r\n if (typeof pathOrBuffer === 'string') {\r\n await session.loadModel(pathOrBuffer);\r\n } else {\r\n await session.loadModel(pathOrBuffer);\r\n }\r\n\r\n return new OnnxjsSessionHandler(session);\r\n }\r\n}\r\n\r\nexport const onnxjsBackend = new OnnxjsBackend();\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {readFile} from 'fs';\r\nimport {Backend, env, InferenceSession, SessionHandler} from 'onnxruntime-common';\r\nimport {cpus} from 'os';\r\nimport {promisify} from 'util';\r\nimport {initWasm} from './wasm/proxy-wrapper';\r\n\r\nimport {OnnxruntimeWebAssemblySessionHandler} from './wasm/session-handler';\r\n\r\n/**\r\n * This function initializes all flags for WebAssembly.\r\n *\r\n * Those flags are accessible from `ort.env.wasm`. Users are allow to set those flags before the first inference session\r\n * being created, to override default value.\r\n */\r\nexport const initializeFlags = (): void => {\r\n if (typeof env.wasm.initTimeout !== 'number' || env.wasm.initTimeout < 0) {\r\n env.wasm.initTimeout = 0;\r\n }\r\n\r\n if (typeof env.wasm.simd !== 'boolean') {\r\n env.wasm.simd = true;\r\n }\r\n\r\n if (typeof env.wasm.proxy !== 'boolean') {\r\n env.wasm.proxy = false;\r\n }\r\n\r\n if (typeof env.wasm.numThreads !== 'number' || !Number.isInteger(env.wasm.numThreads) || env.wasm.numThreads <= 0) {\r\n const numCpuLogicalCores = typeof navigator === 'undefined' ? cpus().length : navigator.hardwareConcurrency;\r\n env.wasm.numThreads = Math.min(4, Math.ceil((numCpuLogicalCores || 1) / 2));\r\n }\r\n};\r\n\r\nclass OnnxruntimeWebAssemblyBackend implements Backend {\r\n async init(): Promise {\r\n // populate wasm flags\r\n initializeFlags();\r\n\r\n // init wasm\r\n await initWasm();\r\n }\r\n createSessionHandler(path: string, options?: InferenceSession.SessionOptions): Promise;\r\n createSessionHandler(buffer: Uint8Array, options?: InferenceSession.SessionOptions): Promise;\r\n async createSessionHandler(pathOrBuffer: string|Uint8Array, options?: InferenceSession.SessionOptions):\r\n Promise {\r\n let buffer: Uint8Array;\r\n if (typeof pathOrBuffer === 'string') {\r\n if (typeof fetch === 'undefined') {\r\n // node\r\n buffer = await promisify(readFile)(pathOrBuffer);\r\n } else {\r\n // browser\r\n const response = await fetch(pathOrBuffer);\r\n const arrayBuffer = await response.arrayBuffer();\r\n buffer = new Uint8Array(arrayBuffer);\r\n }\r\n } else {\r\n buffer = pathOrBuffer;\r\n }\r\n\r\n const handler = new OnnxruntimeWebAssemblySessionHandler();\r\n await handler.loadModel(buffer, options);\r\n return Promise.resolve(handler);\r\n }\r\n}\r\n\r\nexport const wasmBackend = new OnnxruntimeWebAssemblyBackend();\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n/* eslint-disable @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports */\r\n// We use \"require\" instead of \"import\" here because import statement must be put in top level. Our current code does\r\n// not allow terser to tree-shaking code as expected because some codes are treated as having side effects.\r\n// So we import code inside the if-clause to allow terser remove the code safely.\r\n\r\nexport * from 'onnxruntime-common';\r\nimport {registerBackend} from 'onnxruntime-common';\r\n\r\nif (!BUILD_DEFS.DISABLE_WEBGL) {\r\n const onnxjsBackend = require('./backend-onnxjs').onnxjsBackend;\r\n registerBackend('webgl', onnxjsBackend, -1);\r\n}\r\nif (!BUILD_DEFS.DISABLE_WASM) {\r\n const wasmBackend = require('./backend-wasm').wasmBackend;\r\n registerBackend('wasm', wasmBackend, 0);\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nclass AttributeWithCacheKeyImpl {\r\n constructor(attribute: Record) {\r\n Object.assign(this, attribute);\r\n }\r\n\r\n private _cacheKey: string;\r\n public get cacheKey(): string {\r\n if (!this._cacheKey) {\r\n this._cacheKey =\r\n Object.getOwnPropertyNames(this).sort().map(name => `${(this as Record)[name]}`).join(';');\r\n }\r\n return this._cacheKey;\r\n }\r\n}\r\n\r\nexport interface AttributeWithCacheKey {\r\n readonly cacheKey: string;\r\n}\r\n\r\nexport const createAttributeWithCacheKey = >(attribute: T): T&AttributeWithCacheKey =>\r\n new AttributeWithCacheKeyImpl(attribute) as unknown as T & AttributeWithCacheKey;\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport Long from 'long';\r\nimport {onnx} from 'onnx-proto';\r\nimport {onnxruntime} from './ort-schema/ort-generated';\r\nimport ortFbs = onnxruntime.experimental.fbs;\r\n\r\nimport {Tensor} from './tensor';\r\nimport {decodeUtf8String, LongUtil} from './util';\r\n\r\nexport declare namespace Attribute {\r\n export interface DataTypeMap {\r\n float: number;\r\n int: number;\r\n string: string;\r\n tensor: Tensor;\r\n floats: number[];\r\n ints: number[];\r\n strings: string[];\r\n tensors: Tensor[];\r\n }\r\n\r\n export type DataType = keyof DataTypeMap;\r\n}\r\n\r\ntype ValueTypes = Attribute.DataTypeMap[Attribute.DataType];\r\n\r\ntype Value = [ValueTypes, Attribute.DataType];\r\n\r\nexport class Attribute {\r\n constructor(attributes: onnx.IAttributeProto[]|ortFbs.Attribute[]|null|undefined) {\r\n this._attributes = new Map();\r\n if (attributes !== null && attributes !== undefined) {\r\n for (const attr of attributes) {\r\n if (attr instanceof onnx.AttributeProto) {\r\n this._attributes.set(attr.name, [Attribute.getValue(attr), Attribute.getType(attr)]);\r\n } else if (attr instanceof ortFbs.Attribute) {\r\n this._attributes.set(attr.name()!, [Attribute.getValue(attr), Attribute.getType(attr)]);\r\n }\r\n }\r\n if (this._attributes.size < attributes.length) {\r\n throw new Error('duplicated attribute names');\r\n }\r\n }\r\n }\r\n\r\n set(key: string, type: Attribute.DataType, value: ValueTypes): void {\r\n this._attributes.set(key, [value, type]);\r\n }\r\n delete(key: string): void {\r\n this._attributes.delete(key);\r\n }\r\n getFloat(key: string, defaultValue?: Attribute.DataTypeMap['float']) {\r\n return this.get(key, 'float', defaultValue);\r\n }\r\n\r\n getInt(key: string, defaultValue?: Attribute.DataTypeMap['int']) {\r\n return this.get(key, 'int', defaultValue);\r\n }\r\n\r\n getString(key: string, defaultValue?: Attribute.DataTypeMap['string']) {\r\n return this.get(key, 'string', defaultValue);\r\n }\r\n\r\n getTensor(key: string, defaultValue?: Attribute.DataTypeMap['tensor']) {\r\n return this.get(key, 'tensor', defaultValue);\r\n }\r\n\r\n getFloats(key: string, defaultValue?: Attribute.DataTypeMap['floats']) {\r\n return this.get(key, 'floats', defaultValue);\r\n }\r\n\r\n getInts(key: string, defaultValue?: Attribute.DataTypeMap['ints']) {\r\n return this.get(key, 'ints', defaultValue);\r\n }\r\n\r\n getStrings(key: string, defaultValue?: Attribute.DataTypeMap['strings']) {\r\n return this.get(key, 'strings', defaultValue);\r\n }\r\n\r\n getTensors(key: string, defaultValue?: Attribute.DataTypeMap['tensors']) {\r\n return this.get(key, 'tensors', defaultValue);\r\n }\r\n\r\n private get(\r\n key: string, type: Attribute.DataType, defaultValue?: V): V {\r\n const valueAndType = this._attributes.get(key);\r\n if (valueAndType === undefined) {\r\n if (defaultValue !== undefined) {\r\n return defaultValue;\r\n }\r\n throw new Error(`required attribute not found: ${key}`);\r\n }\r\n if (valueAndType[1] !== type) {\r\n throw new Error(`type mismatch: expected ${type} but got ${valueAndType[1]}`);\r\n }\r\n return valueAndType[0] as V;\r\n }\r\n\r\n private static getType(attr: onnx.IAttributeProto|ortFbs.Attribute): Attribute.DataType {\r\n const type = attr instanceof onnx.AttributeProto ? (attr).type : (attr as ortFbs.Attribute).type();\r\n switch (type) {\r\n case onnx.AttributeProto.AttributeType.FLOAT:\r\n return 'float';\r\n case onnx.AttributeProto.AttributeType.INT:\r\n return 'int';\r\n case onnx.AttributeProto.AttributeType.STRING:\r\n return 'string';\r\n case onnx.AttributeProto.AttributeType.TENSOR:\r\n return 'tensor';\r\n case onnx.AttributeProto.AttributeType.FLOATS:\r\n return 'floats';\r\n case onnx.AttributeProto.AttributeType.INTS:\r\n return 'ints';\r\n case onnx.AttributeProto.AttributeType.STRINGS:\r\n return 'strings';\r\n case onnx.AttributeProto.AttributeType.TENSORS:\r\n return 'tensors';\r\n default:\r\n throw new Error(`attribute type is not supported yet: ${onnx.AttributeProto.AttributeType[type]}`);\r\n }\r\n }\r\n\r\n private static getValue(attr: onnx.IAttributeProto|ortFbs.Attribute) {\r\n const attrType = attr instanceof onnx.AttributeProto ? attr.type : (attr as ortFbs.Attribute).type();\r\n if (attrType === onnx.AttributeProto.AttributeType.GRAPH || attrType === onnx.AttributeProto.AttributeType.GRAPHS) {\r\n throw new Error('graph attribute is not supported yet');\r\n }\r\n\r\n const value = this.getValueNoCheck(attr);\r\n\r\n // cast LONG to number\r\n if (attrType === onnx.AttributeProto.AttributeType.INT && LongUtil.isLong(value)) {\r\n return LongUtil.longToNumber(value as Long | flatbuffers.Long);\r\n }\r\n\r\n // cast LONG[] to number[]\r\n if (attrType === onnx.AttributeProto.AttributeType.INTS) {\r\n const arr = (value as Array);\r\n const numberValue: number[] = new Array(arr.length);\r\n\r\n for (let i = 0; i < arr.length; i++) {\r\n const maybeLong = arr[i];\r\n numberValue[i] = LongUtil.longToNumber(maybeLong);\r\n }\r\n\r\n return numberValue;\r\n }\r\n\r\n // cast onnx.TensorProto to onnxjs.Tensor\r\n if (attrType === onnx.AttributeProto.AttributeType.TENSOR) {\r\n return attr instanceof onnx.AttributeProto ? Tensor.fromProto(value as onnx.ITensorProto) :\r\n Tensor.fromOrtTensor(value as ortFbs.Tensor);\r\n }\r\n\r\n // cast onnx.TensorProto[] to onnxjs.Tensor[]\r\n if (attrType === onnx.AttributeProto.AttributeType.TENSORS) {\r\n if (attr instanceof onnx.AttributeProto) {\r\n const tensorProtos = value as onnx.ITensorProto[];\r\n return tensorProtos.map(value => Tensor.fromProto(value));\r\n } else if (attr instanceof ortFbs.Attribute) {\r\n const tensorProtos = value as ortFbs.Tensor[];\r\n return tensorProtos.map(value => Tensor.fromOrtTensor(value));\r\n }\r\n }\r\n\r\n // cast Uint8Array to string\r\n if (attrType === onnx.AttributeProto.AttributeType.STRING) {\r\n // string in onnx attribute is of uint8array type, so we need to convert it to string below. While in ort format,\r\n // string attributes are returned as string, so no conversion is needed.\r\n if (attr instanceof onnx.AttributeProto) {\r\n const utf8String = value as Uint8Array;\r\n return decodeUtf8String(utf8String);\r\n }\r\n }\r\n\r\n // cast Uint8Array[] to string[]\r\n if (attrType === onnx.AttributeProto.AttributeType.STRINGS) {\r\n // strings in onnx attribute is returned as uint8array[], so we need to convert it to string[] below. While in ort\r\n // format strings attributes are returned as string[], so no conversion is needed.\r\n if (attr instanceof onnx.AttributeProto) {\r\n const utf8Strings = value as Uint8Array[];\r\n return utf8Strings.map(decodeUtf8String);\r\n }\r\n }\r\n\r\n return value as ValueTypes;\r\n }\r\n\r\n private static getValueNoCheck(attr: onnx.IAttributeProto|ortFbs.Attribute) {\r\n return attr instanceof (onnx.AttributeProto) ? this.getValueNoCheckFromOnnxFormat(attr) :\r\n this.getValueNoCheckFromOrtFormat(attr as ortFbs.Attribute);\r\n }\r\n\r\n private static getValueNoCheckFromOnnxFormat(attr: onnx.IAttributeProto) {\r\n switch (attr.type!) {\r\n case onnx.AttributeProto.AttributeType.FLOAT:\r\n return attr.f;\r\n case onnx.AttributeProto.AttributeType.INT:\r\n return attr.i;\r\n case onnx.AttributeProto.AttributeType.STRING:\r\n return attr.s;\r\n case onnx.AttributeProto.AttributeType.TENSOR:\r\n return attr.t;\r\n case onnx.AttributeProto.AttributeType.GRAPH:\r\n return attr.g;\r\n case onnx.AttributeProto.AttributeType.FLOATS:\r\n return attr.floats;\r\n case onnx.AttributeProto.AttributeType.INTS:\r\n return attr.ints;\r\n case onnx.AttributeProto.AttributeType.STRINGS:\r\n return attr.strings;\r\n case onnx.AttributeProto.AttributeType.TENSORS:\r\n return attr.tensors;\r\n case onnx.AttributeProto.AttributeType.GRAPHS:\r\n return attr.graphs;\r\n default:\r\n throw new Error(`unsupported attribute type: ${onnx.AttributeProto.AttributeType[attr.type!]}`);\r\n }\r\n }\r\n\r\n private static getValueNoCheckFromOrtFormat(attr: ortFbs.Attribute) {\r\n switch (attr.type()) {\r\n case ortFbs.AttributeType.FLOAT:\r\n return attr.f();\r\n case ortFbs.AttributeType.INT:\r\n return attr.i();\r\n case ortFbs.AttributeType.STRING:\r\n return attr.s();\r\n case ortFbs.AttributeType.TENSOR:\r\n return attr.t();\r\n case ortFbs.AttributeType.GRAPH:\r\n return attr.g();\r\n case ortFbs.AttributeType.FLOATS:\r\n return attr.floatsArray();\r\n case ortFbs.AttributeType.INTS: {\r\n const ints = [];\r\n for (let i = 0; i < attr.intsLength(); i++) {\r\n ints.push(attr.ints(i)!);\r\n }\r\n return ints;\r\n }\r\n case ortFbs.AttributeType.STRINGS: {\r\n const strings = [];\r\n for (let i = 0; i < attr.stringsLength(); i++) {\r\n strings.push(attr.strings(i));\r\n }\r\n return strings;\r\n }\r\n case ortFbs.AttributeType.TENSORS: {\r\n const tensors = [];\r\n for (let i = 0; i < attr.tensorsLength(); i++) {\r\n tensors.push(attr.tensors(i)!);\r\n }\r\n return tensors;\r\n }\r\n // case ortFbs.AttributeType.GRAPHS:\r\n // TODO: Subgraph not supported yet.\r\n // const graphs = [];\r\n // for (let i = 0; i < attr.graphsLength(); i++) {\r\n // graphs.push(attr.graphs(i)!);\r\n // }\r\n // return graphs;\r\n default:\r\n throw new Error(`unsupported attribute type: ${ortFbs.AttributeType[attr.type()]}`);\r\n }\r\n }\r\n\r\n protected _attributes: Map;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {WebGLBackend} from './backends/backend-webgl';\r\nimport {Graph} from './graph';\r\nimport {Operator} from './operators';\r\nimport {OpSet} from './opset';\r\nimport {Session} from './session';\r\n\r\nexport interface InferenceHandler {\r\n /**\r\n * dispose the inference handler. it will be called as the last step in Session.run()\r\n */\r\n dispose(): void;\r\n}\r\n\r\nexport interface SessionHandler {\r\n /**\r\n * transform the graph at initialization time\r\n * @param graphTransformer the graph transformer to manipulate the model graph\r\n */\r\n transformGraph?(graphTransformer: Graph.Transformer): void;\r\n\r\n /**\r\n * create an instance of InferenceHandler to use in a Session.run() call\r\n */\r\n createInferenceHandler(): InferenceHandler;\r\n\r\n /**\r\n * dispose the session handler. it will be called when a session is being disposed explicitly\r\n */\r\n dispose(): void;\r\n\r\n /**\r\n * Resolves the operator from the name and opset version; backend specific\r\n * @param node the node to resolve\r\n * @param opsets a list of opsets that exported from the model\r\n * @param graph the completely initialized graph\r\n */\r\n resolve(node: Graph.Node, opsets: readonly OpSet[], graph: Graph): Operator;\r\n\r\n /**\r\n * This method let's the sessionHandler know that the graph initialization is complete\r\n * @param graph the completely initialized graph\r\n */\r\n onGraphInitialized?(graph: Graph): void;\r\n\r\n /**\r\n * a reference to the corresponding backend\r\n */\r\n readonly backend: Backend;\r\n\r\n /**\r\n * a reference to the session context\r\n */\r\n readonly context: Session.Context;\r\n}\r\n\r\nexport interface Backend {\r\n /**\r\n * initialize the backend. will be called only once, when the first time the\r\n * backend it to be used\r\n */\r\n initialize(): boolean|Promise;\r\n\r\n /**\r\n * create an instance of SessionHandler to use in a Session object's lifecycle\r\n */\r\n createSessionHandler(context: Session.Context): SessionHandler;\r\n\r\n /**\r\n * dispose the backend. currently this will not be called\r\n */\r\n dispose(): void;\r\n}\r\n\r\n// caches all initialized backend instances\r\nconst backendsCache: Map = new Map();\r\n\r\nexport const backend: {[name: string]: Backend} = {\r\n webgl: new WebGLBackend(),\r\n};\r\n\r\n/**\r\n * Resolve a reference to the backend. If a hint is specified, the corresponding\r\n * backend will be used.\r\n */\r\nexport async function resolveBackend(hint?: string|readonly string[]): Promise {\r\n if (!hint) {\r\n return resolveBackend(['webgl']);\r\n } else {\r\n const hints = typeof hint === 'string' ? [hint] : hint;\r\n\r\n for (const backendHint of hints) {\r\n const cache = backendsCache.get(backendHint);\r\n if (cache) {\r\n return cache;\r\n }\r\n\r\n const backend = await tryLoadBackend(backendHint);\r\n if (backend) {\r\n return backend;\r\n }\r\n }\r\n }\r\n\r\n throw new Error('no available backend to use');\r\n}\r\n\r\nasync function tryLoadBackend(backendHint: string): Promise {\r\n const backendObj = backend;\r\n\r\n if (typeof backendObj[backendHint] !== 'undefined' && isBackend(backendObj[backendHint])) {\r\n const backend = backendObj[backendHint];\r\n let init = backend.initialize();\r\n if (typeof init === 'object' && 'then' in init) {\r\n init = await init;\r\n }\r\n if (init) {\r\n backendsCache.set(backendHint, backend);\r\n return backend;\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction isBackend(obj: unknown) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const o = obj as any;\r\n\r\n // check if an object is a Backend instance\r\n if (\r\n 'initialize' in o && typeof o.initialize === 'function' && // initialize()\r\n 'createSessionHandler' in o && typeof o.createSessionHandler === 'function' && // createSessionHandler()\r\n 'dispose' in o && typeof o.dispose === 'function' // dispose()\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport type BackendType = Backend;\r\nexport type SessionHandlerType = ReturnType;\r\nexport type InferenceHandlerType = ReturnType;\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {env} from 'onnxruntime-common';\r\nimport {Backend, SessionHandler} from '../backend';\r\nimport {Logger} from '../instrument';\r\nimport {Session} from '../session';\r\n\r\nimport {WebGLSessionHandler} from './webgl/session-handler';\r\nimport {WebGLContext} from './webgl/webgl-context';\r\nimport {createWebGLContext} from './webgl/webgl-context-factory';\r\n\r\n/**\r\n * WebGLBackend is the entry point for all WebGL opeartions\r\n * When it starts it created the WebGLRenderingContext\r\n * and other main framework components such as Program and Texture Managers\r\n */\r\nexport class WebGLBackend implements Backend {\r\n glContext: WebGLContext;\r\n\r\n get contextId(): 'webgl'|'webgl2'|undefined {\r\n return env.webgl.contextId;\r\n }\r\n set contextId(value: 'webgl'|'webgl2'|undefined) {\r\n env.webgl.contextId = value;\r\n }\r\n\r\n get matmulMaxBatchSize(): number|undefined {\r\n return env.webgl.matmulMaxBatchSize;\r\n }\r\n set matmulMaxBatchSize(value: number|undefined) {\r\n env.webgl.matmulMaxBatchSize = value;\r\n }\r\n\r\n get textureCacheMode(): 'initializerOnly'|'full'|undefined {\r\n return env.webgl.textureCacheMode;\r\n }\r\n set textureCacheMode(value: 'initializerOnly'|'full'|undefined) {\r\n env.webgl.textureCacheMode = value;\r\n }\r\n\r\n get pack(): boolean|undefined {\r\n return env.webgl.pack;\r\n }\r\n set pack(value: boolean|undefined) {\r\n env.webgl.pack = value;\r\n }\r\n\r\n get async(): boolean|undefined {\r\n return env.webgl.async;\r\n }\r\n set async(value: boolean|undefined) {\r\n env.webgl.async = value;\r\n }\r\n\r\n initialize(): boolean {\r\n try {\r\n this.glContext = createWebGLContext(this.contextId);\r\n if (typeof this.matmulMaxBatchSize !== 'number') {\r\n this.matmulMaxBatchSize = 16;\r\n }\r\n if (typeof this.textureCacheMode !== 'string') {\r\n this.textureCacheMode = 'full';\r\n }\r\n if (typeof this.pack !== 'boolean') {\r\n this.pack = false;\r\n }\r\n if (typeof this.async !== 'boolean') {\r\n this.async = false;\r\n }\r\n\r\n Logger.setWithEnv(env);\r\n\r\n Logger.verbose(\r\n 'WebGLBackend',\r\n `Created WebGLContext: ${typeof this.glContext} with matmulMaxBatchSize: ${\r\n this.matmulMaxBatchSize}; textureCacheMode: ${this.textureCacheMode}; pack: ${this.pack}; async: ${\r\n this.async}.`);\r\n return true;\r\n } catch (e) {\r\n Logger.warning('WebGLBackend', `Unable to initialize WebGLBackend. ${e}`);\r\n return false;\r\n }\r\n }\r\n createSessionHandler(context: Session.Context): SessionHandler {\r\n return new WebGLSessionHandler(this, context);\r\n }\r\n dispose(): void {\r\n this.glContext.dispose();\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {ArrayUtil, BroadcastUtil, ShapeUtil} from '../../util';\r\n\r\nimport {GlslContext, GlslLib, GlslLibRoutine} from './glsl-definitions';\r\nimport {getGlsl} from './glsl-source';\r\nimport {squeezeShape} from './texture-layout-strategy';\r\nimport {TextureLayout} from './types';\r\nimport {generateShaderFuncNameFromInputSamplerName, generateShaderFuncNameFromInputSamplerNameAtOutCoords, getCoordsDataType, getGlChannels, getSqueezedParams, squeezeInputShape} from './utils';\r\n\r\n/**\r\n * GLSL Library responsible for data types and routines for manipulating\r\n * coordinates and mapping to/from tensor indices\r\n */\r\nexport class CoordsGlslLib extends GlslLib {\r\n returnType: string;\r\n\r\n constructor(context: GlslContext) {\r\n super(context);\r\n }\r\n getFunctions(): {[name: string]: GlslLibRoutine} {\r\n return {\r\n ...this.offsetToCoords(),\r\n ...this.coordsToOffset(),\r\n ...this.toVec(),\r\n ...this.valueFrom(),\r\n // TODO return these only when packing is enabled.\r\n ...this.getCommonUtilFuncs(),\r\n ...this.getInputsSamplingSnippets(),\r\n ...this.getOutputSamplingSnippet()\r\n };\r\n }\r\n getCustomTypes() {\r\n return {};\r\n }\r\n /**\r\n * Produces a function that can map from\r\n * 2D normalzied coordinates (s,t) to a flat offset\r\n */\r\n protected offsetToCoords(): {[name: string]: GlslLibRoutine} {\r\n const funcName = 'offsetToCoords';\r\n return {\r\n offsetToCoords: new GlslLibRoutine(`\r\n vec2 ${funcName}(int offset, int width, int height) {\r\n int t = offset / width;\r\n int s = offset - t*width;\r\n vec2 coords = (vec2(s,t) + vec2(0.5,0.5)) / vec2(width, height);\r\n return coords;\r\n }\r\n `)\r\n };\r\n }\r\n\r\n /**\r\n * Produces a function that can map from\r\n * 2D normalzied coordinates (s,t) to a flat offset\r\n */\r\n protected coordsToOffset(): {[name: string]: GlslLibRoutine} {\r\n const funcName = 'coordsToOffset';\r\n return {\r\n coordsToOffset: new GlslLibRoutine(`\r\n int ${funcName}(vec2 coords, int width, int height) {\r\n float s = coords.s * float(width);\r\n float t = coords.t * float(height);\r\n int offset = int(t) * width + int(s);\r\n return offset;\r\n }\r\n `)\r\n };\r\n }\r\n\r\n /**\r\n * Generates code for output sampler.\r\n */\r\n\r\n protected getOutputSamplingSnippet(): {[name: string]: GlslLibRoutine} {\r\n const outputLayout = this.context.outputTextureLayout;\r\n if (outputLayout.isPacked) {\r\n return this.getPackedOutputSamplingSnippet(outputLayout);\r\n } else {\r\n return this.getUnpackedOutputSamplingSnippet(outputLayout);\r\n }\r\n }\r\n\r\n /**\r\n * Generates code for packed output sampler.\r\n */\r\n protected getPackedOutputSamplingSnippet(outputLayout: TextureLayout): {[name: string]: GlslLibRoutine} {\r\n const outShape = outputLayout.unpackedShape;\r\n const outTexShape = [outputLayout.width, outputLayout.height];\r\n const result: {[name: string]: GlslLibRoutine} = {};\r\n const funcName = 'getOutputCoords';\r\n switch (outShape.length) {\r\n case 0:\r\n result[funcName] = this.getOutputScalarCoords();\r\n break;\r\n case 1:\r\n result[funcName] = this.getOutputPacked1DCoords(outShape as [number], outTexShape as [number, number]);\r\n break;\r\n case 2:\r\n result[funcName] = this.getOutputPacked2DCoords(outShape as [number, number], outTexShape as [number, number]);\r\n break;\r\n case 3:\r\n result[funcName] =\r\n this.getOutputPacked3DCoords(outShape as [number, number, number], outTexShape as [number, number]);\r\n break;\r\n default:\r\n result[funcName] = this.getOutputPackedNDCoords(outShape, outTexShape as [number, number]);\r\n }\r\n const glsl = getGlsl(this.context.glContext.version);\r\n // TODO we need this to properly return a packed vec4 from kernels.\r\n // Replace all '{glsl.output} = result' with 'setOutput(result)' in all kernels.\r\n const floatTextureSetRGBASource = `\r\n void setOutput(vec4 val) {\r\n ${glsl.output} = val;\r\n }\r\n `;\r\n const floatTextureSetRGBAFuncName = 'floatTextureSetRGBA';\r\n result[floatTextureSetRGBAFuncName] = new GlslLibRoutine(floatTextureSetRGBASource);\r\n return result;\r\n }\r\n\r\n /**\r\n * Generates code for unpacked output sampler.\r\n */\r\n protected getUnpackedOutputSamplingSnippet(outputLayout: TextureLayout): {[name: string]: GlslLibRoutine} {\r\n const outShape = outputLayout.unpackedShape;\r\n const outTexShape = [outputLayout.width, outputLayout.height];\r\n const result: {[name: string]: GlslLibRoutine} = {};\r\n const funcName = 'getOutputCoords';\r\n switch (outShape.length) {\r\n case 0:\r\n result[funcName] = this.getOutputScalarCoords();\r\n break;\r\n case 1:\r\n result[funcName] = this.getOutputUnpacked1DCoords(outShape as [number], outTexShape as [number, number]);\r\n break;\r\n case 2:\r\n result[funcName] =\r\n this.getOutputUnpacked2DCoords(outShape as [number, number], outTexShape as [number, number]);\r\n break;\r\n case 3:\r\n result[funcName] =\r\n this.getOutputUnpacked3DCoords(outShape as [number, number, number], outTexShape as [number, number]);\r\n break;\r\n case 4:\r\n result[funcName] = this.getOutputUnpacked4DCoords(\r\n outShape as [number, number, number, number], outTexShape as [number, number]);\r\n break;\r\n case 5:\r\n result[funcName] = this.getOutputUnpacked5DCoords(\r\n outShape as [number, number, number, number, number], outTexShape as [number, number]);\r\n break;\r\n case 6:\r\n result[funcName] = this.getOutputUnpacked6DCoords(\r\n outShape as [number, number, number, number, number, number], outTexShape as [number, number]);\r\n break;\r\n default:\r\n throw new Error(`Unsupported output dimensionality: ${outShape.length}`);\r\n }\r\n const glsl = getGlsl(this.context.glContext.version);\r\n // TODO we need this to properly return a packed vec4 from kernels.\r\n // Replace all '{glsl.output} = result' with 'setOutput(result)' in all kernels.\r\n const floatTextureSetRSource = `\r\n void setOutput(float val) {\r\n ${glsl.output} = vec4(val, 0, 0, 0);\r\n }\r\n `;\r\n const floatTextureSetRFuncName = 'floatTextureSetR';\r\n result[floatTextureSetRFuncName] = new GlslLibRoutine(floatTextureSetRSource);\r\n return result;\r\n }\r\n\r\n /**\r\n * Scalar output coordinates.\r\n */\r\n protected getOutputScalarCoords(): GlslLibRoutine {\r\n return new GlslLibRoutine(`\r\n int getOutputCoords() {\r\n return 0;\r\n }\r\n `);\r\n }\r\n\r\n /**\r\n * 1D packed output coordinates.\r\n */\r\n protected getOutputPacked1DCoords(shape: [number], texShape: [number, number]): GlslLibRoutine {\r\n const packedTexShape = texShape;\r\n let source = '';\r\n if (packedTexShape[0] === 1) {\r\n source = `\r\n int getOutputCoords() {\r\n return 2 * int(TexCoords.y * ${packedTexShape[1]}.0);\r\n }\r\n `;\r\n return new GlslLibRoutine(source);\r\n }\r\n\r\n if (packedTexShape[1] === 1) {\r\n source = `\r\n int getOutputCoords() {\r\n return 2 * int(TexCoords.x * ${packedTexShape[0]}.0);\r\n }\r\n `;\r\n return new GlslLibRoutine(source);\r\n }\r\n\r\n source = `\r\n int getOutputCoords() {\r\n ivec2 resTexRC = ivec2(TexCoords.xy *\r\n vec2(${packedTexShape[0]}, ${packedTexShape[1]}));\r\n return 2 * (resTexRC.y * ${packedTexShape[0]} + resTexRC.x);\r\n }\r\n `;\r\n return new GlslLibRoutine(source);\r\n }\r\n\r\n /**\r\n * 2D packed output coordinates.\r\n */\r\n protected getOutputPacked2DCoords(shape: [number, number], texShape: [number, number]): GlslLibRoutine {\r\n let source = '';\r\n if (ArrayUtil.arraysEqual(shape, texShape)) {\r\n source = `\r\n ivec2 getOutputCoords() {\r\n return 2 * ivec2(TexCoords.xy * vec2(${texShape[0]}, ${texShape[1]}));\r\n }\r\n `;\r\n return new GlslLibRoutine(source);\r\n }\r\n\r\n const packedTexShape = texShape;\r\n // texels needed to accommodate a logical row\r\n const texelsInLogicalRow = Math.ceil(shape[1] / 2);\r\n\r\n /**\r\n * getOutputCoords\r\n *\r\n * resTexRC: The rows and columns of the texels. If you move over one\r\n * texel to the right in the packed texture, you are moving over one column\r\n * (not two).\r\n *\r\n * index: The texel index\r\n */\r\n source = `\r\n ivec2 getOutputCoords() {\r\n ivec2 resTexRC = ivec2(TexCoords.xy *\r\n vec2(${packedTexShape[0]}, ${packedTexShape[1]}));\r\n\r\n int index = resTexRC.y * ${packedTexShape[0]} + resTexRC.x;\r\n\r\n // reverse r and c order for packed texture\r\n int r = imod(index, ${texelsInLogicalRow}) * 2;\r\n int c = 2 * (index / ${texelsInLogicalRow});\r\n\r\n return ivec2(r, c);\r\n }\r\n `;\r\n return new GlslLibRoutine(source);\r\n }\r\n\r\n /**\r\n * 3D packed output coordinates.\r\n */\r\n protected getOutputPacked3DCoords(shape: [number, number, number], texShape: [number, number]): GlslLibRoutine {\r\n const packedTexShape = [texShape[0], texShape[1]];\r\n const texelsInLogicalRow = Math.ceil(shape[2] / 2);\r\n const texelsInBatch = texelsInLogicalRow * Math.ceil(shape[1] / 2);\r\n const source = `\r\n ivec3 getOutputCoords() {\r\n ivec2 resTexRC = ivec2(TexCoords.xy *\r\n vec2(${packedTexShape[0]}, ${packedTexShape[1]}));\r\n int index = resTexRC.y * ${packedTexShape[0]} + resTexRC.x;\r\n\r\n int b = index / ${texelsInBatch};\r\n index -= b * ${texelsInBatch};\r\n\r\n // reverse r and c order for packed texture\r\n int r = imod(index, ${texelsInLogicalRow}) * 2;\r\n int c = 2 * (index / ${texelsInLogicalRow});\r\n\r\n return ivec3(b, r, c);\r\n }\r\n `;\r\n return new GlslLibRoutine(source);\r\n }\r\n\r\n /**\r\n * ND packed output coordinates.\r\n */\r\n protected getOutputPackedNDCoords(shape: readonly number[], texShape: [number, number]): GlslLibRoutine {\r\n const packedTexShape = [texShape[0], texShape[1]];\r\n\r\n const texelsInLogicalRow = Math.ceil(shape[shape.length - 1] / 2);\r\n const texelsInBatch = texelsInLogicalRow * Math.ceil(shape[shape.length - 2] / 2);\r\n let texelsInBatchN = texelsInBatch;\r\n let batches = '';\r\n let coords = 'b, r, c';\r\n\r\n for (let b = 2; b < shape.length - 1; b++) {\r\n texelsInBatchN *= shape[shape.length - b - 1];\r\n batches = `\r\n int b${b} = index / ${texelsInBatchN};\r\n index -= b${b} * ${texelsInBatchN};\r\n ` + batches;\r\n coords = `b${b}, ` + coords;\r\n }\r\n const source = `\r\n ivec${shape.length} getOutputCoords() {\r\n ivec2 resTexRC = ivec2(TexCoords.xy *\r\n vec2(${packedTexShape[0]}, ${packedTexShape[1]}));\r\n int index = resTexRC.y * ${packedTexShape[0]} + resTexRC.x;\r\n\r\n ${batches}\r\n\r\n int b = index / ${texelsInBatch};\r\n index -= b * ${texelsInBatch};\r\n\r\n // reverse r and c order for packed texture\r\n int r = imod(index, ${texelsInLogicalRow}) * 2;\r\n int c = 2 * (index / ${texelsInLogicalRow});\r\n\r\n return ivec${shape.length}(${coords});\r\n }\r\n `;\r\n return new GlslLibRoutine(source);\r\n }\r\n\r\n /**\r\n * Unpacked 1D output coordinates.\r\n */\r\n protected getOutputUnpacked1DCoords(shape: [number], texShape: [number, number]): GlslLibRoutine {\r\n const source = `\r\n int getOutputCoords() {\r\n ivec2 resTexRC = ivec2(TexCoords.xy *\r\n vec2(${texShape[0]}, ${texShape[1]}));\r\n return resTexRC.y * ${texShape[0]} + resTexRC.x;\r\n }\r\n `;\r\n return new GlslLibRoutine(source);\r\n }\r\n\r\n /**\r\n * Unpacked 2D output coordinates.\r\n */\r\n protected getOutputUnpacked2DCoords(shape: [number, number], texShape: [number, number]): GlslLibRoutine {\r\n const source = `\r\n ivec2 getOutputCoords() {\r\n ivec2 resTexRC = ivec2(TexCoords.xy *\r\n vec2(${texShape[0]}, ${texShape[1]}));\r\n int index = resTexRC.y * ${texShape[0]} + resTexRC.x;\r\n int r = index / ${shape[1]};\r\n int c = index - r * ${shape[1]};\r\n return ivec2(r, c);\r\n }\r\n `;\r\n return new GlslLibRoutine(source);\r\n }\r\n\r\n /**\r\n * Unpacked 3D output coordinates.\r\n */\r\n protected getOutputUnpacked3DCoords(shape: [number, number, number], texShape: [number, number]): GlslLibRoutine {\r\n let source = '';\r\n const rank = shape.length;\r\n\r\n let strides = null;\r\n if (rank < 2) {\r\n strides = [];\r\n }\r\n\r\n strides = new Array(rank - 1);\r\n strides[rank - 2] = shape[rank - 1];\r\n for (let i = rank - 3; i >= 0; --i) {\r\n strides[i] = strides[i + 1] * shape[i + 1];\r\n }\r\n const coordsToCompute = ['r', 'c', 'd'];\r\n const coordsFromIndexSnippet =\r\n strides\r\n .map((stride, i) => {\r\n const line1 = `int ${coordsToCompute[i]} = index / ${stride}`;\r\n const line2 = i === strides.length - 1 ?\r\n `int ${coordsToCompute[i + 1]} = index - ${coordsToCompute[i]} * ${stride}` :\r\n `index -= ${coordsToCompute[i]} * ${stride}`;\r\n return `${line1}; ${line2};`;\r\n })\r\n .join('');\r\n\r\n source = `\r\n ivec3 getOutputCoords() {\r\n ivec2 resTexRC = ivec2(TexCoords.xy *\r\n vec2(${texShape[0]}, ${texShape[1]}));\r\n int index = resTexRC.y * ${texShape[0]} + resTexRC.x;\r\n ${coordsFromIndexSnippet}\r\n return ivec3(r, c, d);\r\n }\r\n `;\r\n return new GlslLibRoutine(source);\r\n }\r\n\r\n /**\r\n * Unpacked 4D output coordinates.\r\n */\r\n protected getOutputUnpacked4DCoords(shape: [number, number, number, number], texShape: [number, number]):\r\n GlslLibRoutine {\r\n let source = '';\r\n const rank = shape.length;\r\n\r\n let strides = null;\r\n if (rank < 2) {\r\n strides = [];\r\n }\r\n\r\n strides = new Array(rank - 1);\r\n strides[rank - 2] = shape[rank - 1];\r\n for (let i = rank - 3; i >= 0; --i) {\r\n strides[i] = strides[i + 1] * shape[i + 1];\r\n }\r\n const coordsToCompute = ['r', 'c', 'd', 'd2'];\r\n const coordsFromIndexSnippet =\r\n strides\r\n .map((stride, i) => {\r\n const line1 = `int ${coordsToCompute[i]} = index / ${stride}`;\r\n const line2 = i === strides.length - 1 ?\r\n `int ${coordsToCompute[i + 1]} = index - ${coordsToCompute[i]} * ${stride}` :\r\n `index -= ${coordsToCompute[i]} * ${stride}`;\r\n return `${line1}; ${line2};`;\r\n })\r\n .join('');\r\n\r\n source = `\r\n ivec4 getOutputCoords() {\r\n ivec2 resTexRC = ivec2(TexCoords.xy *\r\n vec2(${texShape[0]}, ${texShape[1]}));\r\n int index = resTexRC.y * ${texShape[0]} + resTexRC.x;\r\n ${coordsFromIndexSnippet}\r\n return ivec4(r, c, d, d2);\r\n }\r\n `;\r\n return new GlslLibRoutine(source);\r\n }\r\n\r\n /**\r\n * Unpacked 5D output coordinates.\r\n */\r\n protected getOutputUnpacked5DCoords(shape: [number, number, number, number, number], texShape: [number, number]):\r\n GlslLibRoutine {\r\n let source = '';\r\n const rank = shape.length;\r\n\r\n let strides = null;\r\n if (rank < 2) {\r\n strides = [];\r\n }\r\n\r\n strides = new Array(rank - 1);\r\n strides[rank - 2] = shape[rank - 1];\r\n for (let i = rank - 3; i >= 0; --i) {\r\n strides[i] = strides[i + 1] * shape[i + 1];\r\n }\r\n const coordsToCompute = ['r', 'c', 'd', 'd2', 'd3'];\r\n const coordsFromIndexSnippet =\r\n strides\r\n .map((stride, i) => {\r\n const line1 = `int ${coordsToCompute[i]} = index / ${stride}`;\r\n const line2 = i === strides.length - 1 ?\r\n `int ${coordsToCompute[i + 1]} = index - ${coordsToCompute[i]} * ${stride}` :\r\n `index -= ${coordsToCompute[i]} * ${stride}`;\r\n return `${line1}; ${line2};`;\r\n })\r\n .join('');\r\n\r\n source = `\r\n ivec5 getOutputCoords() {\r\n ivec2 resTexRC = ivec2(TexCoords.xy *\r\n vec2(${texShape[0]}, ${texShape[1]}));\r\n int index = resTexRC.y * ${texShape[0]} + resTexRC.x;\r\n ${coordsFromIndexSnippet}\r\n return ivec5(r, c, d, d2, d3);\r\n }\r\n `;\r\n return new GlslLibRoutine(source);\r\n }\r\n\r\n /**\r\n * Unpacked 6D output coordinates.\r\n */\r\n protected getOutputUnpacked6DCoords(shape: [number, number, number, number, number, number], texShape: [\r\n number, number\r\n ]): GlslLibRoutine {\r\n let source = '';\r\n const rank = shape.length;\r\n\r\n let strides = null;\r\n if (rank < 2) {\r\n strides = [];\r\n }\r\n\r\n strides = new Array(rank - 1);\r\n strides[rank - 2] = shape[rank - 1];\r\n for (let i = rank - 3; i >= 0; --i) {\r\n strides[i] = strides[i + 1] * shape[i + 1];\r\n }\r\n const coordsToCompute = ['r', 'c', 'd', 'd2', 'd3', 'd4'];\r\n const coordsFromIndexSnippet =\r\n strides\r\n .map((stride, i) => {\r\n const line1 = `int ${coordsToCompute[i]} = index / ${stride}`;\r\n const line2 = i === strides.length - 1 ?\r\n `int ${coordsToCompute[i + 1]} = index - ${coordsToCompute[i]} * ${stride}` :\r\n `index -= ${coordsToCompute[i]} * ${stride}`;\r\n return `${line1}; ${line2};`;\r\n })\r\n .join('');\r\n\r\n source = `\r\n ivec6 getOutputCoords() {\r\n ivec2 resTexRC = ivec2(TexCoords.xy *\r\n vec2(${texShape[0]}, ${texShape[1]}));\r\n int index = resTexRC.y * ${texShape[0]} + resTexRC.x;\r\n ${coordsFromIndexSnippet}\r\n return ivec6(r, c, d, d2, d3, d4);\r\n }\r\n `;\r\n return new GlslLibRoutine(source);\r\n }\r\n\r\n /**\r\n * Generates code for common UV coords computation utility functions.\r\n */\r\n protected getCommonUtilFuncs(): {[name: string]: GlslLibRoutine} {\r\n const result: {[name: string]: GlslLibRoutine} = {};\r\n let funcName = 'uvFromFlat';\r\n result[funcName] = new GlslLibRoutine(`\r\n vec2 uvFromFlat(int texNumR, int texNumC, int index) {\r\n int texC = index / texNumR;\r\n int texR = index - texC * texNumR;\r\n // TODO: swap texR, texC order in following function so row is corresponding to u and column is corresponding to\r\n // v.\r\n return (vec2(texR, texC) + halfCR) / vec2(texNumR, texNumC);\r\n }\r\n `);\r\n funcName = 'packedUVfrom1D';\r\n result[funcName] = new GlslLibRoutine(`\r\n vec2 packedUVfrom1D(int texNumR, int texNumC, int index) {\r\n int texelIndex = index / 2;\r\n int texR = texelIndex / texNumC;\r\n int texC = texelIndex - texR * texNumC;\r\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\r\n }\r\n `);\r\n funcName = 'packedUVfrom2D';\r\n result[funcName] = new GlslLibRoutine(`\r\n vec2 packedUVfrom2D(int texNumR, int texNumC, int texelsInLogicalRow, int row, int col) {\r\n int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2);\r\n int texR = texelIndex / texNumC;\r\n int texC = texelIndex - texR * texNumC;\r\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\r\n }\r\n `);\r\n funcName = 'packedUVfrom3D';\r\n result[funcName] = new GlslLibRoutine(`\r\n vec2 packedUVfrom3D(int texNumR, int texNumC,\r\n int texelsInBatch, int texelsInLogicalRow, int b,\r\n int row, int col) {\r\n int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2);\r\n int texR = index / texNumC;\r\n int texC = index - texR * texNumC;\r\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\r\n }\r\n `);\r\n funcName = 'sampleTexture';\r\n const glsl = getGlsl(this.context.glContext.version);\r\n result[funcName] = new GlslLibRoutine(`\r\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\r\n return ${glsl.texture2D}(textureSampler, uv).r;\r\n }`);\r\n return result;\r\n }\r\n\r\n /**\r\n * Constructing snippets for inputs\r\n */\r\n protected getInputsSamplingSnippets(): {[name: string]: GlslLibRoutine} {\r\n const result: {[name: string]: GlslLibRoutine} = {};\r\n const outputLayout = this.context.outputTextureLayout;\r\n this.context.programInfo.inputNames.forEach((samplerName, i) => {\r\n const inputLayout = this.context.inputTextureLayouts[i];\r\n const funcName = generateShaderFuncNameFromInputSamplerName(samplerName);\r\n if (inputLayout.isPacked) {\r\n result[funcName] = this.getPackedSamplerFromInput(funcName, samplerName, inputLayout);\r\n } else {\r\n result[funcName] = this.getUnpackedSamplerFromInput(funcName, samplerName, inputLayout);\r\n }\r\n\r\n const outCoordFuncName = generateShaderFuncNameFromInputSamplerNameAtOutCoords(samplerName);\r\n if (inputLayout.unpackedShape.length <= outputLayout.unpackedShape.length) {\r\n if (inputLayout.isPacked) {\r\n result[outCoordFuncName] =\r\n this.getPackedSamplerAtOutputCoords(outCoordFuncName, inputLayout, outputLayout, samplerName);\r\n } else {\r\n result[outCoordFuncName] =\r\n this.getUnpackedSamplerAtOutputCoords(outCoordFuncName, inputLayout, outputLayout, samplerName);\r\n }\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Constructing snippets for output coordinates of samplers\r\n */\r\n protected getPackedSamplerAtOutputCoords(\r\n funcName: string, inputLayout: TextureLayout, outputLayout: TextureLayout, name: string): GlslLibRoutine {\r\n const inShape = inputLayout.unpackedShape;\r\n const outShape = outputLayout.unpackedShape;\r\n const texName = name;\r\n const texFuncSnippet = generateShaderFuncNameFromInputSamplerName(texName);\r\n\r\n const inRank = inShape.length;\r\n const outRank = outShape.length;\r\n\r\n const broadcastDims = BroadcastUtil.getBroadcastDims(inShape, outShape);\r\n\r\n const type = getCoordsDataType(outRank);\r\n const rankDiff = outRank - inRank;\r\n let coordsSnippet: string;\r\n const fields = getGlChannels();\r\n\r\n if (inRank === 0) {\r\n coordsSnippet = '';\r\n } else if (outRank < 2 && broadcastDims.length >= 1) {\r\n coordsSnippet = 'coords = 0;';\r\n } else {\r\n coordsSnippet = broadcastDims.map(d => `coords.${fields[d + rankDiff]} = 0;`).join('\\n');\r\n }\r\n let unpackedCoordsSnippet = '';\r\n if (outRank < 2 && inRank > 0) {\r\n unpackedCoordsSnippet = 'coords';\r\n } else {\r\n unpackedCoordsSnippet = inShape.map((s, i) => `coords.${fields[i + rankDiff]}`).join(', ');\r\n }\r\n\r\n let output = 'return outputValue;';\r\n const inSize = ShapeUtil.size(inShape);\r\n const isInputScalar = inSize === 1;\r\n const outSize = ShapeUtil.size(outShape);\r\n const isOutputScalar = outSize === 1;\r\n\r\n if (inRank === 1 && !isInputScalar && !isOutputScalar) {\r\n output = `\r\n return vec4(outputValue.xy, outputValue.xy);\r\n `;\r\n } else if (isInputScalar && !isOutputScalar) {\r\n if (outRank === 1) {\r\n output = `\r\n return vec4(outputValue.x, outputValue.x, 0., 0.);\r\n `;\r\n } else {\r\n output = `\r\n return vec4(outputValue.x);\r\n `;\r\n }\r\n } else if (broadcastDims.length) {\r\n const rows = inRank - 2;\r\n const cols = inRank - 1;\r\n\r\n if (broadcastDims.indexOf(rows) > -1 && broadcastDims.indexOf(cols) > -1) {\r\n output = 'return vec4(outputValue.x);';\r\n } else if (broadcastDims.indexOf(rows) > -1) {\r\n output = 'return vec4(outputValue.x, outputValue.y, ' +\r\n 'outputValue.x, outputValue.y);';\r\n } else if (broadcastDims.indexOf(cols) > -1) {\r\n output = 'return vec4(outputValue.xx, outputValue.zz);';\r\n }\r\n }\r\n\r\n const swapLastDimsSnippet = `\r\n int lastDim = coords.${fields[outRank - 1]};\r\n coords.${fields[outRank - 1]} = coords.${fields[outRank - 2]};\r\n coords.${fields[outRank - 2]} = lastDim;\r\n `;\r\n const source = `\r\n vec4 ${funcName}() {\r\n ${type} coords = getOutputCoords();\r\n ${swapLastDimsSnippet}\r\n ${coordsSnippet}\r\n vec4 outputValue = ${texFuncSnippet}(${unpackedCoordsSnippet});\r\n ${output}\r\n }\r\n `;\r\n return new GlslLibRoutine(source, ['coordinates.getOutputCoords']);\r\n }\r\n\r\n /**\r\n * Constructing snippets for unpacked output coordinates of samplers\r\n */\r\n protected getUnpackedSamplerAtOutputCoords(\r\n funcName: string, inputLayout: TextureLayout, outputLayout: TextureLayout, name: string): GlslLibRoutine {\r\n const outTexShape = [outputLayout.width, outputLayout.height];\r\n const inTexShape = [inputLayout.width, inputLayout.height];\r\n const inRank = inputLayout.unpackedShape.length;\r\n const outRank = outputLayout.unpackedShape.length;\r\n const inShape = inputLayout.unpackedShape;\r\n const outShape = outputLayout.unpackedShape;\r\n const texFuncSnippet = generateShaderFuncNameFromInputSamplerName(name);\r\n\r\n if (inRank === outRank && ArrayUtil.arraysEqual(inTexShape, outTexShape)) {\r\n const source = `\r\n float ${funcName}() {\r\n return sampleTexture(${name}, TexCoords);\r\n }\r\n `;\r\n return new GlslLibRoutine(source, ['coordinates.sampleTexture']);\r\n }\r\n\r\n const type = getCoordsDataType(outRank);\r\n const broadcastDims = BroadcastUtil.getBroadcastDims(inShape, outShape);\r\n const rankDiff = outRank - inRank;\r\n let coordsSnippet: string;\r\n const fields = getGlChannels();\r\n\r\n if (inRank === 0) {\r\n coordsSnippet = '';\r\n } else if (outRank < 2 && broadcastDims.length >= 1) {\r\n coordsSnippet = 'coords = 0;';\r\n } else {\r\n coordsSnippet = broadcastDims.map(d => `coords.${fields[d + rankDiff]} = 0;`).join('\\n');\r\n }\r\n let unpackedCoordsSnippet = '';\r\n if (outRank < 2 && inRank > 0) {\r\n unpackedCoordsSnippet = 'coords';\r\n } else {\r\n unpackedCoordsSnippet = inputLayout.unpackedShape.map((s, i) => `coords.${fields[i + rankDiff]}`).join(', ');\r\n }\r\n const source = `\r\n float ${funcName}() {\r\n ${type} coords = getOutputCoords();\r\n ${coordsSnippet}\r\n return ${texFuncSnippet}(${unpackedCoordsSnippet});\r\n }\r\n `;\r\n return new GlslLibRoutine(source, ['coordinates.getOutputCoords']);\r\n }\r\n\r\n /**\r\n * Constructing snippets for packed operations.\r\n */\r\n protected getPackedSamplerFromInput(funcName: string, name: string, inputLayout: TextureLayout): GlslLibRoutine {\r\n switch (inputLayout.unpackedShape.length) {\r\n case 0:\r\n return this.getPackedSamplerScalar(funcName, name);\r\n case 1:\r\n return this.getPackedSampler1D(funcName, name, inputLayout);\r\n case 2:\r\n return this.getPackedSampler2D(funcName, name, inputLayout);\r\n case 3:\r\n return this.getPackedSampler3D(funcName, name, inputLayout);\r\n default:\r\n return this.getPackedSamplerND(funcName, name, inputLayout);\r\n }\r\n }\r\n\r\n /**\r\n * Constructing snippets for unpacked operations.\r\n */\r\n protected getUnpackedSamplerFromInput(funcName: string, name: string, inputLayout: TextureLayout): GlslLibRoutine {\r\n const shape = inputLayout.unpackedShape;\r\n switch (shape.length) {\r\n case 0:\r\n return this.getUnpackedSamplerScalar(funcName, name, inputLayout);\r\n case 1:\r\n return this.getUnpackedSampler1D(funcName, name, inputLayout);\r\n case 2:\r\n return this.getUnpackedSampler2D(funcName, name, inputLayout);\r\n case 3:\r\n return this.getUnpackedSampler3D(funcName, name, inputLayout);\r\n case 4:\r\n return this.getUnpackedSampler4D(funcName, name, inputLayout);\r\n case 5:\r\n return this.getUnpackedSampler5D(funcName, name, inputLayout);\r\n case 6:\r\n return this.getUnpackedSampler6D(funcName, name, inputLayout);\r\n default:\r\n // TODO support more dimensionalities\r\n throw new Error(`Unsupported dimension ${shape.length}-D`);\r\n }\r\n }\r\n\r\n /**\r\n * Packed scalar snippet.\r\n */\r\n protected getPackedSamplerScalar(funcName: string, name: string): GlslLibRoutine {\r\n const glsl = getGlsl(this.context.glContext.version);\r\n const source = `\r\n vec4 ${funcName}() {\r\n return ${glsl.texture2D}(${name}, halfCR);\r\n }\r\n `;\r\n return new GlslLibRoutine(source);\r\n }\r\n\r\n /**\r\n * Packed 1D snippet.\r\n */\r\n protected getPackedSampler1D(funcName: string, name: string, inputLayout: TextureLayout): GlslLibRoutine {\r\n const texShape = [inputLayout.width, inputLayout.height];\r\n const packedTexShape = [texShape[1], texShape[0]];\r\n const glsl = getGlsl(this.context.glContext.version);\r\n\r\n const packedSampler = `vec4 ${funcName}(int index) {\r\n vec2 uv = packedUVfrom1D(\r\n ${packedTexShape[0]}, ${packedTexShape[1]}, index);\r\n return ${glsl.texture2D}(${name}, uv);\r\n }`;\r\n const source = packedSampler;\r\n return new GlslLibRoutine(source, ['coordinates.packedUVfrom1D']);\r\n }\r\n\r\n /**\r\n * Packed 2D snippet.\r\n */\r\n protected getPackedSampler2D(funcName: string, name: string, inputLayout: TextureLayout): GlslLibRoutine {\r\n const shape = inputLayout.unpackedShape;\r\n const texShape = [inputLayout.width, inputLayout.height];\r\n const glsl = getGlsl(this.context.glContext.version);\r\n const texNumR = texShape[0];\r\n const texNumC = texShape[1];\r\n\r\n if (texShape != null && ArrayUtil.arraysEqual(shape, texShape)) {\r\n const packedSampler = `vec4 ${funcName}(int row, int col) {\r\n vec2 uv = (vec2(col, row) + halfCR) / vec2(${texNumC}.0, ${texNumR}.0);\r\n return ${glsl.texture2D}(${name}, uv);\r\n }`;\r\n\r\n return new GlslLibRoutine(packedSampler);\r\n }\r\n const packedTexShape = texShape;\r\n const valuesPerRow = Math.ceil(shape[1] / 2);\r\n const packedSampler = `vec4 ${funcName}(int row, int col) {\r\n vec2 uv = packedUVfrom2D(${packedTexShape[1]}, ${packedTexShape[0]}, ${valuesPerRow}, row, col);\r\n return ${glsl.texture2D}(${name}, uv);\r\n }`;\r\n const source = packedSampler;\r\n return new GlslLibRoutine(source, ['coordinates.packedUVfrom2D']);\r\n }\r\n\r\n /**\r\n * Packed 3D snippet.\r\n */\r\n protected getPackedSampler3D(funcName: string, name: string, inputLayout: TextureLayout): GlslLibRoutine {\r\n const shape = inputLayout.unpackedShape;\r\n const texShape = [inputLayout.width, inputLayout.height];\r\n const packedTexShape = [texShape[0], texShape[1]];\r\n const glsl = getGlsl(this.context.glContext.version);\r\n\r\n if (shape[0] === 1) {\r\n const squeezedShape = shape.slice(1);\r\n const keptDims = [1, 2];\r\n const newInputShape = squeezeInputShape(shape, squeezedShape);\r\n const params = ['b', 'row', 'col'];\r\n // Deep copy of input texture layout.\r\n const newInputLayout: TextureLayout = JSON.parse(JSON.stringify(inputLayout));\r\n newInputLayout.unpackedShape = newInputShape;\r\n const samplerRoutine = this.getPackedSamplerFromInput(funcName, name, newInputLayout);\r\n const packedSampler = `${samplerRoutine.routineBody}\r\n vec4 ${funcName}(int b, int row, int col) {\r\n return ${funcName}(${getSqueezedParams(params, keptDims)});\r\n } `;\r\n const source = packedSampler;\r\n return new GlslLibRoutine(source, samplerRoutine.dependencies);\r\n }\r\n const texNumR = packedTexShape[0];\r\n const texNumC = packedTexShape[1];\r\n\r\n const valuesPerRow = Math.ceil(shape[2] / 2);\r\n const texelsInBatch = valuesPerRow * Math.ceil(shape[1] / 2);\r\n\r\n const packedSampler = `vec4 ${funcName}(int b, int row, int col) {\r\n vec2 uv = packedUVfrom3D(\r\n ${texNumC}, ${texNumR}, ${texelsInBatch}, ${valuesPerRow}, b, row, col);\r\n return ${glsl.texture2D}(${name}, uv);}`;\r\n const source = packedSampler;\r\n return new GlslLibRoutine(source, ['coordinates.packedUVfrom3D']);\r\n }\r\n /*\r\n * Packed ND snippet.\r\n */\r\n protected getPackedSamplerND(funcName: string, name: string, inputLayout: TextureLayout): GlslLibRoutine {\r\n const shape = inputLayout.unpackedShape;\r\n const rank = shape.length;\r\n const texShape = [inputLayout.width, inputLayout.height];\r\n const glsl = getGlsl(this.context.glContext.version);\r\n\r\n const packedTexShape = [texShape[0], texShape[1]];\r\n const texNumR = packedTexShape[1];\r\n const texNumC = packedTexShape[0];\r\n const valuesPerRow = Math.ceil(shape[rank - 1] / 2);\r\n let texelsInBatch = valuesPerRow * Math.ceil(shape[rank - 2] / 2);\r\n let params = 'int b, int row, int col';\r\n let index = `b * ${texelsInBatch} + (row / 2) * ${valuesPerRow} + (col / 2)`;\r\n for (let b = 2; b < rank - 1; b++) {\r\n params = `int b${b}, ` + params;\r\n texelsInBatch *= shape[rank - b - 1];\r\n index = `b${b} * ${texelsInBatch} + ` + index;\r\n }\r\n const packedSampler = `vec4 ${funcName}(${params}) {\r\n int index = ${index};\r\n int texR = index / ${texNumC};\r\n int texC = index - texR * ${texNumC};\r\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${texNumC}, ${texNumR});\r\n return ${glsl.texture2D}(${name}, uv);\r\n }`;\r\n const source = packedSampler;\r\n return new GlslLibRoutine(source);\r\n }\r\n\r\n /**\r\n * Unpacked scalar snippet.\r\n */\r\n protected getUnpackedSamplerScalar(funcName: string, name: string, inputLayout: TextureLayout): GlslLibRoutine {\r\n const [texNumR, texNumC] = [inputLayout.width, inputLayout.height];\r\n if (texNumR === 1 && texNumC === 1) {\r\n const source = `\r\n float ${funcName}() {\r\n return sampleTexture(${name}, halfCR);\r\n }\r\n `;\r\n return new GlslLibRoutine(source, ['coordinates.sampleTexture']);\r\n }\r\n\r\n const source = `\r\n float ${funcName}() {\r\n int offset_${name} = coordsToOffset(TexCoords, ${texNumR}, ${texNumC});\r\n vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, offset_${name});\r\n return sampleTexture(${name}, uv);\r\n }\r\n `;\r\n return new GlslLibRoutine(\r\n source, ['coordinates.uvFromFlat', 'coordinates.sampleTexture', 'coordinates.coordsToOffset']);\r\n }\r\n\r\n /**\r\n * Unpacked 1D snippet.\r\n */\r\n protected getUnpackedSampler1D(funcName: string, name: string, inputLayout: TextureLayout): GlslLibRoutine {\r\n const tNumR = inputLayout.width;\r\n const tNumC = inputLayout.height;\r\n\r\n if (tNumC === 1 && tNumR === 1) {\r\n const source = `\r\n float ${funcName}(int index) {\r\n return sampleTexture(${name}, halfCR);\r\n }\r\n `;\r\n return new GlslLibRoutine(source, ['coordinates.sampleTexture']);\r\n }\r\n\r\n if (tNumC === 1) {\r\n const source = `\r\n float ${funcName}(int index) {\r\n vec2 uv = vec2((float(index) + 0.5) / ${tNumR}.0, 0.5);\r\n return sampleTexture(${name}, uv);\r\n }\r\n `;\r\n return new GlslLibRoutine(source, ['coordinates.sampleTexture']);\r\n }\r\n if (tNumR === 1) {\r\n const source = `\r\n float ${funcName}(int index) {\r\n vec2 uv = vec2(0.5, (float(index) + 0.5) / ${tNumC}.0);\r\n return sampleTexture(${name}, uv);\r\n }\r\n `;\r\n return new GlslLibRoutine(source, ['coordinates.sampleTexture']);\r\n }\r\n const source = `\r\n float ${funcName}(int index) {\r\n vec2 uv = uvFromFlat(${tNumR}, ${tNumC}, index);\r\n return sampleTexture(${name}, uv);\r\n }\r\n `;\r\n return new GlslLibRoutine(source, ['coordinates.uvFromFlat', 'coordinates.sampleTexture']);\r\n }\r\n\r\n /**\r\n * Unpacked 2D snippet.\r\n */\r\n\r\n protected getUnpackedSampler2D(funcName: string, name: string, inputLayout: TextureLayout): GlslLibRoutine {\r\n const shape = inputLayout.unpackedShape;\r\n\r\n // TODO: modify row/col order for other dimensions.\r\n const texShape = [inputLayout.height, inputLayout.width];\r\n\r\n if (texShape != null && ArrayUtil.arraysEqual(shape, texShape)) {\r\n const texNumR = texShape[1];\r\n const texNumC = texShape[0];\r\n const source = `\r\n float ${funcName}(int row, int col) {\r\n vec2 uv = (vec2(row, col) + halfCR) / vec2(${texNumR}.0, ${texNumC}.0);\r\n return sampleTexture(${name}, uv);\r\n }\r\n `;\r\n return new GlslLibRoutine(source, ['coordinates.sampleTexture']);\r\n }\r\n\r\n const {newShape, keptDims} = squeezeShape(shape as number[]);\r\n const squeezedShape = newShape;\r\n if (squeezedShape.length < shape.length) {\r\n const newInputShape = squeezeInputShape(shape, squeezedShape);\r\n // Deep copy of input texture layout.\r\n const newInputLayout: TextureLayout = JSON.parse(JSON.stringify(inputLayout));\r\n newInputLayout.unpackedShape = newInputShape;\r\n\r\n const params = ['col', 'row'];\r\n const source = `\r\n ${this.getUnpackedSamplerFromInput(funcName, name, newInputLayout).routineBody}\r\n float ${funcName}(int row, int col) {\r\n return ${funcName}(${getSqueezedParams(params, keptDims)});\r\n }\r\n `;\r\n return new GlslLibRoutine(source, ['coordinates.sampleTexture']);\r\n }\r\n\r\n const texNumR = texShape[1];\r\n const texNumC = texShape[0];\r\n if (texNumC === 1) {\r\n const source = `\r\n float ${funcName}(int row, int col) {\r\n int offset_${name} = coordsToOffset(TexCoords, ${texNumR}, ${texNumC});\r\n float index = dot(vec3(row, col, offset_${name}), vec3(${shape[1]}, 1, 1));\r\n vec2 uv = vec2(0.5, (index + 0.5) / ${texNumR}.0);\r\n return sampleTexture(${name}, uv);\r\n }\r\n `;\r\n return new GlslLibRoutine(source, ['coordinates.sampleTexture', 'coordinates.coordsToOffset']);\r\n }\r\n\r\n if (texNumR === 1) {\r\n const source = `\r\n float ${funcName}(int row, int col) {\r\n int offset_${name} = coordsToOffset(TexCoords, ${texNumR}, ${texNumC});\r\n float index = dot(vec3(row, col, offset_${name}), vec3(${shape[1]}, 1, 1));\r\n vec2 uv = vec2((index + 0.5) / ${texNumC}.0, 0.5);\r\n return sampleTexture(${name}, uv);\r\n }\r\n `;\r\n return new GlslLibRoutine(source, ['coordinates.sampleTexture', 'coordinates.coordsToOffset']);\r\n }\r\n\r\n const source = `\r\n float ${funcName}(int row, int col) {\r\n int index = col * ${shape[1]} + row;\r\n vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index);\r\n return sampleTexture(${name}, uv);\r\n }\r\n `;\r\n return new GlslLibRoutine(\r\n source, ['coordinates.uvFromFlat', 'coordinates.sampleTexture', 'coordinates.coordsToOffset']);\r\n }\r\n\r\n /**\r\n * Unpacked 3D snippet.\r\n */\r\n\r\n protected getUnpackedSampler3D(funcName: string, name: string, inputLayout: TextureLayout): GlslLibRoutine {\r\n const shape = inputLayout.unpackedShape;\r\n const stride0 = shape[1] * shape[2];\r\n const stride1 = shape[2];\r\n\r\n const {newShape, keptDims} = squeezeShape(shape as number[]);\r\n const squeezedShape = newShape;\r\n if (squeezedShape.length < shape.length) {\r\n const newInputShape = squeezeInputShape(shape, squeezedShape);\r\n const params = ['batch', 'col', 'row'];\r\n // Deep copy of input texture layout.\r\n const newInputLayout: TextureLayout = JSON.parse(JSON.stringify(inputLayout));\r\n newInputLayout.unpackedShape = newInputShape;\r\n const routine = this.getUnpackedSamplerFromInput(funcName, name, newInputLayout);\r\n // TODO: revisit the logic here to make it simpler\r\n const revDims = keptDims.reverse();\r\n const source = `\r\n ${routine.routineBody}\r\n float ${funcName}(int batch, int row, int col) {\r\n return ${funcName}(${getSqueezedParams(params, revDims)});\r\n }\r\n `;\r\n return new GlslLibRoutine(source, routine.dependencies);\r\n }\r\n\r\n const texNumR = inputLayout.width;\r\n const texNumC = inputLayout.height;\r\n const source = `\r\n float ${funcName}(int depth, int row, int col) {\r\n // Explicitly use integer operations as dot() only works on floats.\r\n int index = depth * ${stride0} + col * ${stride1} + row;\r\n vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index);\r\n return sampleTexture(${name}, uv);\r\n }\r\n `;\r\n return new GlslLibRoutine(\r\n source, ['coordinates.uvFromFlat', 'coordinates.sampleTexture', 'coordinates.coordsToOffset']);\r\n }\r\n\r\n /**\r\n * Unpacked 4D snippet.\r\n */\r\n\r\n protected getUnpackedSampler4D(funcName: string, name: string, inputLayout: TextureLayout): GlslLibRoutine {\r\n const shape = inputLayout.unpackedShape;\r\n const stride2 = shape[3];\r\n const stride1 = shape[2] * stride2;\r\n const stride0 = shape[1] * stride1;\r\n\r\n //\r\n // TODO: re-enable this shortcut once the index calculation bug is fixed.\r\n //\r\n // const {newShape, keptDims} = squeezeShape(shape as number[]);\r\n // if (newShape.length < shape.length) {\r\n // const newInputShape = squeezeInputShape(shape, newShape);\r\n // const params = ['row', 'col', 'depth', 'depth2'];\r\n // // Deep copy of input texture layout.\r\n // const newInputLayout: TextureLayout = JSON.parse(JSON.stringify(inputLayout));\r\n // newInputLayout.unpackedShape = newInputShape;\r\n // const source = `\r\n // ${this.getUnpackedSamplerFromInput(funcName, name, newInputLayout).routineBody}\r\n // float ${funcName}(int row, int col, int depth, int depth2) {\r\n // return ${funcName}(${getSqueezedParams(params, keptDims)});\r\n // }\r\n // `;\r\n // return new GlslLibRoutine(\r\n // source, ['coordinates.uvFromFlat', 'coordinates.sampleTexture', 'coordinates.coordsToOffset']);\r\n // }\r\n\r\n const texNumR = inputLayout.width;\r\n const texNumC = inputLayout.height;\r\n const source = `\r\n float ${funcName}(int row, int col, int depth, int depth2) {\r\n int index = row * ${stride0} + col * ${stride1} +\r\n depth2 * ${stride2} + depth;\r\n vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index);\r\n return sampleTexture(${name}, uv);\r\n }\r\n `;\r\n return new GlslLibRoutine(source, ['coordinates.uvFromFlat', 'coordinates.sampleTexture']);\r\n }\r\n\r\n /**\r\n * Unpacked 5D snippet.\r\n */\r\n protected getUnpackedSampler5D(funcName: string, name: string, inputLayout: TextureLayout): GlslLibRoutine {\r\n const shape = inputLayout.unpackedShape;\r\n const stride3 = shape[4];\r\n const stride2 = shape[3] * stride3;\r\n const stride1 = shape[2] * stride2;\r\n const stride0 = shape[1] * stride1;\r\n\r\n const {newShape, keptDims} = squeezeShape(shape as number[]);\r\n if (newShape.length < shape.length) {\r\n const newInputShape = squeezeInputShape(shape, newShape);\r\n const params = ['row', 'col', 'depth', 'depth2', 'depth3'];\r\n // Deep copy of input texture layout.\r\n const newInputLayout: TextureLayout = JSON.parse(JSON.stringify(inputLayout));\r\n newInputLayout.unpackedShape = newInputShape;\r\n\r\n const source = `\r\n ${this.getUnpackedSamplerFromInput(funcName, name, newInputLayout).routineBody}\r\n float ${funcName}(int row, int col, int depth, int depth2, int depth3) {\r\n return ${funcName}(${getSqueezedParams(params, keptDims)});\r\n }\r\n `;\r\n return new GlslLibRoutine(source, ['coordinates.sampleTexture', 'coordinates.uvFromFlat']);\r\n }\r\n\r\n const texNumR = inputLayout.width;\r\n const texNumC = inputLayout.height;\r\n const source = `\r\n float ${funcName}(int row, int col, int depth, int depth2, int depth3) {\r\n int index = row * ${stride0} + col * ${stride1} + depth * ${stride2} +\r\n depth3 * ${stride3} + depth2;\r\n vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index);\r\n return sampleTexture(${name}, uv);\r\n }\r\n `;\r\n return new GlslLibRoutine(source, ['coordinates.sampleTexture', 'coordinates.uvFromFlat']);\r\n }\r\n\r\n /**\r\n * Unpacked 6D snippet.\r\n */\r\n protected getUnpackedSampler6D(funcName: string, name: string, inputLayout: TextureLayout): GlslLibRoutine {\r\n const shape = inputLayout.unpackedShape;\r\n const stride4 = shape[5];\r\n const stride3 = shape[4] * stride4;\r\n const stride2 = shape[3] * stride3;\r\n const stride1 = shape[2] * stride2;\r\n const stride0 = shape[1] * stride1;\r\n\r\n const {newShape, keptDims} = squeezeShape(shape as number[]);\r\n if (newShape.length < shape.length) {\r\n const newInputShape = squeezeInputShape(shape, newShape);\r\n const params = ['row', 'col', 'depth', 'depth2', 'depth3', 'depth4'];\r\n // Deep copy of input texture layout.\r\n const newInputLayout: TextureLayout = JSON.parse(JSON.stringify(inputLayout));\r\n newInputLayout.unpackedShape = newInputShape;\r\n\r\n const source = `\r\n ${this.getUnpackedSamplerFromInput(funcName, name, newInputLayout).routineBody}\r\n float ${funcName}(int row, int col, int depth,\r\n int depth2, int depth3, int depth4) {\r\n return ${funcName}(${getSqueezedParams(params, keptDims)});\r\n }\r\n `;\r\n return new GlslLibRoutine(source, ['coordinates.sampleTexture', 'coordinates.uvFromFlat']);\r\n }\r\n\r\n const texNumR = inputLayout.width;\r\n const texNumC = inputLayout.height;\r\n const source = `\r\n float ${funcName}(int row, int col, int depth,\r\n int depth2, int depth3, int depth4) {\r\n int index = row * ${stride0} + col * ${stride1} + depth * ${stride2} +\r\n depth2 * ${stride3} + depth3 * ${stride4} + depth4;\r\n vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index);\r\n return sampleTexture(${name}, uv);\r\n }\r\n `;\r\n return new GlslLibRoutine(\r\n source, ['coordinates.uvFromFlat', 'coordinates.sampleTexture', 'coordinates.coordsToOffset']);\r\n }\r\n\r\n /**\r\n * This is the main function to map from the given texture coordiantes (s,t)\r\n * to logical indices for the output\r\n * There will only be one single variation of this\r\n * Also see coordsToOffset and offsetToIndices for input-specific versions\r\n */\r\n protected toVec(): {[name: string]: GlslLibRoutine} {\r\n const output = this.context.outputTextureLayout;\r\n const rank = output.shape.length;\r\n const strides = output.strides;\r\n const xScale = output.width;\r\n const yScale = output.height;\r\n\r\n const stridesBlock = [];\r\n for (let i = 0; i < rank - 1; ++i) {\r\n stridesBlock.push(`\r\n c[${i}] = offset / ${strides[i]};`);\r\n stridesBlock.push(`\r\n offset -= c[${i}] * ${strides[i]};`);\r\n }\r\n stridesBlock.push(`\r\n c[${rank - 1}] = offset;`);\r\n const body = `\r\n void toVec(vec2 texCoords, out int c[${rank}]) {\r\n int offset = coordsToOffset(texCoords, ${xScale}, ${yScale});\r\n ${stridesBlock.join('')}\r\n }\r\n void toVec(int offset, out int c[${rank}]) {\r\n ${stridesBlock.join('')}\r\n }\r\n `;\r\n return {toVec: new GlslLibRoutine(body, ['coordinates.coordsToOffset'])};\r\n }\r\n /**\r\n * These are value getter functions generated for each input\r\n * Each function is hardwired to the name and dimensions of the input\r\n * An '_T' variation is also produced which accesses values as if the\r\n * input was transposed\r\n */\r\n protected valueFrom(): {[name: string]: GlslLibRoutine} {\r\n const result: {[name: string]: GlslLibRoutine} = {};\r\n this.context.programInfo.inputNames.forEach((name, i) => {\r\n const layout = this.context.inputTextureLayouts[i];\r\n const shape = layout.unpackedShape.length > 0 ? layout.unpackedShape : layout.shape;\r\n const rank = shape.length;\r\n let funcName = `_${name}`;\r\n result[funcName] = new GlslLibRoutine(\r\n this.getValueFromSingle(name, rank, layout.width, layout.height, false),\r\n [`shapeUtils.indicesToOffset${funcName}`, 'coordinates.offsetToCoords', 'fragcolor.getColorAsFloat']);\r\n funcName = funcName + '_T';\r\n result[funcName] = new GlslLibRoutine(\r\n this.getValueFromSingle(name, rank, layout.width, layout.height, true),\r\n [`shapeUtils.indicesToOffset${funcName}`, 'coordinates.offsetToCoords', 'fragcolor.getColorAsFloat']);\r\n });\r\n return result;\r\n }\r\n /**\r\n * Produces one value getter function for the name and rank given\r\n * If a transpose is set proper offsetToCoords mapping will be used\r\n * @param name name of the function\r\n * @param rank rank of the input\r\n * @param transpose whether or not should generate a transpose variation\r\n */\r\n protected getValueFromSingle(varName: string, rank: number, width: number, height: number, transpose: boolean):\r\n string {\r\n let name = `_${varName}`;\r\n if (transpose) {\r\n name = name + '_T';\r\n }\r\n const glsl = getGlsl(this.context.glContext.version);\r\n return `\r\n float ${name}(int m[${rank}]) {\r\n int offset = indicesToOffset${name}(m);\r\n vec2 coords = offsetToCoords(offset, ${width}, ${height});\r\n float value = getColorAsFloat(${glsl.texture2D}(${varName}, coords));\r\n return value;\r\n }\r\n `;\r\n }\r\n\r\n /**\r\n * Produces a packed value getter function for the name and rank given\r\n * If a transpose is set proper offsetToCoords mapping will be used\r\n * @param name name of the function\r\n * @param rank rank of the input\r\n * @param transpose whether or not should generate a transpose variation\r\n */\r\n protected getPackedValueFrom(varName: string, rank: number, width: number, height: number, transpose: boolean):\r\n string {\r\n let name = `_${varName}_Pack`;\r\n if (transpose) {\r\n name = name + '_T';\r\n }\r\n const glsl = getGlsl(this.context.glContext.version);\r\n return `\r\n vec4 ${name}(int m[${rank}]) {\r\n int offset = indicesToOffset_${varName}(m);\r\n vec2 coords = offsetToCoords(offset, ${width}, ${height});\r\n return ${glsl.texture2D}(${varName}, coords);\r\n }\r\n `;\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {ProgramInfo, TextureLayout} from './types';\r\nimport {WebGLContext} from './webgl-context';\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\nexport enum FunctionType {\r\n ValueBased,\r\n Positional\r\n}\r\nexport interface GlslFunction {\r\n body: string;\r\n name: string;\r\n type: T;\r\n}\r\nexport type GlslValueFunction = GlslFunction;\r\nexport interface GlslPositionalFunction extends GlslFunction {\r\n inputShape: readonly number[];\r\n outputShape: readonly number[];\r\n}\r\n\r\nexport class GlslContext {\r\n constructor(\r\n public glContext: WebGLContext, public programInfo: ProgramInfo, public inputTextureLayouts: TextureLayout[],\r\n public outputTextureLayout: TextureLayout) {}\r\n}\r\nexport abstract class GlslLib {\r\n constructor(public context: GlslContext) {}\r\n abstract getFunctions(): {[name: string]: GlslLibRoutine};\r\n abstract getCustomTypes(): {[name: string]: string};\r\n}\r\n\r\n// abstraction to represent a GLSL library routine and it's dependencies\r\nexport class GlslLibRoutine {\r\n constructor(public routineBody: string, public dependencies?: string[]) {}\r\n}\r\n\r\n// abstraction to represent a GLSL library routine and it's dependencies AS GRAPH Nodes\r\n// this level of abstraction is used to topologically sort routines before fragment shade inclusion\r\nexport class GlslLibRoutineNode {\r\n dependencies: GlslLibRoutineNode[];\r\n routineBody: string;\r\n constructor(public name: string, routineBody?: string, dependencies?: GlslLibRoutineNode[]) {\r\n if (dependencies) {\r\n this.dependencies = dependencies;\r\n } else {\r\n this.dependencies = [];\r\n }\r\n\r\n if (routineBody) {\r\n this.routineBody = routineBody;\r\n }\r\n }\r\n addDependency(node: GlslLibRoutineNode) {\r\n if (node) {\r\n this.dependencies.push(node);\r\n }\r\n }\r\n}\r\n\r\n// topologically sort GLSL library routines (graph nodes abstraction) before shader script inclusion\r\nexport class TopologicalSortGlslRoutines {\r\n static returnOrderedNodes(nodes: GlslLibRoutineNode[]): GlslLibRoutineNode[] {\r\n if (!nodes || nodes.length === 0) {\r\n return [];\r\n }\r\n\r\n if (nodes.length === 1) {\r\n return nodes;\r\n }\r\n\r\n const cycleCheck = new Set();\r\n const alreadyTraversed = new Set();\r\n const result = new Array();\r\n\r\n this.createOrderedNodes(nodes, cycleCheck, alreadyTraversed, result);\r\n return result;\r\n }\r\n\r\n private static createOrderedNodes(\r\n graphNodes: GlslLibRoutineNode[], cycleCheck: Set, alreadyTraversed: Set,\r\n result: GlslLibRoutineNode[]) {\r\n for (let i = 0; i < graphNodes.length; ++i) {\r\n this.dfsTraverse(graphNodes[i], cycleCheck, alreadyTraversed, result);\r\n }\r\n }\r\n\r\n private static dfsTraverse(\r\n root: GlslLibRoutineNode, cycleCheck: Set, alreadyTraversed: Set, result: GlslLibRoutineNode[]) {\r\n // if this root has already been traversed return\r\n if (!root || alreadyTraversed.has(root.name)) {\r\n return;\r\n }\r\n\r\n // cyclic dependency has been detected\r\n if (cycleCheck.has(root.name)) {\r\n throw new Error('Cyclic dependency detected. Can\\'t topologically sort routines needed for shader.');\r\n }\r\n\r\n // hold this node to detect cycles if any\r\n cycleCheck.add(root.name);\r\n\r\n // traverse children in a dfs fashion\r\n const dependencies = root.dependencies;\r\n if (dependencies && dependencies.length > 0) {\r\n for (let i = 0; i < dependencies.length; ++i) {\r\n this.dfsTraverse(dependencies[i], cycleCheck, alreadyTraversed, result);\r\n }\r\n }\r\n\r\n // add to result holder\r\n result.push(root);\r\n\r\n // mark this node as traversed so that we don't traverse from this again\r\n alreadyTraversed.add(root.name);\r\n\r\n // release the hold\r\n cycleCheck.delete(root.name);\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {GlslContext, GlslLib, GlslLibRoutine} from './glsl-definitions';\r\n\r\n/**\r\n * This GLSL library handles routines converting\r\n * float32 to/from Unsigned byte or float 16\r\n */\r\nexport class EncodingGlslLib extends GlslLib {\r\n constructor(context: GlslContext) {\r\n super(context);\r\n }\r\n getFunctions(): {[name: string]: GlslLibRoutine} {\r\n return {...this.encodeFloat32(), ...this.decodeFloat32()};\r\n }\r\n getCustomTypes(): {[name: string]: string} {\r\n return {};\r\n }\r\n protected encodeFloat32(): {[name: string]: GlslLibRoutine} {\r\n return {\r\n encode: new GlslLibRoutine(`highp vec4 encode(highp float f) {\r\n return vec4(f, 0.0, 0.0, 0.0);\r\n }\r\n `)\r\n };\r\n }\r\n protected decodeFloat32(): {[name: string]: GlslLibRoutine} {\r\n return {\r\n decode: new GlslLibRoutine(`highp float decode(highp vec4 rgba) {\r\n return rgba.r;\r\n }\r\n `)\r\n };\r\n }\r\n /**\r\n * returns the routine to encode encode a 32bit float to a vec4 (of unsigned bytes)\r\n * @credit: https://stackoverflow.com/questions/7059962/how-do-i-convert-a-vec4-rgba-value-to-a-float\r\n */\r\n protected encodeUint8(): {[name: string]: GlslLibRoutine} {\r\n const endianness = EncodingGlslLib.isLittleEndian() ? 'rgba.rgba=rgba.abgr;' : '';\r\n return {\r\n encode: new GlslLibRoutine(`\r\n highp vec4 encode(highp float f) {\r\n highp float F = abs(f);\r\n highp float Sign = step(0.0,-f);\r\n highp float Exponent = floor(log2(F));\r\n highp float Mantissa = (exp2(- Exponent) * F);\r\n Exponent = floor(log2(F) + 127.0) + floor(log2(Mantissa));\r\n highp vec4 rgba;\r\n rgba[0] = 128.0 * Sign + floor(Exponent*exp2(-1.0));\r\n rgba[1] = 128.0 * mod(Exponent,2.0) + mod(floor(Mantissa*128.0),128.0);\r\n rgba[2] = floor(mod(floor(Mantissa*exp2(23.0 -8.0)),exp2(8.0)));\r\n rgba[3] = floor(exp2(23.0)*mod(Mantissa,exp2(-15.0)));\r\n ${endianness}\r\n rgba = rgba / 255.0; // values need to be normalized to [0,1]\r\n return rgba;\r\n }\r\n `)\r\n };\r\n }\r\n /**\r\n * returns the routine to encode a vec4 of unsigned bytes to float32\r\n * @credit: https://stackoverflow.com/questions/7059962/how-do-i-convert-a-vec4-rgba-value-to-a-float\r\n */\r\n protected decodeUint8(): {[name: string]: GlslLibRoutine} {\r\n const endianness = EncodingGlslLib.isLittleEndian() ? 'rgba.rgba=rgba.abgr;' : '';\r\n return {\r\n decode: new GlslLibRoutine(`\r\n highp float decode(highp vec4 rgba) {\r\n rgba = rgba * 255.0; // values need to be de-normalized from [0,1] to [0,255]\r\n ${endianness}\r\n highp float Sign = 1.0 - step(128.0,rgba[0])*2.0;\r\n highp float Exponent = 2.0 * mod(rgba[0],128.0) + step(128.0,rgba[1]) - 127.0;\r\n highp float Mantissa = mod(rgba[1],128.0)*65536.0 + rgba[2]*256.0 +rgba[3] + float(0x800000);\r\n highp float Result = Sign * exp2(Exponent) * (Mantissa * exp2(-23.0 ));\r\n return Result;\r\n }\r\n `)\r\n };\r\n }\r\n /**\r\n * Determines if the machine is little endian or not\r\n * @credit: https://gist.github.com/TooTallNate/4750953\r\n */\r\n static isLittleEndian(): boolean {\r\n const b = new ArrayBuffer(4);\r\n const a = new Uint32Array(b);\r\n const c = new Uint8Array(b);\r\n a[0] = 0xdeadbeef;\r\n if (c[0] === 0xef) {\r\n return true;\r\n }\r\n if (c[0] === 0xde) {\r\n return false;\r\n }\r\n throw new Error('unknown endianness');\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {GlslContext, GlslLib, GlslLibRoutine} from './glsl-definitions';\r\nimport {getGlsl} from './glsl-source';\r\n\r\n/**\r\n * This GLSL library handles routines around reading a texlet and writing to it\r\n * Reading and writing could be more than just dealing with one channel\r\n * It may require encoding/decoding to/from 4 channels into one\r\n */\r\nexport class FragColorGlslLib extends GlslLib {\r\n constructor(context: GlslContext) {\r\n super(context);\r\n }\r\n getFunctions(): {[name: string]: GlslLibRoutine} {\r\n return {...this.setFragColor(), ...this.getColorAsFloat()};\r\n }\r\n getCustomTypes(): {[name: string]: string} {\r\n return {};\r\n }\r\n protected setFragColor(): {[name: string]: GlslLibRoutine} {\r\n const glsl = getGlsl(this.context.glContext.version);\r\n return {\r\n setFragColor: new GlslLibRoutine(\r\n `\r\n void setFragColor(float value) {\r\n ${glsl.output} = encode(value);\r\n }\r\n `,\r\n ['encoding.encode'])\r\n };\r\n }\r\n protected getColorAsFloat(): {[name: string]: GlslLibRoutine} {\r\n return {\r\n getColorAsFloat: new GlslLibRoutine(\r\n `\r\n float getColorAsFloat(vec4 color) {\r\n return decode(color);\r\n }\r\n `,\r\n ['encoding.decode'])\r\n };\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nconst INLINE_FUNC_DEF_REGEX = /@inline[\\s\\n\\r]+(\\w+)[\\s\\n\\r]+([0-9a-zA-Z_]+)\\s*\\(([^)]*)\\)\\s*{(([^}]|[\\n\\r])*)}/gm;\r\nconst FUNC_CALL_REGEX = '(\\\\w+)?\\\\s+([_0-9a-zA-Z]+)\\\\s+=\\\\s+__FUNC__\\\\((.*)\\\\)\\\\s*;';\r\n/**\r\n * GLSL preprocessor responsible for resolving @inline directives\r\n */\r\nexport function replaceInlines(script: string): string {\r\n const inlineDefs: {[name: string]: {params: Array<{type: string; name: string}|null>; body: string}} = {};\r\n let match;\r\n while ((match = INLINE_FUNC_DEF_REGEX.exec(script)) !== null) {\r\n const params = match[3]\r\n .split(',')\r\n .map(s => {\r\n const tokens = s.trim().split(' ');\r\n if (tokens && tokens.length === 2) {\r\n return {type: tokens[0], name: tokens[1]};\r\n }\r\n return null;\r\n })\r\n .filter(v => v !== null);\r\n inlineDefs[match[2]] = {params, body: match[4]};\r\n }\r\n for (const name in inlineDefs) {\r\n const regexString = FUNC_CALL_REGEX.replace('__FUNC__', name);\r\n const regex = new RegExp(regexString, 'gm');\r\n while ((match = regex.exec(script)) !== null) {\r\n const type = match[1];\r\n const variable = match[2];\r\n const params = match[3].split(',');\r\n const declLine = (type) ? `${type} ${variable};` : '';\r\n let newBody: string = inlineDefs[name].body;\r\n let paramRedecLine = '';\r\n inlineDefs[name].params.forEach((v, i) => {\r\n if (v) {\r\n paramRedecLine += `${v.type} ${v.name} = ${params[i]};\\n`;\r\n }\r\n });\r\n newBody = `${paramRedecLine}\\n ${newBody}`;\r\n newBody = newBody.replace('return', `${variable} = `);\r\n const replacement = `\r\n ${declLine}\r\n {\r\n ${newBody}\r\n }\r\n `;\r\n script = script.replace(match[0], replacement);\r\n }\r\n }\r\n script = script.replace(INLINE_FUNC_DEF_REGEX, '');\r\n return script;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {GlslContext, GlslLib, GlslLibRoutineNode, TopologicalSortGlslRoutines} from './glsl-definitions';\r\nimport {replaceInlines} from './glsl-function-inliner';\r\nimport {glslRegistry} from './glsl-registered-libs';\r\nimport {getDefaultFragShaderMain, getFragShaderPreamble} from './glsl-source';\r\nimport {ProgramInfo, TextureLayout, VariableInfo} from './types';\r\nimport {WebGLContext} from './webgl-context';\r\n\r\n/**\r\n * Preprocessor for the additions to the GLSL language\r\n * It deals with:\r\n * @include directives\r\n * @inline\r\n * Loop unrolling (not implemented)\r\n * Macro resolution (not implemented)\r\n */\r\nexport class GlslPreprocessor {\r\n readonly context: GlslContext;\r\n readonly libs: {[name: string]: GlslLib} = {};\r\n readonly glslLibRoutineDependencyGraph: {[routineName: string]: GlslLibRoutineNode} = {};\r\n\r\n constructor(\r\n glContext: WebGLContext, programInfo: ProgramInfo, inputTextureLayouts: TextureLayout[],\r\n outputTextureLayout: TextureLayout) {\r\n this.context = new GlslContext(glContext, programInfo, inputTextureLayouts, outputTextureLayout);\r\n\r\n // construct GlslLibs\r\n Object.keys(glslRegistry).forEach((name: string) => {\r\n const lib = new glslRegistry[name](this.context);\r\n this.libs[name] = lib;\r\n });\r\n\r\n // construct GlslRoutineDependencyGraph\r\n const map = this.glslLibRoutineDependencyGraph;\r\n for (const libName in this.libs) {\r\n const lib = this.libs[libName];\r\n const routinesInLib = lib.getFunctions();\r\n for (const routine in routinesInLib) {\r\n const key = libName + '.' + routine;\r\n let currentNode: GlslLibRoutineNode;\r\n if (map[key]) {\r\n currentNode = map[key];\r\n currentNode.routineBody = routinesInLib[routine].routineBody;\r\n } else {\r\n currentNode = new GlslLibRoutineNode(key, routinesInLib[routine].routineBody);\r\n map[key] = currentNode;\r\n }\r\n const dependencies = routinesInLib[routine].dependencies;\r\n if (dependencies) {\r\n for (let i = 0; i < dependencies.length; ++i) {\r\n if (!map[dependencies[i]]) {\r\n const node = new GlslLibRoutineNode(dependencies[i]);\r\n map[dependencies[i]] = node;\r\n currentNode.addDependency(node);\r\n } else {\r\n currentNode.addDependency(map[dependencies[i]]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n preprocess(): string {\r\n const programInfo = this.context.programInfo;\r\n let source = programInfo.shaderSource;\r\n\r\n // append main() function\r\n if (!this.context.programInfo.hasMain) {\r\n source = `${source}\r\n ${getDefaultFragShaderMain(this.context.glContext.version, this.context.outputTextureLayout.shape.length)}`;\r\n }\r\n // replace inlines\r\n source = replaceInlines(source);\r\n\r\n // concat final source string\r\n return `${getFragShaderPreamble(this.context.glContext.version)}\r\n ${this.getUniforms(programInfo.inputNames, programInfo.variables)}\r\n ${this.getImports(source)}\r\n ${source}`;\r\n }\r\n\r\n protected getImports(script: string): string {\r\n const routinesIncluded = this.selectGlslLibRoutinesToBeIncluded(script);\r\n\r\n if (routinesIncluded.length === 0) {\r\n return '';\r\n }\r\n\r\n let routines = '';\r\n for (let i = 0; i < routinesIncluded.length; ++i) {\r\n if (routinesIncluded[i].routineBody) {\r\n routines += routinesIncluded[i].routineBody + '\\n';\r\n } else {\r\n throw new Error(`Missing body for the Glsl Library routine: ${routinesIncluded[i].name}`);\r\n }\r\n }\r\n\r\n return routines;\r\n }\r\n private selectGlslLibRoutinesToBeIncluded(script: string): GlslLibRoutineNode[] {\r\n const nodes: GlslLibRoutineNode[] = [];\r\n\r\n Object.keys(this.glslLibRoutineDependencyGraph).forEach(classAndRoutine => {\r\n const routine = classAndRoutine.split('.')[1];\r\n if (script.indexOf(routine) !== -1) {\r\n nodes.push(this.glslLibRoutineDependencyGraph[classAndRoutine]);\r\n }\r\n });\r\n\r\n return TopologicalSortGlslRoutines.returnOrderedNodes(nodes);\r\n }\r\n\r\n protected getUniforms(samplers?: string[], variables?: VariableInfo[]): string {\r\n const uniformLines: string[] = [];\r\n if (samplers) {\r\n for (const sampler of samplers) {\r\n uniformLines.push(`uniform sampler2D ${sampler};`);\r\n }\r\n }\r\n if (variables) {\r\n for (const variable of variables) {\r\n uniformLines.push(\r\n `uniform ${variable.type} ${variable.name}${variable.arrayLength ? `[${variable.arrayLength}]` : ''};`);\r\n }\r\n }\r\n return uniformLines.join('\\n');\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {CoordsGlslLib} from './glsl-coordinate-lib';\r\nimport {GlslContext, GlslLib} from './glsl-definitions';\r\nimport {EncodingGlslLib} from './glsl-encoding-lib';\r\nimport {FragColorGlslLib} from './glsl-fragcolor-lib';\r\nimport {ShapeUtilsGlslLib} from './glsl-shape-utils-lib';\r\nimport {VecGlslLib} from './glsl-vec-lib';\r\n\r\nexport const glslRegistry: {[name: string]: new (context: GlslContext) => GlslLib} = {\r\n 'encoding': EncodingGlslLib,\r\n 'fragcolor': FragColorGlslLib,\r\n 'vec': VecGlslLib,\r\n 'shapeUtils': ShapeUtilsGlslLib,\r\n 'coordinates': CoordsGlslLib,\r\n // 'arrays': ArrayGlslSLib\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {GlslContext, GlslLib, GlslLibRoutine} from './glsl-definitions';\r\n\r\n/**\r\n * GLSL Library responsible for data types and routines for manipulating\r\n * coordinates and mapping to/from tensor indices\r\n */\r\nexport class ShapeUtilsGlslLib extends GlslLib {\r\n constructor(context: GlslContext) {\r\n super(context);\r\n }\r\n getFunctions(): {[name: string]: GlslLibRoutine} {\r\n return {\r\n ...this.bcastIndex(),\r\n ...this.bcastMatmulIndex(),\r\n ...this.offsetToIndices(),\r\n ...this.indicesToOffset(),\r\n ...this.incrementIndices()\r\n };\r\n }\r\n getCustomTypes() {\r\n return {};\r\n }\r\n protected bcastIndex(): {[name: string]: GlslLibRoutine} {\r\n const outputRank = this.context.outputTextureLayout.shape.length;\r\n const result: {[name: string]: GlslLibRoutine} = {};\r\n this.context.programInfo.inputNames.forEach((name, i) => {\r\n const shape = this.context.inputTextureLayouts[i].unpackedShape;\r\n if (shape.length <= outputRank) {\r\n const rank = shape.length;\r\n const dimOffset = outputRank - rank;\r\n const funcName = `bcastIndices_${name}`;\r\n let block = '';\r\n for (let i = 0; i < rank; ++i) {\r\n block += `\r\n realIndices[${i}] = int( mod(float(bcastedIndices[${dimOffset + i}]), ${shape[i]}.0) );\r\n `;\r\n }\r\n const body = `\r\n void ${funcName} (int bcastedIndices[${outputRank}], out int realIndices[${rank}]) {\r\n ${block}\r\n }\r\n `;\r\n result[funcName] = new GlslLibRoutine(body);\r\n }\r\n });\r\n return result;\r\n }\r\n protected bcastMatmulIndex(): {[name: string]: GlslLibRoutine} {\r\n const outputRank = this.context.outputTextureLayout.shape.length;\r\n const result: {[name: string]: GlslLibRoutine} = {};\r\n this.context.programInfo.inputNames.forEach((name, i) => {\r\n const shape = this.context.inputTextureLayouts[i].shape;\r\n if (!(shape.length < 2 || shape.length > outputRank)) {\r\n const rank = shape.length;\r\n const dimOffset = outputRank - rank;\r\n const funcName = `bcastMatmulIndices_${name}`;\r\n let block = '';\r\n for (let i = 0; i < rank - 2; ++i) {\r\n block += `\r\n realIndices[${i}] = int( mod(float(bcastedIndices[${dimOffset + i}]), ${shape[i]}.0) );\r\n `;\r\n }\r\n const body = `\r\n void ${funcName}(int bcastedIndices[${outputRank}], out int realIndices[${rank}]) {\r\n ${block}\r\n realIndices[${rank - 1}] = bcastedIndices[${outputRank - 1}];\r\n realIndices[${rank - 2}] = bcastedIndices[${outputRank - 2}];\r\n }\r\n `;\r\n result[funcName] = new GlslLibRoutine(body);\r\n }\r\n });\r\n return result;\r\n }\r\n protected indicesToOffset(): {[name: string]: GlslLibRoutine} {\r\n const result: {[name: string]: GlslLibRoutine} = {};\r\n this.context.programInfo.inputNames.forEach((name, i) => {\r\n const shape = this.context.inputTextureLayouts[i].shape;\r\n const strides = this.context.inputTextureLayouts[i].strides;\r\n const rank = shape.length;\r\n let funcName = `indicesToOffset_${name}`;\r\n result[funcName] = new GlslLibRoutine(ShapeUtilsGlslLib.indexToOffsetSingle(funcName, rank, strides));\r\n funcName = `indicesToOffset_${name}_T`;\r\n result[funcName] =\r\n new GlslLibRoutine(ShapeUtilsGlslLib.indexToOffsetSingle(funcName, rank, strides.slice().reverse()));\r\n });\r\n return result;\r\n }\r\n static indexToOffsetSingle(name: string, rank: number, strides: readonly number[]): string {\r\n let block = '';\r\n for (let i = rank - 1; i >= 0; --i) {\r\n block += `\r\n offset += indices[${i}] * ${strides[i]};\r\n `;\r\n }\r\n return `\r\n int ${name}(int indices[${rank}]) {\r\n int offset = 0;\r\n ${block}\r\n return offset;\r\n }\r\n `;\r\n }\r\n protected offsetToIndices(): {[name: string]: GlslLibRoutine} {\r\n const result: {[name: string]: GlslLibRoutine} = {};\r\n this.context.programInfo.inputNames.forEach((name, i) => {\r\n const shape = this.context.inputTextureLayouts[i].shape;\r\n const strides = this.context.inputTextureLayouts[i].strides;\r\n const rank = shape.length;\r\n let funcName = `offsetToIndices_${name}`;\r\n result[funcName] = new GlslLibRoutine(ShapeUtilsGlslLib.offsetToIndicesSingle(funcName, rank, strides));\r\n funcName = `offsetToIndices_${name}_T`;\r\n result[funcName] =\r\n new GlslLibRoutine(ShapeUtilsGlslLib.offsetToIndicesSingle(funcName, rank, strides.slice().reverse()));\r\n });\r\n return result;\r\n }\r\n static offsetToIndicesSingle(name: string, rank: number, strides: readonly number[]): string {\r\n const stridesBlock = [];\r\n for (let i = 0; i < rank - 1; ++i) {\r\n stridesBlock.push(`\r\n indices[${i}] = offset / ${strides[i]};`);\r\n stridesBlock.push(`\r\n offset -= indices[${i}] * ${strides[i]};`);\r\n }\r\n stridesBlock.push(`\r\n indices[${rank - 1}] = offset;`);\r\n return `\r\n void ${name}(int offset, out int indices[${rank}]) {\r\n ${stridesBlock.join('')}\r\n }\r\n `;\r\n }\r\n protected incrementIndices(): {[name: string]: GlslLibRoutine} {\r\n const result: {[name: string]: GlslLibRoutine} = {};\r\n this.context.programInfo.inputNames.forEach((name, i) => {\r\n const shape = this.context.inputTextureLayouts[i].shape;\r\n const rank = shape.length;\r\n const funcName = `incrementIndices_${name}`;\r\n let shapeInit = '';\r\n for (let i = 0; i < rank; ++i) {\r\n shapeInit += `\r\n shape[${i}] = ${shape[i]};`;\r\n }\r\n const body = `\r\n void ${funcName}(int axis, out int indices[${rank}]) {\r\n int shape[${rank}];\r\n ${shapeInit};\r\n for(int i = ${rank} -1 ; i >= 0; --i) {\r\n if(i > axis) continue;\r\n indices[i] += 1;\r\n if(indices[i] < shape[i]) {\r\n break;\r\n }\r\n indices[i] = 0;\r\n }\r\n }\r\n `;\r\n result[funcName] = new GlslLibRoutine(body);\r\n });\r\n return result;\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * represent a version irrelevant abstraction of for GLSL source code\r\n */\r\nexport interface Glsl {\r\n readonly version: string;\r\n readonly attribute: string;\r\n readonly varyingVertex: string;\r\n readonly varyingFrag: string;\r\n readonly texture2D: string;\r\n readonly output: string;\r\n readonly outputDeclaration: string;\r\n}\r\n\r\nconst GLSL_ES_2_0: Glsl = {\r\n version: '',\r\n attribute: 'attribute',\r\n varyingVertex: 'varying',\r\n varyingFrag: 'varying',\r\n texture2D: 'texture2D',\r\n output: 'gl_FragColor',\r\n outputDeclaration: '',\r\n};\r\nconst GLSL_ES_3_0: Glsl = {\r\n version: '#version 300 es',\r\n attribute: 'in',\r\n varyingVertex: 'out',\r\n varyingFrag: 'in',\r\n texture2D: 'texture',\r\n output: 'outputColor',\r\n outputDeclaration: 'out vec4 outputColor;',\r\n};\r\n\r\nexport function getGlsl(version: 1|2) {\r\n return version === 1 ? GLSL_ES_2_0 : GLSL_ES_3_0;\r\n}\r\n\r\nexport function getVertexShaderSource(version: 1|2): string {\r\n const glsl = getGlsl(version);\r\n return `${glsl.version}\r\n precision highp float;\r\n ${glsl.attribute} vec3 position;\r\n ${glsl.attribute} vec2 textureCoord;\r\n\r\n ${glsl.varyingVertex} vec2 TexCoords;\r\n\r\n void main()\r\n {\r\n gl_Position = vec4(position, 1.0);\r\n TexCoords = textureCoord;\r\n }`;\r\n}\r\n\r\nexport function getFragShaderPreamble(version: 1|2): string {\r\n const glsl = getGlsl(version);\r\n return `${glsl.version}\r\n precision highp float;\r\n precision highp int;\r\n precision highp sampler2D;\r\n ${glsl.varyingFrag} vec2 TexCoords;\r\n ${glsl.outputDeclaration}\r\n const vec2 halfCR = vec2(0.5, 0.5);\r\n\r\n // Custom vector types to handle higher dimenalities.\r\n struct ivec5\r\n {\r\n int x;\r\n int y;\r\n int z;\r\n int w;\r\n int u;\r\n };\r\n\r\n struct ivec6\r\n {\r\n int x;\r\n int y;\r\n int z;\r\n int w;\r\n int u;\r\n int v;\r\n };\r\n\r\n int imod(int x, int y) {\r\n return x - y * (x / y);\r\n }\r\n\r\n `;\r\n}\r\n\r\nexport function getDefaultFragShaderMain(version: 1|2, outputShapeLength: number): string {\r\n const glsl = getGlsl(version);\r\n return `\r\n void main() {\r\n int indices[${outputShapeLength}];\r\n toVec(TexCoords, indices);\r\n vec4 result = vec4(process(indices));\r\n ${glsl.output} = result;\r\n }\r\n `;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {GlslContext, GlslLib, GlslLibRoutine} from './glsl-definitions';\r\n\r\n/**\r\n * GLSL Library responsible for vec routines\r\n * Vec is an varible length int array. The length is fixed at the time of\r\n * generating the library functions from the dimensions of the output.\r\n */\r\nexport class VecGlslLib extends GlslLib {\r\n constructor(context: GlslContext) {\r\n super(context);\r\n }\r\n getCustomTypes(): {[name: string]: string} {\r\n return {};\r\n }\r\n getFunctions(): {[name: string]: GlslLibRoutine} {\r\n return {...this.binaryVecFunctions(), ...this.copyVec(), ...this.setVecItem(), ...this.getVecItem()};\r\n }\r\n protected binaryVecFunctions(): {[name: string]: GlslLibRoutine} {\r\n const outputLayout = this.context.outputTextureLayout;\r\n const rank = outputLayout.shape.length;\r\n const nameOp: {[name: string]: string} = {add: '+=', sub: '-=', mul: '*=', div: '/='};\r\n const result: {[name: string]: GlslLibRoutine} = {};\r\n for (const name in nameOp) {\r\n const fname = `${name}Vec`;\r\n let assignmentBlock = '';\r\n for (let i = 0; i < rank; ++i) {\r\n assignmentBlock += `\r\n dest[${i}] ${nameOp[name]} src[${i}];\r\n `;\r\n }\r\n const body = `\r\n void ${fname}(int src[${rank}], out int dest[${rank}]) {\r\n ${assignmentBlock}\r\n }\r\n `;\r\n result[fname] = new GlslLibRoutine(body);\r\n }\r\n\r\n return result;\r\n }\r\n protected copyVec(): {[name: string]: GlslLibRoutine} {\r\n const outputLayout = this.context.outputTextureLayout;\r\n const rank = outputLayout.shape.length;\r\n let assignmentBlock = '';\r\n for (let i = 0; i < rank; ++i) {\r\n assignmentBlock += `\r\n dest[${i}] = src[${i}];\r\n `;\r\n }\r\n const body = `\r\n void copyVec(int src[${rank}], out int dest[${rank}]) {\r\n ${assignmentBlock}\r\n }\r\n `;\r\n return {copyVec: new GlslLibRoutine(body)};\r\n }\r\n\r\n protected setVecItem(): {[name: string]: GlslLibRoutine} {\r\n const outputLayout = this.context.outputTextureLayout;\r\n const rank = outputLayout.shape.length;\r\n let block = `\r\n if(index < 0)\r\n index =${rank} + index;\r\n if (index == 0)\r\n m[0] = value;\r\n `;\r\n for (let i = 1; i < rank - 1; ++i) {\r\n block += `\r\n else if (index == ${i})\r\n m[${i}] = value;\r\n `;\r\n }\r\n block += `\r\n else\r\n m[${rank - 1}] = value;\r\n `;\r\n const body = `\r\n void setVecItem(out int m[${rank}], int index, int value) {\r\n ${block}\r\n }\r\n `;\r\n return {setVecItem: new GlslLibRoutine(body)};\r\n }\r\n protected getVecItem(): {[name: string]: GlslLibRoutine} {\r\n const outputLayout = this.context.outputTextureLayout;\r\n const rank = outputLayout.shape.length;\r\n let block = `\r\n if(index < 0)\r\n index = ${rank} + index;\r\n if (index == 0)\r\n return m[0];\r\n `;\r\n for (let i = 1; i < rank - 1; ++i) {\r\n block += `\r\n else if (index == ${i})\r\n return m[${i}];\r\n `;\r\n }\r\n block += `\r\n else\r\n return m[${rank - 1}];\r\n `;\r\n const body = `\r\n int getVecItem(int m[${rank}], int index) {\r\n ${block}\r\n }\r\n `;\r\n return {getVecItem: new GlslLibRoutine(body)};\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {InferenceHandler} from '../../backend';\r\nimport {Logger} from '../../instrument';\r\nimport {Tensor} from '../../tensor';\r\nimport {ShapeUtil} from '../../util';\r\nimport {createPackProgramInfoLoader} from './ops/pack';\r\nimport {createPackedReshape3DProgramInfoLoader, isReshapeCheap, processDims3D} from './ops/reshape-packed';\r\n\r\nimport {encodeAsUint8} from './ops/uint8-encode';\r\nimport {createUnpackProgramInfoLoader} from './ops/unpack';\r\nimport {WebGLSessionHandler} from './session-handler';\r\nimport {Encoder} from './texture-data-encoder';\r\nimport {calculateTextureWidthAndHeight, createTextureLayoutFromShape, createTextureLayoutFromTextureType} from './texture-layout';\r\nimport {Artifact, ProgramInfo, ProgramInfoLoader, TextureData, TextureLayout, TextureType} from './types';\r\n\r\nconst getProgramInfoUniqueKey =\r\n (programInfo: ProgramInfo|ProgramInfoLoader, inputTextureDatas: TextureData[]): string => {\r\n const inputs =\r\n inputTextureDatas.map(texture => `${texture.unpackedShape.join(',')};${texture.width}x${texture.height}`)\r\n .join('_');\r\n let key = programInfo.name;\r\n if (programInfo.cacheHint) {\r\n key += '[' + programInfo.cacheHint + ']';\r\n }\r\n key += ':' + inputs;\r\n return key;\r\n };\r\n\r\nexport class WebGLInferenceHandler implements InferenceHandler {\r\n private packedTextureDataCache: Map;\r\n private unpackedTextureDataCache: Map;\r\n constructor(public session: WebGLSessionHandler) {\r\n this.packedTextureDataCache = new Map();\r\n this.unpackedTextureDataCache = new Map();\r\n }\r\n\r\n /**\r\n * @returns [width, height]\r\n */\r\n calculateTextureWidthAndHeight(shape: readonly number[], textureType: TextureType): [number, number] {\r\n return calculateTextureWidthAndHeight(this.session.layoutStrategy, shape, textureType);\r\n }\r\n\r\n executeProgram(program: ProgramInfo|ProgramInfoLoader, inputs: readonly Tensor[]): TextureData {\r\n if (inputs.length < program.inputNames.length) {\r\n throw new Error(`Input size mustn't be less than ${program.inputNames.length}.`);\r\n }\r\n if (program.inputNames.length !== program.inputTypes.length) {\r\n throw new Error('input names size does not match input types');\r\n }\r\n\r\n // create texture info for input\r\n const inputTextureDatas: TextureData[] = [];\r\n for (let i = 0; i < program.inputNames.length; ++i) {\r\n inputTextureDatas[i] = this.getOrCreateTextureData(inputs[i], program.inputTypes[i]);\r\n }\r\n\r\n const key = getProgramInfoUniqueKey(program, inputTextureDatas);\r\n let artifact = this.session.programManager.getArtifact(key);\r\n const programInfo = artifact ?\r\n artifact.programInfo :\r\n (typeof (program as ProgramInfoLoader).get === 'function' ? (program as ProgramInfoLoader).get() :\r\n (program as ProgramInfo));\r\n\r\n // create texture info for output\r\n const outputTextureLayout = createTextureLayoutFromTextureType(\r\n this.session.layoutStrategy, programInfo.output.dims, programInfo.output.textureType);\r\n const outputTextureData = this.createTextureData(outputTextureLayout, programInfo.output.type);\r\n\r\n if (!artifact) {\r\n artifact = this.session.programManager.build(programInfo, inputTextureDatas, outputTextureData);\r\n this.session.programManager.setArtifact(key, artifact);\r\n }\r\n\r\n this.runProgram(artifact, inputTextureDatas, outputTextureData);\r\n return outputTextureData;\r\n }\r\n\r\n run(program: ProgramInfoLoader, inputs: readonly Tensor[]): Tensor {\r\n const outputTextureData = this.executeProgram(program, inputs);\r\n return outputTextureData.tensor;\r\n }\r\n\r\n private runProgram(artifact: Artifact, inputs: TextureData[], output: TextureData): void {\r\n // input should match\r\n for (let i = 0; i < inputs.length; ++i) {\r\n if (!!inputs[i].isPacked !== (artifact.programInfo.inputTypes[i] === TextureType.packed)) {\r\n throw new Error(`input[${i}] property packed inconsistent`);\r\n }\r\n }\r\n\r\n // output should match\r\n if (!!output.isPacked !== (artifact.programInfo.output.textureType === TextureType.packed)) {\r\n throw new Error('output property packed inconsistent');\r\n }\r\n\r\n this.session.programManager.run(artifact, inputs, output);\r\n }\r\n\r\n /**\r\n * Create a TextureData object from a tensor.\r\n * Usage = Encoder.Usage.UploadOnly.\r\n * If a related texture data is found in cache, returns it;\r\n * Otherwise:\r\n * Creates a new texture layout if not provided;\r\n * Creates WebGLTexture with the layout;\r\n * Upload tensor data to the texture;\r\n * Creates a texture data object associated with the given tensor.\r\n * @param tensor the tensor with data to upload\r\n */\r\n private getOrCreateTextureData(tensor: Tensor, textureType: TextureType) {\r\n let td = this.getTextureData(tensor.dataId, textureType === TextureType.packed);\r\n\r\n if (!td) {\r\n // check if we have texture data in different type\r\n td = this.getTextureData(tensor.dataId, textureType !== TextureType.packed);\r\n if (td) {\r\n if (textureType === TextureType.packed) {\r\n return this.pack(td);\r\n } else {\r\n return this.unpack(td);\r\n }\r\n }\r\n }\r\n\r\n if (!td) {\r\n const layout = createTextureLayoutFromTextureType(this.session.layoutStrategy, tensor.dims, textureType);\r\n\r\n if (textureType === TextureType.packedLastDimension) {\r\n const group = 1;\r\n const channels = 4;\r\n const shape = tensor.dims;\r\n if (shape.length === 4) {\r\n // pre-processing for kernel data of Conv.\r\n //\r\n // TODO: currently this is a hacking to overwrite Conv's weight. The correct way to do this should be:\r\n // 1. implement texture based const-folding\r\n // 2. create a WebGL program \"preprocessConvWeight\" to do the same work as below\r\n // 3. run the program before dotProduct.\r\n //\r\n const adjustedKernelShape = [shape[0], Math.ceil((shape[1] * shape[2] * shape[3]) / channels)];\r\n const adjustedLayout =\r\n createTextureLayoutFromTextureType(this.session.layoutStrategy, adjustedKernelShape, textureType);\r\n let buffer = tensor.numberData;\r\n if (shape[1] * shape[2] * shape[3] % channels !== 0) {\r\n const numFeatureMaps = shape[0];\r\n const oldRowSize = shape[1] * shape[2] * shape[3];\r\n const newRowSize = Math.ceil(oldRowSize * group / channels) * channels;\r\n const newSize = numFeatureMaps * newRowSize;\r\n buffer = new Float32Array(newSize);\r\n for (let f = 0; f < numFeatureMaps; ++f) {\r\n const oldOffset = f * oldRowSize;\r\n const newOffset = f * newRowSize + f % group * oldRowSize;\r\n buffer.set(tensor.numberData.subarray(oldOffset, oldOffset + oldRowSize), newOffset);\r\n }\r\n }\r\n return this.createTextureData(adjustedLayout, tensor.type, buffer, tensor, Encoder.Usage.UploadOnly);\r\n }\r\n }\r\n\r\n if (textureType === TextureType.packed) {\r\n const unpackedTextureLayout =\r\n createTextureLayoutFromShape(this.session.layoutStrategy, tensor.dims, 1, [], {reverseWH: true});\r\n const unpackedTextureData = this.createTextureData(\r\n unpackedTextureLayout, tensor.type, tensor.numberData, tensor, Encoder.Usage.UploadOnly);\r\n td = this.pack(unpackedTextureData);\r\n } else {\r\n td = this.createTextureData(layout, tensor.type, tensor.numberData, tensor, Encoder.Usage.UploadOnly);\r\n }\r\n }\r\n return td;\r\n }\r\n\r\n /**\r\n * Create a TextureData object using the given data and bind to the given tensor.\r\n * Usage = Encoder.Usage.UploadOnly.\r\n * NOTE: this function is a hack for Conv implementation. should remove this function, after rewriting Conv\r\n * implementation by Graph.Transformer\r\n * @param dataType the tensor data type\r\n * @param data the actual data to upload\r\n * @param tensor the tensor to bind. tensor's data is ignored.\r\n */\r\n createTextureDataFromLayoutBindTensor(\r\n layout: TextureLayout, dataType: Tensor.DataType, data: Tensor.NumberType, tensor: Tensor): TextureData {\r\n return this.createTextureData(layout, dataType, data, tensor, Encoder.Usage.UploadOnly);\r\n }\r\n\r\n private createTextureData(\r\n layout: TextureLayout, dataType: Tensor.DataType, data?: Tensor.NumberType, tensor?: Tensor,\r\n usage?: Encoder.Usage): TextureData {\r\n Logger.verbose('InferenceHandler', `Creating TextureData: layout:[${JSON.stringify(layout)}]`);\r\n const texture = this.session.textureManager.createTextureFromLayout(dataType, layout, data, usage);\r\n return this.createTextureDataFromTexture(layout, dataType, texture, tensor);\r\n }\r\n\r\n reshapeUnpacked(input: Tensor, reshapedDims: readonly number[]): Tensor {\r\n const inputTD = this.getOrCreateTextureData(input, TextureType.unpacked);\r\n const newTextureLayout: TextureLayout = {\r\n channels: inputTD.channels,\r\n height: inputTD.height,\r\n width: inputTD.width,\r\n // handle reshaping into scalar Tensors\r\n shape: reshapedDims.length !== 0 ? reshapedDims : [1],\r\n strides: ShapeUtil.computeStrides(reshapedDims),\r\n unpackedShape: reshapedDims,\r\n };\r\n const newTextureData = this.createTextureDataFromTexture(newTextureLayout, input.type, inputTD.texture);\r\n return newTextureData.tensor;\r\n }\r\n\r\n reshapePacked(input: Tensor, reshapedDims: readonly number[]): Tensor {\r\n const inputTD = this.getOrCreateTextureData(input, TextureType.packed);\r\n\r\n // check if the reshape is 'cheap'\r\n if (isReshapeCheap(input.dims, reshapedDims)) {\r\n const newTextureLayout: TextureLayout = {\r\n channels: inputTD.channels,\r\n height: inputTD.height,\r\n width: inputTD.width,\r\n // handle reshaping into scalar Tensors\r\n shape: reshapedDims.length !== 0 ? reshapedDims : [1],\r\n strides: ShapeUtil.computeStrides(reshapedDims),\r\n unpackedShape: reshapedDims,\r\n isPacked: true\r\n };\r\n const newTextureData = this.createTextureDataFromTexture(newTextureLayout, input.type, inputTD.texture);\r\n return newTextureData.tensor;\r\n }\r\n\r\n const squeezedInputShape = processDims3D(input.dims);\r\n const squeezedOutputShape = processDims3D(reshapedDims);\r\n\r\n const squeezedInputTensor = this.reshapePacked(input, squeezedInputShape);\r\n const squeezedOutputTensor = this.run(\r\n createPackedReshape3DProgramInfoLoader(this, squeezedInputTensor, squeezedOutputShape), [squeezedInputTensor]);\r\n const outputTensor = this.reshapePacked(squeezedOutputTensor, reshapedDims);\r\n return outputTensor;\r\n }\r\n\r\n cast(input: Tensor, type: Tensor.DataType): Tensor {\r\n const inputTD = this.getOrCreateTextureData(input, TextureType.unpacked);\r\n const newTextureData = this.createTextureDataFromTexture(inputTD as TextureLayout, type, inputTD.texture);\r\n return newTextureData.tensor;\r\n }\r\n\r\n private createTextureDataFromTexture(\r\n layout: TextureLayout, dataType: Tensor.DataType, texture: WebGLTexture, tensor?: Tensor, tensorId?: Tensor.Id) {\r\n const textureData: TextureData = {\r\n ...layout,\r\n tensor: tensor ||\r\n new Tensor(\r\n layout.unpackedShape, dataType, (_id: Tensor.Id) => this.readTexture(textureData),\r\n async (_id: Tensor.Id) => this.readTextureAsync(textureData), undefined, tensorId),\r\n texture\r\n };\r\n this.setTextureData(textureData.tensor.dataId, textureData, layout.isPacked);\r\n return textureData;\r\n }\r\n\r\n private getTextureData(tensorId: Tensor.Id, isPacked = false): TextureData|undefined {\r\n return this.session.isInitializer(tensorId) ?\r\n this.session.getTextureData(tensorId, isPacked) :\r\n isPacked ? this.packedTextureDataCache.get(tensorId) : this.unpackedTextureDataCache.get(tensorId);\r\n }\r\n setTextureData(tensorId: Tensor.Id, td: TextureData, isPacked = false): void {\r\n if (this.session.isInitializer(tensorId)) {\r\n this.session.setTextureData(tensorId, td, isPacked);\r\n } else {\r\n (isPacked ? this.packedTextureDataCache : this.unpackedTextureDataCache).set(tensorId, td);\r\n }\r\n }\r\n isTextureLayoutCached(tensor: Tensor, isPacked = false): boolean {\r\n return !!this.getTextureData(tensor.dataId, isPacked);\r\n }\r\n\r\n dispose(): void {\r\n this.session.textureManager.clearActiveTextures();\r\n this.packedTextureDataCache.forEach(td => this.session.textureManager.releaseTexture(td));\r\n this.packedTextureDataCache = new Map();\r\n this.unpackedTextureDataCache.forEach(td => this.session.textureManager.releaseTexture(td));\r\n this.unpackedTextureDataCache = new Map();\r\n }\r\n\r\n readTexture(textureData: TextureData): Tensor.NumberType {\r\n if (textureData.isPacked) {\r\n return this.readTexture(this.unpack(textureData));\r\n }\r\n if (!this.session.backend.glContext.isFloat32DownloadSupported) {\r\n return this.session.textureManager.readUint8TextureAsFloat(encodeAsUint8(this, textureData));\r\n }\r\n return this.session.textureManager.readTexture(textureData, textureData.tensor.type, textureData.channels);\r\n }\r\n\r\n async readTextureAsync(textureData: TextureData): Promise {\r\n if (textureData.isPacked) {\r\n return this.readTextureAsync(this.unpack(textureData));\r\n }\r\n if (!this.session.backend.glContext.isFloat32DownloadSupported) {\r\n return this.session.textureManager.readUint8TextureAsFloat(encodeAsUint8(this, textureData));\r\n }\r\n return this.session.textureManager.readTextureAsync(textureData, textureData.tensor.type, textureData.channels);\r\n }\r\n\r\n pack(input: TextureData): TextureData {\r\n const outputTextureData = this.executeProgram(createPackProgramInfoLoader(this, input.tensor), [input.tensor]);\r\n return outputTextureData;\r\n }\r\n\r\n unpack(input: TextureData): TextureData {\r\n const outputTextureData = this.executeProgram(createUnpackProgramInfoLoader(this, input.tensor), [input.tensor]);\r\n return outputTextureData;\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {OpSet} from '../../opset';\r\n\r\nimport {batchNormalization, parseBatchNormalizationAttributes} from './ops/batch-normalization';\r\nimport * as binaryOps from './ops/binary-op';\r\nimport {cast, parseCastAttributes} from './ops/cast';\r\nimport {concat, parseConcatAttributes} from './ops/concat';\r\nimport {conv, parseConvAttributes} from './ops/conv';\r\nimport {depthToSpace, parseDepthToSpaceAttributes} from './ops/depth-to-space';\r\nimport {flatten, parseFlattenAttributes} from './ops/flatten';\r\nimport {gather, parseGatherAttributes} from './ops/gather';\r\nimport {gemm, parseGemmAttributesV11, parseGemmAttributesV7} from './ops/gemm';\r\nimport {imageScaler, parseImageScalerAttributes} from './ops/image-scaler';\r\nimport {instanceNormalization, parseInstanceNormalizationAttributes} from './ops/instance-normalization';\r\nimport {matMul, parseMatMulAttributes} from './ops/matmul';\r\nimport {padV11, padV2, parsePadAttributesV11, parsePadAttributesV2} from './ops/pad';\r\nimport {averagePool, parseAveragePoolAttributes} from './ops/pool';\r\nimport {globalAveragePool, parseGlobalAveragePoolAttributes} from './ops/pool';\r\nimport {maxPool, parseMaxPoolAttributes} from './ops/pool';\r\nimport {globalMaxPool} from './ops/pool';\r\nimport {reduceLogSum, reduceLogSumSquare, reduceMax, reduceMean, reduceMin, reduceProd, reduceSum} from './ops/reduce';\r\nimport {parseReduceAttributes} from './ops/reduce';\r\nimport {reshape} from './ops/reshape';\r\nimport {parseResizeAttributesV10, parseResizeAttributesV11, resize} from './ops/resize-packed';\r\nimport {shape} from './ops/shape';\r\nimport {parseSliceAttributes, slice, sliceV10} from './ops/slice';\r\nimport {parseSoftmaxAttributes, parseSoftmaxAttributesV13, softmax, softmaxV13} from './ops/softmax';\r\nimport {parseSplitAttributes, split} from './ops/split';\r\nimport {parseSqueezeAttributes, squeeze, squeezeV13} from './ops/squeeze';\r\nimport {sum} from './ops/sum';\r\nimport {tile} from './ops/tile';\r\nimport {parseTransposeAttributes, transpose} from './ops/transpose';\r\nimport * as unaryOps from './ops/unary-op';\r\nimport {parseUnsqueezeAttributes, unsqueeze, unsqueezeV13} from './ops/unsqueeze';\r\nimport {parseUpsampleAttributesV7, parseUpsampleAttributesV9, upsample} from './ops/upsample';\r\n\r\nexport const WEBGL_OP_RESOLVE_RULES: readonly OpSet.ResolveRule[] = [\r\n ['Abs', '', '6+', unaryOps.abs],\r\n ['Acos', '', '7+', unaryOps.acos],\r\n ['Add', '', '7+', binaryOps.add],\r\n ['And', '', '7+', binaryOps.and],\r\n ['Asin', '', '7+', unaryOps.asin],\r\n ['Atan', '', '7+', unaryOps.atan],\r\n // TODO: support new attributes for AveragePool-10\r\n ['AveragePool', '', '7+', averagePool, parseAveragePoolAttributes],\r\n ['BatchNormalization', '', '7+', batchNormalization, parseBatchNormalizationAttributes],\r\n ['Cast', '', '6+', cast, parseCastAttributes],\r\n ['Ceil', '', '6+', unaryOps.ceil],\r\n ['Clip', '', '6-10', unaryOps.clip, unaryOps.parseClipAttributes],\r\n ['Clip', '', '11+', unaryOps.clipV11],\r\n ['Concat', '', '4+', concat, parseConcatAttributes],\r\n ['Conv', '', '1+', conv, parseConvAttributes],\r\n ['Cos', '', '7+', unaryOps.cos],\r\n ['Div', '', '7+', binaryOps.div],\r\n ['Dropout', '', '7+', unaryOps.identity],\r\n ['DepthToSpace', '', '1+', depthToSpace, parseDepthToSpaceAttributes],\r\n ['Equal', '', '7+', binaryOps.equal],\r\n ['Elu', '', '6+', unaryOps.elu, unaryOps.parseEluAttributes],\r\n ['Exp', '', '6+', unaryOps.exp],\r\n ['Flatten', '', '1+', flatten, parseFlattenAttributes],\r\n ['Floor', '', '6+', unaryOps.floor],\r\n ['FusedConv', 'com.microsoft', '1+', conv, parseConvAttributes],\r\n ['Gather', '', '1+', gather, parseGatherAttributes],\r\n ['Gemm', '', '7-10', gemm, parseGemmAttributesV7],\r\n ['Gemm', '', '11+', gemm, parseGemmAttributesV11],\r\n ['GlobalAveragePool', '', '1+', globalAveragePool, parseGlobalAveragePoolAttributes],\r\n ['GlobalMaxPool', '', '1+', globalMaxPool],\r\n ['Greater', '', '7+', binaryOps.greater],\r\n ['Identity', '', '1+', unaryOps.identity],\r\n ['ImageScaler', '', '1+', imageScaler, parseImageScalerAttributes],\r\n ['InstanceNormalization', '', '6+', instanceNormalization, parseInstanceNormalizationAttributes],\r\n ['LeakyRelu', '', '6+', unaryOps.leakyRelu, unaryOps.parseLeakyReluAttributes],\r\n ['Less', '', '7+', binaryOps.less],\r\n ['Log', '', '6+', unaryOps.log],\r\n ['MatMul', '', '1+', matMul, parseMatMulAttributes],\r\n // TODO: support new attributes for MaxPool-8 and MaxPool-10\r\n ['MaxPool', '', '1+', maxPool, parseMaxPoolAttributes],\r\n ['Mul', '', '7+', binaryOps.mul],\r\n ['Neg', '', '6+', unaryOps.neg],\r\n ['Not', '', '1+', unaryOps.not],\r\n ['Or', '', '7+', binaryOps.or],\r\n ['Pad', '', '2-10', padV2, parsePadAttributesV2],\r\n ['Pad', '', '11+', padV11, parsePadAttributesV11],\r\n ['Pow', '', '7+', binaryOps.pow],\r\n ['PRelu', '', '7+', binaryOps.pRelu],\r\n ['ReduceLogSum', '', '1+', reduceLogSum, parseReduceAttributes],\r\n ['ReduceMax', '', '1+', reduceMax, parseReduceAttributes],\r\n ['ReduceMean', '', '1+', reduceMean, parseReduceAttributes],\r\n ['ReduceMin', '', '1+', reduceMin, parseReduceAttributes],\r\n ['ReduceProd', '', '1+', reduceProd, parseReduceAttributes],\r\n ['ReduceSum', '', '1-12', reduceSum, parseReduceAttributes],\r\n ['ReduceSumSquare', '', '1+', reduceLogSumSquare, parseReduceAttributes],\r\n ['Relu', '', '6+', unaryOps.relu],\r\n ['Reshape', '', '5+', reshape],\r\n ['Resize', '', '10', resize, parseResizeAttributesV10],\r\n ['Resize', '', '11+', resize, parseResizeAttributesV11],\r\n ['Shape', '', '1+', shape],\r\n ['Sigmoid', '', '6+', unaryOps.sigmoid],\r\n ['Sin', '', '7+', unaryOps.sin],\r\n ['Slice', '', '10+', sliceV10], // TODO: support 'steps' for Slice-10\r\n ['Slice', '', '1-9', slice, parseSliceAttributes],\r\n // The \"semantic\" meaning of axis has changed in opset-13.\r\n ['Softmax', '', '1-12', softmax, parseSoftmaxAttributes],\r\n ['Softmax', '', '13+', softmaxV13, parseSoftmaxAttributesV13],\r\n // 'Split' operator has an optional attribute 'split'\r\n // this attribute determines how the specified axis of input data is split.\r\n // When the attribute is missing, we need the count of number of outputs\r\n // so that we can determine the 'split' attribute from the runtime input to the Operator\r\n ['Split', '', '2-12', split, parseSplitAttributes],\r\n ['Sqrt', '', '6+', unaryOps.sqrt],\r\n ['Squeeze', '', '1-12', squeeze, parseSqueezeAttributes],\r\n ['Squeeze', '', '13+', squeezeV13],\r\n ['Sub', '', '7+', binaryOps.sub],\r\n ['Sum', '', '6+', sum],\r\n ['Tan', '', '7+', unaryOps.tan],\r\n ['Tanh', '', '6+', unaryOps.tanh],\r\n ['Tile', '', '6+', tile],\r\n ['Transpose', '', '1+', transpose, parseTransposeAttributes],\r\n ['Upsample', '', '7-8', upsample, parseUpsampleAttributesV7],\r\n ['Upsample', '', '9', upsample, parseUpsampleAttributesV9],\r\n ['Unsqueeze', '', '1-12', unsqueeze, parseUnsqueezeAttributes],\r\n ['Unsqueeze', '', '13+', unsqueezeV13],\r\n ['Xor', '', '7+', binaryOps.xor],\r\n];\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {AttributeWithCacheKey, createAttributeWithCacheKey} from '../../../attribute-with-cache-key';\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {getGlsl} from '../glsl-source';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, TextureType} from '../types';\r\n\r\nexport interface BatchNormalizationAttributes extends AttributeWithCacheKey {\r\n epsilon: number;\r\n momentum: number;\r\n spatial: number;\r\n}\r\n\r\nconst batchNormalizationProgramMetadata = {\r\n name: 'BatchNormalization',\r\n inputNames: ['A', 'Scale', 'B', 'Mean', 'Variance'],\r\n inputTypes:\r\n [TextureType.unpacked, TextureType.unpacked, TextureType.unpacked, TextureType.unpacked, TextureType.unpacked]\r\n};\r\n\r\nexport const batchNormalization: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: BatchNormalizationAttributes): Tensor[] => {\r\n validateInputs(inputs);\r\n const output = inferenceHandler.run(\r\n {\r\n ...batchNormalizationProgramMetadata,\r\n cacheHint: attributes.cacheKey,\r\n get: () => createBatchNormalizationProgramInfo(inferenceHandler, inputs, attributes)\r\n },\r\n inputs);\r\n return [output];\r\n };\r\n\r\nexport const parseBatchNormalizationAttributes: OperatorInitialization =\r\n (node: Graph.Node): BatchNormalizationAttributes => {\r\n const epsilon = node.attributes.getFloat('epsilon', 1e-5);\r\n const momentum = node.attributes.getFloat('momentum', 0.9);\r\n const spatial = node.attributes.getInt('spatial', 1);\r\n return createAttributeWithCacheKey({epsilon, momentum, spatial});\r\n };\r\n\r\nconst createBatchNormalizationProgramInfo =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: BatchNormalizationAttributes):\r\n ProgramInfo => {\r\n const glsl = getGlsl(inferenceHandler.session.backend.glContext.version);\r\n const rank = inputs[0].dims.length;\r\n const [scaleWidth, scaleHeight] =\r\n inferenceHandler.calculateTextureWidthAndHeight(inputs[1].dims, TextureType.unpacked);\r\n const shaderSource = `\r\n float process(int[${rank}] indices) {\r\n vec2 position = offsetToCoords(indices[1], ${scaleWidth}, ${scaleHeight});\r\n float scale = getColorAsFloat(${glsl.texture2D}(Scale, position));\r\n float mean = getColorAsFloat(${glsl.texture2D}(Mean, position));\r\n float variance = getColorAsFloat(${glsl.texture2D}(Variance, position));\r\n float b = getColorAsFloat(${glsl.texture2D}(B, position));\r\n\r\n return scale * ( (_A(indices) - mean) / sqrt(variance + float(${attributes.epsilon})) ) + b;\r\n }`;\r\n return {\r\n ...batchNormalizationProgramMetadata,\r\n output: {dims: inputs[0].dims, type: inputs[0].type, textureType: TextureType.unpacked},\r\n shaderSource\r\n };\r\n };\r\n\r\nconst validateInputs = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length !== 5) {\r\n throw new Error('BatchNormalization requires 5 inputs.');\r\n }\r\n\r\n const X = inputs[0];\r\n const scale = inputs[1];\r\n const B = inputs[2];\r\n const mean = inputs[3];\r\n const var_ = inputs[4];\r\n\r\n // input should atleast have three dimensions - N,C,dim1,...,dimn\r\n // other inputs can have only one dimensions\r\n if (X.dims.length < 3 || scale.dims.length !== 1 || B.dims.length !== 1 || mean.dims.length !== 1 ||\r\n var_.dims.length !== 1) {\r\n throw new Error('invalid input shape.');\r\n }\r\n if (scale.dims[0] !== X.dims[1] || B.dims[0] !== X.dims[1] || mean.dims[0] !== X.dims[1] ||\r\n var_.dims[0] !== X.dims[1]) {\r\n throw new Error('invalid input shape.');\r\n }\r\n if ((X.type !== 'float32' && X.type !== 'float64') || (scale.type !== 'float32' && scale.type !== 'float64') ||\r\n (B.type !== 'float32' && B.type !== 'float64') || (mean.type !== 'float32' && mean.type !== 'float64') ||\r\n (var_.type !== 'float32' && var_.type !== 'float64')) {\r\n throw new Error('invalid input tensor types.');\r\n }\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Tensor} from '../../../tensor';\r\nimport {BroadcastUtil, ShapeUtil} from '../../../util';\r\nimport {FunctionType, GlslValueFunction} from '../glsl-definitions';\r\nimport {getGlsl} from '../glsl-source';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramInfoLoader, TextureType} from '../types';\r\n\r\nexport function glslAdd(): GlslValueFunction {\r\n const name = 'add_';\r\n const body = `\r\n float ${name}(float a, float b) {\r\n return a + b;\r\n }\r\n vec4 ${name}(vec4 v1, vec4 v2) {\r\n return v1 + v2;\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nexport function glslDiv(): GlslValueFunction {\r\n const name = 'div_';\r\n const body = `\r\n float ${name}(float a, float b) {\r\n return a / b;\r\n }\r\n vec4 ${name}(vec4 v1, vec4 v2) {\r\n return v1 / v2;\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nexport function glslMul(): GlslValueFunction {\r\n const name = 'mul_';\r\n const body = `\r\n float ${name}(float a, float b) {\r\n return a * b;\r\n }\r\n vec4 ${name}(vec4 v1, vec4 v2) {\r\n return v1 * v2;\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nexport function glslSub(): GlslValueFunction {\r\n const name = 'sub_';\r\n const body = `\r\n float ${name}(float a, float b) {\r\n return a - b;\r\n }\r\n vec4 ${name}(vec4 v1, vec4 v2) {\r\n return v1 - v2;\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nexport function glslEqual(): GlslValueFunction {\r\n const name = 'equal_';\r\n const body = `\r\n float ${name}(float a, float b) {\r\n return float(a == b);\r\n }\r\n vec4 ${name}(vec4 v1, vec4 v2) {\r\n return vec4(equal(v1, v2));\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nexport function glslGreater(): GlslValueFunction {\r\n const name = 'greater_';\r\n const body = `\r\n float ${name}(float a, float b) {\r\n return float(a > b);\r\n }\r\n vec4 ${name}(vec4 v1, vec4 v2) {\r\n return vec4( v1.r > v2.r ,\r\n v1.g > v2.g,\r\n v1.b > v2.b,\r\n v1.a > v2.a );\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nexport function glslLess(): GlslValueFunction {\r\n const name = 'less_';\r\n const body = `\r\n float ${name}(float a, float b) {\r\n return float(a < b);\r\n }\r\n vec4 ${name}(vec4 v1, vec4 v2) {\r\n return vec4( v1.r < v2.r ,\r\n v1.g < v2.g,\r\n v1.b < v2.b,\r\n v1.a < v2.a );\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nexport function glslAnd(): GlslValueFunction {\r\n const name = 'and_';\r\n const body = `\r\n float ${name}(float a, float b) {\r\n return float( bool(a) && bool(b) );\r\n }\r\n vec4 ${name}(vec4 v1, vec4 v2) {\r\n bvec4 b1 = bvec4(v1);\r\n bvec4 b2 = bvec4(v2);\r\n return vec4( b1.r && b2.r ,\r\n b1.g && b2.g,\r\n b1.b && b2.b,\r\n b1.a && b2.a );\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nexport function glslOr(): GlslValueFunction {\r\n const name = 'or_';\r\n const body = `\r\n float ${name}(float a, float b) {\r\n return float( bool(a) || bool(b) );\r\n }\r\n vec4 ${name}(vec4 v1, vec4 v2) {\r\n bvec4 b1 = bvec4(v1);\r\n bvec4 b2 = bvec4(v2);\r\n return vec4( b1.r || b2.r ,\r\n b1.g || b2.g,\r\n b1.b || b2.b,\r\n b1.a || b2.a );\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nexport function glslXor(): GlslValueFunction {\r\n const name = 'xor_';\r\n const body = `\r\n float ${name}(float a, float b) {\r\n return float( bool(a) ^^ bool(b) );\r\n }\r\n vec4 ${name}(vec4 v1, vec4 v2) {\r\n bvec4 b1 = bvec4(v1);\r\n bvec4 b2 = bvec4(v2);\r\n return vec4( b1.r ^^ b2.r ,\r\n b1.g ^^ b2.g,\r\n b1.b ^^ b2.b,\r\n b1.a ^^ b2.a );\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nexport function glslPow(): GlslValueFunction {\r\n return glslBuiltinBinary('pow');\r\n}\r\nexport function glslPRelu(): GlslValueFunction {\r\n const name = 'prelu_';\r\n const body = `\r\n float ${name}(float a, float b) {\r\n return a < 0.0 ? a * b: a;\r\n }\r\n vec4 ${name}(vec4 v1, vec4 v2) {\r\n return vec4(\r\n v1.r < 0.0 ? v1.r * v2.r: v1.r,\r\n v1.g < 0.0 ? v1.g * v2.g: v1.g,\r\n v1.b < 0.0 ? v1.b * v2.b: v1.b,\r\n v1.a < 0.0 ? v1.a * v2.a: v1.a\r\n );\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\n\r\nfunction glslBuiltinBinary(fname: string): GlslValueFunction {\r\n const name = `${fname}_`;\r\n const body = `\r\n float ${name}(float a, float b) {\r\n return ${fname}(a, b);\r\n }\r\n vec4 ${name}(vec4 v1, vec4 v2) {\r\n return ${fname}(v1, v2);\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\n\r\nconst createBinaryProgramInfoLoader =\r\n (handler: WebGLInferenceHandler, inputs: Tensor[], glslFunc: GlslValueFunction,\r\n outputTensorType: Tensor.DataType = inputs[0].type, cacheKey?: string): ProgramInfoLoader => {\r\n const textureType = handler.session.pack ? TextureType.packed : TextureType.unpacked;\r\n return {\r\n name: glslFunc.name,\r\n inputNames: ['A', 'B'],\r\n inputTypes: [textureType, textureType],\r\n cacheHint: cacheKey,\r\n get: () => createBinaryProgramInfo(handler, inputs, glslFunc, outputTensorType)\r\n };\r\n };\r\n\r\nconst createBinaryProgramInfo =\r\n (handler: WebGLInferenceHandler, inputs: Tensor[], glslFunc: GlslValueFunction,\r\n outputTensorType: Tensor.DataType = inputs[0].type): ProgramInfo => {\r\n const textureType = handler.session.pack ? TextureType.packed : TextureType.unpacked;\r\n const isBroadcast = !ShapeUtil.areEqual(inputs[0].dims, inputs[1].dims);\r\n let outputShape = inputs[0].dims;\r\n\r\n const usePackedTexture = handler.session.pack;\r\n\r\n if (isBroadcast) {\r\n const calculatedShape = BroadcastUtil.calcShape(inputs[0].dims, inputs[1].dims, false);\r\n if (!calculatedShape) {\r\n throw new Error('Can\\'t perform binary op on the given tensors');\r\n }\r\n outputShape = calculatedShape;\r\n const outputRank = outputShape.length;\r\n const aRank = inputs[0].dims.length !== 0 ? inputs[0].dims.length : 1;\r\n const bRank = inputs[1].dims.length !== 0 ? inputs[1].dims.length : 1;\r\n const aBcast = inputs[0].dims.length !== 0 ? 'bcastIndices_A(indices, aindices);' : 'aindices[0] = 0;';\r\n const bBcast = inputs[1].dims.length !== 0 ? 'bcastIndices_B(indices, bindices);' : 'bindices[0] = 0;';\r\n\r\n const glsl = getGlsl(handler.session.backend.glContext.version);\r\n const shaderSource = usePackedTexture ? `\r\n ${glslFunc.body}\r\n void main() {\r\n vec4 a = getAAtOutCoords();\r\n vec4 b = getBAtOutCoords();\r\n vec4 result = ${glslFunc.name}(a, b);\r\n ${glsl.output} = result;\r\n }` :\r\n `\r\n ${glslFunc.body}\r\n float process(int indices[${outputRank}]) {\r\n int aindices[${aRank}];\r\n int bindices[${bRank}];\r\n ${aBcast}\r\n ${bBcast}\r\n return ${glslFunc.name}(_A(aindices), _B(bindices));\r\n }`;\r\n\r\n return {\r\n name: glslFunc.name,\r\n inputNames: ['A', 'B'],\r\n inputTypes: [textureType, textureType],\r\n output: {dims: outputShape, type: outputTensorType, textureType},\r\n shaderSource,\r\n hasMain: usePackedTexture\r\n };\r\n }\r\n const glsl = getGlsl(handler.session.backend.glContext.version);\r\n const shaderSource = `\r\n ${glslFunc.body}\r\n void main() {\r\n vec4 v1 = ${glsl.texture2D}(A, TexCoords);\r\n vec4 v2 = ${glsl.texture2D}(B, TexCoords);\r\n vec4 result = ${glslFunc.name}(v1, v2);\r\n ${glsl.output} = result;\r\n }\r\n `;\r\n\r\n return {\r\n name: glslFunc.name,\r\n inputNames: ['A', 'B'],\r\n inputTypes: [textureType, textureType],\r\n output: {dims: inputs[0].dims, type: outputTensorType, textureType},\r\n shaderSource,\r\n hasMain: true\r\n };\r\n };\r\n\r\nexport const add = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createBinaryProgramInfoLoader(handler, inputs, glslAdd()), inputs)];\r\n\r\nexport const and = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createBinaryProgramInfoLoader(handler, inputs, glslAnd(), 'bool'), inputs)];\r\n\r\nexport const div = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createBinaryProgramInfoLoader(handler, inputs, glslDiv()), inputs)];\r\n\r\nexport const equal = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createBinaryProgramInfoLoader(handler, inputs, glslEqual(), 'bool'), inputs)];\r\n\r\nexport const greater = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createBinaryProgramInfoLoader(handler, inputs, glslGreater(), 'bool'), inputs)];\r\n\r\nexport const less = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createBinaryProgramInfoLoader(handler, inputs, glslLess(), 'bool'), inputs)];\r\n\r\nexport const mul = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createBinaryProgramInfoLoader(handler, inputs, glslMul()), inputs)];\r\n\r\nexport const or = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createBinaryProgramInfoLoader(handler, inputs, glslOr(), 'bool'), inputs)];\r\n\r\nexport const pow = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createBinaryProgramInfoLoader(handler, inputs, glslPow()), inputs)];\r\n\r\nexport const pRelu = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createBinaryProgramInfoLoader(handler, inputs, glslPRelu()), inputs)];\r\n\r\nexport const sub = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createBinaryProgramInfoLoader(handler, inputs, glslSub()), inputs)];\r\n\r\nexport const xor = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createBinaryProgramInfoLoader(handler, inputs, glslXor(), 'bool'), inputs)];\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {ProtoUtil} from '../../../util';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\n\r\nexport const cast: OperatorImplementation =\r\n (handler: WebGLInferenceHandler, inputs: Tensor[], to: Tensor.DataType): Tensor[] => {\r\n validateInputs(inputs);\r\n return [handler.cast(inputs[0], to)];\r\n };\r\n\r\nexport const parseCastAttributes: OperatorInitialization = (node: Graph.Node): Tensor.DataType =>\r\n ProtoUtil.tensorDataTypeFromProto(node.attributes.getInt('to'));\r\n\r\nconst validateInputs = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length !== 1) {\r\n throw new Error('Cast requires 1 input.');\r\n }\r\n\r\n if (inputs[0].type === 'string') {\r\n throw new Error('Invalid input type.');\r\n }\r\n};","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Tensor} from '../../../tensor';\r\nimport {getGlsl} from '../glsl-source';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramInfoLoader, ProgramMetadata, TextureType} from '../types';\r\nimport {getCoordsDataType, getGlChannels} from '../utils';\r\nimport {ConcatAttributes} from './concat';\r\n\r\nimport {getChannels, unpackFromChannel} from './packing-utils';\r\n\r\nconst createPackedConcatProgramMetadata = (inputCount: number, cacheHint: string) => ({\r\n name: 'Concat (packed)',\r\n inputNames: Array.from({length: inputCount}, (v, i) => `X${i}`),\r\n inputTypes: Array(inputCount).fill(TextureType.packed),\r\n cacheHint\r\n});\r\n\r\nconst createPackedConcatProgramInfo =\r\n (handler: WebGLInferenceHandler, metadata: ProgramMetadata, inputs: Tensor[], axis: number): ProgramInfo => {\r\n const inputShape = inputs[0].dims.slice();\r\n if (axis >= inputShape.length || axis < (-1 * inputShape.length)) {\r\n throw new Error('axis specified for concat doesn\\'t match input dimensionality');\r\n }\r\n if (axis < 0) {\r\n axis = inputShape.length + axis;\r\n }\r\n // ensure all of the non-concatenated axes match each other\r\n // calculate the shape of the output tensor while we do that\r\n const outputShape = inputShape.slice(0);\r\n for (let i = 1; i < inputs.length; i++) {\r\n const dataNShape = inputs[i].dims.slice();\r\n for (let axisIndex = 0; axisIndex < inputShape.length; axisIndex++) {\r\n // add to the placeholder for computing output shape\r\n if (axisIndex === axis) {\r\n outputShape[axis] += dataNShape[axisIndex];\r\n }\r\n // ensure all non-cancatenated axes match each other\r\n else if (inputShape[axisIndex] !== dataNShape[axisIndex]) {\r\n throw new Error('non concat dimensions must match');\r\n }\r\n }\r\n }\r\n\r\n const rank = outputShape.length;\r\n const coords = getChannels('coords', rank);\r\n const dtype = getCoordsDataType(rank);\r\n const unpackChannel = unpackFromChannel();\r\n\r\n const shapes = inputs.map(i => i.dims);\r\n const channels = getGlChannels(rank);\r\n const offsets: number[] = new Array(shapes.length - 1);\r\n\r\n offsets[0] = shapes[0][axis];\r\n for (let i = 1; i < offsets.length; i++) {\r\n offsets[i] = offsets[i - 1] + shapes[i][axis];\r\n }\r\n\r\n const channel = channels[axis];\r\n const lastChannels = channels.slice(-2);\r\n const allChannels = channels.join();\r\n\r\n let getValueSnippet = `if (${channel} < ${offsets[0]}) {\r\n return getChannel(\r\n getX0(${allChannels}), vec2(${lastChannels.join()}));\r\n }`;\r\n for (let i = 1; i < offsets.length; i++) {\r\n const shift = offsets[i - 1];\r\n getValueSnippet += `\r\n if (${channel} < ${offsets[i]} && ${channel} >= ${offsets[i - 1]}) {\r\n return getChannel(\r\n getX${i}(${getShiftedChannelsSnippet(channels, channel, shift)}),\r\n vec2(${getShiftedChannelsSnippet(lastChannels, channel, shift)}));\r\n }`;\r\n }\r\n const lastIndex = offsets.length;\r\n const shift = offsets[offsets.length - 1];\r\n getValueSnippet += `\r\n return getChannel(\r\n getX${lastIndex}(${getShiftedChannelsSnippet(channels, channel, shift)}),\r\n vec2(${getShiftedChannelsSnippet(lastChannels, channel, shift)}));`;\r\n\r\n const glsl = getGlsl(handler.session.backend.glContext.version);\r\n\r\n const shaderSource = `\r\n ${unpackChannel}\r\n float getValue(${channels.map(x => 'int ' + x)}) {\r\n ${getValueSnippet}\r\n }\r\n\r\n void main() {\r\n ${dtype} coords = getOutputCoords();\r\n int lastDim = coords.${channels[rank - 1]};\r\n coords.${channels[rank - 1]} = coords.${channels[rank - 2]};\r\n coords.${channels[rank - 2]} = lastDim;\r\n\r\n vec4 result = vec4(getValue(${coords}), 0., 0., 0.);\r\n\r\n ${coords[rank - 1]} = ${coords[rank - 1]} + 1;\r\n if (${coords[rank - 1]} < ${outputShape[rank - 1]}) {\r\n result.g = getValue(${coords});\r\n }\r\n\r\n ${coords[rank - 2]} = ${coords[rank - 2]} + 1;\r\n if (${coords[rank - 2]} < ${outputShape[rank - 2]}) {\r\n result.a = getValue(${coords});\r\n }\r\n\r\n ${coords[rank - 1]} = ${coords[rank - 1]} - 1;\r\n if (${coords[rank - 2]} < ${outputShape[rank - 2]} &&\r\n ${coords[rank - 1]} < ${outputShape[rank - 1]}) {\r\n result.b = getValue(${coords});\r\n }\r\n ${glsl.output} = result;\r\n }\r\n `;\r\n\r\n return {\r\n ...metadata,\r\n output: {dims: outputShape, type: inputs[0].type, textureType: TextureType.packed},\r\n shaderSource,\r\n hasMain: true,\r\n };\r\n };\r\n\r\nexport const createPackedConcatProgramInfoLoader =\r\n (handler: WebGLInferenceHandler, inputs: Tensor[], attributes: ConcatAttributes): ProgramInfoLoader => {\r\n const metadata = createPackedConcatProgramMetadata(inputs.length, attributes.cacheKey);\r\n return {...metadata, get: () => createPackedConcatProgramInfo(handler, metadata, inputs, attributes.axis)};\r\n };\r\n\r\nconst getShiftedChannelsSnippet = (channels: string[], channel: string, shift: number): string => {\r\n const channelIdx = channels.indexOf(channel);\r\n const res = channels.map((c, idx) => {\r\n if (idx === channelIdx) {\r\n return `${c} - ${shift}`;\r\n } else {\r\n return c;\r\n }\r\n });\r\n return res.join();\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {AttributeWithCacheKey, createAttributeWithCacheKey} from '../../../attribute-with-cache-key';\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramInfoLoader, ProgramMetadata, TextureType} from '../types';\r\n\r\nimport {createPackedConcatProgramInfoLoader} from './concat-packed';\r\n\r\nexport interface ConcatAttributes extends AttributeWithCacheKey {\r\n readonly axis: number;\r\n}\r\n\r\nexport const concat: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: ConcatAttributes): Tensor[] => {\r\n validateInputs(inputs);\r\n if (inferenceHandler.session.pack && inputs[0].dims.length > 1) {\r\n const output =\r\n inferenceHandler.run(createPackedConcatProgramInfoLoader(inferenceHandler, inputs, attributes), inputs);\r\n return [output];\r\n } else {\r\n const output =\r\n inferenceHandler.run(createUnpackedConcatProgramInfoLoader(inferenceHandler, inputs, attributes), inputs);\r\n return [output];\r\n }\r\n };\r\n\r\nconst createUnpackedConcatProgramMetadata = (inputCount: number, cacheHint: string) => ({\r\n name: 'Concat',\r\n inputNames: Array.from({length: inputCount}, (v, i) => `X${i}`),\r\n inputTypes: Array(inputCount).fill(TextureType.unpacked),\r\n cacheHint\r\n});\r\n\r\nconst createUnpackedConcatProgramInfo =\r\n (handler: WebGLInferenceHandler, metadata: ProgramMetadata, inputs: Tensor[], axis: number): ProgramInfo => {\r\n const inputShape = inputs[0].dims.slice();\r\n if (axis >= inputShape.length || axis < (-1 * inputShape.length)) {\r\n throw new Error('axis specified for concat doesn\\'t match input dimensionality');\r\n }\r\n if (axis < 0) {\r\n axis = inputShape.length + axis;\r\n }\r\n // ensure all of the non-concatenated axes match each other\r\n // calculate the shape of the output tensor while we do that\r\n const outputShape = inputShape.slice(0);\r\n for (let i = 1; i < inputs.length; i++) {\r\n const dataNShape = inputs[i].dims.slice();\r\n for (let axisIndex = 0; axisIndex < inputShape.length; axisIndex++) {\r\n // add to the placeholder for computing output shape\r\n if (axisIndex === axis) {\r\n outputShape[axis] += dataNShape[axisIndex];\r\n }\r\n // ensure all non-cancatenated axes match each other\r\n else if (inputShape[axisIndex] !== dataNShape[axisIndex]) {\r\n throw new Error('non concat dimensions must match');\r\n }\r\n }\r\n }\r\n\r\n const rank = outputShape.length;\r\n\r\n const sizeInConcatAxis = new Array(inputs.length);\r\n let previousSum = 0;\r\n for (let i = 0; i < sizeInConcatAxis.length; ++i) {\r\n previousSum += inputs[i].dims[axis];\r\n sizeInConcatAxis[i] = previousSum;\r\n }\r\n\r\n let getTextureIndexWhereDataResidesMethod = '';\r\n // in most cases linear search is sufficient, as in most scenarios, only 2 tensors are concatenated\r\n if (inputs.length < 5) {\r\n getTextureIndexWhereDataResidesMethod = getTextureIndexWhereDataResidesLinearSearch(sizeInConcatAxis);\r\n } else {\r\n getTextureIndexWhereDataResidesMethod = getTextureIndexWhereDataResidesBinarySearch(sizeInConcatAxis);\r\n }\r\n\r\n const fetchDataFromCorrectTextureMethod = getFetchDataFromCorrectTextureMethod(inputs.length, rank);\r\n const getSizeInConcatAxisValueFromIndexMethod = getGetSizeInConcatAxisValueFromIndexMethod(sizeInConcatAxis);\r\n const shaderSource = `\r\n ${fetchDataFromCorrectTextureMethod}\r\n ${getSizeInConcatAxisValueFromIndexMethod}\r\n ${getTextureIndexWhereDataResidesMethod}\r\n float process(int indices[${rank}]) {\r\n int textureIndex = getTextureWhereDataResides (indices[${axis}]);\r\n\r\n if(textureIndex != 0) {\r\n indices[${axis}] = indices[${axis}] - int(getSizeInConcatAxisValueFromIndex(textureIndex-int(1)));\r\n }\r\n\r\n return fetchDataFromCorrectTexture(textureIndex, indices);\r\n }`;\r\n return {\r\n ...metadata,\r\n output: {dims: outputShape, type: inputs[0].type, textureType: TextureType.unpacked},\r\n shaderSource,\r\n };\r\n };\r\n\r\nconst createUnpackedConcatProgramInfoLoader =\r\n (handler: WebGLInferenceHandler, inputs: Tensor[], attributes: ConcatAttributes): ProgramInfoLoader => {\r\n const metadata = createUnpackedConcatProgramMetadata(inputs.length, attributes.cacheKey);\r\n return {...metadata, get: () => createUnpackedConcatProgramInfo(handler, metadata, inputs, attributes.axis)};\r\n };\r\n\r\nconst getTextureIndexWhereDataResidesLinearSearch = (sizeInConcatAxis: number[]): string => {\r\n const searchAxis = sizeInConcatAxis.map((size, i) => `if(index<${size}) {return ${i};}\r\n`);\r\n return `int getTextureWhereDataResides(int index) {\r\n ${searchAxis.join('')}\r\n }`;\r\n};\r\n\r\n// TODO: Implement BinarySearch in GLSL\r\nconst getTextureIndexWhereDataResidesBinarySearch = (sizeInConcatAxis: number[]): string =>\r\n getTextureIndexWhereDataResidesLinearSearch(sizeInConcatAxis);\r\n\r\nconst getFetchDataFromCorrectTextureMethod = (numberOfTensors: number, tensorRank: number) => {\r\n const codeLines: string[] = [`float fetchDataFromCorrectTexture(int textureIndex, int indices[${tensorRank}]) {`];\r\n for (let i = 0; i < numberOfTensors; ++i) {\r\n if (i === 0) {\r\n codeLines.push(\r\n '\\t' +\r\n `if (textureIndex == ${i}) { return _X${i}(indices); }`);\r\n } else if (i === numberOfTensors - 1) {\r\n codeLines.push(\r\n '\\t' +\r\n `else { return _X${i}(indices); }`);\r\n } else {\r\n codeLines.push(\r\n '\\t' +\r\n `else if (textureIndex == ${i}) { return _X${i}(indices); }`);\r\n }\r\n }\r\n codeLines.push(\r\n '\\t' +\r\n '}');\r\n return codeLines.join('\\n');\r\n};\r\n\r\nconst getGetSizeInConcatAxisValueFromIndexMethod = (sizeInConcatAxis: number[]): string => {\r\n const codeLines: string[] = ['int getSizeInConcatAxisValueFromIndex(int index) {'];\r\n for (let i = 0; i < sizeInConcatAxis.length; ++i) {\r\n if (i === 0) {\r\n codeLines.push(\r\n '\\t' +\r\n `if (index == ${i}) { return ${sizeInConcatAxis[i]}; }`);\r\n } else if (i === sizeInConcatAxis.length - 1) {\r\n codeLines.push(\r\n '\\t' +\r\n `else { return ${sizeInConcatAxis[i]}; }`);\r\n } else {\r\n codeLines.push(\r\n '\\t' +\r\n `else if (index == ${i}) { return ${sizeInConcatAxis[i]}; }`);\r\n }\r\n }\r\n codeLines.push(\r\n '\\t' +\r\n '}');\r\n\r\n return codeLines.join('\\n');\r\n};\r\n\r\nexport const parseConcatAttributes: OperatorInitialization = (node: Graph.Node): ConcatAttributes =>\r\n createAttributeWithCacheKey({axis: node.attributes.getInt('axis')});\r\n\r\nconst validateInputs = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length < 1) {\r\n throw new Error('too few inputs');\r\n }\r\n\r\n const inputType = inputs[0].type;\r\n const inputDimensionality = inputs[0].dims.length;\r\n\r\n // TODO: Support string concat\r\n if (inputType === 'string') {\r\n throw new Error('string tensor is not supported yet');\r\n }\r\n\r\n for (const input of inputs) {\r\n // make sure types of all inputs match\r\n if (input.type !== inputType) {\r\n throw new Error('input tensors should be one type');\r\n }\r\n\r\n // make sure the dimensionality of all inputs are the same\r\n if (input.dims.length !== inputDimensionality) {\r\n throw new Error('input tensors should have the same shape');\r\n }\r\n }\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Logger} from '../../../instrument';\r\nimport {Tensor} from '../../../tensor';\r\nimport {getGlsl} from '../glsl-source';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramInfoLoader, ProgramMetadata, TextureType} from '../types';\r\n\r\nimport {calculateOutputShape, ConvAttributes} from './conv';\r\nimport {getActicationSnippet} from './fuse-utils';\r\n\r\nconst createUnpackedGroupedConvProgramMetadata = (hasBias: boolean, cacheHint: string): ProgramMetadata => ({\r\n name: 'GroupedConv',\r\n inputNames: hasBias ? ['X', 'W', 'Bias'] : ['X', 'W'],\r\n inputTypes: hasBias ? [TextureType.unpacked, TextureType.unpacked, TextureType.unpacked] :\r\n [TextureType.unpacked, TextureType.unpacked],\r\n cacheHint\r\n});\r\n\r\nconst createUnpackedGroupedConvProgramInfo =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: readonly Tensor[], metadata: ProgramMetadata,\r\n attributes: ConvAttributes): ProgramInfo => {\r\n const hasBias = inputs.length > 2;\r\n const processBias = hasBias ? 'value += getBias(output_channel);' : '';\r\n const xShape = inputs[0].dims.slice();\r\n const wShape = inputs[1].dims.slice();\r\n const outputChannelsPerGroup = wShape[0] / attributes.group;\r\n Logger.verbose(\r\n 'GroupedConv',\r\n `autpPad:${attributes.autoPad}, dilations:${attributes.dilations}, group:${attributes.group}, kernelShape:${\r\n attributes.kernelShape}, pads:${attributes.pads}, strides:${attributes.strides}`);\r\n const outputShape =\r\n calculateOutputShape(xShape, wShape, attributes.dilations, attributes.pads, attributes.strides);\r\n const glsl = getGlsl(inferenceHandler.session.backend.glContext.version);\r\n const {activationFunction, applyActivation} = getActicationSnippet(attributes);\r\n\r\n const shaderSource = `\r\n const ivec2 strides = ivec2(${attributes.strides[0]}, ${attributes.strides[1]});\r\n const ivec2 pads = ivec2(${attributes.pads[0]}, ${attributes.pads[1]});\r\n ${activationFunction}\r\n void main() {\r\n ivec4 coords = getOutputCoords();\r\n int batch = coords.x;\r\n int output_channel = coords.y;\r\n ivec2 xRCCorner = coords.zw * strides - pads;\r\n int group_id = output_channel / ${outputChannelsPerGroup};\r\n\r\n float value = 0.0;\r\n for (int wInChannel = 0; wInChannel < ${wShape[1]}; wInChannel++) {\r\n int input_channel = group_id * ${wShape[1]} + wInChannel;\r\n for (int wHeight = 0; wHeight < ${wShape[2]}; wHeight++) {\r\n int xHeight = xRCCorner.x + wHeight * ${attributes.dilations[0]};\r\n\r\n if (xHeight < 0 || xHeight >= ${xShape[2]}) {\r\n continue;\r\n }\r\n\r\n for (int wWidth = 0; wWidth < ${wShape[3]}; wWidth++) {\r\n int xWidth = xRCCorner.y + wWidth * ${attributes.dilations[1]};\r\n if (xWidth < 0 || xWidth >= ${xShape[3]}) {\r\n continue;\r\n }\r\n\r\n float xVal = getX(batch, input_channel, xWidth, xHeight);\r\n float wVal = getW(output_channel, wInChannel, wWidth, wHeight);\r\n value += xVal*wVal;\r\n }\r\n }\r\n }\r\n ${processBias}\r\n ${applyActivation}\r\n ${glsl.output} = vec4(value, .0, .0, .0);\r\n }\r\n`;\r\n return {\r\n ...metadata,\r\n output: {dims: outputShape, type: inputs[0].type, textureType: TextureType.unpacked},\r\n shaderSource,\r\n hasMain: true,\r\n };\r\n };\r\n\r\nexport const createUnpackedGroupedConvProgramInfoLoader =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: readonly Tensor[], attributes: ConvAttributes):\r\n ProgramInfoLoader => {\r\n const metadata = createUnpackedGroupedConvProgramMetadata(inputs.length > 2, attributes.cacheKey);\r\n return {\r\n ...metadata,\r\n get: () => createUnpackedGroupedConvProgramInfo(inferenceHandler, inputs, metadata, attributes)\r\n };\r\n };\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Tensor} from '../../../tensor';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {calculateOutputShape, ConvAttributes} from './conv';\r\nimport {createPackedIm2ColProgramInfoLoader} from './im2col-pack';\r\nimport {createPackedMatmulProgramInfoLoader} from './matmul-pack';\r\n\r\nexport const conv2DPackedPointwise =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: readonly Tensor[], attributes: ConvAttributes): Tensor => {\r\n const xshape = inputs[0].dims;\r\n const kshape = inputs[1].dims;\r\n const outputShape =\r\n calculateOutputShape(xshape, kshape, attributes.dilations, attributes.pads, attributes.strides);\r\n const reshapedX = inferenceHandler.reshapePacked(inputs[0], [xshape[1], xshape[2] * xshape[3]]);\r\n const reshapedK = inferenceHandler.reshapePacked(inputs[1], [kshape[0], kshape[1]]);\r\n\r\n const matmulInputs = inputs.length > 2 ? [reshapedK, reshapedX, inputs[2]] : [reshapedK, reshapedX];\r\n const matmulOutput = inferenceHandler.run(\r\n createPackedMatmulProgramInfoLoader(inferenceHandler, matmulInputs, attributes), matmulInputs);\r\n return inferenceHandler.reshapePacked(matmulOutput, outputShape);\r\n };\r\n\r\nexport const conv2DPacked =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: readonly Tensor[], attributes: ConvAttributes): Tensor => {\r\n const xshape = inputs[0].dims;\r\n const kshape = inputs[1].dims;\r\n const outputShape =\r\n calculateOutputShape(xshape, kshape, attributes.dilations, attributes.pads, attributes.strides);\r\n\r\n // run im2col\r\n const im2colOutput = inferenceHandler.run(\r\n createPackedIm2ColProgramInfoLoader(inferenceHandler, inputs[0], inputs[1], outputShape, attributes),\r\n [inputs[0]]);\r\n\r\n // reshape kernel\r\n const kernelReshaped = inferenceHandler.reshapePacked(inputs[1], [kshape[0], kshape[1] * kshape[2] * kshape[3]]);\r\n\r\n // run matmul\r\n const matmulInputs =\r\n (inputs.length === 3) ? [kernelReshaped, im2colOutput, inputs[2]] : [kernelReshaped, im2colOutput];\r\n const matmulOutput = inferenceHandler.run(\r\n createPackedMatmulProgramInfoLoader(inferenceHandler, matmulInputs, attributes), matmulInputs);\r\n\r\n // reshape output\r\n const outputReshaped = inferenceHandler.reshapePacked(matmulOutput, outputShape);\r\n return outputReshaped;\r\n };\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {AttributeWithCacheKey, createAttributeWithCacheKey} from '../../../attribute-with-cache-key';\r\nimport {InferenceHandler} from '../../../backend';\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {PoolConvUtil} from '../../../util';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\n\r\nimport {createUnpackedGroupedConvProgramInfoLoader} from './conv-grouped';\r\nimport {conv2DPacked} from './conv-pack';\r\nimport {createDotProductProgramInfoLoader} from './dot-product';\r\nimport {InternalActivationAttributes, parseInternalActivationAttributes} from './fuse-utils';\r\nimport {createIm2ColProgramInfoLoader} from './im2col';\r\nimport {createMatmulProgramInfoLoader} from './matmul';\r\n\r\n\r\nexport const calculateOutputShape =\r\n (inputShape: readonly number[], kernelShape: readonly number[], dilations: readonly number[],\r\n adjustPads: readonly number[], strides: readonly number[]): number[] => {\r\n const batchSize = inputShape[0];\r\n const inputSpatialShape = inputShape.slice(2);\r\n const spatialRank = inputSpatialShape.length;\r\n const outChannels = kernelShape[0];\r\n const kernelSpatialShape = kernelShape.slice(2);\r\n const dilatedKernelShape = kernelSpatialShape.map((v, i) => v + (v - 1) * (dilations[i] - 1));\r\n const inputSpatialShapeWithPad = inputSpatialShape.map((v, i) => v + adjustPads[i] + adjustPads[i + spatialRank]);\r\n const outputSpatialShape =\r\n inputSpatialShapeWithPad.map((v, i) => Math.floor((v - dilatedKernelShape[i] + strides[i]) / strides[i]));\r\n const outputShape = [batchSize, outChannels].concat(...outputSpatialShape);\r\n return outputShape;\r\n };\r\n\r\nexport interface ConvAttributes extends InternalActivationAttributes, AttributeWithCacheKey {\r\n readonly autoPad: string;\r\n readonly dilations: readonly number[];\r\n readonly group: number;\r\n readonly kernelShape: readonly number[];\r\n readonly pads: readonly number[];\r\n readonly strides: readonly number[];\r\n}\r\n\r\nexport const conv: OperatorImplementation =\r\n (inferenceHandler: InferenceHandler, inputs: Tensor[], attributes: ConvAttributes): Tensor[] => {\r\n validateInputs(inputs, attributes); // currently will fail if not conv2D\r\n return conv2d(inferenceHandler, inputs, attributes);\r\n };\r\n\r\nconst conv2d: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: ConvAttributes): Tensor[] => {\r\n const adjustedAttributes = getAdjustedConvAttributes(attributes, inputs);\r\n const packMode = inferenceHandler.session.pack;\r\n const isPointwise = adjustedAttributes.kernelShape[0] === 1 && adjustedAttributes.kernelShape[1] === 1;\r\n if (adjustedAttributes.group > 1) {\r\n const result = inferenceHandler.run(\r\n createUnpackedGroupedConvProgramInfoLoader(inferenceHandler, inputs, adjustedAttributes), inputs);\r\n return [result];\r\n } else if (isPointwise && packMode) {\r\n return [conv2DUnpackedPointwise(inferenceHandler, inputs, adjustedAttributes)];\r\n } else if (packMode && inputs[0].dims.length === 4 && inputs[0].dims[0] === 1 && !isPointwise) {\r\n return [conv2DPacked(inferenceHandler, inputs, adjustedAttributes)];\r\n } else {\r\n return [conv2DUnpacked(inferenceHandler, inputs, adjustedAttributes)];\r\n }\r\n };\r\n\r\nconst conv2DUnpackedPointwise =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: readonly Tensor[], attributes: ConvAttributes): Tensor => {\r\n const xshape = inputs[0].dims;\r\n const kshape = inputs[1].dims;\r\n const outputShape =\r\n calculateOutputShape(xshape, kshape, attributes.dilations, attributes.pads, attributes.strides);\r\n const reshapedX = inferenceHandler.reshapeUnpacked(inputs[0], [xshape[1], xshape[2] * xshape[3]]);\r\n const reshapedK = inferenceHandler.reshapeUnpacked(inputs[1], [kshape[0], kshape[1]]);\r\n\r\n const matmulInputs = inputs.length > 2 ? [reshapedK, reshapedX, inputs[2]] : [reshapedK, reshapedX];\r\n const matmulOutput = inferenceHandler.run(createMatmulProgramInfoLoader(matmulInputs, attributes), matmulInputs);\r\n return inferenceHandler.reshapeUnpacked(matmulOutput, outputShape);\r\n };\r\n\r\nconst conv2DUnpacked =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: readonly Tensor[], attributes: ConvAttributes): Tensor => {\r\n const xshape = inputs[0].dims;\r\n const kshape = inputs[1].dims;\r\n const outputShape =\r\n calculateOutputShape(xshape, kshape, attributes.dilations, attributes.pads, attributes.strides);\r\n const xIm2Col = inferenceHandler.run(\r\n createIm2ColProgramInfoLoader(inferenceHandler, inputs[0], inputs[1], outputShape, attributes), [inputs[0]]);\r\n\r\n const dotProductInputs = inputs.length === 3 ? [xIm2Col, inputs[1], inputs[2]] : [xIm2Col, inputs[1]];\r\n const output = inferenceHandler.run(\r\n createDotProductProgramInfoLoader(inferenceHandler, inputs, outputShape, attributes), dotProductInputs);\r\n return output;\r\n };\r\n\r\nconst getAdjustedConvAttributes = (attributes: T, inputs: Tensor[]): T => {\r\n const kernelShape = attributes.kernelShape.slice();\r\n // if kernelShape is not specified in the attributes of this op, infer it from the weight tensor dims\r\n if (attributes.kernelShape.length === 0) {\r\n for (let i = 2; i < inputs[1].dims.length; ++i) {\r\n kernelShape.push(inputs[1].dims[i]);\r\n }\r\n }\r\n const pads = attributes.pads.slice();\r\n PoolConvUtil.adjustPadsBasedOnAutoPad(\r\n inputs[0].dims, attributes.strides, attributes.dilations, kernelShape, pads, attributes.autoPad);\r\n\r\n // always return a new object so does not modify the original attributes\r\n const newAttributes: T = Object.assign({}, attributes);\r\n Object.assign(newAttributes, {kernelShape, pads, cacheKey: attributes.cacheKey});\r\n return newAttributes;\r\n};\r\n\r\nexport const parseConvAttributes: OperatorInitialization = (node: Graph.Node): ConvAttributes => {\r\n const attributes = node.attributes;\r\n const activationAttributes = parseInternalActivationAttributes(attributes);\r\n // TODO : Make this generic enough to compute default attributes for multi-dimensional conv\r\n const autoPad = attributes.getString('auto_pad', 'NOTSET');\r\n const dilations = attributes.getInts('dilations', [1, 1]);\r\n const group = attributes.getInt('group', 1);\r\n const kernelShape = attributes.getInts('kernel_shape', []);\r\n const pads = attributes.getInts('pads', [0, 0, 0, 0]);\r\n const strides = attributes.getInts('strides', [1, 1]);\r\n\r\n return createAttributeWithCacheKey({autoPad, dilations, group, kernelShape, pads, strides, ...activationAttributes});\r\n};\r\n\r\nconst validateInputs = (inputs: Tensor[], attributes: ConvAttributes): void => {\r\n // Refer to the below link for all input checks\r\n // https://github.com/onnx/onnx/blob/master/docs/Operators.md#Conv\r\n if (!inputs || (inputs.length !== 2 && inputs.length !== 3)) {\r\n throw new Error('Conv requires 2 or 3 inputs');\r\n }\r\n\r\n // TODO : Need to add support for multi-dimensional conv\r\n if (inputs[0].dims.length !== 4 || inputs[1].dims.length !== 4) {\r\n throw new Error('currently only support 2-dimensional conv');\r\n }\r\n\r\n // FILTER_IN_CHANNEL should be equal to DATA_CHANNEL\r\n const dataChannel = inputs[0].dims[1];\r\n const filterInChannel = inputs[1].dims[1] * attributes.group;\r\n if (dataChannel !== filterInChannel) {\r\n throw new Error('FILTER_IN_CHANNEL should be equal to DATA_CHANNEL');\r\n }\r\n\r\n // if bias is provided it should be 1D and the number of elements should be equal to the number of feature maps\r\n if (inputs.length === 3 && (inputs[2].dims.length !== 1 || inputs[1].dims[0] !== inputs[2].dims[0])) {\r\n throw new Error('invalid bias');\r\n }\r\n\r\n const spatialRank = inputs[0].dims.length - 2;\r\n // wrong dilations dimension\r\n if (attributes.dilations.length !== spatialRank) {\r\n throw new Error(`dilations should be ${spatialRank}D`);\r\n }\r\n\r\n // Wrong strides dimension\r\n if (attributes.strides.length !== spatialRank) {\r\n throw new Error(`strides should be ${spatialRank}D`);\r\n }\r\n\r\n // Wrong pads dimension\r\n if (attributes.pads.length !== spatialRank * 2) {\r\n throw new Error(`pads should be ${spatialRank * 2}D`);\r\n }\r\n\r\n // if kernelShape is specified, it's data length must be 2 less than dims length of the weights tensor\r\n // (the first 2 dims are batch_size and channels)\r\n if (attributes.kernelShape.length !== 0 && attributes.kernelShape.length !== inputs[1].dims.length - 2) {\r\n throw new Error('invalid kernel shape');\r\n }\r\n\r\n // TODO : Need to add support for float64\r\n if (inputs[0].type !== 'float32' || inputs[1].type !== 'float32') {\r\n throw new Error('Conv input(X,W) should be float tensor');\r\n }\r\n\r\n if (inputs.length === 3 && inputs[2].type !== 'float32') {\r\n throw new Error('Conv input(bias) should be float tensor');\r\n }\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\n\r\nimport {transpose, TransposeAttributes} from './transpose';\r\n\r\nexport interface DepthToSpaceAttributes {\r\n mode: 'DCR'|'CRD';\r\n blocksize: number;\r\n}\r\n\r\nexport const depthToSpace: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: DepthToSpaceAttributes): Tensor[] => {\r\n validateInputs(inputs);\r\n const blocksize = attributes.blocksize;\r\n const blocksizeSqr = blocksize * blocksize;\r\n const transposePerm = attributes.mode === 'DCR' ? [0, 3, 4, 1, 5, 2] : [0, 1, 4, 2, 5, 3];\r\n const firstReshapeShape = attributes.mode === 'DCR' ?\r\n [\r\n inputs[0].dims[0], blocksize, blocksize, inputs[0].dims[1] / blocksizeSqr, inputs[0].dims[2],\r\n inputs[0].dims[3]\r\n ] :\r\n [\r\n inputs[0].dims[0], inputs[0].dims[1] / blocksizeSqr, blocksize, blocksize, inputs[0].dims[2],\r\n inputs[0].dims[3]\r\n ];\r\n\r\n // const transpose = new WebGLTranspose();\r\n // const attributes = new Attribute(undefined);\r\n // attributes.set('perm', 'ints', transposePerm);\r\n // transpose.initialize(attributes);\r\n\r\n // First reshape\r\n const firstReshapedTensor = inferenceHandler.reshapeUnpacked(inputs[0], firstReshapeShape);\r\n\r\n // transpose\r\n const transposeAttributes: TransposeAttributes = {perm: transposePerm, cacheKey: `${transposePerm}`};\r\n const [transposeOutput] = transpose(inferenceHandler, [firstReshapedTensor], transposeAttributes);\r\n\r\n // Second reshape\r\n const secondReshapeShape = [\r\n inputs[0].dims[0], inputs[0].dims[1] / blocksizeSqr, inputs[0].dims[2] * blocksize,\r\n inputs[0].dims[3] * blocksize\r\n ];\r\n const result = inferenceHandler.reshapeUnpacked(transposeOutput, secondReshapeShape);\r\n return [result];\r\n };\r\n\r\nexport const parseDepthToSpaceAttributes: OperatorInitialization =\r\n (node: Graph.Node): DepthToSpaceAttributes => {\r\n // processing node attributes\r\n const blocksize = node.attributes.getInt('blocksize');\r\n if (blocksize < 1) {\r\n throw new Error(`blocksize must be >= 1, but got : ${blocksize} for DepthToSpace`);\r\n }\r\n const mode = node.attributes.getString('mode', 'DCR');\r\n if (mode !== 'DCR' && mode !== 'CRD') {\r\n throw new Error(`unrecognized mode: ${mode} for DepthToSpace`);\r\n }\r\n return {mode, blocksize};\r\n };\r\n\r\nconst validateInputs = (inputs: Tensor[]): void => {\r\n if (inputs.length !== 1) {\r\n throw new Error(`DepthToSpace expect 1 inputs, but got ${inputs.length}`);\r\n }\r\n\r\n // Input has to be a 4-D tensor\r\n // TODO: Support string depth-to-space.\r\n if (inputs[0].type === 'string' || inputs[0].dims.length !== 4) {\r\n throw new TypeError('DepthToSpace input should be a 4-D numeric tensor');\r\n }\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Tensor} from '../../../tensor';\r\nimport {ShapeUtil} from '../../../util';\r\nimport {getGlsl} from '../glsl-source';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramInfoLoader, ProgramMetadata, TextureType} from '../types';\r\nimport {getActicationSnippet, InternalActivationAttributes} from './fuse-utils';\r\nimport {calculateIm2ColDims} from './im2col';\r\n\r\nconst createDotProductProgramMetadata = (hasBias: boolean, attributes: InternalActivationAttributes) => ({\r\n name: 'ConvDotProduct',\r\n inputNames: hasBias ? ['Im2Col', 'K', 'B'] : ['Im2Col', 'K'],\r\n inputTypes: hasBias ? [TextureType.unpacked, TextureType.packedLastDimension, TextureType.unpacked] :\r\n [TextureType.unpacked, TextureType.packedLastDimension],\r\n cacheKey: attributes.activationCacheKey\r\n});\r\n\r\nconst createDotProductProgramInfo =\r\n (inferenceHandler: WebGLInferenceHandler, metadata: ProgramMetadata, inputs: readonly Tensor[],\r\n outputShape: number[], attributes: InternalActivationAttributes): ProgramInfo => {\r\n const xshape = inputs[0].dims;\r\n const kshape = inputs[1].dims;\r\n const adjustedKernelShape = [kshape[0], Math.ceil((xshape[1] * kshape[2] * kshape[3]) / 4)];\r\n const im2colShape = calculateIm2ColDims(xshape, kshape, outputShape);\r\n const [kWidth, kHeight] =\r\n inferenceHandler.calculateTextureWidthAndHeight(adjustedKernelShape, TextureType.packedLastDimension);\r\n\r\n const im2colStrides = ShapeUtil.computeStrides(im2colShape);\r\n const [im2colWidth, im2colHeight] =\r\n inferenceHandler.calculateTextureWidthAndHeight(im2colShape, TextureType.packedLastDimension);\r\n const rank = outputShape.length;\r\n\r\n const initValue = (inputs.length < 3) ? '0.0' : '_B(b)';\r\n const sharedDim = Math.ceil(xshape[1] * kshape[2] * kshape[3] / 4);\r\n const {activationFunction, applyActivation} = getActicationSnippet(attributes);\r\n const glsl = getGlsl(inferenceHandler.session.backend.glContext.version);\r\n const shaderSource = `\r\n${activationFunction}\r\nfloat process(int indices[${rank}]) {\r\n int b[1];\r\n b[0] = indices[1];\r\n int im2col[4];\r\n im2col[0] = indices[0];\r\n im2col[1] = indices[2];\r\n im2col[2] = indices[3];\r\n int im2colOffset = im2col[0] * ${im2colStrides[0]} + im2col[1] * ${im2colStrides[1]} + im2col[2] * ${\r\n im2colStrides[2]};\r\n int kernelOffset = indices[1] * ${adjustedKernelShape[1]};\r\n float value = ${initValue};\r\n for (int i = 0; i < ${sharedDim}; ++i) {\r\n vec2 im2colCoords = offsetToCoords(im2colOffset, ${im2colWidth}, ${im2colHeight});\r\n vec2 kernelCoords = offsetToCoords(kernelOffset, ${kWidth}, ${kHeight});\r\n value += dot(${glsl.texture2D}(Im2Col, im2colCoords), ${glsl.texture2D}(K, kernelCoords));\r\n ++im2colOffset;\r\n ++kernelOffset;\r\n }\r\n ${applyActivation}\r\n return value;\r\n}`;\r\n return {\r\n ...metadata,\r\n output: {dims: outputShape, type: inputs[0].type, textureType: TextureType.unpacked},\r\n shaderSource\r\n };\r\n };\r\n\r\nexport const createDotProductProgramInfoLoader =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: readonly Tensor[], outputShape: number[],\r\n attributes: InternalActivationAttributes): ProgramInfoLoader => {\r\n const metadata = createDotProductProgramMetadata(inputs.length > 2, attributes);\r\n return {\r\n ...metadata,\r\n get: () => createDotProductProgramInfo(inferenceHandler, metadata, inputs, outputShape, attributes)\r\n };\r\n };\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {ShapeUtil} from '../../../util';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\n\r\nexport const flatten: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], axis: number): Tensor[] => {\r\n validateInputs(inputs, axis);\r\n\r\n const outputDims = ShapeUtil.flattenShape(inputs[0].dims, axis);\r\n return [inferenceHandler.reshapeUnpacked(inputs[0], outputDims)];\r\n };\r\n\r\nexport const parseFlattenAttributes: OperatorInitialization = (node: Graph.Node): number =>\r\n node.attributes.getInt('axis', 1); // default axis is 1\r\n\r\nconst validateInputs = (inputs: Tensor[], axis: number): void => {\r\n if (!inputs || inputs.length !== 1) {\r\n throw new Error('Flatten requires 1 input.');\r\n }\r\n\r\n const r = inputs[0].dims.length;\r\n if (r === 0) {\r\n throw new Error('scalar tensor is not supported.');\r\n }\r\n\r\n if (axis < -r || axis > r) {\r\n throw new Error('Invalid axis');\r\n }\r\n\r\n // TODO: Support string type\r\n if (inputs[0].type === 'string') {\r\n throw new Error('string tensor is not supported.');\r\n }\r\n};","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Attribute} from '../../../attribute';\r\nimport {MAX_CLIP, MIN_CLIP} from '../../../util';\r\nimport {GlslValueFunction} from '../glsl-definitions';\r\nimport {glslClip, glslRelu, glslSigmoid} from './unary-op';\r\n\r\nexport interface InternalActivationAttributes {\r\n readonly activation: string;\r\n readonly clipMin?: number;\r\n readonly clipMax?: number;\r\n readonly activationCacheKey: string;\r\n}\r\n\r\nexport function getActicationSnippet(attributes: InternalActivationAttributes) {\r\n let func: GlslValueFunction;\r\n switch (attributes.activation) {\r\n case 'Relu':\r\n func = glslRelu();\r\n break;\r\n case 'Sigmoid':\r\n func = glslSigmoid();\r\n break;\r\n case 'Clip':\r\n func = glslClip(attributes.clipMin!, attributes.clipMax!);\r\n break;\r\n // TODO: adding other activations that can be fused.\r\n default:\r\n return {activationFunction: '', applyActivation: ''};\r\n }\r\n\r\n const activationName = func.name;\r\n const activationFunction = func.body;\r\n const applyActivation = `value = ${activationName}_(value);`;\r\n return {activationFunction, applyActivation};\r\n}\r\n\r\nexport const parseInternalActivationAttributes = (attributes: Attribute): InternalActivationAttributes => {\r\n const activation = attributes.getString('activation', '');\r\n\r\n if (activation === 'Clip') {\r\n const [clipMin, clipMax] = attributes.getFloats('activation_params', [MIN_CLIP, MAX_CLIP]);\r\n return {activation, clipMax, clipMin, activationCacheKey: `${activation}:${clipMin},${clipMax}`};\r\n }\r\n return {activation, activationCacheKey: activation};\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {AttributeWithCacheKey, createAttributeWithCacheKey} from '../../../attribute-with-cache-key';\r\nimport {Graph} from '../../../graph';\r\nimport {NUMBER_TYPES, OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {ShapeUtil} from '../../../util';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramInfoLoader, ProgramMetadata, TextureType} from '../types';\r\n\r\ninterface GatherAttributes extends AttributeWithCacheKey {\r\n readonly axis: number;\r\n}\r\n\r\nexport const gather: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: GatherAttributes): Tensor[] => {\r\n validateInputs(inputs, attributes.axis);\r\n const output = inferenceHandler.run(createGatherProgramInfoLoader(inferenceHandler, inputs, attributes), inputs);\r\n return [output];\r\n };\r\n\r\nexport const parseGatherAttributes: OperatorInitialization = (node: Graph.Node): GatherAttributes =>\r\n createAttributeWithCacheKey({axis: node.attributes.getInt('axis', 0)});\r\n\r\nconst gatherProgramMetadata = {\r\n name: 'Gather',\r\n inputNames: ['A', 'B'],\r\n inputTypes: [TextureType.unpacked, TextureType.unpacked],\r\n};\r\n\r\nconst createGatherProgramInfo =\r\n (handler: WebGLInferenceHandler, metadata: ProgramMetadata, inputs: Tensor[], axis: number): ProgramInfo => {\r\n const inputShape = inputs[0].dims.slice();\r\n const indexDataShape = inputs[1].dims.slice();\r\n const outputShape = new Array(inputShape.length + indexDataShape.length - 1);\r\n\r\n axis = ShapeUtil.normalizeAxis(axis, inputShape.length);\r\n const indexCopyOps: string[] = [];\r\n for (let i = 0; i < outputShape.length; i++) {\r\n // outputShape is divided into three parts: A, B, C\r\n // |0 axis| axis + indexDataShape.length | end|\r\n // | A | B | C |\r\n //\r\n // inputIdx: [A, inputs[1][B], C]\r\n if (i < axis) { // A\r\n outputShape[i] = inputShape[i];\r\n indexCopyOps.push(`inputIdx[${i}] = outputIdx[${i}];`);\r\n } else {\r\n if (i < axis + indexDataShape.length) { // B\r\n outputShape[i] = indexDataShape[i - axis];\r\n indexCopyOps.push(`indexDataIdx[${i - axis}] = outputIdx[${i}];`);\r\n } else { // C\r\n outputShape[i] = inputShape[i - indexDataShape.length + 1]; // skip 1 for axis\r\n indexCopyOps.push(`inputIdx[${i - indexDataShape.length + 1}] = outputIdx[${i}];`);\r\n }\r\n }\r\n }\r\n\r\n const orank = outputShape.length || 1;\r\n const irank = inputShape.length;\r\n const iDrank = indexDataShape.length || 1;\r\n const shaderSource = `\r\n float process(int outputIdx[${orank}]) {\r\n int inputIdx[${irank}];\r\n int indexDataIdx[${iDrank}];\r\n indexDataIdx[0] = 0;\r\n ${indexCopyOps.join('\\n ')}\r\n int idx = int(_B(indexDataIdx));\r\n inputIdx[${axis}] = idx < 0 ? idx + ${inputShape[axis]} : idx;\r\n return _A(inputIdx);\r\n }`;\r\n return {\r\n ...metadata,\r\n output: {dims: outputShape, type: inputs[0].type, textureType: TextureType.unpacked},\r\n shaderSource\r\n };\r\n };\r\n\r\nconst createGatherProgramInfoLoader =\r\n (handler: WebGLInferenceHandler, inputs: Tensor[], attributes: GatherAttributes): ProgramInfoLoader => {\r\n const metadata = {...gatherProgramMetadata, cacheHint: attributes.cacheKey};\r\n return {...metadata, get: () => createGatherProgramInfo(handler, metadata, inputs, attributes.axis)};\r\n };\r\n\r\nconst validateInputs = (inputs: Tensor[], axis: number): void => {\r\n if (!inputs || inputs.length !== 2) {\r\n throw new Error('Gather requires 2 inputs.');\r\n }\r\n const tensorRank = inputs[0].dims.length;\r\n if (tensorRank < 1) {\r\n throw new Error('Invalid input shape.');\r\n }\r\n if (axis < -tensorRank || axis > tensorRank - 1) {\r\n throw new Error('Invalid axis.');\r\n }\r\n if (NUMBER_TYPES.indexOf(inputs[0].type) === -1) {\r\n throw new Error('Invaid input type.');\r\n }\r\n if (inputs[1].type !== 'int32' && inputs[1].type !== 'int16') {\r\n throw new Error('Invaid input type.');\r\n }\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {AttributeWithCacheKey, createAttributeWithCacheKey} from '../../../attribute-with-cache-key';\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {GemmUtil} from '../../../util';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramInfoLoader, ProgramMetadata, TextureType} from '../types';\r\n\r\nexport interface GemmAttributes extends AttributeWithCacheKey {\r\n transA: boolean;\r\n transB: boolean;\r\n alpha: number;\r\n beta: number;\r\n isOptionalC: boolean; // in opset 11, C becomes optional\r\n}\r\n\r\nexport const gemm: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: GemmAttributes): Tensor[] => {\r\n validateInputs(inputs, attributes);\r\n const output = inferenceHandler.run(createGemmProgramInfoLoader(inputs, attributes), inputs);\r\n return [output];\r\n };\r\n\r\nconst parseGemmAttributes = (node: Graph.Node, isOptionalC: boolean): GemmAttributes => {\r\n const transA = node.attributes.getInt('transA', 0) !== 0;\r\n const transB = node.attributes.getInt('transB', 0) !== 0;\r\n const alpha = node.attributes.getFloat('alpha', 1.0);\r\n const beta = node.attributes.getFloat('beta', 1.0);\r\n return createAttributeWithCacheKey({transA, transB, alpha, beta, isOptionalC});\r\n};\r\n\r\nexport const parseGemmAttributesV7: OperatorInitialization = (node: Graph.Node): GemmAttributes =>\r\n parseGemmAttributes(node, false);\r\n\r\nexport const parseGemmAttributesV11: OperatorInitialization = (node: Graph.Node): GemmAttributes =>\r\n parseGemmAttributes(node, true);\r\n\r\nconst createGemmProgramInfoLoader = (inputs: Tensor[], attributes: GemmAttributes): ProgramInfoLoader => {\r\n const metadata = {\r\n name: 'Gemm',\r\n inputNames: inputs.length === 3 ? ['A', 'B', 'C'] : ['A', 'B'],\r\n inputTypes: inputs.length === 3 ? [TextureType.unpacked, TextureType.unpacked, TextureType.unpacked] :\r\n [TextureType.unpacked, TextureType.unpacked],\r\n key: attributes.cacheKey\r\n };\r\n\r\n return {...metadata, get: () => createGemmProgramInfo(metadata, inputs, attributes)};\r\n};\r\n\r\nconst createGemmProgramInfo =\r\n (metadata: ProgramMetadata, inputs: Tensor[], attributes: GemmAttributes): ProgramInfo => {\r\n const aShape = inputs[0].dims.slice();\r\n const bShape = inputs[1].dims.slice();\r\n const [M, N] = GemmUtil.getShapeOfGemmResult(\r\n aShape, attributes.transA, bShape, attributes.transB, inputs.length === 3 ? inputs[2].dims : undefined);\r\n const outputShape = [M, N];\r\n if (!outputShape) {\r\n throw new Error('Can\\'t use gemm on the given tensors');\r\n }\r\n let sharedDim = aShape[aShape.length - 1];\r\n let line = '';\r\n if (attributes.transA) {\r\n sharedDim = aShape[0];\r\n }\r\n if (attributes.transA && attributes.transB) {\r\n line = 'value += _A_T(a) * _B_T(b);';\r\n } else if (attributes.transA && !attributes.transB) {\r\n line = 'value += _A_T(a) * _B(b);';\r\n } else if (!attributes.transA && attributes.transB) {\r\n line = 'value += _A(a) * _B_T(b);';\r\n } else if (!attributes.transA && !attributes.transB) {\r\n line = 'value += _A(a) * _B(b);';\r\n }\r\n const rank = outputShape.length;\r\n const declareC = inputs.length === 3 ? `int c[${inputs[2].dims.length}];` : '';\r\n const broadcastC = inputs.length === 3 ? 'bcastIndices_C(indices, c);' : '';\r\n const calculateC = inputs.length === 3 ? 'value += beta * _C(c);' : '';\r\n const shaderSource = `\r\n float process(int indices[${rank}]) {\r\n int a[${rank}];\r\n int b[${rank}];\r\n ${declareC}\r\n\r\n copyVec(indices, a);\r\n copyVec(indices, b);\r\n ${broadcastC}\r\n\r\n float value = 0.0;\r\n for (int k=0; k<${sharedDim}; ++k) {\r\n a[${rank - 1}] = k;\r\n b[${rank - 2}] = k;\r\n ${line}\r\n }\r\n\r\n value = value * alpha;\r\n ${calculateC}\r\n return value;\r\n }`;\r\n return {\r\n ...metadata,\r\n output: {dims: outputShape, type: inputs[0].type, textureType: TextureType.unpacked},\r\n variables: [\r\n {name: 'alpha', type: 'float', data: attributes.alpha}, {name: 'beta', type: 'float', data: attributes.beta}\r\n ],\r\n shaderSource\r\n };\r\n };\r\n\r\nconst validateInputs = (inputs: Tensor[], attributes: GemmAttributes): void => {\r\n if (!inputs) {\r\n throw new Error('Input is missing');\r\n }\r\n if (attributes.isOptionalC && (inputs.length < 2 || inputs.length > 3)) {\r\n throw new Error('Invaid input shape.');\r\n }\r\n if (!attributes.isOptionalC && inputs.length !== 3) {\r\n throw new Error('Gemm requires 3 inputs');\r\n }\r\n\r\n // 'C' can be of dimensionality 1 or 2 only\r\n if (inputs.length === 3 && inputs[2].dims.length !== 1 && inputs[2].dims.length !== 2) {\r\n throw new Error('Invalid input shape of C');\r\n }\r\n\r\n if ((inputs[0].type !== 'float32' && inputs[0].type !== 'float64') ||\r\n (inputs[1].type !== 'float32' && inputs[1].type !== 'float64') ||\r\n (inputs.length === 3 && inputs[2].type !== 'float32' && inputs[2].type !== 'float64')) {\r\n throw new Error('Invalid input type.');\r\n }\r\n\r\n if ((inputs[0].type !== inputs[1].type) || (inputs.length === 3 && inputs[0].type !== inputs[2].type)) {\r\n throw new Error('Input types are mismatched');\r\n }\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Tensor} from '../../../tensor';\r\nimport {getGlsl} from '../glsl-source';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramInfoLoader, ProgramMetadata, TextureType} from '../types';\r\nimport {ConvAttributes} from './conv';\r\nimport {unpackFromChannel} from './packing-utils';\r\n\r\nconst createPackedIm2ColProgramMetadata = (cacheHint: string) => ({\r\n name: 'Im2Col (packed)',\r\n inputNames: ['A'],\r\n inputTypes: [TextureType.packed],\r\n cacheHint,\r\n});\r\n\r\nconst createPackedIm2ColProgramInfo =\r\n (inferenceHandler: WebGLInferenceHandler, metadata: ProgramMetadata, x: Tensor, w: Tensor,\r\n outputShape: readonly number[], attributes: ConvAttributes): ProgramInfo => {\r\n const xshape = x.dims;\r\n const wshape = w.dims;\r\n const rowDim = 2;\r\n const colDim = 3;\r\n const rank = outputShape.length;\r\n const im2colShape = [wshape[1] * wshape[2] * wshape[3], outputShape[2] * outputShape[3]];\r\n const kernelSize = wshape[2] * wshape[3];\r\n const unpackChannel = unpackFromChannel();\r\n const glsl = getGlsl(inferenceHandler.session.backend.glContext.version);\r\n let unrolled = '';\r\n\r\n for (let row = 0; row <= 1; row++) {\r\n for (let col = 0; col <= 1; col++) {\r\n unrolled += `\r\n blockIndex = rc.x + ${col};\r\n pos = rc.y + ${row};\r\n\r\n if(blockIndex < ${im2colShape[1]} && pos < ${im2colShape[0]}) {\r\n offsetY = int(blockIndex / (${outputShape[rank - 1]})) * ${attributes.strides[0]} -\r\n ${attributes.pads[0]};\r\n d0 = offsetY + ${attributes.dilations[0]} * (imod(pos, ${kernelSize}) / ${wshape[2]});\r\n\r\n if(d0 < ${xshape[rowDim]} && d0 >= 0) {\r\n offsetX = imod(blockIndex, ${outputShape[rank - 1]}) * ${attributes.strides[1]} -\r\n ${attributes.pads[1]};\r\n d1 = offsetX + ${attributes.dilations[1]} * imod(imod(pos, ${kernelSize}), ${wshape[2]});\r\n\r\n if(d1 < ${xshape[colDim]} && d1 >= 0) {\r\n\r\n ch = int(float(pos)/ ${kernelSize}.);\r\n innerDims = vec2(d0, d1);\r\n result[${row * 2 + col}] = getChannel(\r\n getA(0, ch, int(innerDims.x),\r\n int(innerDims.y)), innerDims);\r\n }\r\n }\r\n }\r\n\r\n `;\r\n }\r\n }\r\n\r\n const shaderSource = `\r\n ${unpackChannel}\r\n\r\n void main() {\r\n ivec2 rc = getOutputCoords();\r\n vec4 result = vec4(0.0);\r\n int blockIndex, pos, offsetY, d0, offsetX, d1, ch;\r\n vec2 innerDims;\r\n ${unrolled}\r\n ${glsl.output} = result;\r\n }\r\n `;\r\n return {\r\n ...metadata,\r\n output: {dims: im2colShape, type: x.type, textureType: TextureType.packed},\r\n shaderSource,\r\n hasMain: true\r\n };\r\n };\r\n\r\nexport const createPackedIm2ColProgramInfoLoader =\r\n (inferenceHandler: WebGLInferenceHandler, x: Tensor, w: Tensor, outputShape: readonly number[],\r\n attributes: ConvAttributes): ProgramInfoLoader => {\r\n const metadata = createPackedIm2ColProgramMetadata(attributes.cacheKey);\r\n return {\r\n ...metadata,\r\n get: () => createPackedIm2ColProgramInfo(inferenceHandler, metadata, x, w, outputShape, attributes)\r\n };\r\n };\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Tensor} from '../../../tensor';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramInfoLoader, ProgramMetadata, TextureType} from '../types';\r\nimport {ConvAttributes} from './conv';\r\n\r\nconst createIm2ColProgramMetadata = (cacheHint: string) => ({\r\n name: 'Im2Col',\r\n inputNames: ['X'],\r\n inputTypes: [TextureType.unpacked],\r\n cacheHint,\r\n});\r\n\r\nconst createIm2ColProgramInfo =\r\n (inferenceHandler: WebGLInferenceHandler, metadata: ProgramMetadata, x: Tensor, w: Tensor,\r\n outputShape: readonly number[], attributes: ConvAttributes): ProgramInfo => {\r\n const xshape = x.dims;\r\n const wshape = w.dims;\r\n\r\n const rank = outputShape.length;\r\n const im2colDims = calculateIm2ColDims(xshape, wshape, outputShape, 4);\r\n\r\n const shaderSource = `\r\n const int XC = ${xshape[1]};\r\n const int XH = ${xshape[2]};\r\n const int XW = ${xshape[3]};\r\n const int KH = ${attributes.kernelShape[0]};\r\n const int KW = ${attributes.kernelShape[1]};\r\n const int dilationH = ${attributes.dilations[0]};\r\n const int dilationW = ${attributes.dilations[1]};\r\n const int strideH = ${attributes.strides[0]};\r\n const int strideW = ${attributes.strides[1]};\r\n const int padH = ${attributes.pads[0]};\r\n const int padW = ${attributes.pads[1]};\r\n const int KHKW = KH*KW;\r\n const int XCKHKW = XC * KHKW;\r\n const int outputChannels = 4;\r\n vec4 process(int indices[${rank}]) {\r\n int b = indices[0]; // batch size\r\n int oh = indices[1] * strideH - padH; //output height\r\n int ow = indices[2] * strideW - padW; //output width\r\n int p = indices[3] * outputChannels; //patch\r\n vec4 value = vec4(0.0);\r\n for(int i=0; i < outputChannels; ++i) {\r\n if(p < XCKHKW) {\r\n int patchC = p / KHKW;\r\n int patchH = (p - patchC*KHKW) / KW;\r\n int patchW = (p - patchC*KHKW) - patchH * KW;\r\n int xh2 = oh + patchH * dilationH;\r\n int xw2 = ow + patchW * dilationW;\r\n int x[${xshape.length}];\r\n x[0] = b;\r\n x[1] = patchC;\r\n x[2] = xh2;\r\n x[3] = xw2;\r\n if(xh2 >= 0 &&\r\n xh2 < XH &&\r\n xw2 >= 0 &&\r\n xw2 < XW) {\r\n value[i] = _X(x);\r\n }\r\n }\r\n ++p;\r\n }\r\n return value;\r\n }\r\n `;\r\n return {\r\n ...metadata,\r\n output: {dims: im2colDims, type: x.type, textureType: TextureType.packedLastDimension},\r\n shaderSource\r\n };\r\n };\r\n\r\nexport const createIm2ColProgramInfoLoader =\r\n (inferenceHandler: WebGLInferenceHandler, x: Tensor, w: Tensor, outputShape: readonly number[],\r\n attributes: ConvAttributes): ProgramInfoLoader => {\r\n const metadata = createIm2ColProgramMetadata(attributes.cacheKey);\r\n return {\r\n ...metadata,\r\n get: () => createIm2ColProgramInfo(inferenceHandler, metadata, x, w, outputShape, attributes)\r\n };\r\n };\r\n\r\n\r\nexport const calculateIm2ColDims =\r\n (inputShape: readonly number[], kernelShape: readonly number[], outputShape: readonly number[], channels = 4):\r\n number[] =>\r\n [outputShape[0], outputShape[2], outputShape[3],\r\n Math.ceil(inputShape[1] * kernelShape[2] * kernelShape[3] / channels)];\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {AttributeWithCacheKey, createAttributeWithCacheKey} from '../../../attribute-with-cache-key';\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramInfoLoader, ProgramMetadata, TextureType} from '../types';\r\n\r\nexport interface ImageScalerAttributes extends AttributeWithCacheKey {\r\n scale: number;\r\n bias: number[];\r\n}\r\n\r\nexport const imageScaler: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: ImageScalerAttributes): Tensor[] => {\r\n validateInputs(inputs);\r\n const output =\r\n inferenceHandler.run(createImageScalerProgramInfoLoader(inferenceHandler, inputs, attributes), inputs);\r\n return [output];\r\n };\r\n\r\nexport const parseImageScalerAttributes: OperatorInitialization =\r\n (node: Graph.Node): ImageScalerAttributes => {\r\n const scale = node.attributes.getFloat('scale');\r\n const bias = node.attributes.getFloats('bias');\r\n return createAttributeWithCacheKey({scale, bias});\r\n };\r\n\r\nconst imageScalerProgramMetadata = {\r\n name: 'ImageScaler',\r\n inputNames: ['X'],\r\n inputTypes: [TextureType.unpacked],\r\n};\r\n\r\nconst createImageScalerProgramInfo =\r\n (handler: WebGLInferenceHandler, metadata: ProgramMetadata, inputs: Tensor[], attributes: ImageScalerAttributes):\r\n ProgramInfo => {\r\n const outputShape = inputs[0].dims.slice();\r\n const rank = outputShape.length;\r\n const getBiasMethod = createGetBiasMethod(attributes.bias.length);\r\n const shaderSource = `\r\n ${getBiasMethod}\r\n float process(int indices[${rank}]) {\r\n return _X(indices) * scale + getBias(bias, indices[1]);\r\n }`;\r\n return {\r\n ...metadata,\r\n output: {dims: outputShape, type: inputs[0].type, textureType: TextureType.unpacked},\r\n variables: [\r\n {name: 'bias', type: 'float', arrayLength: attributes.bias.length, data: attributes.bias},\r\n {name: 'scale', type: 'float', data: attributes.scale}\r\n ],\r\n shaderSource\r\n };\r\n };\r\n\r\nconst createImageScalerProgramInfoLoader =\r\n (handler: WebGLInferenceHandler, inputs: Tensor[], attributes: ImageScalerAttributes): ProgramInfoLoader => {\r\n const metadata = {...imageScalerProgramMetadata, cacheHint: attributes.cacheKey};\r\n return {...metadata, get: () => createImageScalerProgramInfo(handler, metadata, inputs, attributes)};\r\n };\r\n\r\nconst createGetBiasMethod = (numChannels: number): string => {\r\n const codeLines: string[] = [`float getBias(float bias[${numChannels}], int channel) {`];\r\n for (let i = 0; i < numChannels; ++i) {\r\n if (i === 0) {\r\n codeLines.push(\r\n '\\t' +\r\n `if (channel == ${i}) { return bias[${i}]; }`);\r\n } else if (i === numChannels - 1) {\r\n codeLines.push(\r\n '\\t' +\r\n `else { return bias[${i}]; }`);\r\n } else {\r\n codeLines.push(\r\n '\\t' +\r\n `else if (channel == ${i}) { return bias[${i}]; }`);\r\n }\r\n }\r\n codeLines.push(\r\n '\\t' +\r\n '}');\r\n return codeLines.join('\\n');\r\n};\r\n\r\nconst validateInputs = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length !== 1) {\r\n throw new Error('ImageScaler requires 1 input.');\r\n }\r\n if (inputs[0].dims.length !== 4) {\r\n throw new Error('Invalid input shape.');\r\n }\r\n if (inputs[0].type !== 'float32' && inputs[0].type !== 'float64') {\r\n throw new Error('Invalid input type.');\r\n }\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {getGlsl} from '../glsl-source';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramInfoLoader, ProgramMetadata, TextureType} from '../types';\r\n\r\nexport const instanceNormalization: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], epsilon: number): Tensor[] => {\r\n validateInputs(inputs);\r\n\r\n const meanAndVariance = inferenceHandler.run(createMeanAndVarianceProgramInfoLoader(inputs[0]), inputs);\r\n const output = inferenceHandler.run(\r\n createComputeOutputProgramInfoLoader(inferenceHandler, inputs[0], epsilon, meanAndVariance.dims),\r\n [inputs[0], meanAndVariance, inputs[1], inputs[2]]);\r\n return [output];\r\n };\r\n\r\nexport const parseInstanceNormalizationAttributes: OperatorInitialization = (node: Graph.Node): number =>\r\n node.attributes.getFloat('epsilon', 1e-5);\r\n\r\nconst meanAndVarianceProgramMetadata = {\r\n name: 'InstanceNormalization_MeanAndVariance',\r\n inputNames: ['X'],\r\n inputTypes: [TextureType.unpacked],\r\n};\r\n\r\nconst createMeanAndVarianceProgramInfo = (metadata: ProgramMetadata, input: Tensor): ProgramInfo => {\r\n const xDims = input.dims.slice();\r\n const channel = xDims[1];\r\n const channelSize = xDims[2] * xDims[3];\r\n const outputShape = [xDims[0], channel];\r\n\r\n const shaderSource = `\r\n vec4 process(int[2] indices) {\r\n vec4 v = vec4(0.0);\r\n int a[4];\r\n a[0] = indices[0];\r\n a[1] = indices[1];\r\n float temp = 0.0;\r\n for(int a2=0; a2<${xDims[2]}; a2++) {\r\n a[2] = a2;\r\n for(int a3=0; a3<${xDims[3]}; a3++) {\r\n a[3] = a3;\r\n float x = _X(a);\r\n temp += x;\r\n }\r\n }\r\n float mean = temp / float(${channelSize});\r\n temp = 0.0;\r\n for(int a2=0; a2<${xDims[2]}; a2++) {\r\n a[2] = a2;\r\n for(int a3=0; a3<${xDims[3]}; a3++) {\r\n a[3] = a3;\r\n float x = _X(a);\r\n temp += (x - mean) * (x - mean);\r\n }\r\n }\r\n v.r = mean;\r\n v.g = temp / float(${channelSize});\r\n\r\n return v;\r\n }`;\r\n return {\r\n ...metadata,\r\n output: {dims: outputShape, type: input.type, textureType: TextureType.packedLastDimension},\r\n shaderSource\r\n };\r\n};\r\n\r\nconst createMeanAndVarianceProgramInfoLoader = (input: Tensor): ProgramInfoLoader => ({\r\n ...meanAndVarianceProgramMetadata,\r\n get: () => createMeanAndVarianceProgramInfo(meanAndVarianceProgramMetadata, input)\r\n});\r\n\r\nconst computeOutputProgramMetadata = {\r\n name: 'InstanceNormalization_ComputeOutput',\r\n inputNames: ['X', 'MeanAndVariance', 'Scale', 'B'],\r\n inputTypes: [TextureType.unpacked, TextureType.packedLastDimension, TextureType.unpacked, TextureType.unpacked],\r\n};\r\n\r\nconst createComputeOutputProgramInfo =\r\n (inferenceHandler: WebGLInferenceHandler, metadata: ProgramMetadata, input: Tensor, epsilon: number,\r\n meanAndVarianceShape: readonly number[]): ProgramInfo => {\r\n const glsl = getGlsl(inferenceHandler.session.backend.glContext.version);\r\n const [textureWidth, textureHeight] =\r\n inferenceHandler.calculateTextureWidthAndHeight(meanAndVarianceShape, TextureType.packedLastDimension);\r\n const [meanAndVarianceWidth, meanAndVarianceHeight] = [textureWidth / 4, textureHeight];\r\n const shaderSource = `\r\n vec4 get_MeanAndVariance(int[2] mv) {\r\n int offset = indicesToOffset_MeanAndVariance(mv);\r\n vec2 coords = offsetToCoords(offset, ${meanAndVarianceWidth}, ${meanAndVarianceHeight});\r\n return ${glsl.texture2D}(MeanAndVariance, coords);\r\n }\r\n\r\n float process(int[4] indices) {\r\n int mv[2];\r\n mv[0] = indices[0];\r\n mv[1] = indices[1];\r\n vec4 mean_and_variance = get_MeanAndVariance(mv);\r\n float mean = mean_and_variance.r;\r\n float variance = mean_and_variance.g;\r\n\r\n int sb[1];\r\n sb[0] = indices[1];\r\n float scale = _Scale(sb);\r\n float b = _B(sb);\r\n\r\n return scale * (_X(indices) - mean) / sqrt(variance + epsilon) + b;\r\n }`;\r\n return {\r\n ...metadata,\r\n output: {dims: input.dims, type: input.type, textureType: TextureType.unpacked},\r\n variables: [{name: 'epsilon', type: 'float', data: epsilon}],\r\n shaderSource\r\n };\r\n };\r\n\r\nconst createComputeOutputProgramInfoLoader =\r\n (inferenceHandler: WebGLInferenceHandler, input: Tensor, epsilon: number, meanAndVarianceShape: readonly number[]):\r\n ProgramInfoLoader => {\r\n const metadata = {...computeOutputProgramMetadata, cacheHint: `${epsilon}`};\r\n return {\r\n ...metadata,\r\n get: () => createComputeOutputProgramInfo(inferenceHandler, metadata, input, epsilon, meanAndVarianceShape)\r\n };\r\n };\r\n\r\nconst validateInputs = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length !== 3) {\r\n throw new Error('InstanceNormalization requires 3 inputs.');\r\n }\r\n\r\n const X = inputs[0];\r\n const scale = inputs[1];\r\n const B = inputs[2];\r\n\r\n // input should at least have three dimensions - N,C,dim1,...,dimn\r\n // other inputs can have only one dimensions\r\n if (X.dims.length < 3 || scale.dims.length !== 1 || B.dims.length !== 1) {\r\n throw new Error('Invalid input shape.');\r\n }\r\n if (scale.dims[0] !== X.dims[1] || B.dims[0] !== X.dims[1]) {\r\n throw new Error('Input shapes are mismatched.');\r\n }\r\n if ((X.type !== 'float32' && X.type !== 'float64') || (scale.type !== 'float32' && scale.type !== 'float64') ||\r\n (B.type !== 'float32' && B.type !== 'float64')) {\r\n throw new Error('Invalid input type.');\r\n }\r\n if (inputs[0].dims.length !== 4) {\r\n throw new Error('Only support 4-D input shape.');\r\n }\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Tensor} from '../../../tensor';\r\nimport {BroadcastUtil} from '../../../util';\r\nimport {ShapeUtil} from '../../../util';\r\nimport {getGlsl} from '../glsl-source';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramInfoLoader, ProgramMetadata, TextureType} from '../types';\r\nimport {getCoordsDataType, getGlChannels} from '../utils';\r\n\r\nimport {getActicationSnippet, InternalActivationAttributes} from './fuse-utils';\r\nimport {getBiasForMatmul} from './matmul';\r\n\r\nconst createPackedMatmulProgramMetadata = (hasBias: boolean, cacheHint: string) => ({\r\n name: 'MatMul (packed)',\r\n inputNames: hasBias ? ['A', 'B', 'Bias'] : ['A', 'B'],\r\n inputTypes: hasBias ? [TextureType.packed, TextureType.packed, TextureType.packed] :\r\n [TextureType.packed, TextureType.packed],\r\n cacheHint\r\n});\r\n\r\nconst createPackedMatmulProgramInfo =\r\n (inferenceHandler: WebGLInferenceHandler, metadata: ProgramMetadata, inputs: Tensor[],\r\n activationAttributes: InternalActivationAttributes): ProgramInfo => {\r\n const hasBias = inputs.length > 2;\r\n const processBias = hasBias ? 'value += getBiasForMatmul();' : '';\r\n const aShape = inputs[0].dims;\r\n const bShape = inputs[1].dims;\r\n const outputShape = BroadcastUtil.calcShape(aShape, bShape, true);\r\n const isBroadcast = !ShapeUtil.areEqual(inputs[0].dims, inputs[1].dims);\r\n\r\n if (!outputShape) {\r\n throw new Error('Can\\'t use matmul on the given tensors');\r\n }\r\n const sharedDim = aShape[aShape.length - 1];\r\n const sharedDimIndex = Math.ceil(sharedDim / 2);\r\n const aRank = aShape.length;\r\n const bRank = bShape.length;\r\n\r\n const glsl = getGlsl(inferenceHandler.session.backend.glContext.version);\r\n const coordsDataType = getCoordsDataType(outputShape.length);\r\n const outRank = outputShape.length;\r\n const allGlChannels = getGlChannels();\r\n const {activationFunction, applyActivation} = getActicationSnippet(activationAttributes);\r\n\r\n const getBiasForMatmulSnippet =\r\n hasBias ? `${getBiasForMatmul(coordsDataType, allGlChannels, inputs[2].dims, outputShape, true)}` : '';\r\n\r\n const getBcastedSamplerForMatmulSnippet =\r\n isBroadcast ? `${getBcastSamplerForMatmul(coordsDataType, allGlChannels, inputs, outputShape)}` : '';\r\n\r\n const getSamplerAInLoopSnippet = isBroadcast ? 'getAAtOutCoordsMatmul(i)' : `getA(${getA(allGlChannels, aRank)})`;\r\n const getSamplerBInLoopSnippet = isBroadcast ? 'getBAtOutCoordsMatmul(i)' : `getB(${getB(allGlChannels, bRank)})`;\r\n const getOutputCoordsSnippet = isBroadcast ? '' : `${coordsDataType} rc =\r\n getOutputCoords(); int lastDim = rc.${allGlChannels[outRank - 1]}; rc.${allGlChannels[outRank - 1]} =\r\n rc.${allGlChannels[outRank - 2]}; rc.${allGlChannels[outRank - 2]} = lastDim;\r\n `;\r\n const shaderSource = `\r\n ${getBcastedSamplerForMatmulSnippet}\r\n ${getBiasForMatmulSnippet}\r\n ${activationFunction}\r\n void main() {\r\n ${getOutputCoordsSnippet}\r\n\r\n vec4 value = vec4(0);\r\n for (int i = 0; i < ${sharedDimIndex}; i++) {\r\n vec4 a = ${getSamplerAInLoopSnippet};\r\n vec4 b = ${getSamplerBInLoopSnippet};\r\n\r\n value += (a.rrbb * b.rgrg);\r\n value += (a.ggaa * b.baba);\r\n }\r\n ${processBias}\r\n ${applyActivation}\r\n ${glsl.output} = value;\r\n }`;\r\n return {\r\n ...metadata,\r\n output: {dims: outputShape, type: inputs[0].type, textureType: TextureType.packed},\r\n shaderSource,\r\n hasMain: true\r\n };\r\n };\r\n\r\nexport const createPackedMatmulProgramInfoLoader =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[],\r\n activationAttributes: InternalActivationAttributes): ProgramInfoLoader => {\r\n const metadata = createPackedMatmulProgramMetadata(inputs.length > 2, activationAttributes.activationCacheKey);\r\n return {\r\n ...metadata,\r\n get: () => createPackedMatmulProgramInfo(inferenceHandler, metadata, inputs, activationAttributes)\r\n };\r\n };\r\n\r\nfunction getBcastSamplerForMatmul(\r\n coordsDataType: string, allGlChannels: readonly string[], inputs: Tensor[], outShape: readonly number[]): string {\r\n let unpackedACoordsSnippet = [];\r\n let unpackedBCoordsSnippet = [];\r\n\r\n const inAShape = inputs[0].dims;\r\n const inBShape = inputs[1].dims;\r\n\r\n const inARank = inAShape.length;\r\n const inBRank = inBShape.length;\r\n\r\n const outRank = outShape.length;\r\n const rankADiff = outRank - inARank;\r\n const rankBDiff = outRank - inBRank;\r\n\r\n unpackedACoordsSnippet = inAShape.map((s, i) => `coords.${allGlChannels[i + rankADiff]}`);\r\n unpackedACoordsSnippet[inARank - 1] = 'i*2';\r\n unpackedACoordsSnippet.join(', ');\r\n unpackedBCoordsSnippet = inBShape.map((s, i) => `coords.${allGlChannels[i + rankBDiff]}`);\r\n unpackedBCoordsSnippet[inBRank - 2] = 'i*2';\r\n unpackedBCoordsSnippet.join(', ');\r\n\r\n const broadcastADims = BroadcastUtil.getBroadcastDims(inAShape, outShape);\r\n const broadcastBDims = BroadcastUtil.getBroadcastDims(inBShape, outShape);\r\n\r\n const coordsASnippet = broadcastADims.map(d => `coords.${allGlChannels[d + rankADiff]} = 0;`).join('\\n');\r\n const coordsBSnippet = broadcastBDims.map(d => `coords.${allGlChannels[d + rankBDiff]} = 0;`).join('\\n');\r\n const swapDimSnippet = `int lastDim = coords.${allGlChannels[outRank - 1]};\r\n coords.${allGlChannels[outRank - 1]} = coords.${allGlChannels[outRank - 2]};\r\n coords.${allGlChannels[outRank - 2]} = lastDim;`;\r\n\r\n const getBcastSamplerMatmulSource = `\r\nvec4 getAAtOutCoordsMatmul(int i) {\r\n ${coordsDataType} coords = getOutputCoords();\r\n ${swapDimSnippet}\r\n ${coordsASnippet}\r\n vec4 outputValue = getA(${unpackedACoordsSnippet});\r\n return outputValue;\r\n}\r\n\r\nvec4 getBAtOutCoordsMatmul(int i) {\r\n ${coordsDataType} coords = getOutputCoords();\r\n ${swapDimSnippet}\r\n ${coordsBSnippet}\r\n vec4 outputValue = getB(${unpackedBCoordsSnippet});\r\n return outputValue;\r\n}`;\r\n\r\n return getBcastSamplerMatmulSource;\r\n}\r\n\r\nfunction getA(allGlChannels: string[], rank: number): string {\r\n let res = '';\r\n for (let i = 0; i < rank - 2; i++) {\r\n res += `rc.${allGlChannels[i]}, `;\r\n }\r\n res += `rc.${allGlChannels[rank - 2]}, ` +\r\n 'i*2';\r\n return res;\r\n}\r\n\r\nfunction getB(allGlChannels: string[], rank: number): string {\r\n let res = '';\r\n for (let i = 0; i < rank - 2; i++) {\r\n res += `rc.${allGlChannels[i]}, `;\r\n }\r\n res += 'i*2, ' +\r\n `rc.${allGlChannels[rank - 1]}`;\r\n return res;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {BroadcastUtil, ShapeUtil} from '../../../util';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramInfoLoader, ProgramMetadata, TextureType} from '../types';\r\nimport {getCoordsDataType, getGlChannels} from '../utils';\r\nimport {getActicationSnippet, InternalActivationAttributes, parseInternalActivationAttributes} from './fuse-utils';\r\nimport {createPackedMatmulProgramInfoLoader} from './matmul-pack';\r\n\r\nexport const matMul: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: InternalActivationAttributes): Tensor[] => {\r\n validateInputs(inputs);\r\n\r\n if (inferenceHandler.session.pack) {\r\n return [inferenceHandler.run(\r\n createPackedMatmulProgramInfoLoader(inferenceHandler, inputs, attributes), inputs)];\r\n } else {\r\n return [inferenceHandler.run(createMatmulProgramInfoLoader(inputs, attributes), inputs)];\r\n }\r\n };\r\n\r\nexport const parseMatMulAttributes: OperatorInitialization =\r\n (node: Graph.Node): InternalActivationAttributes => parseInternalActivationAttributes(node.attributes);\r\n\r\nconst createMatmulProgramMetadata = (hasBias: boolean, cacheHint: string) => ({\r\n name: 'MatMul',\r\n inputNames: hasBias ? ['A', 'B', 'Bias'] : ['A', 'B'],\r\n inputTypes: hasBias ? [TextureType.unpacked, TextureType.unpacked, TextureType.unpacked] :\r\n [TextureType.unpacked, TextureType.unpacked],\r\n cacheHint\r\n});\r\n\r\nfunction createMatmulProgramInfo(\r\n metadata: ProgramMetadata, inputs: Tensor[], activationAttributes: InternalActivationAttributes): ProgramInfo {\r\n const aShape = inputs[0].dims;\r\n const bShape = inputs[1].dims;\r\n const outputShape = BroadcastUtil.calcShape(aShape, bShape, true);\r\n if (!outputShape) {\r\n throw new Error('Can\\'t use matmul on the given tensors');\r\n }\r\n const coordsDataType = getCoordsDataType(outputShape.length);\r\n const allGlChannels = getGlChannels();\r\n const {activationFunction, applyActivation} = getActicationSnippet(activationAttributes);\r\n\r\n const hasBias = inputs.length > 2;\r\n const processBias = hasBias ? 'value += getBiasForMatmul();' : '';\r\n const getBiasForMatmulSnippet =\r\n hasBias ? `${getBiasForMatmul(coordsDataType, allGlChannels, inputs[2].dims, outputShape, false)}` : '';\r\n\r\n const rank = outputShape.length;\r\n const arank = aShape.length;\r\n const brank = bShape.length;\r\n const sharedDim = aShape[aShape.length - 1];\r\n const shaderSource = `\r\n ${activationFunction}\r\n ${getBiasForMatmulSnippet}\r\n float process(int indices[${rank}]) {\r\n int a[${arank}];\r\n int b[${brank}];\r\n bcastMatmulIndices_A(indices, a);\r\n bcastMatmulIndices_B(indices, b);\r\n\r\n float value;\r\n for (int k=0; k<${sharedDim}; ++k) {\r\n a[${arank - 1}] = k;\r\n b[${brank - 2}] = k;\r\n value += _A(a) * _B(b);\r\n }\r\n ${processBias}\r\n ${applyActivation}\r\n return value;\r\n }`;\r\n return {\r\n ...metadata,\r\n output: {dims: outputShape, type: inputs[0].type, textureType: TextureType.unpacked},\r\n shaderSource,\r\n };\r\n}\r\n\r\nexport function createMatmulProgramInfoLoader(\r\n inputs: Tensor[], activationAttributes: InternalActivationAttributes): ProgramInfoLoader {\r\n const metadata = createMatmulProgramMetadata(inputs.length > 2, activationAttributes.activationCacheKey);\r\n return {...metadata, get: () => createMatmulProgramInfo(metadata, inputs, activationAttributes)};\r\n}\r\n\r\nconst validateInputs = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length !== 2) {\r\n throw new Error('MatMul requires 2 inputs.');\r\n }\r\n\r\n if (inputs[0].dims[inputs[0].dims.length - 1] !== inputs[1].dims[inputs[1].dims.length - 2]) {\r\n throw new Error('shared dimension does not match.');\r\n }\r\n\r\n if ((inputs[0].type !== 'float32' && inputs[0].type !== 'float64') ||\r\n (inputs[1].type !== 'float32' && inputs[1].type !== 'float64')) {\r\n throw new Error('inputs should be float type');\r\n }\r\n\r\n if (inputs[0].type !== inputs[1].type) {\r\n throw new Error('inputs types should match');\r\n }\r\n};\r\n\r\nexport function getBiasForMatmul(\r\n coordsDataType: string, allGlChannels: readonly string[], inShape: readonly number[], outShape: readonly number[],\r\n isPacked: boolean): string {\r\n let unpackedCoordsSnippet = '';\r\n const inRank = inShape.length;\r\n const outRank = outShape.length;\r\n const rankDiff = outRank - inRank;\r\n if (outRank < 2 && inRank > 0) {\r\n unpackedCoordsSnippet = 'coords';\r\n } else {\r\n unpackedCoordsSnippet = inShape.map((s, i) => `coords.${allGlChannels[i + rankDiff]}`).join(', ');\r\n }\r\n const broadcastDims = BroadcastUtil.getBroadcastDims(inShape, outShape);\r\n const coordsSnippet = broadcastDims.map(d => `coords.${allGlChannels[d + rankDiff]} = 0;`).join('\\n');\r\n const inSize = ShapeUtil.size(inShape);\r\n const isInputScalar = inSize === 1;\r\n let output = 'vec4(outputValue.xx, outputValue.yy)';\r\n if (isInputScalar) {\r\n output = 'vec4(outputValue.x)';\r\n }\r\n const getBiasForMatmulSource = isPacked ? `\r\nvec4 getBiasForMatmul() {\r\n ${coordsDataType} coords = getOutputCoords();\r\n ${coordsSnippet}\r\n vec4 outputValue = getBias(${unpackedCoordsSnippet});\r\n return ${output};\r\n}` :\r\n `\r\nfloat getBiasForMatmul() {\r\n ${coordsDataType} coords = getOutputCoords();\r\n ${coordsSnippet}\r\n return getBias(coords.x);\r\n}`;\r\n\r\n return getBiasForMatmulSource;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Tensor} from '../../../tensor';\r\nimport {getGlsl} from '../glsl-source';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramInfoLoader, TextureType} from '../types';\r\nimport {getCoordsDataType} from '../utils';\r\n\r\nimport {getChannels} from './packing-utils';\r\n\r\nconst packProgramMetadata = {\r\n name: 'pack',\r\n inputNames: ['A'],\r\n inputTypes: [TextureType.unpackedReversed]\r\n};\r\n\r\nconst createPackProgramInfo = (handler: WebGLInferenceHandler, input: Tensor): ProgramInfo => {\r\n const glsl = getGlsl(handler.session.backend.glContext.version);\r\n const inputShape = input.dims;\r\n\r\n const inputRank = inputShape.length;\r\n // createTextureLayoutFromShape won't change output rank. Need to verify by running tests\r\n const outputRank = input.dims.length;\r\n\r\n const coordsDataType = getCoordsDataType(outputRank);\r\n const channels = getChannels('rc', outputRank);\r\n const setup = getSetup(outputRank, channels, inputShape[inputShape.length - 2], inputShape[inputShape.length - 1]);\r\n\r\n let reversedInputWH;\r\n if (inputRank === 0) {\r\n reversedInputWH = [1, 1];\r\n } else if (inputRank === 1) {\r\n reversedInputWH = [inputShape[0], 1];\r\n } else {\r\n reversedInputWH = [inputShape[outputRank - 1], inputShape[outputRank - 2]];\r\n }\r\n const outOfBoundsCondition = getOutOfBoundsCondition(outputRank, reversedInputWH, channels);\r\n const output = getOutput(inputShape, channels);\r\n\r\n const shaderSource = `\r\n void main() {\r\n ${coordsDataType} rc = getOutputCoords();\r\n\r\n if(${outOfBoundsCondition}) {\r\n ${glsl.output} = vec4(0);\r\n } else {\r\n ${setup}\r\n\r\n ${glsl.output} = vec4(${output});\r\n }\r\n }\r\n `;\r\n return {\r\n ...packProgramMetadata,\r\n hasMain: true,\r\n output: {dims: input.dims, type: input.type, textureType: TextureType.packed},\r\n shaderSource\r\n };\r\n};\r\n\r\nexport const createPackProgramInfoLoader = (handler: WebGLInferenceHandler, input: Tensor): ProgramInfoLoader =>\r\n ({...packProgramMetadata, get: () => createPackProgramInfo(handler, input)});\r\n\r\n/**\r\n * check output coordinate location and return false if it is outside input's width/height boundary\r\n */\r\nfunction getOutOfBoundsCondition(rank: number, shape: readonly number[], dims: string[]): string {\r\n if (rank === 0) {\r\n return 'false';\r\n }\r\n if (rank === 1) {\r\n return `rc > ${shape[0]}`;\r\n }\r\n\r\n let cond = '';\r\n for (let i = rank - 2; i < rank; i++) {\r\n cond += `${dims[i]} >= ${shape[i - rank + 2]}`;\r\n if (i < rank - 1) {\r\n cond += '||';\r\n }\r\n }\r\n\r\n return cond;\r\n}\r\n\r\n/**\r\n * code snippet to sample input texture with output coordiantes\r\n */\r\nfunction getOutput(shape: readonly number[], dims: string[]): string {\r\n const rank = shape.length;\r\n\r\n if (rank === 0) {\r\n return 'getA(), 0, 0, 0';\r\n }\r\n\r\n if (rank === 1) {\r\n return `getA(rc),\r\n rc + 1 >= ${shape[0]} ? 0. : getA(rc + 1),\r\n 0, 0`;\r\n }\r\n\r\n const coord00 = 'r, c';\r\n const coord01 = 'r, cp1';\r\n const coord10 = 'rp1, c';\r\n const coord11 = 'rp1, cp1';\r\n let D = '';\r\n if (rank > 2) {\r\n for (let i = 0; i < rank - 2; ++i) {\r\n D = D + `${dims[i]},`;\r\n }\r\n }\r\n return `getA(${D}${coord00}),\r\n rEdge ? 0. : getA(${D}${coord10}),\r\n cEdge ? 0. : getA(${D}${coord01}),\r\n rEdge || cEdge ? 0. : getA(${D}${coord11})`;\r\n}\r\n\r\n/**\r\n * code snippet to setup 4 coordinates and edge conditions\r\n */\r\nfunction getSetup(rank: number, dims: string[], rows: number, cols: number): string {\r\n if (rank === 0 || rank === 1) {\r\n return '';\r\n }\r\n // rank >= 2 for width+height pack.\r\n else {\r\n const setup = `\r\n int r = ${dims[rank - 2]};\r\n int c = ${dims[rank - 1]};\r\n int rp1 = ${dims[rank - 2]} + 1;\r\n int cp1 = ${dims[rank - 1]} + 1;\r\n bool rEdge = rp1 >= ${cols};\r\n bool cEdge = cp1 >= ${rows};\r\n `;\r\n return setup;\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {getGlChannels} from '../utils';\r\n\r\nexport function getVecChannels(name: string, rank: number): string[] {\r\n return getGlChannels(rank).map(d => `${name}.${d}`);\r\n}\r\n\r\nexport function getChannels(name: string, rank: number): string[] {\r\n if (rank === 1) {\r\n return [name];\r\n }\r\n return getVecChannels(name, rank);\r\n}\r\n\r\nexport function unpackFromChannel(): string {\r\n return `\r\n float getChannel(vec4 frag, int dim) {\r\n int modCoord = imod(dim, 2);\r\n return modCoord == 0 ? frag.r : frag.g;\r\n }\r\n\r\n float getChannel(vec4 frag, vec2 innerDims) {\r\n vec2 modCoord = mod(innerDims, 2.);\r\n return modCoord.x == 0. ?\r\n (modCoord.y == 0. ? frag.r : frag.g) :\r\n (modCoord.y == 0. ? frag.b : frag.a);\r\n }\r\n `;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {AttributeWithCacheKey, createAttributeWithCacheKey} from '../../../attribute-with-cache-key';\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {ShapeUtil} from '../../../util';\r\nimport {getGlsl, Glsl} from '../glsl-source';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, TextureType} from '../types';\r\n\r\nexport interface PadAttributes extends AttributeWithCacheKey {\r\n readonly mode: string;\r\n readonly pads: number[];\r\n readonly value: number;\r\n}\r\n\r\nconst padProgramMetadata = {\r\n name: 'Pad',\r\n inputNames: ['A'],\r\n inputTypes: [TextureType.unpacked],\r\n};\r\n\r\nexport const padV2: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: PadAttributes): Tensor[] => {\r\n validateInputsV2(inputs);\r\n const output = inferenceHandler.run(\r\n {\r\n ...padProgramMetadata,\r\n cacheHint: attributes.cacheKey,\r\n get: () => createPadProgramInfo(inferenceHandler, inputs[0], attributes)\r\n },\r\n inputs);\r\n return [output];\r\n };\r\n\r\nexport const parsePadAttributesV2: OperatorInitialization = (node: Graph.Node): PadAttributes => {\r\n const mode = node.attributes.getString('mode', 'constant');\r\n const value = node.attributes.getFloat('value', 0.0);\r\n const pads = node.attributes.getInts('pads');\r\n return createAttributeWithCacheKey({mode, value, pads});\r\n};\r\n\r\nexport const padV11: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], mode: string): Tensor[] => {\r\n validateInputsV11(inputs);\r\n const attrubutes = generatePadAttributesFromInputs(inferenceHandler, inputs, mode);\r\n return padV2(inferenceHandler, [inputs[0]], attrubutes);\r\n };\r\n\r\nexport const parsePadAttributesV11: OperatorInitialization = (node: Graph.Node): string =>\r\n node.attributes.getString('mode', 'constant');\r\n\r\nconst generatePadAttributesFromInputs =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], mode: string): PadAttributes => {\r\n if (!inferenceHandler.session.isInitializer(inputs[1].dataId) ||\r\n (inputs.length >= 3 && !inferenceHandler.session.isInitializer(inputs[2].dataId))) {\r\n throw new Error('dynamic pad attributes are not allowed');\r\n }\r\n\r\n const pads = Array.from(inputs[1].integerData);\r\n const value = (inputs.length >= 3) ? inputs[2].floatData[0] : 0.0;\r\n\r\n return createAttributeWithCacheKey({mode, pads, value});\r\n };\r\n\r\nconst createPadProgramInfo =\r\n (inferenceHandler: WebGLInferenceHandler, input: Tensor, attributes: PadAttributes): ProgramInfo => {\r\n const outputShape = ShapeUtil.padShape(input.dims.slice(), attributes.pads);\r\n const rank = outputShape.length;\r\n const padFunction = getPadFunction(inferenceHandler, input, attributes);\r\n const shaderSource = `\r\n ${padFunction}\r\n float process(int[${rank}] indices) {\r\n return padA(indices);\r\n }`;\r\n return {\r\n name: 'Pad',\r\n inputNames: ['A'],\r\n inputTypes: [TextureType.unpacked],\r\n output: {dims: outputShape, type: input.type, textureType: TextureType.unpacked},\r\n shaderSource\r\n };\r\n };\r\n\r\nconst validateInputsV2 = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length !== 1) {\r\n throw new Error('Pad requires 1 input');\r\n }\r\n if (inputs[0].type !== 'float32' && inputs[0].type !== 'float64') {\r\n throw new Error('Invalid input type.');\r\n }\r\n};\r\n\r\nconst validateInputsV11 = (inputs: Tensor[]): void => {\r\n if (!inputs || (inputs.length !== 2 && inputs.length !== 3)) {\r\n throw new Error('Pad requires 2 or 3 inputs');\r\n }\r\n if (inputs[1].type !== 'int32') {\r\n throw new Error('Invalid input type.');\r\n }\r\n if (inputs.length >= 3 && inputs[2].type === 'string') {\r\n throw new Error('Invalid input type.');\r\n }\r\n};\r\n\r\nconst getPadFunction = (inferenceHandler: WebGLInferenceHandler, input: Tensor, attributes: PadAttributes): string => {\r\n const glsl = getGlsl(inferenceHandler.session.backend.glContext.version);\r\n const [width, height] = inferenceHandler.calculateTextureWidthAndHeight(input.dims, TextureType.unpacked);\r\n const strides = ShapeUtil.computeStrides(input.dims);\r\n\r\n switch (attributes.mode) {\r\n case 'constant':\r\n return getPadConstant(glsl, input.dims, strides, width, height, attributes.pads, attributes.value);\r\n case 'reflect':\r\n return getPadReflect(glsl, input.dims, strides, width, height, attributes.pads);\r\n case 'edge':\r\n return getPadEdge(glsl, input.dims, strides, width, height, attributes.pads);\r\n default:\r\n throw new Error('Invalid mode');\r\n }\r\n};\r\n\r\nconst getPadConstant =\r\n (glsl: Glsl, shape: readonly number[], strides: readonly number[], width: number, height: number, pads: number[],\r\n value: number): string => {\r\n const rank = shape.length;\r\n let block = '';\r\n for (let i = rank - 1; i >= 0; --i) {\r\n block += `\r\n k = m[${i}] - ${pads[i]};\r\n if (k < 0) return constant;\r\n if (k >= ${shape[i]}) return constant;\r\n offset += k * ${strides[i]};\r\n `;\r\n }\r\n return `\r\n float padA(int m[${rank}]) {\r\n const float constant = float(${value});\r\n int offset = 0;\r\n int k = 0;\r\n ${block}\r\n vec2 coords = offsetToCoords(offset, ${width}, ${height});\r\n float value = getColorAsFloat(${glsl.texture2D}(A, coords));\r\n return value;\r\n }\r\n `;\r\n };\r\n\r\nconst getPadReflect =\r\n (glsl: Glsl, shape: readonly number[], strides: readonly number[], width: number, height: number, pads: number[]):\r\n string => {\r\n const rank = shape.length;\r\n\r\n let block = '';\r\n for (let i = rank - 1; i >= 0; --i) {\r\n block += `\r\n k = m[${i}] - ${pads[i]};\r\n if (k < 0) { k = -k; }\r\n {\r\n const int _2n_1 = ${2 * (shape[i] - 1)};\r\n k = int( mod( float(k), float(_2n_1) ) ) ;\r\n if(k >= ${shape[i]}) { k = _2n_1 - k; }\r\n }\r\n offset += k * ${strides[i]};\r\n `;\r\n }\r\n return `\r\n float padA(int m[${rank}]) {\r\n int offset = 0;\r\n int k = 0;\r\n ${block}\r\n vec2 coords = offsetToCoords(offset, ${width}, ${height});\r\n float value = getColorAsFloat(${glsl.texture2D}(A, coords));\r\n return value;\r\n }\r\n `;\r\n };\r\n\r\nconst getPadEdge =\r\n (glsl: Glsl, shape: readonly number[], strides: readonly number[], width: number, height: number, pads: number[]):\r\n string => {\r\n const rank = shape.length;\r\n\r\n let block = '';\r\n for (let i = rank - 1; i >= 0; --i) {\r\n block += `\r\n k = m[${i}] - ${pads[i]};\r\n if (k < 0) k = 0;\r\n if (k >= ${shape[i]}) k = ${shape[i] - 1};\r\n offset += k * ${strides[i]};\r\n `;\r\n }\r\n return `\r\n float padA(int m[${rank}]) {\r\n int offset = 0;\r\n int k = 0;\r\n ${block}\r\n vec2 coords = offsetToCoords(offset, ${width}, ${height});\r\n float value = getColorAsFloat(${glsl.texture2D}(A, coords));\r\n return value;\r\n }\r\n `;\r\n };\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {AttributeWithCacheKey, createAttributeWithCacheKey} from '../../../attribute-with-cache-key';\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {PoolConvUtil, ShapeUtil} from '../../../util';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramMetadata, TextureType} from '../types';\r\n\r\nexport interface AveragePoolAttributes extends AttributeWithCacheKey {\r\n readonly autoPad: string;\r\n readonly ceilMode: number;\r\n readonly countIncludePad: boolean;\r\n readonly kernelShape: readonly number[];\r\n readonly strides: readonly number[];\r\n readonly pads: readonly number[];\r\n}\r\n\r\nexport const averagePool: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: AveragePoolAttributes): Tensor[] => {\r\n validateInputs(inputs);\r\n const metadata =\r\n {name: 'AveragePool', inputNames: ['X'], inputTypes: [TextureType.unpacked], cacheHint: attributes.cacheKey};\r\n const output = inferenceHandler.run(\r\n {...metadata, get: () => createAveragePoolProgramInfo(inputs, metadata, false, attributes)}, inputs);\r\n return [output];\r\n };\r\n\r\nexport const parseAveragePoolAttributes: OperatorInitialization =\r\n (node: Graph.Node): AveragePoolAttributes => {\r\n const autoPad = node.attributes.getString('auto_pad', 'NOTSET');\r\n const ceilMode = node.attributes.getInt('ceil_mode', 0);\r\n const countIncludePad = (node.attributes.getInt('count_include_pad', 0) === 0 ? false : true);\r\n const kernelShape = node.attributes.getInts('kernel_shape');\r\n const strides = node.attributes.getInts('strides', []);\r\n const pads = node.attributes.getInts('pads', []);\r\n\r\n // TODO: support attribute 'ceil_mode'\r\n if (ceilMode !== 0) {\r\n throw new Error('using ceil() in shape computation is not yet supported for AveragePool');\r\n }\r\n\r\n return createAttributeWithCacheKey({autoPad, ceilMode, countIncludePad, kernelShape, strides, pads});\r\n };\r\n\r\nconst createAveragePoolProgramInfo =\r\n (inputs: Tensor[], metadata: ProgramMetadata, isGlobalOperator: boolean, attributes: AveragePoolAttributes):\r\n ProgramInfo => {\r\n const [adjustedAttributes, outputShape] =\r\n getAdjustedPoolAttributesAndOutputShape(inputs, attributes, isGlobalOperator);\r\n const kernelSize = ShapeUtil.size(adjustedAttributes.kernelShape);\r\n const op1 = 'value += _X(x);';\r\n let op2 = '';\r\n if (adjustedAttributes.countIncludePad) {\r\n op2 += `value /= float(${kernelSize});`;\r\n } else {\r\n op2 += `value /= float(${kernelSize} - pad);`;\r\n }\r\n const poolingCode = generatePoolingCode(inputs[0].dims, adjustedAttributes, op1, op2, '0.0');\r\n const shaderSource = `\r\n ${poolingCode}\r\n `;\r\n return {\r\n ...metadata,\r\n output: {dims: outputShape, type: inputs[0].type, textureType: TextureType.unpacked},\r\n shaderSource\r\n };\r\n };\r\n\r\nexport const globalAveragePool: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: AveragePoolAttributes): Tensor[] => {\r\n validateInputs(inputs);\r\n const metadata = {\r\n name: 'GlobalAveragePool',\r\n inputNames: ['X'],\r\n inputTypes: [TextureType.unpacked],\r\n cacheHint: `${attributes.countIncludePad}`\r\n };\r\n const output = inferenceHandler.run(\r\n {...metadata, get: () => createAveragePoolProgramInfo(inputs, metadata, true, attributes)}, inputs);\r\n return [output];\r\n };\r\n\r\nexport const parseGlobalAveragePoolAttributes: OperatorInitialization =\r\n (node: Graph.Node): AveragePoolAttributes => {\r\n const countIncludePad = (node.attributes.getInt('count_include_pad', 0) === 0 ? false : true);\r\n return createAttributeWithCacheKey(\r\n {autoPad: '', ceilMode: 0, countIncludePad, kernelShape: [], strides: [], pads: []});\r\n };\r\n\r\nexport interface MaxPoolAttributes extends AveragePoolAttributes {\r\n readonly storageOrder: number;\r\n readonly dilations: number[];\r\n}\r\n\r\nexport const maxPool: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: MaxPoolAttributes): Tensor[] => {\r\n validateInputs(inputs);\r\n const metadata =\r\n {name: 'MaxPool', inputNames: ['X'], inputTypes: [TextureType.unpacked], cacheHint: attributes.cacheKey};\r\n const output = inferenceHandler.run(\r\n {...metadata, get: () => createMaxPoolProgramInfo(inputs, metadata, false, attributes)}, inputs);\r\n return [output];\r\n };\r\n\r\nexport const parseMaxPoolAttributes: OperatorInitialization =\r\n (node: Graph.Node): MaxPoolAttributes => {\r\n const autoPad = node.attributes.getString('auto_pad', 'NOTSET');\r\n const ceilMode = node.attributes.getInt('ceil_mode', 0);\r\n const kernelShape = node.attributes.getInts('kernel_shape');\r\n const strides = node.attributes.getInts('strides', []);\r\n const pads = node.attributes.getInts('pads', []);\r\n const storageOrder = node.attributes.getInt('storage_order', 0);\r\n const dilations = node.attributes.getInts('dilations', []);\r\n\r\n // TODO: support attribute 'ceil_mode' and 'storage_order'\r\n if (storageOrder !== 0) {\r\n throw new Error('column major storage order is not yet supported for MaxPool');\r\n }\r\n if (ceilMode !== 0) {\r\n throw new Error('using ceil() in shape computation is not yet supported for MaxPool');\r\n }\r\n\r\n return createAttributeWithCacheKey(\r\n {autoPad, ceilMode, countIncludePad: false, kernelShape, strides, pads, storageOrder, dilations});\r\n };\r\n\r\nconst createMaxPoolProgramInfo =\r\n (inputs: Tensor[], metadata: ProgramMetadata, isGlobalOperator: boolean, attributes: MaxPoolAttributes):\r\n ProgramInfo => {\r\n const [adjustedAttributes, outputShape] =\r\n getAdjustedPoolAttributesAndOutputShape(inputs, attributes, isGlobalOperator);\r\n const op1 = `\r\n value = max(_X(x), value);\r\n `;\r\n const op2 = '';\r\n const poolingCode = generatePoolingCode(inputs[0].dims, adjustedAttributes, op1, op2, '-1e5');\r\n const shaderSource = `\r\n ${poolingCode}\r\n `;\r\n return {\r\n ...metadata,\r\n output: {dims: outputShape, type: inputs[0].type, textureType: TextureType.unpacked},\r\n shaderSource\r\n };\r\n };\r\n\r\nconst getAdjustedPoolAttributesAndOutputShape =\r\n (inputs: Tensor[], attributes: AveragePoolAttributes|MaxPoolAttributes, isGlobalOperator: boolean):\r\n [AveragePoolAttributes|MaxPoolAttributes, number[]] => {\r\n const inputShape = inputs[0].dims.slice();\r\n const hasDilations = Object.hasOwnProperty.call(attributes, 'dilations');\r\n const kernelShape = attributes.kernelShape.slice();\r\n const strides = attributes.strides.slice();\r\n const dilations: number[] = hasDilations ? (attributes as MaxPoolAttributes).dilations.slice() : [];\r\n const pads = attributes.pads.slice();\r\n PoolConvUtil.adjustPoolAttributes(isGlobalOperator, inputShape, kernelShape, strides, dilations, pads);\r\n\r\n const outputShape = PoolConvUtil.computePoolOutputShape(\r\n isGlobalOperator, inputShape, strides, dilations, kernelShape, pads, attributes.autoPad);\r\n\r\n const newAttributes = Object.assign({}, attributes);\r\n if (hasDilations) {\r\n Object.assign(newAttributes, {kernelShape, strides, pads, dilations, cacheKey: attributes.cacheKey});\r\n } else {\r\n Object.assign(newAttributes, {kernelShape, strides, pads, cacheKey: attributes.cacheKey});\r\n }\r\n return [newAttributes, outputShape];\r\n };\r\n\r\nconst globalMaxPoolAttributes = {\r\n autoPad: '',\r\n ceilMode: 0,\r\n countIncludePad: false,\r\n kernelShape: [],\r\n strides: [],\r\n pads: [],\r\n storageOrder: 0,\r\n dilations: [],\r\n cacheKey: ''\r\n};\r\n\r\nconst globalMaxPoolMetadata = {\r\n name: 'GlobalMaxPool',\r\n inputNames: ['X'],\r\n inputTypes: [TextureType.unpacked]\r\n};\r\n\r\nexport const globalMaxPool = (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[]): Tensor[] => {\r\n validateInputs(inputs);\r\n const output = inferenceHandler.run(\r\n {\r\n ...globalMaxPoolMetadata,\r\n get: () => createMaxPoolProgramInfo(inputs, globalMaxPoolMetadata, true, globalMaxPoolAttributes)\r\n },\r\n inputs);\r\n return [output];\r\n};\r\n\r\nconst validateInputs = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length !== 1) {\r\n throw new Error('Pool ops requires 1 input.');\r\n }\r\n if (inputs[0].type !== 'float32' && inputs[0].type !== 'float64') {\r\n throw new Error('Invalid input type.');\r\n }\r\n};\r\n\r\nconst generatePoolingCode =\r\n (inputDims: readonly number[], attributes: AveragePoolAttributes, op1: string, op2: string, start: string):\r\n string => {\r\n const rank = inputDims.length;\r\n if (attributes.kernelShape.length <= 2) {\r\n const kw = attributes.kernelShape[attributes.kernelShape.length - 1];\r\n const sw = attributes.strides[attributes.strides.length - 1];\r\n const pwStart = attributes.pads[attributes.pads.length / 2 - 1];\r\n const pwEnd = attributes.pads[attributes.pads.length - 1];\r\n const dimW = inputDims[rank - 1];\r\n let codeW = '';\r\n let codeH = '';\r\n let codeHEnd = '';\r\n if (pwStart + pwEnd !== 0) {\r\n codeW = `\r\n for (int i = 0; i < ${kw}; i++) {\r\n x[${rank} - 1] = indices[${rank} - 1] * ${sw} - ${pwStart} + i;\r\n if (x[${rank} - 1] < 0 || x[${rank} - 1] >= ${dimW}) {\r\n pad++;\r\n continue;\r\n }\r\n ${op1}\r\n }`;\r\n } else {\r\n codeW = `\r\n for (int i = 0; i < ${kw}; i++) {\r\n x[${rank} - 1] = indices[${rank} - 1] * ${sw} - ${pwStart} + i;\r\n ${op1}\r\n }`;\r\n }\r\n\r\n if (attributes.kernelShape.length === 2) {\r\n const kh = attributes.kernelShape[attributes.kernelShape.length - 2];\r\n const sh = attributes.strides[attributes.strides.length - 2];\r\n const phStart = attributes.pads[attributes.pads.length / 2 - 2];\r\n const phEnd = attributes.pads[attributes.pads.length - 2];\r\n const dimH = inputDims[rank - 2];\r\n if (phStart + phEnd !== 0) {\r\n codeH = `\r\n for (int j = 0; j < ${kh}; j++) {\r\n x[${rank} - 2] = indices[${rank} - 2] * ${sh} - ${phStart} + j;\r\n if (x[${rank} - 2] < 0 || x[${rank} - 2] >= ${dimH}) {\r\n pad+= ${kw};\r\n continue;\r\n }\r\n `;\r\n } else {\r\n codeH = `\r\n for (int j = 0; j < ${kh}; j++) {\r\n x[${rank} - 2] = indices[${rank} - 2] * ${sh} - ${phStart} + j;\r\n `;\r\n }\r\n codeHEnd = `\r\n }\r\n `;\r\n }\r\n\r\n const poolingCode = `\r\n float process(int indices[${rank}]) {\r\n int x[${rank}];\r\n copyVec(indices, x);\r\n\r\n float value = ${start};\r\n int pad = 0;\r\n ${codeH}\r\n ${codeW}\r\n ${codeHEnd}\r\n ${op2}\r\n return value;\r\n }\r\n `;\r\n return poolingCode;\r\n } else {\r\n const kernelSize = ShapeUtil.size(attributes.kernelShape);\r\n const kernelStrides = ShapeUtil.computeStrides(attributes.kernelShape);\r\n const stridesRank = kernelStrides.length;\r\n const padsRank = attributes.pads.length;\r\n const offsetToIndicesFunction = offsetToIndices(stridesRank);\r\n const copyInputDims = copyArray(inputDims, 'inputDims');\r\n const copyPads = copyArray(attributes.pads, 'pads');\r\n const copyKernelStrides = copyArray(kernelStrides, 'kernelStrides');\r\n const copyStrides = copyArray(attributes.strides, 'strides');\r\n const hasPads = attributes.pads.reduce((sum, cur) => sum + cur);\r\n let padCode = '';\r\n if (hasPads) {\r\n padCode = `\r\n if (x[j] >= inputDims[j] || x[j] < 0) {\r\n pad++;\r\n isPad = true;\r\n break;\r\n }\r\n }\r\n if (!isPad) {\r\n ${op1}\r\n }`;\r\n } else {\r\n padCode = `\r\n }\r\n ${op1}\r\n `;\r\n }\r\n const poolingCode = `\r\n ${offsetToIndicesFunction}\r\n float process(int indices[${rank}]) {\r\n int x[${rank}];\r\n copyVec(indices, x);\r\n int offset[${stridesRank}];\r\n int pads[${padsRank}];\r\n int inputDims[${rank}];\r\n int kernelStrides[${stridesRank}];\r\n int strides[${stridesRank}];\r\n ${copyPads}\r\n ${copyInputDims}\r\n ${copyStrides}\r\n ${copyKernelStrides}\r\n\r\n float value = ${start};\r\n int pad = 0;\r\n bool isPad = false;\r\n for (int i = 0; i < ${kernelSize}; i++) {\r\n offsetToIndices(i, kernelStrides, offset);\r\n isPad = false;\r\n for (int j = ${rank} - ${stridesRank}; j < ${rank}; j++) {\r\n x[j] = indices[j] * strides[j - ${rank} + ${stridesRank}]\r\n + offset[j - ${rank} + ${stridesRank}] - pads[j - 2];\r\n ${padCode}\r\n }\r\n ${op2}\r\n\r\n return value;\r\n }\r\n `;\r\n return poolingCode;\r\n }\r\n };\r\n\r\nconst copyArray = (array: readonly number[], arrayName: string): string => {\r\n let block = '';\r\n for (let i = 0; i < array.length; i++) {\r\n block += `\r\n ${arrayName}[${i}] = ${array[i]};\r\n `;\r\n }\r\n return block;\r\n};\r\n\r\nconst offsetToIndices = (rank: number): string => `\r\n void offsetToIndices(int offset, int[${rank}] strides, out int[${rank}] indices) {\r\n if (${rank} == 0) {\r\n return;\r\n }\r\n for (int i = 0; i < ${rank} - 1; ++i) {\r\n indices[i] = offset / strides[i];\r\n offset -= indices[i] * strides[i];\r\n }\r\n indices[${rank} - 1] = offset;\r\n }`;\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {AttributeWithCacheKey, createAttributeWithCacheKey} from '../../../attribute-with-cache-key';\r\nimport {Graph} from '../../../graph';\r\nimport {NUMBER_TYPES, OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {ShapeUtil} from '../../../util';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramMetadata, TextureType} from '../types';\r\n\r\nexport interface ReduceAttributes extends AttributeWithCacheKey {\r\n readonly axes: number[];\r\n readonly keepDims: boolean;\r\n}\r\n\r\n// return [init ops, reduce ops, final ops]\r\ntype ReduceOp = (inputs: Tensor[], axes: number[]) => string[];\r\n\r\nconst reduce =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: ReduceAttributes, name: string,\r\n reduceOp: ReduceOp): Tensor[] => {\r\n validateInputs(inputs);\r\n\r\n const reduceProgramMetadata = {\r\n name,\r\n inputNames: ['A'],\r\n inputTypes: [TextureType.unpacked],\r\n };\r\n\r\n const output = inferenceHandler.run(\r\n {\r\n ...reduceProgramMetadata,\r\n cacheHint: attributes.cacheKey,\r\n get: () =>\r\n createReduceProgramInfo(inferenceHandler, inputs, attributes, name, reduceOp, reduceProgramMetadata)\r\n },\r\n inputs);\r\n return [output];\r\n };\r\n\r\nexport const parseReduceAttributes: OperatorInitialization = (node: Graph.Node): ReduceAttributes => {\r\n const axes = node.attributes.getInts('axes', []);\r\n const keepDims = node.attributes.getInt('keepdims', 1) === 1;\r\n return createAttributeWithCacheKey({axes, keepDims});\r\n};\r\n\r\nconst createReduceProgramInfo =\r\n (handler: WebGLInferenceHandler, inputs: Tensor[], attributes: ReduceAttributes, name: string, reduceOp: ReduceOp,\r\n reduceProgramMetadata: ProgramMetadata): ProgramInfo => {\r\n const outputShape: number[] = [];\r\n const iRank = inputs[0].dims.length || 1;\r\n\r\n const idxCopy = []; // copy output indexes to input indexes\r\n\r\n const axes = ShapeUtil.normalizeAxes(attributes.axes, inputs[0].dims.length);\r\n const ops = reduceOp(inputs, axes);\r\n let reduceOps = ops[1];\r\n\r\n for (let k = 0; k < inputs[0].dims.length; k++) {\r\n // if this axis is reduced\r\n if (axes.indexOf(k) >= 0 || axes.length === 0) {\r\n if (attributes.keepDims) {\r\n outputShape.push(1);\r\n } // else { remove the axis from outputShape; }\r\n\r\n // loop over the d-th axis\r\n reduceOps = `\r\n for(int j${k} = 0; j${k} < ${inputs[0].dims[k]}; j${k}++) {\r\n inputIdx[${k}] = j${k};\r\n ${reduceOps}\r\n }`;\r\n } else {\r\n idxCopy.push(`inputIdx[${k}] = outputIdx[${outputShape.length}];`);\r\n\r\n outputShape.push(inputs[0].dims[k]);\r\n }\r\n }\r\n\r\n const oRank = outputShape.length || 1;\r\n\r\n const shaderSource = `\r\n float process(int outputIdx[${oRank}]) {\r\n float value; // final result\r\n int inputIdx[${iRank}]; // addressing input data\r\n ${idxCopy.join('\\n')}\r\n ${ops[0]} // init ops for reduce max/min\r\n ${reduceOps}\r\n ${ops[2]} // final computation for reduce mean\r\n return value;\r\n }`;\r\n\r\n return {\r\n ...reduceProgramMetadata,\r\n output: {dims: outputShape, type: inputs[0].type, textureType: TextureType.unpacked},\r\n shaderSource\r\n };\r\n };\r\n\r\nconst validateInputs = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length !== 1) {\r\n throw new Error('Reduce op requires 1 input.');\r\n }\r\n\r\n if (NUMBER_TYPES.indexOf(inputs[0].type) === -1) {\r\n throw new Error('Invalid input type.');\r\n }\r\n};\r\n\r\nexport const reduceSum: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: ReduceAttributes): Tensor[] => {\r\n const reduceOp: ReduceOp = (): string[] => ['value = 0.0;', 'value += _A(inputIdx);', ''];\r\n return reduce(inferenceHandler, inputs, attributes, 'ReduceSum', reduceOp);\r\n };\r\n\r\nexport const reduceMean: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: ReduceAttributes): Tensor[] => {\r\n const reduceOp: ReduceOp = (inputs: Tensor[], axes: number[]): string[] => {\r\n let size = 1.0;\r\n for (let k = 0; k < inputs[0].dims.length; k++) {\r\n if (axes.indexOf(k) >= 0 || axes.length === 0) {\r\n size *= inputs[0].dims[k];\r\n }\r\n }\r\n\r\n return ['value = 0.0;', 'value += _A(inputIdx);', `value /= ${size}.;`]; // ensure real number with `.`\r\n };\r\n return reduce(inferenceHandler, inputs, attributes, 'ReduceMean', reduceOp);\r\n };\r\n\r\nexport const reduceMax: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: ReduceAttributes): Tensor[] => {\r\n const reduceOp: ReduceOp = (inputs: Tensor[], axes: number[]): string[] => {\r\n const idxZero = [];\r\n for (let k = 0; k < inputs[0].dims.length; k++) {\r\n if (axes.indexOf(k) >= 0 || axes.length === 0) {\r\n idxZero.push(`inputIdx[${k}] = 0;`); // first element\r\n }\r\n }\r\n\r\n return [`${idxZero.join('\\n')}\\nvalue = _A(inputIdx);`, 'value = max(value, _A(inputIdx));', ''];\r\n };\r\n return reduce(inferenceHandler, inputs, attributes, 'ReduceMax', reduceOp);\r\n };\r\n\r\nexport const reduceMin: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: ReduceAttributes): Tensor[] => {\r\n const reduceOp: ReduceOp = (inputs: Tensor[], axes: number[]): string[] => {\r\n const idxZero = [];\r\n for (let k = 0; k < inputs[0].dims.length; k++) {\r\n if (axes.indexOf(k) >= 0 || axes.length === 0) {\r\n idxZero.push(`inputIdx[${k}] = 0;`); // first element\r\n }\r\n }\r\n\r\n return [`${idxZero.join('\\n')}\\nvalue = _A(inputIdx);`, 'value = min(value, _A(inputIdx));', ''];\r\n };\r\n return reduce(inferenceHandler, inputs, attributes, 'ReduceMin', reduceOp);\r\n };\r\n\r\nexport const reduceProd: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: ReduceAttributes): Tensor[] => {\r\n const reduceOp: ReduceOp = (): string[] => ['value = 1.0;', 'value *= _A(inputIdx);', ''];\r\n return reduce(inferenceHandler, inputs, attributes, 'ReduceProd', reduceOp);\r\n };\r\n\r\nexport const reduceLogSum: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: ReduceAttributes): Tensor[] => {\r\n const reduceOp: ReduceOp = (): string[] => ['value = 0.0;', 'value += _A(inputIdx);', 'value = log(value);'];\r\n return reduce(inferenceHandler, inputs, attributes, 'ReduceLogSum', reduceOp);\r\n };\r\n\r\nexport const reduceLogSumSquare: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: ReduceAttributes): Tensor[] => {\r\n const reduceOp: ReduceOp = (): string[] => ['float t; value = 0.0;', 't = _A(inputIdx); value += t * t;', ''];\r\n return reduce(inferenceHandler, inputs, attributes, 'ReduceLogSumSquare', reduceOp);\r\n };","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Tensor} from '../../../tensor';\r\nimport {ShapeUtil} from '../../../util';\r\nimport {getGlsl} from '../glsl-source';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramInfoLoader, ProgramMetadata, TextureType} from '../types';\r\n\r\nimport {unpackFromChannel} from './packing-utils';\r\n\r\nconst createPackedReshape3DProgramMetadata = (outputShape3D: readonly number[]) =>\r\n ({name: 'Reshape (packed)', inputTypes: [TextureType.packed], inputNames: ['A'], cacheHint: `${outputShape3D}`});\r\n\r\nconst createPackedReshape3DProgramInfo =\r\n (handler: WebGLInferenceHandler, input3D: Tensor, metadata: ProgramMetadata, outputShape3D: readonly number[]):\r\n ProgramInfo => {\r\n const inputShape3D = input3D.dims as [number, number, number];\r\n const squeezedOutputShape = outputShape3D as [number, number, number];\r\n\r\n let mainLoop = '';\r\n for (let i = 0; i < 4; i++) {\r\n let outputCoords = '';\r\n switch (i) {\r\n case 0:\r\n outputCoords = 'outputCoords = rc;';\r\n break;\r\n case 1:\r\n outputCoords = 'outputCoords = ivec3(rc.x, rc.y+1, rc.z);';\r\n break;\r\n case 2:\r\n outputCoords = 'outputCoords = ivec3(rc.x, rc.y, rc.z+1);';\r\n break;\r\n case 3:\r\n outputCoords = 'outputCoords = ivec3(rc.x, rc.y+1, rc.z+1);';\r\n break;\r\n default:\r\n throw new Error();\r\n }\r\n\r\n mainLoop += `\r\n ${outputCoords}\r\n ${i > 0 ? 'if(outputCoords.y < rows && outputCoords.z < cols){' : ''}\r\n int flattenedIndex = getFlattenedIndex(outputCoords);\r\n\r\n ivec3 inputRC = inputCoordsFromReshapedOutCoords(flattenedIndex);\r\n vec2 innerDims = vec2(float(inputRC.y),float(inputRC.z));\r\n\r\n result[${i}] = getChannel(getA(inputRC.x, inputRC.y, inputRC.z), innerDims);\r\n\r\n ${i > 0 ? '}' : ''}\r\n `;\r\n }\r\n const glsl = getGlsl(handler.session.backend.glContext.version);\r\n\r\n const shaderSource = `\r\n ${getReshapedInputCoords(inputShape3D)}\r\n ${getFlattenedIndexFrom3D(squeezedOutputShape)}\r\n ${unpackFromChannel()}\r\n\r\n void main() {\r\n ivec3 rc = getOutputCoords();\r\n\r\n vec4 result = vec4(0.0);\r\n\r\n ivec3 outputCoords;\r\n int rows = ${squeezedOutputShape[2]};\r\n int cols = ${squeezedOutputShape[1]};\r\n\r\n ${mainLoop}\r\n ${glsl.output} = result;\r\n }\r\n `;\r\n\r\n return {\r\n ...metadata,\r\n output: {dims: squeezedOutputShape, type: input3D.type, textureType: TextureType.packed},\r\n shaderSource,\r\n hasMain: true\r\n };\r\n };\r\n\r\nexport const createPackedReshape3DProgramInfoLoader =\r\n (handler: WebGLInferenceHandler, input3D: Tensor, outputShape3D: readonly number[]): ProgramInfoLoader => {\r\n const metadata = createPackedReshape3DProgramMetadata(outputShape3D);\r\n return {...metadata, get: () => createPackedReshape3DProgramInfo(handler, input3D, metadata, outputShape3D)};\r\n };\r\n\r\nexport function processDims3D(shape: ArrayLike): [number, number, number] {\r\n if (shape.length === 0) {\r\n return [1, 1, 1];\r\n }\r\n // TODO: squeeze other shapes to 2D case\r\n let batch = 1;\r\n for (let i = 0; i < shape.length - 2; ++i) {\r\n batch *= shape[i];\r\n }\r\n return [batch, shape.length > 1 ? shape[shape.length - 2] : 1, shape[shape.length - 1]];\r\n}\r\n\r\n// For packed reshape, we need to re-arrange texel data for output shape.\r\n// Our pack is designed to pack a 2x2 tile in last h and w dimension, so\r\n// for the reshaped new tensor, we just need to re-arrange the last h and\r\n// w dimension. For any shape that is not in 3D, i.e. [batch, W, H], we\r\n// first convert it to 3D by collapsing other dimension to batch dim, then\r\n// process with the last two dimensions.\r\n// Note: we only need the shape tensor to calculate output shape, so the\r\n// content in shape tensor is never uploaded to GPU. It is always kept in CPU.\r\n// TODO: optimize the algorithm -- in some cases, if the last two dims are\r\n// the same between input shape and output shape, the packed reshape can be\r\n// treated as no-op.\r\nexport function isReshapeCheap(dims: readonly number[], reshapedDims: readonly number[]) {\r\n let isCheapReshape = false;\r\n if (dims.length === 0 || reshapedDims.length === 0) { // scalar\r\n isCheapReshape = true;\r\n } else if (dims.length < 2 || reshapedDims.length < 2) { // 1D\r\n isCheapReshape = dims[dims.length - 1] === reshapedDims[reshapedDims.length - 1];\r\n } else { // 2D +\r\n isCheapReshape = dims[dims.length - 1] === reshapedDims[reshapedDims.length - 1] &&\r\n dims[dims.length - 2] === reshapedDims[reshapedDims.length - 2];\r\n }\r\n\r\n return isCheapReshape;\r\n}\r\n\r\nfunction getReshapedInputCoords(shape: [number, number, number]): string {\r\n const strides = ShapeUtil.computeStrides(shape);\r\n const coords = ['b', 'r', 'c'];\r\n const index = 'index';\r\n const coordsFromIndexSnippet = strides\r\n .map((stride, i) => {\r\n const line1 = `int ${coords[i]} = ${index} / ${stride}`;\r\n const line2 = i === strides.length - 1 ?\r\n `int ${coords[i + 1]} = ${index} - ${coords[i]} * ${stride}` :\r\n `index -= ${coords[i]} * ${stride}`;\r\n return `${line1}; ${line2};`;\r\n })\r\n .join('');\r\n\r\n return `\r\n ivec3 inputCoordsFromReshapedOutCoords(int index) {\r\n ${coordsFromIndexSnippet}\r\n return ivec3(b, r, c);\r\n }\r\n `;\r\n}\r\n\r\nfunction getFlattenedIndexFrom3D(shape: [number, number, number]): string {\r\n const strides = ShapeUtil.computeStrides(shape);\r\n\r\n return `\r\n int getFlattenedIndex(ivec3 coords) {\r\n // reverse y, z order\r\n return coords.x * ${strides[0]} + coords.z * ${strides[1]} + coords.y;\r\n }\r\n`;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Tensor} from '../../../tensor';\r\nimport {ShapeUtil} from '../../../util';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\n\r\nexport const reshape = (handler: WebGLInferenceHandler, inputs: Tensor[]): Tensor[] => {\r\n const reshapedDims = ShapeUtil.calculateReshapedDims(inputs[0].dims, inputs[1].integerData);\r\n if (handler.session.pack) {\r\n return [handler.reshapePacked(inputs[0], reshapedDims)];\r\n } else {\r\n return [handler.reshapeUnpacked(inputs[0], reshapedDims)];\r\n }\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {getGlsl} from '../glsl-source';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, TextureType} from '../types';\r\nimport {getCoordsDataType} from '../utils';\r\n\r\nimport {unpackFromChannel} from './packing-utils';\r\nimport {parseUpsampleAttributes, scalesValidation, UpsampleAttributes, validateInputs} from './upsample';\r\n\r\nconst resizeProgramMetadata = {\r\n name: 'Resize',\r\n inputNames: ['A'],\r\n inputTypes: [TextureType.packed]\r\n};\r\n\r\nexport const resize: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: UpsampleAttributes): Tensor[] => {\r\n validateInputs(inputs, attributes);\r\n const output = inferenceHandler.run(\r\n {\r\n ...resizeProgramMetadata,\r\n cacheHint: attributes.cacheKey,\r\n get: () => createPackedResizeProgramInfo(inferenceHandler, inputs, attributes)\r\n },\r\n inputs);\r\n return [output];\r\n };\r\n\r\nexport const parseResizeAttributesV10: OperatorInitialization =\r\n (node: Graph.Node): UpsampleAttributes => parseUpsampleAttributes(node, 10);\r\n\r\nexport const parseResizeAttributesV11: OperatorInitialization =\r\n (node: Graph.Node): UpsampleAttributes => parseUpsampleAttributes(node, 11);\r\n\r\nconst createPackedResizeProgramInfo =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: UpsampleAttributes): ProgramInfo => {\r\n const glsl = getGlsl(inferenceHandler.session.backend.glContext.version);\r\n const [scales, outputShape] = prepareInputs(inputs, attributes);\r\n\r\n const isSame =\r\n scales.every((s: number) => s === 1) && attributes.coordinateTransformMode !== 'tf_crop_and_resize';\r\n if (isSame) {\r\n return {\r\n ...resizeProgramMetadata,\r\n output: {dims: outputShape, type: inputs[0].type, textureType: TextureType.packed},\r\n hasMain: true,\r\n shaderSource: `void main() {\r\n vec4 v = ${glsl.texture2D}(X, TexCoords);\r\n ${glsl.output} = v;\r\n }`\r\n };\r\n }\r\n\r\n const dim = outputShape.length;\r\n if (dim < 2) {\r\n throw new Error(`output dimension should be at least 2, but got ${dim}`);\r\n }\r\n\r\n const outputHeight = outputShape[dim - 2];\r\n const outputWidth = outputShape[dim - 1];\r\n\r\n const inputShape = inputs[0].dims;\r\n if (dim !== inputShape.length) {\r\n throw new Error(`output dimension should match input ${inputShape.length}, but got ${dim}`);\r\n }\r\n const inputHeight = inputShape[dim - 2];\r\n const inputWidth = inputShape[dim - 1];\r\n\r\n const scalesHeight = scales[dim - 2];\r\n const scalesWidth = scales[dim - 1];\r\n\r\n let getSourceFracIndex = '';\r\n\r\n if (attributes.mode !== 'linear') {\r\n // TODO: support other modes\r\n throw new Error(`resize (packed) does not support mode: '${attributes.mode}'`);\r\n }\r\n switch (attributes.coordinateTransformMode) {\r\n case 'asymmetric':\r\n getSourceFracIndex = `\r\n vec4 getSourceFracIndex(ivec4 coords) {\r\n return vec4(coords) / scaleWHWH;\r\n }\r\n `;\r\n break;\r\n case 'half_pixel':\r\n getSourceFracIndex = `\r\n vec4 getSourceFracIndex(ivec4 coords) {\r\n return (vec4(coords) + 0.5) / scaleWHWH - 0.5;\r\n }\r\n `;\r\n break;\r\n case 'align_corners':\r\n getSourceFracIndex = `\r\n vec4 getSourceFracIndex(ivec4 coords) {\r\n vec4 resized = vec4(${outputWidth}.0 - 1.0, ${outputHeight}.0 - 1.0, ${outputWidth}.0 - 1.0,\r\n ${outputHeight}.0 - 1.0);\r\n vec4 original = vec4(${inputWidth}.0 - 1.0, ${inputHeight}.0 - 1.0, ${inputWidth}.0 - 1.0,\r\n ${inputHeight}.0 - 1.0);\r\n vec4 new_scale = original / resized;\r\n return vec4(coords) * new_scale;\r\n }\r\n `;\r\n break;\r\n default:\r\n // TODO:supporting other coordinateTransformModes\r\n throw new Error(`resize (packed) does not support coordinateTransformMode: \\\r\n '${attributes.coordinateTransformMode}'`);\r\n }\r\n\r\n const coordsDataType = getCoordsDataType(dim);\r\n const unpackChannel = unpackFromChannel();\r\n const shaderSource = `\r\n const vec2 inputWH = vec2(${inputHeight}.0, ${inputWidth}.0);\r\n const vec4 scaleWHWH = vec4(${scalesHeight}.0, ${scalesWidth}.0, ${scalesHeight}.0, ${scalesWidth}.0);\r\n ${unpackChannel}\r\n ${getSourceFracIndex}\r\n float getAValue(int x10, int r, int c, int d) {\r\n return getChannel(getA(x10, r, c, d), vec2(c, d));\r\n }\r\n void main() {\r\n ${coordsDataType} rc = getOutputCoords();\r\n\r\n int batch = rc[0];\r\n int depth = rc[1];\r\n\r\n // retrieve the 4 coordinates that is used in the 4 packed output values.\r\n ivec4 coords = ivec4(rc.wz, rc.w + 1, rc.z + 1);\r\n\r\n // calculate the source index in fraction\r\n vec4 sourceFrac = getSourceFracIndex(coords);\r\n\r\n // get the lower and upper bound of the 4 values that will be packed into one texel.\r\n ivec4 x00 = ivec4(max(sourceFrac.xy, vec2(0.0)), min(inputWH - 1.0, ceil(sourceFrac.xy)));\r\n ivec4 x01 = ivec4(max(sourceFrac.xw, vec2(0.0)), min(inputWH - 1.0, ceil(sourceFrac.xw)));\r\n ivec4 x10 = ivec4(max(sourceFrac.zy, vec2(0.0)), min(inputWH - 1.0, ceil(sourceFrac.zy)));\r\n ivec4 x11 = ivec4(max(sourceFrac.zw, vec2(0.0)), min(inputWH - 1.0, ceil(sourceFrac.zw)));\r\n\r\n bool hasNextRow = rc.w < ${outputHeight - 1};\r\n bool hasNextCol = rc.z < ${outputWidth - 1};\r\n\r\n // pack x00, x01, x10, x11's top-left corner into one vec4 structure\r\n vec4 topLeft = vec4(\r\n getAValue(batch, depth, x00.x, x00.y),\r\n hasNextCol ? getAValue(batch, depth, x01.x, x01.y) : 0.0,\r\n hasNextRow ? getAValue(batch, depth, x10.x, x10.y) : 0.0,\r\n (hasNextRow && hasNextCol) ? getAValue(batch, depth, x11.x, x11.y) : 0.0);\r\n\r\n // pack x00, x01, x10, x11's top-right corner into one vec4 structure\r\n vec4 topRight = vec4(\r\n getAValue(batch, depth, x00.x, x00.w),\r\n hasNextCol ? getAValue(batch, depth, x01.x, x01.w) : 0.0,\r\n hasNextRow ? getAValue(batch, depth, x10.x, x10.w) : 0.0,\r\n (hasNextRow && hasNextCol) ? getAValue(batch, depth, x11.x, x11.w) : 0.0);\r\n\r\n // pack x00, x01, x10, x11's bottom-left corner into one vec4 structure\r\n vec4 bottomLeft = vec4(\r\n getAValue(batch, depth, x00.z, x00.y),\r\n hasNextCol ? getAValue(batch, depth, x01.z, x01.y) : 0.0,\r\n hasNextRow ? getAValue(batch, depth, x10.z, x10.y) : 0.0,\r\n (hasNextRow && hasNextCol) ? getAValue(batch, depth, x11.z, x11.y) : 0.0);\r\n\r\n // pack x00, x01, x10, x11's bottom-right corner into one vec4 structure\r\n vec4 bottomRight = vec4(\r\n getAValue(batch, depth, x00.z, x00.w),\r\n hasNextCol ? getAValue(batch, depth, x01.z, x01.w) : 0.0,\r\n hasNextRow ? getAValue(batch, depth, x10.z, x10.w) : 0.0,\r\n (hasNextRow && hasNextCol) ? getAValue(batch, depth, x11.z, x11.w) : 0.0);\r\n\r\n // calculate the interpolation fraction on u and v direction\r\n vec4 frac = vec4(sourceFrac) - floor(sourceFrac);\r\n vec4 clampFrac = clamp(frac, vec4(0.0), vec4(1.0));\r\n\r\n vec4 top = mix(topLeft, topRight, clampFrac.ywyw);\r\n vec4 bottom = mix(bottomLeft, bottomRight, clampFrac.ywyw);\r\n vec4 newValue = mix(top, bottom, clampFrac.xxzz);\r\n\r\n ${glsl.output} = vec4(newValue);\r\n }\r\n `;\r\n return {\r\n ...resizeProgramMetadata,\r\n output: {dims: outputShape, type: inputs[0].type, textureType: TextureType.packed},\r\n hasMain: true,\r\n shaderSource\r\n };\r\n };\r\n\r\n\r\nconst prepareInputs = (inputs: Tensor[], attributes: UpsampleAttributes): [readonly number[], readonly number[]] => {\r\n const x = inputs[0];\r\n const xDims = x.dims;\r\n\r\n let scales = attributes.scales;\r\n let outputSizes: number[]|undefined;\r\n if (scales.length === 0) {\r\n const scalesTensor = inputs[attributes.scalesInputIdx];\r\n if (scalesTensor && scalesTensor.size !== 0) {\r\n if (inputs[attributes.sizesInputIdx]) {\r\n throw new Error('Only one of scales or sizes must be provided as input.');\r\n }\r\n scales = parseScalesData(scalesTensor, attributes.mode, attributes.isResize);\r\n } else {\r\n const sizesTensor = inputs[attributes.sizesInputIdx];\r\n if (!sizesTensor || sizesTensor.size === 0) {\r\n throw new Error('Either scales or sizes MUST be provided as input.');\r\n }\r\n\r\n outputSizes = Array.from(sizesTensor.integerData);\r\n scales = parseScalesDataFromOutputSize(outputSizes, xDims, attributes.mode, attributes.isResize);\r\n }\r\n } else {\r\n if (inputs[attributes.sizesInputIdx]) {\r\n throw new Error('Only one of scales or sizes must be provided as input.');\r\n }\r\n }\r\n\r\n const yDims = outputSizes || (xDims.map((dim, i) => Math.floor(dim * scales[i])));\r\n\r\n return [scales, yDims];\r\n};\r\n\r\nconst parseScalesData = (scale: Tensor, mode: string, isResize: boolean): number[] => {\r\n const scales = Array.from(scale.floatData);\r\n scalesValidation(scales, mode, isResize);\r\n return scales;\r\n};\r\n\r\nconst parseScalesDataFromOutputSize =\r\n (yDims: readonly number[], xDims: readonly number[], mode: string, isResize: boolean): number[] => {\r\n const length = xDims.length;\r\n const scales = new Array(length);\r\n\r\n for (let i = 0, end = length; i < end; i++) {\r\n if (xDims[i] === 0) {\r\n if (yDims[i] !== 0) {\r\n throw new Error('Input dim is zero but required output dim is non-zero.');\r\n }\r\n scales[i] = 1;\r\n } else {\r\n scales[i] = yDims[i] / xDims[i];\r\n }\r\n }\r\n scalesValidation(scales, mode, isResize);\r\n return scales;\r\n };\r\n\r\n// roi data is not used yet. but leave here for future usage.\r\n// const getRoi = (inputs: Tensor[], attributes: UpsampleAttributes) : number[] => {\r\n// let roi: number[] = [];\r\n// if (attributes.needRoiInput) {\r\n// if (attributes.roiInputIdx <= 0) {\r\n// throw new Error('Invalid roi input index.');\r\n// }\r\n// const roiTensor = inputs[attributes.roiInputIdx];\r\n// roi = roiTensor.size > 0 ? Array.from(roiTensor.floatData) : [];\r\n// } else {\r\n// roi = new Array(inputs[0].dims.length * 2).fill(0);\r\n// }\r\n// return roi;\r\n// };","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Tensor} from '../../../tensor';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\n\r\nexport const shape = (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[]): Tensor[] => {\r\n validateInputs(inputs);\r\n return [new Tensor([inputs[0].dims.length], 'int32', undefined, undefined, new Int32Array(inputs[0].dims))];\r\n};\r\n\r\nconst validateInputs = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length !== 1) {\r\n throw new Error('Shape requires 1 input.');\r\n }\r\n};","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {AttributeWithCacheKey, createAttributeWithCacheKey} from '../../../attribute-with-cache-key';\r\nimport {Graph} from '../../../graph';\r\nimport {NUMBER_TYPES, OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {ShapeUtil} from '../../../util';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, TextureType} from '../types';\r\n\r\nexport interface SliceAttributes extends AttributeWithCacheKey {\r\n readonly axes: number[];\r\n readonly ends: number[];\r\n readonly starts: number[];\r\n}\r\n\r\nconst sliceProgramMetadata = {\r\n name: 'Slice',\r\n inputNames: ['A'],\r\n inputTypes: [TextureType.unpacked]\r\n};\r\n\r\nexport const slice: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: SliceAttributes): Tensor[] => {\r\n validateInputs(inputs);\r\n const output = inferenceHandler.run(\r\n {\r\n ...sliceProgramMetadata,\r\n cacheHint: attributes.cacheKey,\r\n get: () => createSliceProgramInfo(inferenceHandler, inputs[0], attributes)\r\n },\r\n inputs);\r\n return [output];\r\n };\r\n\r\nexport const parseSliceAttributes: OperatorInitialization = (node: Graph.Node): SliceAttributes => {\r\n const starts = node.attributes.getInts('starts');\r\n const ends = node.attributes.getInts('ends');\r\n const axes = node.attributes.getInts('axes', []);\r\n return createAttributeWithCacheKey({starts, ends, axes});\r\n};\r\n\r\nconst createSliceProgramInfo =\r\n (inferenceHandler: WebGLInferenceHandler, input: Tensor, attributes: SliceAttributes): ProgramInfo => {\r\n const axes = (attributes.axes.length === 0) ? input.dims.slice(0).map((val, i) => i) : attributes.axes;\r\n const normalizedAxes = ShapeUtil.normalizeAxes(axes, input.dims.length);\r\n const starts = attributes.starts.map((start, i) => {\r\n if (start > input.dims[normalizedAxes[i]] - 1) {\r\n return input.dims[normalizedAxes[i]];\r\n }\r\n return ShapeUtil.normalizeAxis(start, input.dims[normalizedAxes[i]]);\r\n });\r\n const ends = attributes.ends.map((end, i) => {\r\n if (end > input.dims[normalizedAxes[i]] - 1) {\r\n return input.dims[normalizedAxes[i]];\r\n }\r\n return ShapeUtil.normalizeAxis(end, input.dims[normalizedAxes[i]]);\r\n });\r\n\r\n const outputShape = input.dims.slice();\r\n\r\n const sliceOps: string[] = [];\r\n for (let i = 0; i < normalizedAxes.length; i++) {\r\n outputShape[normalizedAxes[i]] = ends[i] - starts[i];\r\n if (starts[i] > 0) {\r\n sliceOps.push(`outputIdx[${normalizedAxes[i]}] += ${starts[i]};`);\r\n } // else { sliceOps.push(`outputIdx[${normalizedAxes[i]}] += 0;`); }\r\n }\r\n\r\n const rank = outputShape.length;\r\n const shaderSource = `\r\n float process(int outputIdx[${rank}]) {\r\n ${sliceOps.join('\\n ')}\r\n return _A(outputIdx);\r\n }`;\r\n return {\r\n ...sliceProgramMetadata,\r\n output: {dims: outputShape, type: input.type, textureType: TextureType.unpacked},\r\n shaderSource\r\n };\r\n };\r\n\r\nconst validateInputs = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length !== 1) {\r\n throw new Error('Slice requires 1 input.');\r\n }\r\n if (NUMBER_TYPES.indexOf(inputs[0].type) === -1) {\r\n throw new Error('Invalid input type.');\r\n }\r\n};\r\n\r\nexport const sliceV10 = (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[]): Tensor[] => {\r\n validateInputsV10(inputs);\r\n const attributes = generateSliceAttributesFromInputs(inferenceHandler, inputs);\r\n const output = inferenceHandler.run(\r\n {\r\n ...sliceProgramMetadata,\r\n cacheHint: attributes.cacheKey,\r\n get: () => createSliceProgramInfo(inferenceHandler, inputs[0], attributes)\r\n },\r\n [inputs[0]]);\r\n return [output];\r\n};\r\n\r\nconst generateSliceAttributesFromInputs =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[]): SliceAttributes => {\r\n if (!inferenceHandler.session.isInitializer(inputs[1].dataId) ||\r\n !inferenceHandler.session.isInitializer(inputs[2].dataId) ||\r\n (inputs.length >= 4 && !inferenceHandler.session.isInitializer(inputs[3].dataId)) ||\r\n (inputs.length >= 5 && !inferenceHandler.session.isInitializer(inputs[4].dataId))) {\r\n throw new Error('dynamic slice attributes are not allowed');\r\n }\r\n\r\n if (inputs.length >= 5 && inputs[4].integerData.some((i: number) => i !== 1)) {\r\n throw new Error('currently non-1 steps is not supported for Slice');\r\n }\r\n\r\n const starts = Array.from(inputs[1].integerData);\r\n const ends = Array.from(inputs[2].integerData);\r\n const axes = inputs.length >= 4 ? Array.from(inputs[3].integerData) : [];\r\n const cacheKey = `${axes};${starts};${ends}`;\r\n return {starts, ends, axes, cacheKey};\r\n };\r\n\r\nconst validateInputsV10 = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length < 3 || inputs.length > 5) {\r\n throw new Error('Invalid input number.');\r\n }\r\n if (inputs[1].type !== 'int32' || inputs[1].dims.length !== 1) {\r\n throw new Error('Invalid input type.');\r\n }\r\n if (inputs[2].type !== 'int32' || inputs[2].dims.length !== 1) {\r\n throw new Error('Invalid input type.');\r\n }\r\n if (inputs.length >= 4 && (inputs[3].type !== 'int32' || inputs[3].dims.length !== 1)) {\r\n throw new Error('Invalid input type.');\r\n }\r\n if (inputs.length >= 5 && (inputs[4].type !== 'int32' || inputs[4].dims.length !== 1)) {\r\n throw new Error('Invalid input type.');\r\n }\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {AttributeWithCacheKey, createAttributeWithCacheKey} from '../../../attribute-with-cache-key';\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {ShapeUtil} from '../../../util';\r\nimport {getGlsl} from '../glsl-source';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, TextureType} from '../types';\r\nimport {transpose, TransposeAttributes} from './transpose';\r\n\r\nexport interface SoftmaxAttributes extends AttributeWithCacheKey {\r\n readonly axis: number;\r\n}\r\n\r\nconst softmaxComputeMaxProgramMetadata = {\r\n name: 'SoftmaxComputeMax',\r\n inputNames: ['A'],\r\n inputTypes: [TextureType.unpacked],\r\n};\r\n\r\nconst softmaxComputeScaleProgramMetadata = {\r\n name: 'SoftmaxComputeScale',\r\n inputNames: ['A', 'Max'],\r\n inputTypes: [TextureType.unpacked, TextureType.unpacked],\r\n};\r\n\r\nconst softmaxProgramMetadata = {\r\n name: 'SoftMax',\r\n inputNames: ['A', 'Max', 'Norm'],\r\n inputTypes: [TextureType.unpacked, TextureType.unpacked, TextureType.unpacked],\r\n};\r\n\r\nexport const softmax: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: SoftmaxAttributes): Tensor[] => {\r\n validateInputs(inputs);\r\n\r\n const inputShape = inputs[0].dims.slice();\r\n const axis = ShapeUtil.normalizeAxis(attributes.axis, inputShape.length);\r\n const logicalRowCount = ShapeUtil.sizeToDimension(inputShape, axis);\r\n const featureCount = ShapeUtil.sizeFromDimension(inputShape, axis);\r\n\r\n const output = computeSoftmax(inferenceHandler, inputs, attributes, logicalRowCount, featureCount);\r\n return output;\r\n };\r\n\r\nexport const parseSoftmaxAttributes: OperatorInitialization =\r\n (node: Graph.Node): SoftmaxAttributes => createAttributeWithCacheKey({axis: node.attributes.getInt('axis', 1)});\r\n\r\nexport const parseSoftmaxAttributesV13: OperatorInitialization =\r\n (node: Graph.Node): SoftmaxAttributes => createAttributeWithCacheKey({axis: node.attributes.getInt('axis', -1)});\r\n\r\n// The \"semantic\" meaning of axis has changed in opset-13.\r\n// Please compare: https://github.com/onnx/onnx/blob/master/docs/Operators.md#Softmax\r\n// with https://github.com/onnx/onnx/blob/master/docs/Changelog.md#Softmax-11 for detailed explanations\r\n// To account for the opset-13 behavior, our plan will be to transpose the \"axis\" dim to the innermost dim\r\n// and perform softmax and then reverse the transpose. We can skip the transposing aspect if the axis is already\r\n// the innermost dim\r\nexport const softmaxV13: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: SoftmaxAttributes): Tensor[] => {\r\n validateInputs(inputs);\r\n\r\n const inputShape = inputs[0].dims.slice();\r\n const axis = ShapeUtil.normalizeAxis(attributes.axis, inputShape.length);\r\n const rank = inputShape.length;\r\n\r\n const isTransposeRequired = (axis !== rank - 1) ? true : false;\r\n const transposedInputShape: number[] = [];\r\n let perm: number[] = [];\r\n let transposedInputs: Tensor[] = [];\r\n let transposeAttribute: TransposeAttributes;\r\n\r\n if (isTransposeRequired) {\r\n perm = Array.from({length: rank}).map((_, i) => i);\r\n\r\n // swap the innermost dim with the dim corresponding to axis\r\n perm[axis] = rank - 1;\r\n perm[rank - 1] = axis;\r\n\r\n perm.map(p => transposedInputShape.push(inputShape[p]));\r\n\r\n transposeAttribute = createAttributeWithCacheKey({perm});\r\n transposedInputs = transpose(inferenceHandler, inputs, transposeAttribute);\r\n }\r\n\r\n const logicalRowCount = isTransposeRequired ? ShapeUtil.sizeToDimension(transposedInputShape, rank - 1) :\r\n ShapeUtil.sizeToDimension(inputShape, rank - 1);\r\n const featureCount = isTransposeRequired ? ShapeUtil.sizeFromDimension(transposedInputShape, rank - 1) :\r\n ShapeUtil.sizeFromDimension(inputShape, rank - 1);\r\n\r\n const output = computeSoftmax(\r\n inferenceHandler, isTransposeRequired ? transposedInputs : inputs, attributes, logicalRowCount, featureCount);\r\n\r\n if (isTransposeRequired) {\r\n const reversedOutput = transpose(inferenceHandler, output, transposeAttribute!);\r\n return reversedOutput;\r\n } else {\r\n return output;\r\n }\r\n };\r\n\r\nconst computeSoftmax =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: SoftmaxAttributes, logicalRowCount: number,\r\n featureCount: number): Tensor[] => {\r\n const computeMaxProgramInfo =\r\n createComputeMaxProgramInfo(inferenceHandler, inputs[0], logicalRowCount, featureCount, [logicalRowCount]);\r\n const max = inferenceHandler.run(\r\n {...softmaxComputeMaxProgramMetadata, cacheHint: attributes.cacheKey, get: () => computeMaxProgramInfo},\r\n inputs);\r\n\r\n const computeScaleProgramInfo = createComputScaleProgramInfo(\r\n inferenceHandler, inputs[0], logicalRowCount, featureCount, computeMaxProgramInfo.output.dims,\r\n [logicalRowCount]);\r\n const scale = inferenceHandler.run(\r\n {...softmaxComputeScaleProgramMetadata, cacheHint: attributes.cacheKey, get: () => computeScaleProgramInfo},\r\n [inputs[0], max]);\r\n\r\n const softMaxProgramInfo = createSoftMaxProgramInfo(\r\n inferenceHandler, inputs[0], logicalRowCount, featureCount, computeMaxProgramInfo.output.dims,\r\n computeScaleProgramInfo.output.dims);\r\n const output = inferenceHandler.run(\r\n {...softmaxProgramMetadata, cacheHint: attributes.cacheKey, get: () => softMaxProgramInfo},\r\n [inputs[0], max, scale]);\r\n return [output];\r\n };\r\n\r\n/**\r\n * Create a texture that contains the maximum value of each of the 'N' rows\r\n */\r\nconst createComputeMaxProgramInfo =\r\n (inferenceHandler: WebGLInferenceHandler, input: Tensor, logicalRowCount: number, featureCount: number,\r\n outputShape: number[]): ProgramInfo => {\r\n const [textureWidth, textureHeight] =\r\n inferenceHandler.calculateTextureWidthAndHeight(input.dims, TextureType.unpacked);\r\n const rank = outputShape.length;\r\n\r\n if (logicalRowCount < 1 || featureCount < 1) {\r\n throw new Error('Logical row count N and feature count D must be greater than or equal to 1');\r\n }\r\n\r\n if (outputShape.length !== 1) {\r\n throw new Error('Dimensionality of the output should be 1');\r\n }\r\n\r\n if (outputShape[0] !== logicalRowCount) {\r\n throw new Error('Shape of the output should be equal to logical row count');\r\n }\r\n\r\n const glsl = getGlsl(inferenceHandler.session.backend.glContext.version);\r\n const shaderSource = `\r\n float process(int[${rank}] indices) {\r\n int logical_row_start_offset = indices[0] * ${featureCount};\r\n\r\n float max = getColorAsFloat(${glsl.texture2D}(A, offsetToCoords(logical_row_start_offset, ${textureWidth},\r\n ${textureHeight} )));\r\n for(int i=1; i<${featureCount}; ++i)\r\n {\r\n float current = getColorAsFloat(${glsl.texture2D}(A, offsetToCoords(logical_row_start_offset + i,\r\n ${textureWidth}, ${textureHeight})));\r\n if(current > max)\r\n max = current;\r\n }\r\n\r\n return max;\r\n }`;\r\n return {\r\n ...softmaxComputeMaxProgramMetadata,\r\n output: {dims: outputShape, type: input.type, textureType: TextureType.unpacked},\r\n shaderSource\r\n };\r\n };\r\n\r\n/**\r\n * Create a texture that contains the normalization factor for each of the 'N' rows\r\n */\r\nconst createComputScaleProgramInfo =\r\n (inferenceHandler: WebGLInferenceHandler, input: Tensor, logicalRowCount: number, featureCount: number,\r\n maxElementPerLogicalRow: readonly number[], outputShape: number[]): ProgramInfo => {\r\n const [textureWidth, textureHeight] =\r\n inferenceHandler.calculateTextureWidthAndHeight(input.dims, TextureType.unpacked);\r\n const rank = outputShape.length;\r\n\r\n if (logicalRowCount < 1 || featureCount < 1) {\r\n throw new Error('Logical row count N and feature count D must be greater than or equal to 1');\r\n }\r\n\r\n if (outputShape.length !== 1) {\r\n throw new Error('Dimensionality of the output should be 1');\r\n }\r\n\r\n if (outputShape[0] !== logicalRowCount) {\r\n throw new Error('Shape of the output should be equal to logical row count');\r\n }\r\n\r\n if (maxElementPerLogicalRow.length !== 1) {\r\n throw new Error('Dimensionality of the intermediate results should be 1');\r\n }\r\n\r\n if (maxElementPerLogicalRow[0] !== logicalRowCount) {\r\n throw new Error('Shape of the intermediate results should be equal to logical row count');\r\n }\r\n\r\n const glsl = getGlsl(inferenceHandler.session.backend.glContext.version);\r\n const shaderSource = `\r\n float process(int[${rank}] indices) {\r\n int logical_row_start_offset = indices[0] * ${featureCount};\r\n\r\n float norm_factor = 0.0;\r\n float max = _Max(indices);\r\n for(int i=0; i<${featureCount}; ++i)\r\n {\r\n norm_factor += exp(getColorAsFloat(${glsl.texture2D}(A, offsetToCoords(logical_row_start_offset + i,\r\n ${textureWidth}, ${textureHeight}))) - max);\r\n }\r\n\r\n return norm_factor;\r\n }`;\r\n return {\r\n ...softmaxComputeScaleProgramMetadata,\r\n output: {dims: outputShape, type: input.type, textureType: TextureType.unpacked},\r\n shaderSource\r\n };\r\n };\r\n\r\nconst createSoftMaxProgramInfo =\r\n (inferenceHandler: WebGLInferenceHandler, input: Tensor, logicalRowCount: number, featureCount: number,\r\n maxElementPerLogicalRow: readonly number[], normalizationPerLogicalRow: readonly number[]): ProgramInfo => {\r\n const [textureWidth, textureHeight] =\r\n inferenceHandler.calculateTextureWidthAndHeight(input.dims, TextureType.unpacked);\r\n const rank = input.dims.length;\r\n\r\n if (logicalRowCount < 1 || featureCount < 1) {\r\n throw new Error('Logical row count N and feature count D must be greater than or equal to 1');\r\n }\r\n\r\n if (maxElementPerLogicalRow.length !== 1 || normalizationPerLogicalRow.length !== 1) {\r\n throw new Error('Dimensionality of the intermediate results should be 1');\r\n }\r\n\r\n if (maxElementPerLogicalRow[0] !== logicalRowCount || normalizationPerLogicalRow[0] !== logicalRowCount) {\r\n throw new Error('Shape of the intermediate results should be equal to logical row count');\r\n }\r\n\r\n const shaderSource = `\r\n float process(int[${rank}] indices) {\r\n\r\n // get offset of current logical tensor index from the 2-D texture coordinates (TexCoords)\r\n int offset = coordsToOffset(TexCoords, ${textureWidth}, ${textureHeight});\r\n\r\n //determine the logical row for this index\r\n int logical_row_index[1];\r\n logical_row_index[0] = offset / ${featureCount};\r\n\r\n float norm_factor = _Norm(logical_row_index);\r\n\r\n // avoid possible division by 0\r\n // if norm_facor is 0, all elements are zero\r\n // if so, return 0\r\n if(norm_factor == 0.0)\r\n return 0.0;\r\n\r\n return exp(_A(indices) - _Max(logical_row_index)) / norm_factor;\r\n }`;\r\n return {\r\n ...softmaxProgramMetadata,\r\n output: {dims: input.dims, type: input.type, textureType: TextureType.unpacked},\r\n shaderSource\r\n };\r\n };\r\n\r\nconst validateInputs = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length !== 1) {\r\n throw new Error('Softmax requires 1 input.');\r\n }\r\n\r\n if (inputs[0].type !== 'float32' && inputs[0].type !== 'float64') {\r\n throw new Error('Invalid input type');\r\n }\r\n};","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {AttributeWithCacheKey, createAttributeWithCacheKey} from '../../../attribute-with-cache-key';\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {ShapeUtil, SplitUtil} from '../../../util';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, TextureType} from '../types';\r\n\r\nexport interface SplitAttributes extends AttributeWithCacheKey {\r\n readonly axis: number;\r\n readonly split: number[];\r\n readonly numOutputs: number;\r\n}\r\n\r\nconst splitProgramMetadata = {\r\n name: 'Split',\r\n inputNames: ['A'],\r\n inputTypes: [TextureType.unpacked],\r\n};\r\n\r\nexport const split: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: SplitAttributes): Tensor[] => {\r\n validateInputs(inputs);\r\n\r\n const axis = ShapeUtil.normalizeAxis(attributes.axis, inputs[0].dims.length);\r\n const count = getProgramCount(inferenceHandler, inputs, axis, attributes);\r\n const output: Tensor[] = [];\r\n for (let i = 0; i < count; ++i) {\r\n output.push(inferenceHandler.run(\r\n {\r\n ...splitProgramMetadata,\r\n cacheHint: `${attributes.cacheKey};${i}`,\r\n get: () => createSplitProgramInfo(inferenceHandler, inputs[0], attributes, axis, i)\r\n },\r\n inputs));\r\n }\r\n\r\n return output;\r\n };\r\n\r\nexport const parseSplitAttributes: OperatorInitialization = (node: Graph.Node): SplitAttributes => {\r\n const axis = node.attributes.getInt('axis', 0);\r\n const split = node.attributes.getInts('split', []);\r\n const numOutputs = node.outputs.length;\r\n return createAttributeWithCacheKey({axis, split, numOutputs});\r\n};\r\n\r\nconst getProgramCount =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], axis: number, attributes: SplitAttributes): number => {\r\n const [, offsets] = SplitUtil.splitShape(inputs[0].dims, axis, attributes.split, attributes.numOutputs);\r\n return offsets.length;\r\n };\r\n\r\nconst createSplitProgramInfo =\r\n (inferenceHandler: WebGLInferenceHandler, input: Tensor, attributes: SplitAttributes, axis: number, index: number):\r\n ProgramInfo => {\r\n const [shapes, offsets] = SplitUtil.splitShape(input.dims, axis, attributes.split, attributes.numOutputs);\r\n const offset = offsets[index];\r\n const outputShape = shapes[index];\r\n const rank = outputShape.length;\r\n const shaderSource = `\r\n float process(int indices[${rank}]) {\r\n indices[${axis}] += ${offset};\r\n return _A(indices);\r\n }\r\n `;\r\n return {\r\n ...splitProgramMetadata,\r\n cacheHint: `${attributes.cacheKey}:${index}`,\r\n output: {dims: outputShape, type: input.type, textureType: TextureType.unpacked},\r\n shaderSource\r\n };\r\n };\r\n\r\nconst validateInputs = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length !== 1) {\r\n throw new Error('Split requires one input.');\r\n }\r\n\r\n if (inputs[0].type !== 'int8' && inputs[0].type !== 'uint8' && inputs[0].type !== 'int16' &&\r\n inputs[0].type !== 'uint16' && inputs[0].type !== 'int32' && inputs[0].type !== 'uint32' &&\r\n inputs[0].type !== 'float32' && inputs[0].type !== 'float64' && inputs[0].type !== 'bool') {\r\n throw new Error('Invalid input type.');\r\n }\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {ShapeUtil} from '../../../util';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\n\r\nexport const squeeze: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], axes: number[]): Tensor[] => {\r\n validateInputs(inputs);\r\n const outputShape = ShapeUtil.squeezeShape(inputs[0].dims, axes);\r\n const output = inferenceHandler.reshapeUnpacked(inputs[0], outputShape);\r\n return [output];\r\n };\r\n\r\nexport const squeezeV13 = (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[]): Tensor[] => {\r\n validateInputsV13(inputs);\r\n return squeeze(inferenceHandler, [inputs[0]], Array.from(inputs[1].integerData));\r\n};\r\n\r\nexport const parseSqueezeAttributes: OperatorInitialization = (node: Graph.Node): number[] =>\r\n node.attributes.getInts('axes');\r\n\r\nconst validateInputs = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length !== 1) {\r\n throw new Error('Squeeze requires 1 input.');\r\n }\r\n\r\n if (inputs[0].type === 'string') {\r\n throw new Error('invalid input tensor types.');\r\n }\r\n};\r\n\r\nconst validateInputsV13 = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length !== 2) {\r\n throw new Error('Squeeze requires 2 inputs.');\r\n }\r\n\r\n if (inputs[1].type !== 'int32') {\r\n throw new Error('Invalid input type.');\r\n }\r\n};","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Tensor} from '../../../tensor';\r\nimport {getGlsl} from '../glsl-source';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramMetadata, TextureType} from '../types';\r\n\r\nexport const sum = (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[]): Tensor[] => {\r\n validateInputs(inputs);\r\n\r\n const sumProgramMetadata = {\r\n name: 'Sum',\r\n inputNames: inputs.map((v, i) => `X${i}`),\r\n inputTypes: new Array(inputs.length).fill(TextureType.unpacked)\r\n };\r\n\r\n const output = inferenceHandler.run(\r\n {...sumProgramMetadata, get: () => createSumProgramInfo(inferenceHandler, inputs, sumProgramMetadata)}, inputs);\r\n return [output];\r\n};\r\n\r\nconst createSumProgramInfo =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], sumProgramMetadata: ProgramMetadata): ProgramInfo => {\r\n const glsl = getGlsl(inferenceHandler.session.backend.glContext.version);\r\n const outputShape = inputs[0].dims.slice();\r\n const sumLine = inputs.map((v, i) => `${glsl.texture2D}(X${i},TexCoords)`).join(' + ');\r\n const shaderSource = `\r\n void main() {\r\n vec4 result = ${sumLine};\r\n ${glsl.output} = result;\r\n }\r\n `;\r\n return {\r\n ...sumProgramMetadata,\r\n output: {dims: outputShape, type: inputs[0].type, textureType: TextureType.unpacked},\r\n hasMain: true,\r\n shaderSource\r\n };\r\n };\r\n\r\nconst validateInputs = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length === 0) {\r\n throw new Error('Sum requires inputs.');\r\n }\r\n\r\n const length = inputs[0].dims.length;\r\n for (let i = 1; i < inputs.length; i++) {\r\n if (length !== inputs[i].dims.length) {\r\n throw new Error('Input shapes are mismatched.');\r\n }\r\n\r\n for (let j = 0; j < length; j++) {\r\n if (inputs[0].dims[j] !== inputs[i].dims[j]) {\r\n throw new Error('Input shapes are not matched.');\r\n }\r\n }\r\n }\r\n\r\n if (inputs[0].type !== 'float32' && inputs[0].type !== 'float64') {\r\n throw new Error('Invalid input type.');\r\n }\r\n for (let i = 1; i < inputs.length; i++) {\r\n if (inputs[0].type !== inputs[i].type) {\r\n throw new Error('Input types are not matched.');\r\n }\r\n }\r\n};","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {NUMBER_TYPES} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramMetadata, TextureType} from '../types';\r\n\r\nexport const tile = (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[]): Tensor[] => {\r\n validateInputs(inputs);\r\n\r\n const tileProgramMetadata = {\r\n name: 'Tile',\r\n inputNames: ['A'],\r\n inputTypes: [TextureType.unpacked],\r\n };\r\n\r\n const output = inferenceHandler.run(\r\n {...tileProgramMetadata, get: () => createTileProgramInfo(inferenceHandler, inputs, tileProgramMetadata)},\r\n inputs);\r\n return [output];\r\n};\r\n\r\nconst createTileProgramInfo =\r\n (handler: WebGLInferenceHandler, inputs: Tensor[], tileProgramMetadata: ProgramMetadata): ProgramInfo => {\r\n const inputShape = inputs[0].dims.slice();\r\n const outputShape = new Array(inputShape.length);\r\n\r\n const tileOps: string[] = [];\r\n for (let i = 0; i < inputShape.length; i++) {\r\n outputShape[i] = inputShape[i] * inputs[1].numberData[i];\r\n tileOps.push(`inputIdx[${i}] = int(mod(float(outputIdx[${i}]), ${inputShape[i]}.));`);\r\n }\r\n\r\n const rank = outputShape.length;\r\n const shaderSource = `\r\n float process(int outputIdx[${rank}]) {\r\n int inputIdx[${rank}];\r\n ${tileOps.join('\\n')}\r\n return _A(inputIdx);\r\n }\r\n `;\r\n return {\r\n ...tileProgramMetadata,\r\n output: {dims: outputShape, type: inputs[0].type, textureType: TextureType.unpacked},\r\n shaderSource\r\n };\r\n };\r\n\r\nconst validateInputs = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length !== 2) {\r\n throw new Error('Tile requires 2 input.');\r\n }\r\n if (inputs[1].dims.length !== 1) {\r\n throw new Error('The second input shape must 1 dimension.');\r\n }\r\n if (inputs[1].dims[0] !== inputs[0].dims.length) {\r\n throw new Error('Invalid input shape.');\r\n }\r\n if (NUMBER_TYPES.indexOf(inputs[0].type) === -1) {\r\n throw new Error('Invalid input type.');\r\n }\r\n if (inputs[1].type !== 'int32' && inputs[1].type !== 'int16') {\r\n throw new Error('Invalid repeat type.');\r\n }\r\n};","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {AttributeWithCacheKey, createAttributeWithCacheKey} from '../../../attribute-with-cache-key';\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {ShapeUtil} from '../../../util';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, TextureType} from '../types';\r\n\r\nexport interface TransposeAttributes extends AttributeWithCacheKey {\r\n readonly perm: number[];\r\n}\r\n\r\nconst transposeProgramMetadata = {\r\n name: 'Transpose',\r\n inputNames: ['A'],\r\n inputTypes: [TextureType.unpacked]\r\n};\r\n\r\nexport const transpose: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: TransposeAttributes): Tensor[] => {\r\n validateInputs(inputs);\r\n const output = inferenceHandler.run(\r\n {\r\n ...transposeProgramMetadata,\r\n cacheHint: attributes.cacheKey,\r\n get: () => createTransposeProgramInfo(inferenceHandler, inputs[0], attributes.perm)\r\n },\r\n inputs);\r\n return [output];\r\n };\r\n\r\nexport const parseTransposeAttributes: OperatorInitialization =\r\n (node: Graph.Node): TransposeAttributes => createAttributeWithCacheKey({perm: node.attributes.getInts('perm', [])});\r\n\r\nconst createTransposeProgramInfo =\r\n (inferenceHandler: WebGLInferenceHandler, input: Tensor, perm: number[]): ProgramInfo => {\r\n const inputShape = input.dims;\r\n perm = getAdjustedPerm(inputShape, perm);\r\n const unpackedOutputShape = getOutputShape(inputShape, perm);\r\n const rank = inputShape.length;\r\n // A dims=[${inputs[0].dims.toString()}]\r\n // out Dims=[${unpackedOutputShape.toString()}]\r\n // based on perm=[${perm.toString()}]\r\n const shaderSource = `\r\n ${getPermFunctionBody('perm', perm, rank)}\r\n float process(int indices[${rank}]) {\r\n int a[${rank}];\r\n perm(a, indices);\r\n return _A(a);\r\n }`;\r\n return {\r\n ...transposeProgramMetadata,\r\n output: {dims: unpackedOutputShape, type: input.type, textureType: TextureType.unpacked},\r\n shaderSource\r\n };\r\n };\r\n\r\nconst getAdjustedPerm = (inputShape: readonly number[], perm: number[]): number[] => {\r\n if (perm && perm.length !== inputShape.length) {\r\n perm = [...(inputShape.keys())].reverse();\r\n }\r\n return perm;\r\n};\r\n\r\nconst getOutputShape = (inputShape: readonly number[], perm: number[]): readonly number[] => {\r\n perm = getAdjustedPerm(inputShape, perm);\r\n return ShapeUtil.sortBasedOnPerm(inputShape, perm);\r\n};\r\n\r\nconst getPermFunctionBody = (name: string, perm: number[], rank: number): string => {\r\n const reverseFunc = [];\r\n reverseFunc.push(`void ${name}(out int a[${rank}], int src[${rank}]) {`);\r\n for (let i = 0; i < rank; ++i) {\r\n reverseFunc.push(`\\ta[${perm[i]}]=src[${i}];`);\r\n }\r\n reverseFunc.push('\\t}');\r\n return reverseFunc.join('\\n');\r\n};\r\n\r\nconst validateInputs = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length !== 1) {\r\n throw new Error('Transpose requires 1 input.');\r\n }\r\n\r\n if (inputs[0].type !== 'float32' && inputs[0].type !== 'float64') {\r\n throw new Error('input should be float tensor');\r\n }\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {getGlsl} from '../glsl-source';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {TextureData, TextureType} from '../types';\r\n\r\nexport const encodeAsUint8 = (inferenceHandler: WebGLInferenceHandler, input: TextureData): TextureData => {\r\n const outputShape = input.shape;\r\n const glsl = getGlsl(inferenceHandler.session.backend.glContext.version);\r\n /**\r\n * https://github.com/tensorflow/tfjs-core/blob/master/src/kernels/webgl/encode_float_gpu.ts\r\n */\r\n const shaderSource = `\r\n const float FLOAT_MAX = 1.70141184e38;\r\n const float FLOAT_MIN = 1.17549435e-38;\r\n\r\n bool isNaN(float val) {\r\n return (val < 1.0 || 0.0 < val || val == 0.0) ? false : true;\r\n }\r\n\r\n highp vec4 encodeAsUint8(highp float v) {\r\n if (isNaN(v)) {\r\n return vec4(255, 255, 255, 255);\r\n }\r\n\r\n highp float av = abs(v);\r\n\r\n if(av < FLOAT_MIN) {\r\n return vec4(0.0, 0.0, 0.0, 0.0);\r\n } else if(v > FLOAT_MAX) {\r\n return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\r\n } else if(v < -FLOAT_MAX) {\r\n return vec4(0.0, 0.0, 128.0, 255.0) / 255.0;\r\n }\r\n\r\n highp vec4 c = vec4(0,0,0,0);\r\n\r\n highp float e = floor(log2(av));\r\n highp float m = exp2(fract(log2(av))) - 1.0;\r\n\r\n c[2] = floor(128.0 * m);\r\n m -= c[2] / 128.0;\r\n c[1] = floor(32768.0 * m);\r\n m -= c[1] / 32768.0;\r\n c[0] = floor(8388608.0 * m);\r\n\r\n highp float ebias = e + 127.0;\r\n c[3] = floor(ebias / 2.0);\r\n ebias -= c[3] * 2.0;\r\n c[2] += floor(ebias) * 128.0;\r\n\r\n c[3] += 128.0 * step(0.0, -v);\r\n\r\n return c / 255.0;\r\n }\r\n\r\n void main() {\r\n float value = ${glsl.texture2D}(X,TexCoords).r;\r\n ${glsl.output} = encodeAsUint8(value);\r\n }`;\r\n const programInfo = {\r\n name: 'Uint8Encode',\r\n inputTypes: [TextureType.unpacked],\r\n inputNames: ['X'],\r\n output: {dims: outputShape, type: input.tensor.type, textureType: TextureType.downloadUint8AsFloat},\r\n shaderSource,\r\n hasMain: true\r\n };\r\n return inferenceHandler.executeProgram(programInfo, [input.tensor]);\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {AttributeWithCacheKey, createAttributeWithCacheKey} from '../../../attribute-with-cache-key';\r\nimport {Graph} from '../../../graph';\r\nimport {Tensor} from '../../../tensor';\r\nimport {MAX_CLIP, MIN_CLIP} from '../../../util';\r\nimport {FunctionType, GlslValueFunction} from '../glsl-definitions';\r\nimport {getGlsl} from '../glsl-source';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramInfoLoader, ProgramMetadata, TextureType} from '../types';\r\n\r\nexport function glslAbs(): GlslValueFunction {\r\n return glslBuiltinUnary('abs');\r\n}\r\nexport function glslAcos(): GlslValueFunction {\r\n return glslBuiltinUnary('acos');\r\n}\r\nexport function glslAsin(): GlslValueFunction {\r\n return glslBuiltinUnary('asin');\r\n}\r\nexport function glslAtan(): GlslValueFunction {\r\n return glslBuiltinUnary('atan');\r\n}\r\nexport function glslCeil(): GlslValueFunction {\r\n return glslBuiltinUnary('ceil');\r\n}\r\nexport function glslCos(): GlslValueFunction {\r\n return glslBuiltinUnary('cos');\r\n}\r\nexport function glslElu(alpha: number): GlslValueFunction {\r\n const name = 'elu';\r\n const body = `\r\n const float alpha = float(${alpha});\r\n\r\n float ${name}_(float a) {\r\n return a >= 0.0 ? a: (exp(a) - 1.0) * alpha;\r\n }\r\n vec4 ${name}_(vec4 v) {\r\n return vec4(${name}_(v.x), ${name}_(v.y), ${name}_(v.z), ${name}_(v.w));\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nexport function glslExp(): GlslValueFunction {\r\n return glslBuiltinUnary('exp');\r\n}\r\nexport function glslFloor(): GlslValueFunction {\r\n return glslBuiltinUnary('floor');\r\n}\r\nexport function glslClip(min: number, max: number): GlslValueFunction {\r\n const name = 'clip';\r\n const body = `\r\n const float min = float(${min});\r\n const float max = float(${max});\r\n\r\n float ${name}_(float a) {\r\n return clamp(a, min, max);\r\n }\r\n vec4 ${name}_(vec4 v) {\r\n return clamp(v, min, max);\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nexport function glslIdentity(): GlslValueFunction {\r\n const name = 'indentity';\r\n const body = `\r\n float ${name}_(float a) {\r\n return a;\r\n }\r\n vec4 ${name}_(vec4 v) {\r\n return v;\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nexport function glslLeakyRelu(alpha: number): GlslValueFunction {\r\n const name = 'leakyRelu';\r\n const body = `\r\n const float alpha = float(${alpha});\r\n\r\n float ${name}_(float a) {\r\n return a < 0.0 ? a * alpha : a;\r\n }\r\n vec4 ${name}_(vec4 v) {\r\n return vec4(${name}_(v.x), ${name}_(v.y), ${name}_(v.z), ${name}_(v.w));\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nexport function glslLog(): GlslValueFunction {\r\n return glslBuiltinUnary('log');\r\n}\r\nexport function glslNeg(): GlslValueFunction {\r\n const name = 'neg';\r\n const body = `\r\n float ${name}_(float a) {\r\n return -a;\r\n }\r\n vec4 ${name}_(vec4 v) {\r\n return -v;\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nexport function glslNot(): GlslValueFunction {\r\n const name = 'not';\r\n const body = `\r\n float ${name}_(float a) {\r\n return float( ! bool(a) );\r\n }\r\n bool ${name}_(bool a) {\r\n return !a;\r\n }\r\n vec4 ${name}_(vec4 v) {\r\n return vec4(!bool(v.x), !bool(v.y), !bool(v.z), !bool(v.w));\r\n }\r\n bvec4 ${name}_(bvec4 v) {\r\n return bvec4(!v.x, !v.y, !v.z, !v.w);\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nexport function glslSin(): GlslValueFunction {\r\n return glslBuiltinUnary('sin');\r\n}\r\nexport function glslRelu(): GlslValueFunction {\r\n const name = 'relu';\r\n const body = `\r\n float ${name}_(float a) {\r\n return max( a, 0.0 );\r\n }\r\n vec4 ${name}_(vec4 v) {\r\n return max( v, 0.0 );\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nexport function glslSigmoid(): GlslValueFunction {\r\n const name = 'sigmoid';\r\n const body = `\r\n float ${name}_(float a) {\r\n return 1.0 / (1.0 + exp(-a));\r\n }\r\n vec4 ${name}_(vec4 v) {\r\n return 1.0 / (1.0 + exp(-v));\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nexport function glslSqrt(): GlslValueFunction {\r\n return glslBuiltinUnary('sqrt');\r\n}\r\nexport function glslTan(): GlslValueFunction {\r\n return glslBuiltinUnary('tan');\r\n}\r\nexport function glslTanh(): GlslValueFunction {\r\n const name = 'tanh';\r\n const body = `\r\n float ${name}_(float a) {\r\n a = clamp(a, -10., 10.);\r\n a = exp(2.*a);\r\n return (a - 1.) / (a + 1.);\r\n }\r\n vec4 ${name}_(vec4 v) {\r\n v = clamp(v, -10., 10.);\r\n v = exp(2.*v);\r\n return (v - 1.) / (v + 1.);\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\nfunction glslBuiltinUnary(name: string): GlslValueFunction {\r\n const body = `\r\n float ${name}_(float a) {\r\n return ${name}(a);\r\n }\r\n vec4 ${name}_(vec4 v) {\r\n return ${name}(v);\r\n }\r\n `;\r\n return {body, name, type: FunctionType.ValueBased};\r\n}\r\n\r\n/////\r\n/////\r\n/////\r\n\r\nconst createElementwiseProgramInfo =\r\n (handler: WebGLInferenceHandler, metadata: ProgramMetadata, input: Tensor, glslFunc: GlslValueFunction):\r\n ProgramInfo => {\r\n const textureType = handler.session.pack ? TextureType.packed : TextureType.unpacked;\r\n const glsl = getGlsl(handler.session.backend.glContext.version);\r\n return {\r\n ...metadata,\r\n output: {dims: input.dims, type: input.type, textureType},\r\n shaderSource: `\r\n ${glslFunc.body}\r\n void main() {\r\n vec4 v = ${glsl.texture2D}(A, TexCoords);\r\n v = ${glslFunc.name}_(v);\r\n ${glsl.output} = v;\r\n }\r\n `,\r\n hasMain: true\r\n };\r\n };\r\n\r\nconst createElementwiseProgramInfoLoader =\r\n (handler: WebGLInferenceHandler, input: Tensor, glslFunc: GlslValueFunction, cacheKey?: string):\r\n ProgramInfoLoader => {\r\n const textureType = handler.session.pack ? TextureType.packed : TextureType.unpacked;\r\n const metadata = {name: glslFunc.name, inputTypes: [textureType], inputNames: ['A'], cacheHint: cacheKey};\r\n return {...metadata, get: () => createElementwiseProgramInfo(handler, metadata, input, glslFunc)};\r\n };\r\n\r\nexport const abs = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createElementwiseProgramInfoLoader(handler, inputs[0], glslAbs()), inputs)];\r\n\r\nexport const acos = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createElementwiseProgramInfoLoader(handler, inputs[0], glslAcos()), inputs)];\r\n\r\nexport const asin = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createElementwiseProgramInfoLoader(handler, inputs[0], glslAsin()), inputs)];\r\n\r\nexport const atan = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createElementwiseProgramInfoLoader(handler, inputs[0], glslAtan()), inputs)];\r\n\r\nexport interface ClipAttributes extends AttributeWithCacheKey {\r\n readonly min: number;\r\n readonly max: number;\r\n}\r\n\r\nexport const clip =\r\n (handler: WebGLInferenceHandler, inputs: Tensor[], attributes: ClipAttributes): Tensor[] => [handler.run(\r\n createElementwiseProgramInfoLoader(\r\n handler, inputs[0], glslClip(attributes.min, attributes.max), attributes.cacheKey),\r\n inputs)];\r\n\r\nexport const parseClipAttributes = (node: Graph.Node): ClipAttributes => createAttributeWithCacheKey(\r\n {min: node.attributes.getFloat('min', MIN_CLIP), max: node.attributes.getFloat('max', MAX_CLIP)});\r\n\r\nexport const clipV11 = (handler: WebGLInferenceHandler, inputs: Tensor[]): Tensor[] => {\r\n const attributes = generateClipAttributesFromInputs(handler, inputs);\r\n return clip(handler, [inputs[0]], attributes);\r\n};\r\n\r\nconst generateClipAttributesFromInputs = (handler: WebGLInferenceHandler, inputs: Tensor[]): ClipAttributes => {\r\n if (inputs.length >= 3 &&\r\n (!handler.session.isInitializer(inputs[1].dataId) || !handler.session.isInitializer(inputs[2].dataId))) {\r\n throw new Error('dynamic clip attributes are not allowed');\r\n }\r\n\r\n const min = (inputs.length >= 3) ? inputs[1].numberData[0] : MIN_CLIP;\r\n const max = (inputs.length >= 3) ? inputs[2].numberData[0] : MAX_CLIP;\r\n return createAttributeWithCacheKey({min, max});\r\n};\r\n\r\nexport const ceil = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createElementwiseProgramInfoLoader(handler, inputs[0], glslCeil()), inputs)];\r\n\r\nexport const cos = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createElementwiseProgramInfoLoader(handler, inputs[0], glslCos()), inputs)];\r\n\r\nexport interface EluAttributes extends AttributeWithCacheKey {\r\n readonly alpha: number;\r\n}\r\n\r\nexport const elu =\r\n (handler: WebGLInferenceHandler, inputs: Tensor[], attributes: EluAttributes): Tensor[] => [handler.run(\r\n createElementwiseProgramInfoLoader(handler, inputs[0], glslElu(attributes.alpha), attributes.cacheKey),\r\n inputs)];\r\n\r\nexport const parseEluAttributes = (node: Graph.Node): EluAttributes =>\r\n createAttributeWithCacheKey({alpha: node.attributes.getFloat('alpha', 1.0)});\r\n\r\nexport const exp = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createElementwiseProgramInfoLoader(handler, inputs[0], glslExp()), inputs)];\r\n\r\nexport const floor = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createElementwiseProgramInfoLoader(handler, inputs[0], glslFloor()), inputs)];\r\n\r\nexport const identity = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createElementwiseProgramInfoLoader(handler, inputs[0], glslIdentity()), inputs)];\r\n\r\nexport interface LeakyReluAttributes extends AttributeWithCacheKey {\r\n readonly alpha: number;\r\n}\r\n\r\nexport const leakyRelu =\r\n (handler: WebGLInferenceHandler, inputs: Tensor[], attributes: LeakyReluAttributes): Tensor[] => [handler.run(\r\n createElementwiseProgramInfoLoader(handler, inputs[0], glslLeakyRelu(attributes.alpha), attributes.cacheKey),\r\n inputs)];\r\n\r\nexport const parseLeakyReluAttributes = (node: Graph.Node): LeakyReluAttributes =>\r\n createAttributeWithCacheKey({alpha: node.attributes.getFloat('alpha', 0.01)});\r\n\r\nexport const log = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createElementwiseProgramInfoLoader(handler, inputs[0], glslLog()), inputs)];\r\n\r\nexport const neg = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createElementwiseProgramInfoLoader(handler, inputs[0], glslNeg()), inputs)];\r\n\r\nexport const not = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createElementwiseProgramInfoLoader(handler, inputs[0], glslNot()), inputs)];\r\n\r\nexport const relu = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createElementwiseProgramInfoLoader(handler, inputs[0], glslRelu()), inputs)];\r\n\r\nexport const sigmoid = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createElementwiseProgramInfoLoader(handler, inputs[0], glslSigmoid()), inputs)];\r\n\r\nexport const sin = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createElementwiseProgramInfoLoader(handler, inputs[0], glslSin()), inputs)];\r\n\r\nexport const sqrt = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createElementwiseProgramInfoLoader(handler, inputs[0], glslSqrt()), inputs)];\r\n\r\nexport const tan = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createElementwiseProgramInfoLoader(handler, inputs[0], glslTan()), inputs)];\r\n\r\nexport const tanh = (handler: WebGLInferenceHandler, inputs: Tensor[]):\r\n Tensor[] => [handler.run(createElementwiseProgramInfoLoader(handler, inputs[0], glslTanh()), inputs)];\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Tensor} from '../../../tensor';\r\nimport {getGlsl} from '../glsl-source';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, ProgramInfoLoader, TextureType} from '../types';\r\nimport {getCoordsDataType} from '../utils';\r\nimport {getChannels, unpackFromChannel} from './packing-utils';\r\n\r\nconst unpackProgramMetadata = {\r\n name: 'unpack',\r\n inputNames: ['A'],\r\n inputTypes: [TextureType.packed]\r\n};\r\n\r\nexport const createUnpackProgramInfo = (handler: WebGLInferenceHandler, input: Tensor): ProgramInfo => {\r\n const rank = input.dims.length;\r\n\r\n const channels = getChannels('rc', rank);\r\n const innerDims = channels.slice(-2);\r\n const coordsDataType = getCoordsDataType(rank);\r\n const unpackChannel = unpackFromChannel();\r\n const isScalar = (input.dims.length === 0);\r\n const sourceCoords = isScalar ? '' : getSourceCoords(rank, channels);\r\n const coords = rank <= 1 ? 'rc' : `vec2(${innerDims.join(',')})`;\r\n const glsl = getGlsl(handler.session.backend.glContext.version);\r\n const shaderSource = `\r\n ${unpackChannel}\r\n void main() {\r\n ${coordsDataType} rc = getOutputCoords();\r\n\r\n // Sample the texture with the coords to get the rgba channel value.\r\n vec4 packedInput = getA(${sourceCoords});\r\n\r\n ${glsl.output} = vec4(getChannel(packedInput, ${coords}), 0, 0, 0);\r\n }\r\n `;\r\n\r\n return {\r\n ...unpackProgramMetadata,\r\n hasMain: true,\r\n output: {dims: input.dims, type: input.type, textureType: TextureType.unpacked},\r\n shaderSource\r\n };\r\n};\r\n\r\nexport const createUnpackProgramInfoLoader = (handler: WebGLInferenceHandler, input: Tensor): ProgramInfoLoader =>\r\n ({...unpackProgramMetadata, get: () => createUnpackProgramInfo(handler, input)});\r\n\r\nfunction getSourceCoords(rank: number, dims: string[]): string {\r\n if (rank === 1) {\r\n return 'rc';\r\n }\r\n\r\n let coords = '';\r\n for (let i = 0; i < rank; i++) {\r\n coords += dims[i];\r\n if (i < rank - 1) {\r\n coords += ',';\r\n }\r\n }\r\n return coords;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {ShapeUtil} from '../../../util';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\n\r\nexport const unsqueeze: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], axes: number[]): Tensor[] => {\r\n validateInputs(inputs);\r\n const outputShape = ShapeUtil.unsqueezeShape(inputs[0].dims, axes);\r\n const output = inferenceHandler.reshapeUnpacked(inputs[0], outputShape);\r\n return [output];\r\n };\r\n\r\nexport const unsqueezeV13 = (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[]): Tensor[] => {\r\n validateInputsV13(inputs);\r\n return unsqueeze(inferenceHandler, [inputs[0]], Array.from(inputs[1].integerData));\r\n};\r\n\r\nexport const parseUnsqueezeAttributes: OperatorInitialization = (node: Graph.Node): number[] =>\r\n node.attributes.getInts('axes');\r\n\r\nconst validateInputs = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length !== 1) {\r\n throw new Error('Unsqueeze requires 1 input.');\r\n }\r\n\r\n if (inputs[0].type === 'string') {\r\n throw new Error('invalid input tensor types.');\r\n }\r\n};\r\n\r\nconst validateInputsV13 = (inputs: Tensor[]): void => {\r\n if (!inputs || inputs.length !== 2) {\r\n throw new Error('Unsqueeze requires 2 inputs.');\r\n }\r\n\r\n if (inputs[1].type !== 'int32') {\r\n throw new Error('Invalid input type.');\r\n }\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {AttributeWithCacheKey, createAttributeWithCacheKey} from '../../../attribute-with-cache-key';\r\nimport {Graph} from '../../../graph';\r\nimport {OperatorImplementation, OperatorInitialization} from '../../../operators';\r\nimport {Tensor} from '../../../tensor';\r\nimport {getGlsl} from '../glsl-source';\r\nimport {WebGLInferenceHandler} from '../inference-handler';\r\nimport {ProgramInfo, TextureType} from '../types';\r\n\r\nexport interface UpsampleAttributes extends AttributeWithCacheKey {\r\n readonly opset: number;\r\n readonly isResize: boolean;\r\n readonly mode: string;\r\n readonly scales: number[];\r\n readonly extrapolationValue: number;\r\n readonly coordinateTransformMode: string;\r\n readonly useExtrapolation: boolean;\r\n readonly needRoiInput: boolean;\r\n readonly nearestMode: string;\r\n readonly cubicCoefficientA: number;\r\n readonly excludeOutside: boolean;\r\n readonly useNearest2xOptimization: boolean;\r\n readonly roiInputIdx: number;\r\n readonly scalesInputIdx: number;\r\n readonly sizesInputIdx: number;\r\n}\r\n\r\nconst upsampleProgramMetadata = {\r\n name: 'Upsample',\r\n inputNames: ['X'],\r\n inputTypes: [TextureType.unpacked],\r\n};\r\n\r\nexport const upsample: OperatorImplementation =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: UpsampleAttributes): Tensor[] => {\r\n validateInputs(inputs, attributes);\r\n const output = inferenceHandler.run(\r\n {\r\n ...upsampleProgramMetadata,\r\n cacheHint: attributes.cacheKey,\r\n get: () => createUpsampleProgramInfo(inferenceHandler, inputs, attributes)\r\n },\r\n inputs);\r\n return [output];\r\n };\r\n\r\nexport const parseUpsampleAttributesV7: OperatorInitialization =\r\n (node: Graph.Node): UpsampleAttributes => parseUpsampleAttributes(node, 7);\r\n\r\nexport const parseUpsampleAttributesV9: OperatorInitialization =\r\n (node: Graph.Node): UpsampleAttributes => parseUpsampleAttributes(node, 9);\r\n\r\nexport const parseUpsampleAttributes = (node: Graph.Node, opset: number): UpsampleAttributes => {\r\n const isResize = (opset >= 10);\r\n\r\n // processing node attributes\r\n const mode = node.attributes.getString('mode', 'nearest');\r\n if (mode !== 'nearest' && mode !== 'linear' && (opset < 11 || mode !== 'cubic')) {\r\n throw new Error(`unrecognized mode: ${mode}`);\r\n }\r\n\r\n let scales: number[] = [];\r\n if (opset < 9) {\r\n scales = node.attributes.getFloats('scales');\r\n scalesValidation(scales, mode, isResize);\r\n }\r\n\r\n const extrapolationValue = node.attributes.getFloat('extrapolation_value', 0.0);\r\n\r\n const coordinateTransformMode =\r\n opset > 10 ? node.attributes.getString('coordinate_transformation_mode', 'half_pixel') : 'asymmetric';\r\n if ([\r\n 'asymmetric', 'pytorch_half_pixel', 'tf_half_pixel_for_nn', 'align_corners', 'tf_crop_and_resize', 'half_pixel'\r\n ].indexOf(coordinateTransformMode) === -1) {\r\n throw new Error(`coordinate_transform_mode '${coordinateTransformMode}' is not supported`);\r\n }\r\n const needRoiInput = (coordinateTransformMode === 'tf_crop_and_resize');\r\n const useExtrapolation = needRoiInput;\r\n\r\n const nearestMode =\r\n (mode === 'nearest' && opset >= 11) ? node.attributes.getString('nearest_mode', 'round_prefer_floor') : '';\r\n if (['round_prefer_floor', 'round_prefer_ceil', 'floor', 'ceil', ''].indexOf(nearestMode) === -1) {\r\n throw new Error(`nearest_mode '${nearestMode}' is not supported`);\r\n }\r\n\r\n const cubicCoefficientA = node.attributes.getFloat('cubic_coeff_a', -0.75);\r\n const excludeOutside = node.attributes.getInt('exclude_outside', 0) !== 0;\r\n if (excludeOutside && mode !== 'cubic') {\r\n throw new Error('exclude_outside can be set to 1 only when mode is CUBIC.');\r\n }\r\n\r\n const useNearest2xOptimization =\r\n (opset < 11) ? true : (mode === 'nearest' && coordinateTransformMode === 'asymmetric' && nearestMode === 'floor');\r\n\r\n let roiInputIdx = 0;\r\n let scalesInputIdx = 0;\r\n let sizesInputIdx = 0;\r\n\r\n if (opset > 10) {\r\n roiInputIdx = 1;\r\n scalesInputIdx = 2;\r\n sizesInputIdx = 3;\r\n } else if (opset === 9) {\r\n scalesInputIdx = 1;\r\n }\r\n\r\n return createAttributeWithCacheKey({\r\n opset,\r\n isResize,\r\n mode,\r\n scales,\r\n extrapolationValue,\r\n coordinateTransformMode,\r\n useExtrapolation,\r\n needRoiInput,\r\n nearestMode,\r\n cubicCoefficientA,\r\n excludeOutside,\r\n useNearest2xOptimization,\r\n roiInputIdx,\r\n scalesInputIdx,\r\n sizesInputIdx\r\n });\r\n};\r\n\r\nconst createUpsampleProgramInfo =\r\n (inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], attributes: UpsampleAttributes): ProgramInfo => {\r\n const glsl = getGlsl(inferenceHandler.session.backend.glContext.version);\r\n const [inputWidth, inputHeight] =\r\n inferenceHandler.calculateTextureWidthAndHeight(inputs[0].dims, TextureType.unpacked);\r\n\r\n const outputShape = inputs[0].dims.map((dim, i) => Math.floor(dim * attributes.scales[i]));\r\n const [outputWidth, outputHeight] =\r\n inferenceHandler.calculateTextureWidthAndHeight(outputShape, TextureType.unpacked);\r\n const dim = outputShape.length;\r\n\r\n const outputPitches = new Array(dim);\r\n const inputPitches = new Array(dim);\r\n let precalculatedPitches = `\r\n int output_pitches[${dim}];\r\n int input_pitches[${dim}];\r\n `;\r\n for (let d = dim - 1; d >= 0; d--) {\r\n outputPitches[d] = (d === dim - 1) ? 1 : outputPitches[d + 1] * outputShape[d + 1];\r\n inputPitches[d] = (d === dim - 1) ? 1 : inputPitches[d + 1] * inputs[0].dims[d + 1];\r\n\r\n precalculatedPitches += `\r\n output_pitches[${d}] = ${outputPitches[d]};\r\n input_pitches[${d}] = ${inputPitches[d]};\r\n `;\r\n }\r\n const getInputFloatFunction = `\r\n float getInputFloat(int index) {\r\n vec2 coords = offsetToCoords(index, ${inputWidth}, ${inputHeight});\r\n float value = getColorAsFloat(${glsl.texture2D}(X, coords));\r\n return value;\r\n }\r\n `;\r\n\r\n const shaderSource = attributes.mode === 'nearest' ?\r\n // nearest\r\n `\r\n ${getInputFloatFunction}\r\n float process(int indices[${dim}]) {\r\n int input_index = 0;\r\n int output_index = coordsToOffset(TexCoords, ${outputWidth}, ${outputHeight});\r\n\r\n ${precalculatedPitches}\r\n\r\n int d, m;\r\n for (int dim = 0; dim < ${dim}; ++dim) {\r\n d = output_index / output_pitches[dim];\r\n m = output_index - d * output_pitches[dim];\r\n output_index = m;\r\n\r\n if (scales[dim] != 1 && d > 0) {\r\n int d2 = d / scales[dim];\r\n m = d - d2 * scales[dim];\r\n d = d2;\r\n }\r\n input_index += input_pitches[dim] * d;\r\n }\r\n\r\n return getInputFloat(input_index);\r\n }` :\r\n dim === 4 ?\r\n // bilinear 4D\r\n `\r\n ${getInputFloatFunction}\r\n float process(int indices[4]) {\r\n int input_index = 0;\r\n int output_index = coordsToOffset(TexCoords, ${outputWidth}, ${outputHeight});\r\n\r\n ${precalculatedPitches}\r\n\r\n int m;\r\n int index_of_dim0, index_of_dim1, index_of_dim2, index_of_dim3;\r\n index_of_dim0 = output_index / output_pitches[0];\r\n m = output_index - index_of_dim0 * output_pitches[0];\r\n index_of_dim1 = m / output_pitches[1];\r\n m = m - index_of_dim1 * output_pitches[1];\r\n index_of_dim2 = m / output_pitches[2];\r\n m = m - index_of_dim2 * output_pitches[2];\r\n index_of_dim3 = m;\r\n\r\n int index_of_input_dim2, index_of_input_dim3, x_offset, y_offset;\r\n index_of_input_dim2 = index_of_dim2 / scales[2];\r\n y_offset = index_of_dim2 - index_of_input_dim2 * scales[2];\r\n index_of_input_dim3 = index_of_dim3 / scales[3];\r\n x_offset = index_of_dim3 - index_of_input_dim3 * scales[3];\r\n\r\n input_index = index_of_dim0 * input_pitches[0] +\r\n index_of_dim1 * input_pitches[1] +\r\n index_of_input_dim2 * input_pitches[2] +\r\n index_of_input_dim3;\r\n\r\n float x00 = getInputFloat(input_index);\r\n float x10, x01, x11;\r\n\r\n bool end_of_dim2 = false;\r\n if (index_of_input_dim2 == (${inputs[0].dims[2]} - 1)) {\r\n // It's the end in dimension 2\r\n x01 = x00;\r\n end_of_dim2 = true;\r\n } else {\r\n x01 = getInputFloat(input_index + input_pitches[2]);\r\n }\r\n\r\n if (index_of_input_dim3 == (input_pitches[2] - 1)) {\r\n // It's the end in dimension 3\r\n x10 = x00;\r\n x11 = x01;\r\n }\r\n else {\r\n x10 = getInputFloat(input_index + 1);\r\n x11 = end_of_dim2 ? x10 : getInputFloat(input_index + input_pitches[2] + 1);\r\n }\r\n\r\n float y0 = x00 + float(y_offset) * (x01 - x00) / float(scales[2]);\r\n float y1 = x10 + float(y_offset) * (x11 - x10) / float(scales[2]);\r\n return y0 + float(x_offset) * (y1 - y0) / float(scales[3]);\r\n }` :\r\n // bilinear 2D\r\n `\r\n ${getInputFloatFunction}\r\n float process(int indices[2]) {\r\n int input_index = 0;\r\n int output_index = coordsToOffset(TexCoords, ${outputWidth}, ${outputHeight});\r\n\r\n ${precalculatedPitches}\r\n\r\n int m;\r\n int index_of_dim0, index_of_dim1;\r\n index_of_dim0 = output_index / output_pitches[0];\r\n m = output_index - index_of_dim0 * output_pitches[0];\r\n index_of_dim1 = m;\r\n\r\n int index_of_input_dim0, index_of_input_dim1, x_offset, y_offset;\r\n index_of_input_dim0 = index_of_dim0 / scales[0];\r\n y_offset = index_of_dim0 - index_of_input_dim0 * scales[0];\r\n index_of_input_dim1 = index_of_dim1 / scales[1];\r\n x_offset = index_of_dim1 - index_of_input_dim1 * scales[1];\r\n\r\n input_index = index_of_input_dim0 * input_pitches[0] + index_of_input_dim1;\r\n\r\n float x00 = getInputFloat(input_index);\r\n float x10, x01, x11;\r\n\r\n bool end_of_dim0 = false;\r\n if (index_of_input_dim0 == (${inputs[0].dims[0]} - 1)) {\r\n // It's the end in dimension 0\r\n x01 = x00;\r\n end_of_dim0 = true;\r\n } else {\r\n x01 = getInputFloat(input_index + input_pitches[0]);\r\n }\r\n\r\n if (index_of_input_dim1 == (input_pitches[0] - 1)) {\r\n // It's the end in dimension 1\r\n x10 = x00;\r\n x11 = x01;\r\n }\r\n else {\r\n x10 = getInputFloat(input_index + 1);\r\n x11 = end_of_dim0 ? x10 : getInputFloat(input_index + input_pitches[0] + 1);\r\n }\r\n\r\n float y0 = x00 + float(y_offset) * (x01 - x00) / float(scales[0]);\r\n float y1 = x10 + float(y_offset) * (x11 - x10) / float(scales[0]);\r\n return y0 + float(x_offset) * (y1 - y0) / float(scales[1]);\r\n }`;\r\n return {\r\n ...upsampleProgramMetadata,\r\n output: {dims: outputShape, type: inputs[0].type, textureType: TextureType.unpacked},\r\n shaderSource,\r\n variables: [{\r\n name: 'scales',\r\n type: 'int',\r\n arrayLength: attributes.scales.length,\r\n data: attributes.scales.map(x => Math.ceil(x))\r\n }]\r\n };\r\n };\r\n\r\nexport const validateInputs = (inputs: Tensor[], attribute: UpsampleAttributes): void => {\r\n if (!inputs || (attribute.opset < 9 && inputs.length !== 1) ||\r\n (attribute.opset >= 9 && attribute.opset < 11 && inputs.length !== 2) ||\r\n (attribute.opset >= 11 && inputs.length !== 3 && inputs.length !== 4)) {\r\n throw new Error('invalid inputs.');\r\n }\r\n\r\n if (attribute.scales.length > 0 && inputs[0].dims.length !== attribute.scales.length) {\r\n throw new Error('Invalid input shape.');\r\n }\r\n\r\n if (inputs[0].type === 'string') {\r\n throw new Error('Invalid input tensor types.');\r\n }\r\n};\r\n\r\nexport const scalesValidation = (scales: number[], mode: string, isResize: boolean): void => {\r\n if (!isResize) {\r\n for (const scale of scales) {\r\n if (scale < 1) {\r\n throw new Error('Scale value should be greater than or equal to 1.');\r\n }\r\n }\r\n } else {\r\n for (const scale of scales) {\r\n if (scale <= 0) {\r\n throw new Error('Scale value should be greater than 0.');\r\n }\r\n }\r\n }\r\n if (mode === 'linear' || mode === 'cubic') {\r\n if (scales.length !== 2 && (scales.length !== 4 || scales[0] !== 1 || scales[1] !== 1)) {\r\n throw new Error(`'Linear' mode and 'Cubic' mode only support 2-D inputs ('Bilinear', 'Bicubic') \\\r\n or 4-D inputs with the corresponding outermost 2 scale values being 1 \\\r\n in the ${isResize ? 'Resize' : 'Upsample'} opeartor.`);\r\n }\r\n }\r\n};","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {env} from 'onnxruntime-common';\r\nimport {Logger, Profiler} from '../../instrument';\r\n\r\nimport {GlslPreprocessor} from './glsl-preprocessor';\r\nimport {getVertexShaderSource} from './glsl-source';\r\nimport {TextureLayoutStrategy} from './texture-layout-strategy';\r\nimport {Artifact, ProgramInfo, ProgramVariable, TextureData, TextureLayout, VariableInfo} from './types';\r\nimport {WebGLContext} from './webgl-context';\r\n\r\n/**\r\n * ProgramManager is the main class behind running computations\r\n * It builds ProgramInfo's into Artifacts\r\n * It compiles given ProgramInfo's into WebGL Prorams (cached as Artifacts)\r\n * Uses the artifact to run the computation by calling Draw on\r\n * the WebGL drawing buffer\r\n * ProgramManager automatically maps (binds) input variables to their\r\n * corresponding Location's in the binary program\r\n */\r\nexport class ProgramManager {\r\n repo: Map; // this should be per-session object\r\n vertexShader: WebGLShader;\r\n attributesBound: boolean;\r\n\r\n constructor(\r\n public profiler: Readonly, public glContext: WebGLContext,\r\n public textureLayoutStrategy: TextureLayoutStrategy) {\r\n this.repo = new Map();\r\n this.attributesBound = false;\r\n }\r\n getArtifact(key: unknown): Artifact|undefined {\r\n return this.repo.get(key);\r\n }\r\n setArtifact(key: unknown, artifact: Artifact): void {\r\n this.repo.set(key, artifact);\r\n }\r\n run(buildArtifact: Artifact, inputs: TextureData[], output: TextureData): void {\r\n this.profiler.event('op', `ProgramManager.run ${buildArtifact.programInfo.name ?? 'unknown kernel'}`, () => {\r\n const gl = this.glContext.gl;\r\n const program = buildArtifact.program;\r\n gl.useProgram(program);\r\n try {\r\n this.bindOutput(output);\r\n if (!this.attributesBound) {\r\n this.bindAttributes(buildArtifact.attribLocations);\r\n }\r\n this.bindUniforms(buildArtifact.uniformLocations, buildArtifact.programInfo.variables ?? [], inputs);\r\n } catch (err) {\r\n Logger.error('ProgramManager', buildArtifact.programInfo.shaderSource);\r\n throw err;\r\n }\r\n this.profiler.event('backend', 'GlContext.draw()', () => {\r\n this.glContext.draw();\r\n });\r\n }, this.glContext);\r\n }\r\n dispose(): void {\r\n if (this.vertexShader) {\r\n this.glContext.deleteShader(this.vertexShader);\r\n }\r\n this.repo.forEach(a => this.glContext.deleteProgram(a.program));\r\n }\r\n build(programInfo: ProgramInfo, inputTextureLayouts: TextureLayout[], outputTextureLayout: TextureLayout): Artifact {\r\n return this.profiler.event('backend', 'ProgramManager.build', () => {\r\n const preprocessor = new GlslPreprocessor(this.glContext, programInfo, inputTextureLayouts, outputTextureLayout);\r\n const fragScript = preprocessor.preprocess();\r\n const program = this.compile(fragScript);\r\n const artifact = {\r\n programInfo,\r\n program,\r\n uniformLocations: this.getUniformLocations(\r\n program, preprocessor.context.programInfo.inputNames, preprocessor.context.programInfo.variables),\r\n attribLocations: this.getAttribLocations(program)\r\n };\r\n return artifact;\r\n });\r\n }\r\n protected compile(fragShaderScript: string): WebGLProgram {\r\n if (!this.vertexShader) {\r\n Logger.verbose('ProrgramManager', 'Compiling and caching Vertex shader for the first time');\r\n const vertexShaderScript = getVertexShaderSource(this.glContext.version);\r\n this.vertexShader = this.glContext.compileShader(vertexShaderScript, this.glContext.gl.VERTEX_SHADER);\r\n }\r\n if (env.debug) {\r\n Logger.verbose('ProrgramManager', `FragShader:\r\n${fragShaderScript}\r\n`);\r\n }\r\n const fragShader = this.glContext.compileShader(fragShaderScript, this.glContext.gl.FRAGMENT_SHADER);\r\n const program = this.glContext.createProgram(this.vertexShader, fragShader);\r\n this.glContext.deleteShader(fragShader);\r\n return program;\r\n }\r\n bindOutput(td: TextureData): void {\r\n const width = td.width;\r\n const height = td.height;\r\n Logger.verbose(\r\n 'ProrgramManager',\r\n `Binding output texture to Framebuffer: w/h=${width}/${height}, shape=${td.shape}, type=${td.tensor.type}`);\r\n this.glContext.attachFramebuffer(td.texture, width, height);\r\n }\r\n bindAttributes(attribLocations: Artifact.AttribLocations): void {\r\n const positionHandle = attribLocations.position;\r\n const textureCoordHandle = attribLocations.textureCoord;\r\n this.glContext.setVertexAttributes(positionHandle, textureCoordHandle);\r\n this.attributesBound = true;\r\n }\r\n bindUniforms(uniformLocations: Artifact.UniformLocations, variables: ProgramVariable[], textures: TextureData[]):\r\n void {\r\n const gl = this.glContext.gl;\r\n let texturePosition = 0;\r\n for (const {name, type, location, arrayLength} of uniformLocations) {\r\n const value = variables.find(v => v.name === name)?.data;\r\n if (type !== 'sampler2D' && !value) {\r\n throw new Error(`variable '${name}' does not have data defined in program info`);\r\n }\r\n switch (type) {\r\n case 'sampler2D':\r\n this.bindTexture(textures[texturePosition], location, texturePosition);\r\n texturePosition++;\r\n break;\r\n case 'float':\r\n if (arrayLength) {\r\n gl.uniform1fv(location, value as number[]);\r\n } else {\r\n gl.uniform1f(location, value as number);\r\n }\r\n break;\r\n case 'int':\r\n if (arrayLength) {\r\n gl.uniform1iv(location, value as number[]);\r\n } else {\r\n gl.uniform1i(location, value as number);\r\n }\r\n break;\r\n default:\r\n throw new Error(`Uniform not implemented: ${type}`);\r\n }\r\n }\r\n }\r\n bindTexture(td: TextureData, uniformHandle: WebGLUniformLocation, position: number): void {\r\n this.glContext.bindTextureToUniform(td.texture, position, uniformHandle);\r\n }\r\n getAttribLocations(program: WebGLProgram): Artifact.AttribLocations {\r\n return {\r\n position: this.getAttribLocation(program, 'position'),\r\n textureCoord: this.getAttribLocation(program, 'textureCoord')\r\n };\r\n }\r\n getUniformLocations(program: WebGLProgram, samplers?: string[], variables?: VariableInfo[]):\r\n Artifact.UniformLocations {\r\n const uniformLocations: Artifact.UniformLocations = [];\r\n if (samplers) {\r\n for (const sampler of samplers) {\r\n uniformLocations.push({name: sampler, type: 'sampler2D', location: this.getUniformLocation(program, sampler)});\r\n }\r\n }\r\n if (variables) {\r\n for (const variable of variables) {\r\n uniformLocations.push({...variable, location: this.getUniformLocation(program, variable.name)});\r\n }\r\n }\r\n return uniformLocations;\r\n }\r\n getUniformLocation(program: WebGLProgram, name: string): WebGLUniformLocation {\r\n const gl = this.glContext.gl;\r\n const reference = gl.getUniformLocation(program, name);\r\n if (reference === null) {\r\n throw new Error(`Uniform ${name} not found.`);\r\n }\r\n return reference;\r\n }\r\n getAttribLocation(program: WebGLProgram, name: string): number {\r\n const gl = this.glContext.gl;\r\n const attributeLocation: number = gl.getAttribLocation(program, name);\r\n return attributeLocation;\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {SessionHandler} from '../../backend';\r\nimport {Graph} from '../../graph';\r\nimport {Logger} from '../../instrument';\r\nimport {Operator} from '../../operators';\r\nimport {OpSet, resolveOperator} from '../../opset';\r\nimport {Session} from '../../session';\r\nimport {Tensor} from '../../tensor';\r\nimport {WebGLBackend} from '../backend-webgl';\r\n\r\nimport {WebGLInferenceHandler} from './inference-handler';\r\nimport {WEBGL_OP_RESOLVE_RULES} from './op-resolve-rules';\r\nimport {ProgramManager} from './program-manager';\r\nimport {PreferLogicalStrategy, TextureLayoutStrategy} from './texture-layout-strategy';\r\nimport {TextureManager} from './texture-manager';\r\nimport {TextureData} from './types';\r\n\r\nexport class WebGLSessionHandler implements SessionHandler {\r\n programManager: ProgramManager;\r\n textureManager: TextureManager;\r\n layoutStrategy: TextureLayoutStrategy;\r\n packedTextureDataCache: Map;\r\n unpackedTextureDataCache: Map;\r\n pack2unpackMap: Map;\r\n unpack2packMap: Map;\r\n initializers: Set;\r\n pack?: boolean;\r\n\r\n constructor(public readonly backend: WebGLBackend, public readonly context: Session.Context) {\r\n this.layoutStrategy = new PreferLogicalStrategy(backend.glContext.maxTextureSize);\r\n this.programManager = new ProgramManager(this.context.profiler, backend.glContext, this.layoutStrategy);\r\n this.textureManager = new TextureManager(\r\n backend.glContext, this.layoutStrategy, this.context.profiler,\r\n {reuseTextures: backend.textureCacheMode === 'full'});\r\n this.packedTextureDataCache = new Map();\r\n this.unpackedTextureDataCache = new Map();\r\n this.pack = backend.pack;\r\n this.pack2unpackMap = new Map();\r\n this.unpack2packMap = new Map();\r\n }\r\n\r\n createInferenceHandler() {\r\n return new WebGLInferenceHandler(this);\r\n }\r\n onGraphInitialized(graph: Graph): void {\r\n const initializers = graph.getValues().filter(v => v.from === -1 && v.tensor).map(v => v.tensor!.dataId);\r\n this.initializers = new Set(initializers);\r\n }\r\n isInitializer(tensorId: Tensor.Id): boolean {\r\n return this.initializers ? this.initializers.has(tensorId) : false;\r\n }\r\n addInitializer(tensorId: Tensor.Id): void {\r\n this.initializers.add(tensorId);\r\n }\r\n getTextureData(tensorId: Tensor.Id, isPacked: boolean): TextureData|undefined {\r\n if (isPacked) {\r\n return this.packedTextureDataCache.get(tensorId);\r\n } else {\r\n return this.unpackedTextureDataCache.get(tensorId);\r\n }\r\n }\r\n setTextureData(tensorId: Tensor.Id, textureData: TextureData, isPacked = false): void {\r\n Logger.verbose('WebGLSessionHandler', 'Storing Texture data in cache');\r\n if (isPacked) {\r\n this.packedTextureDataCache.set(tensorId, textureData);\r\n } else {\r\n this.unpackedTextureDataCache.set(tensorId, textureData);\r\n }\r\n }\r\n dispose(): void {\r\n this.programManager.dispose();\r\n this.textureManager.clearActiveTextures();\r\n this.packedTextureDataCache.forEach(td => this.textureManager.releaseTexture(td, true));\r\n this.packedTextureDataCache = new Map();\r\n this.unpackedTextureDataCache.forEach(td => this.textureManager.releaseTexture(td, true));\r\n this.unpackedTextureDataCache = new Map();\r\n }\r\n resolve(node: Graph.Node, opsets: readonly OpSet[], graph: Graph): Operator {\r\n const op = resolveOperator(node, opsets, WEBGL_OP_RESOLVE_RULES);\r\n return {impl: op.opImpl, context: op.opInit ? op.opInit(node, graph) : node};\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Logger} from '../../instrument';\r\n\r\nexport declare namespace Encoder {\r\n export interface DataTypeMap {\r\n float: Float32Array;\r\n byte: Uint8Array;\r\n int: Uint32Array;\r\n }\r\n export type DataType = keyof DataTypeMap;\r\n type DataArrayType = DataTypeMap[DataType];\r\n\r\n /* eslint-disable @typescript-eslint/naming-convention */\r\n export const enum Usage {\r\n Default = 0,\r\n UploadOnly,\r\n Download4BytesAsFloat32,\r\n }\r\n}\r\n\r\n/**\r\n * Abstraction for mapping data types to texture texlets\r\n * Encoding means how a Float32 is mapped to 1 or 4 channels for each texlet\r\n * Decoding means how a texlet's channels are mapped to a resulting Float32\r\n */\r\nexport interface DataEncoder {\r\n internalFormat: number;\r\n format: number;\r\n textureType: number;\r\n channelSize: number;\r\n encode(src: Encoder.DataArrayType, textureSize: number): Encoder.DataArrayType;\r\n allocate(size: number): Encoder.DataArrayType;\r\n decode(buffer: Encoder.DataArrayType, dataSize: number): Encoder.DataArrayType;\r\n}\r\n/**\r\n * WebGL2 data encoder\r\n * Uses R32F as the format for texlet\r\n */\r\nexport class RedFloat32DataEncoder implements DataEncoder {\r\n internalFormat: number;\r\n format: number;\r\n textureType: number;\r\n channelSize: number;\r\n constructor(gl: WebGL2RenderingContext, channels = 1) {\r\n if (channels === 1) {\r\n this.internalFormat = gl.R32F;\r\n this.format = gl.RED;\r\n this.textureType = gl.FLOAT;\r\n this.channelSize = channels;\r\n } else if (channels === 4) {\r\n this.internalFormat = gl.RGBA32F;\r\n this.format = gl.RGBA;\r\n this.textureType = gl.FLOAT;\r\n this.channelSize = channels;\r\n } else {\r\n throw new Error(`Invalid number of channels: ${channels}`);\r\n }\r\n }\r\n encode(src: Encoder.DataArrayType, textureSize: number): Encoder.DataArrayType {\r\n let result: Float32Array;\r\n let source: Float32Array;\r\n if (src.constructor !== Float32Array) {\r\n Logger.warning('Encoder', 'data was not of type Float32; creating new Float32Array');\r\n source = new Float32Array(src);\r\n }\r\n if (textureSize * this.channelSize > src.length) {\r\n Logger.warning('Encoder', 'Source data too small. Allocating larger array');\r\n source = src as Float32Array;\r\n result = this.allocate(textureSize * this.channelSize) as Float32Array;\r\n source.forEach((v, i) => result[i] = v);\r\n } else {\r\n source = src as Float32Array;\r\n result = source;\r\n }\r\n return result;\r\n }\r\n allocate(size: number): Encoder.DataArrayType {\r\n return new Float32Array(size * 4);\r\n }\r\n decode(buffer: Encoder.DataArrayType, dataSize: number): Float32Array {\r\n if (this.channelSize === 1) {\r\n const filteredData = (buffer as Float32Array).filter((value, index) => index % 4 === 0).subarray(0, dataSize);\r\n return filteredData;\r\n }\r\n return buffer.subarray(0, dataSize) as Float32Array;\r\n }\r\n}\r\n/**\r\n * Data encoder for WebGL 1 with support for floating point texture\r\n */\r\nexport class RGBAFloatDataEncoder implements DataEncoder {\r\n internalFormat: number;\r\n format: number;\r\n textureType: number;\r\n channelSize: number;\r\n constructor(gl: WebGLRenderingContext, channels = 1, textureType?: number) {\r\n if (channels !== 1 && channels !== 4) {\r\n throw new Error(`Invalid number of channels: ${channels}`);\r\n }\r\n this.internalFormat = gl.RGBA;\r\n this.format = gl.RGBA;\r\n this.channelSize = channels;\r\n this.textureType = textureType || gl.FLOAT;\r\n }\r\n encode(src: Float32Array, textureSize: number): Encoder.DataArrayType {\r\n let dest = src;\r\n if (this.channelSize === 1) {\r\n Logger.verbose('Encoder', 'Exploding into a larger array');\r\n dest = this.allocate(textureSize) as Float32Array;\r\n src.forEach((v, i) => dest[i * 4] = v);\r\n }\r\n return dest;\r\n }\r\n allocate(size: number): Encoder.DataArrayType {\r\n return new Float32Array(size * 4);\r\n }\r\n decode(buffer: Encoder.DataArrayType, dataSize: number): Float32Array {\r\n if (this.channelSize === 1) {\r\n const filteredData = (buffer as Float32Array).filter((value, index) => index % 4 === 0).subarray(0, dataSize);\r\n return filteredData;\r\n }\r\n return buffer.subarray(0, dataSize) as Float32Array;\r\n }\r\n}\r\n\r\nexport class Uint8DataEncoder implements DataEncoder {\r\n internalFormat: number;\r\n format: number;\r\n textureType: number;\r\n channelSize = 4;\r\n constructor(gl: WebGLRenderingContext, channels = 1) {\r\n if (channels === 1) {\r\n this.internalFormat = gl.ALPHA;\r\n this.format = gl.ALPHA; // not tested\r\n this.textureType = gl.UNSIGNED_BYTE;\r\n this.channelSize = channels;\r\n } else if (channels === 4) {\r\n this.internalFormat = gl.RGBA;\r\n this.format = gl.RGBA;\r\n this.textureType = gl.UNSIGNED_BYTE;\r\n this.channelSize = channels;\r\n } else {\r\n throw new Error(`Invalid number of channels: ${channels}`);\r\n }\r\n }\r\n encode(src: Uint8Array, _textureSize: number): Encoder.DataArrayType {\r\n return new Uint8Array(src.buffer, src.byteOffset, src.byteLength);\r\n }\r\n allocate(size: number): Encoder.DataArrayType {\r\n return new Uint8Array(size * this.channelSize);\r\n }\r\n decode(buffer: Encoder.DataArrayType, dataSize: number): Uint8Array {\r\n if (buffer instanceof Uint8Array) {\r\n return buffer.subarray(0, dataSize);\r\n }\r\n throw new Error(`Invalid array type: ${buffer.constructor}`);\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Logger} from '../../instrument';\r\nimport {assert} from '../../util';\r\n/** Layout preferences */\r\nexport interface WidthHeightPrefs {\r\n breakAxis?: number;\r\n isPacked?: boolean;\r\n reverseWH?: boolean;\r\n}\r\n/**\r\n * TextureLayoutStrategy is an abstraction for different plans\r\n * for mapping n-dimensional arrays to 2D textures (and back)\r\n */\r\nexport interface TextureLayoutStrategy {\r\n computeTextureWH(shape: readonly number[], prefs?: WidthHeightPrefs): [number, number];\r\n}\r\n\r\n/**\r\n * This strategy try to find the minimal max(W,H) that fulfills (W * H == totalSize)\r\n */\r\nexport class AlwaysKeepOriginalSizeStrategy implements TextureLayoutStrategy {\r\n constructor(public maxTextureSize: number) {}\r\n computeTextureWH(shape: readonly number[], prefs?: WidthHeightPrefs): [number, number] {\r\n // scalar tensor\r\n if (shape.length === 0) {\r\n return [1, 1];\r\n }\r\n const maxTextureSize = this.maxTextureSize;\r\n if (prefs && prefs.breakAxis !== undefined) {\r\n // check to see if dims fit\r\n const wsize = prefs.breakAxis >= shape.length ? 1 : shape.slice(prefs.breakAxis).reduce((a, b) => a * b);\r\n const hsize = prefs.breakAxis <= 0 ? 1 : shape.slice(0, prefs.breakAxis).reduce((a, b) => a * b);\r\n if (wsize > maxTextureSize || hsize > maxTextureSize) {\r\n // ignore preferences\r\n // continue with default layout\r\n Logger.verbose(\r\n 'TextureLayout',\r\n `Given width/height preferences were unattainable: shape:${shape}, breakAxis:${prefs.breakAxis}`);\r\n } else {\r\n return [wsize, hsize];\r\n }\r\n }\r\n const totalSize = shape.reduce((a, b) => a * b);\r\n\r\n let width = Math.floor(Math.sqrt(totalSize));\r\n\r\n for (; width < maxTextureSize && width < totalSize; width++) {\r\n if (totalSize % width === 0) {\r\n break;\r\n }\r\n }\r\n\r\n if (width >= maxTextureSize || totalSize % width !== 0) {\r\n throw new Error(`The given dimensions are outside this GPU's boundaries: ${shape}`);\r\n }\r\n return [width, totalSize / width];\r\n }\r\n}\r\n\r\nexport class PreferLogicalStrategy implements TextureLayoutStrategy {\r\n constructor(public maxTextureSize: number) {}\r\n computeTextureWH(shape: readonly number[], prefs?: WidthHeightPrefs): [number, number] {\r\n const wh = this.computeTexture(shape, prefs);\r\n if (prefs && prefs.isPacked) {\r\n wh[0] /= 2;\r\n wh[1] /= 2;\r\n }\r\n if (prefs && prefs.reverseWH) {\r\n return [wh[1], wh[0]];\r\n }\r\n return wh;\r\n }\r\n\r\n computeTexture(shape: readonly number[], prefs?: WidthHeightPrefs): [number, number] {\r\n const isPacked = prefs && prefs.isPacked;\r\n // scalar tensor\r\n if (shape.length === 0) {\r\n return isPacked ? [2, 2] : [1, 1];\r\n }\r\n let maxTextureSize = this.maxTextureSize;\r\n if (prefs && prefs.breakAxis !== undefined) {\r\n // check to see if dims fit\r\n const wsize = prefs.breakAxis >= shape.length ? 1 : shape.slice(prefs.breakAxis).reduce((a, b) => a * b);\r\n const hsize = prefs.breakAxis <= 0 ? 1 : shape.slice(0, prefs.breakAxis).reduce((a, b) => a * b);\r\n if (wsize > maxTextureSize || hsize > maxTextureSize) {\r\n // ignore preferences\r\n // continue with default layout\r\n Logger.verbose(\r\n 'TextureLayout',\r\n `Given width/height preferences were unattainable: shape:${shape}, breakAxis:${prefs.breakAxis}`);\r\n } else {\r\n return [wsize, hsize];\r\n }\r\n }\r\n let logShape = shape.slice(0);\r\n if (isPacked) {\r\n maxTextureSize = maxTextureSize * 2;\r\n\r\n // This logic ensures we accurately count the number of packed texels needed\r\n // to accommodate the tensor. We can only pack values in the same texel if\r\n // they are from adjacent pairs of rows/cols within the same batch. So if a\r\n // tensor has 3 rows, we pretend it has 4 rows in order to account for the\r\n // fact that the texels containing the third row are half empty.\r\n logShape = logShape.map(\r\n (d, i) => i >= logShape.length - 2 ? (logShape[i] % 2 === 0 ? logShape[i] : logShape[i] + 1) : logShape[i]);\r\n\r\n // Packed texture height is at least 2 (the channel height of a single\r\n // texel).\r\n if (logShape.length === 1) {\r\n logShape = [2, logShape[0]];\r\n }\r\n }\r\n\r\n // If logical shape is 2, we don't squeeze, since we want to match physical.\r\n if (logShape.length !== 2) {\r\n const squeezeResult = squeezeShape(logShape);\r\n logShape = squeezeResult.newShape;\r\n }\r\n\r\n const size = sizeFromShape(logShape);\r\n if (logShape.length <= 1 && size <= maxTextureSize) {\r\n return [1, size];\r\n } else if (logShape.length === 2 && logShape[0] <= maxTextureSize && logShape[1] <= maxTextureSize) {\r\n return logShape as [number, number];\r\n } else if (logShape.length === 3 && logShape[0] * logShape[1] <= maxTextureSize && logShape[2] <= maxTextureSize) {\r\n return [logShape[0] * logShape[1], logShape[2]];\r\n } else if (logShape.length === 3 && logShape[0] <= maxTextureSize && logShape[1] * logShape[2] <= maxTextureSize) {\r\n return [logShape[0], logShape[1] * logShape[2]];\r\n } else if (\r\n logShape.length === 4 && logShape[0] * logShape[1] * logShape[2] <= maxTextureSize &&\r\n logShape[3] <= maxTextureSize) {\r\n return [logShape[0] * logShape[1] * logShape[2], logShape[3]];\r\n } else if (\r\n logShape.length === 4 && logShape[0] <= maxTextureSize &&\r\n logShape[1] * logShape[2] * logShape[3] <= maxTextureSize) {\r\n return [logShape[0], logShape[1] * logShape[2] * logShape[3]];\r\n } else {\r\n if (isPacked) {\r\n // For packed textures size equals the number of channels required to\r\n // accommodate the texture data. However in order to squarify such that\r\n // inner dimensions stay even, we rewrite size to equal the number of\r\n // texels. Then in the return statement we rehydrate the squarified\r\n // dimensions to channel units.\r\n return sizeToSquarishShape(size / 4).map(d => d * 2) as [number, number];\r\n }\r\n return sizeToSquarishShape(size);\r\n }\r\n }\r\n}\r\n\r\nexport function squeezeShape(shape: number[], axis?: number[]): {newShape: number[]; keptDims: number[]} {\r\n const newShape: number[] = [];\r\n const keptDims: number[] = [];\r\n const isEmptyArray = axis != null && Array.isArray(axis) && axis.length === 0;\r\n const axes = (axis == null || isEmptyArray) ? null : parseAxisParam(axis, shape).sort();\r\n let j = 0;\r\n for (let i = 0; i < shape.length; ++i) {\r\n if (axes != null) {\r\n if (axes[j] === i && shape[i] !== 1) {\r\n throw new Error(`Can't squeeze axis ${i} since its dim '${shape[i]}' is not 1`);\r\n }\r\n if ((axes[j] == null || axes[j] > i) && shape[i] === 1) {\r\n newShape.push(shape[i]);\r\n keptDims.push(i);\r\n }\r\n if (axes[j] <= i) {\r\n j++;\r\n }\r\n }\r\n if (shape[i] !== 1) {\r\n newShape.push(shape[i]);\r\n keptDims.push(i);\r\n }\r\n }\r\n return {newShape, keptDims};\r\n}\r\n\r\nexport function parseAxisParam(axis: number|number[], shape: number[]): number[] {\r\n const rank = shape.length;\r\n\r\n // Normalize input\r\n axis = axis == null ? shape.map((s, i) => i) : ([] as number[]).concat(axis);\r\n\r\n // Check for valid range\r\n assert(\r\n axis.every(ax => ax >= -rank && ax < rank),\r\n () => `All values in axis param must be in range [-${rank}, ${rank}) but ` +\r\n `got axis ${axis}`);\r\n\r\n // Check for only integers\r\n assert(\r\n axis.every(isInt),\r\n () => 'All values in axis param must be integers but ' +\r\n `got axis ${axis}`);\r\n\r\n // Handle negative axis.\r\n return axis.map(a => a < 0 ? rank + a : a);\r\n}\r\nexport function isInt(a: number): boolean {\r\n return a % 1 === 0;\r\n}\r\nexport function sizeFromShape(shape: number[]): number {\r\n if (shape.length === 0) {\r\n // Scalar.\r\n return 1;\r\n }\r\n let size = shape[0];\r\n for (let i = 1; i < shape.length; i++) {\r\n size *= shape[i];\r\n }\r\n return size;\r\n}\r\nexport function getRowsCols(shape: number[]): [number, number] {\r\n if (shape.length === 0) {\r\n throw Error('Cannot get rows and columns of an empty shape array.');\r\n }\r\n\r\n return [shape.length > 1 ? shape[shape.length - 2] : 1, shape[shape.length - 1]];\r\n}\r\nexport function sizeToSquarishShape(size: number): [number, number] {\r\n const width = Math.ceil(Math.sqrt(size));\r\n return [width, Math.ceil(size / width)];\r\n}\r\nexport function getBatchDim(shape: number[], dimsToSkip = 2): number {\r\n return sizeFromShape(shape.slice(0, shape.length - dimsToSkip));\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {ShapeUtil} from '../../util';\r\nimport {TextureLayoutStrategy, WidthHeightPrefs} from './texture-layout-strategy';\r\nimport {TextureLayout, TextureType} from './types';\r\n\r\nexport const createTextureLayoutFromTextureType =\r\n (textureLayoutStrategy: TextureLayoutStrategy, shape: readonly number[],\r\n textureType: TextureType): TextureLayout => {\r\n const channel = (textureType === TextureType.unpacked || textureType === TextureType.unpackedReversed) ? 1 : 4;\r\n const isPacked = textureType === TextureType.packed;\r\n const reverseWH = (textureType === TextureType.unpackedReversed || textureType === TextureType.packed);\r\n const breakAxis = textureType === TextureType.packedLastDimension ? shape.length - 1 : undefined;\r\n const unpackedShape = textureType === TextureType.packedLastDimension ?\r\n shape.map((d, i) => i === shape.length - 1 ? d * 4 : d) :\r\n undefined;\r\n return createTextureLayoutFromShape(\r\n textureLayoutStrategy, shape, channel, unpackedShape, {isPacked, reverseWH, breakAxis});\r\n };\r\n\r\nexport const calculateTextureWidthAndHeight =\r\n (textureLayoutStrategy: TextureLayoutStrategy, shape: readonly number[], textureType: TextureType):\r\n [number, number] => {\r\n const layout = createTextureLayoutFromTextureType(textureLayoutStrategy, shape, textureType);\r\n return [layout.width, layout.height];\r\n };\r\n\r\n/**\r\n * Create a TextureLayout object from shape.\r\n */\r\nexport const createTextureLayoutFromShape =\r\n (textureLayoutStrategy: TextureLayoutStrategy, shape: readonly number[], channels: 1|4 = 1,\r\n unpackedShape?: readonly number[], prefs?: WidthHeightPrefs): TextureLayout => {\r\n const isPacked = !!(prefs && prefs.isPacked);\r\n const [width, height] = textureLayoutStrategy.computeTextureWH(isPacked ? unpackedShape || shape : shape, prefs);\r\n const rank = shape.length;\r\n let inferredDims = shape.slice(0);\r\n if (rank === 0) {\r\n inferredDims = [1];\r\n }\r\n if (channels === 1) {\r\n // unpackedShape will take `shape` and not `inferredDims` so as to create a scalar Tensor if need be\r\n unpackedShape = shape;\r\n } else if (isPacked) {\r\n if (channels !== 4) {\r\n throw new Error('a packed texture must be 4-channel');\r\n }\r\n unpackedShape = shape;\r\n if (rank > 0) {\r\n inferredDims[rank - 1] = Math.ceil(inferredDims[rank - 1] / 2);\r\n }\r\n if (rank > 1) {\r\n inferredDims[rank - 2] = Math.ceil(inferredDims[rank - 2] / 2);\r\n }\r\n } else if (!unpackedShape) {\r\n throw new Error('Unpacked shape is needed when using channels > 1');\r\n }\r\n return {\r\n width,\r\n height,\r\n channels,\r\n isPacked,\r\n shape: inferredDims,\r\n strides: ShapeUtil.computeStrides(inferredDims),\r\n unpackedShape,\r\n reversedWH: (prefs && prefs.reverseWH)\r\n };\r\n };\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Logger, Profiler} from '../../instrument';\r\nimport {Tensor} from '../../tensor';\r\n\r\nimport {Encoder} from './texture-data-encoder';\r\nimport {TextureLayoutStrategy} from './texture-layout-strategy';\r\nimport {TextureData, TextureLayout} from './types';\r\nimport {WebGLContext} from './webgl-context';\r\n\r\nexport interface TextureManagerConfig {\r\n reuseTextures?: boolean;\r\n}\r\n\r\n/**\r\n * TextureManager is the mainly responsible for caching Textures\r\n * Textures are cached in 2 levels:\r\n * 1. the texures which are associated with a dataId (from Tensor)\r\n * Caching these is crucial to performance. These are In-use Textures\r\n * 2. textures which are not in use by any current ProgramInfo/Tensor\r\n * These are called Free Textures\r\n * TextureManager is also used to help creating textures. For this it\r\n * uses WebGLContext and TextureLayoutStrategy\r\n */\r\nexport class TextureManager {\r\n private readonly inUseTextures: Map;\r\n private readonly idleTextures: Map;\r\n private readonly textureLookup: Map;\r\n private readonly pendingRead: Map void>> = new Map();\r\n\r\n constructor(\r\n public glContext: WebGLContext, public layoutStrategy: TextureLayoutStrategy, public profiler: Readonly,\r\n private config: TextureManagerConfig) {\r\n if (config.reuseTextures) {\r\n this.inUseTextures = new Map();\r\n this.idleTextures = new Map();\r\n this.textureLookup = new Map();\r\n }\r\n }\r\n createTextureFromLayout(\r\n dataType: Tensor.DataType, layout: TextureLayout, data?: Tensor.NumberType, usage?: Encoder.Usage) {\r\n const textureDataType = this.toEncoderType(dataType);\r\n\r\n const encoder = this.glContext.getEncoder(textureDataType, layout.channels || 1, usage);\r\n if (layout.isPacked && usage === Encoder.Usage.UploadOnly) {\r\n throw new Error('not implemented');\r\n }\r\n const width = layout.width;\r\n const height = layout.height;\r\n\r\n let key: string|undefined;\r\n let inUseTextures: WebGLTexture[]|undefined;\r\n if (this.config.reuseTextures) {\r\n key = `${width}x${height}_${encoder.format}_${encoder.internalFormat}_${encoder.textureType}`;\r\n inUseTextures = this.inUseTextures.get(key);\r\n if (!inUseTextures) {\r\n inUseTextures = [];\r\n this.inUseTextures.set(key, inUseTextures);\r\n }\r\n\r\n const idleTextures = this.idleTextures.get(key);\r\n if (idleTextures && idleTextures.length > 0) {\r\n const texture = idleTextures.pop()!;\r\n inUseTextures.push(texture);\r\n if (usage === Encoder.Usage.UploadOnly) {\r\n this.glContext.updateTexture(texture, width, height, encoder, this.toTextureData(dataType, data)!);\r\n }\r\n return texture;\r\n }\r\n }\r\n\r\n Logger.verbose('TextureManager', `Creating new texture of size ${layout.width}x${layout.height}`);\r\n const texture = this.glContext.allocateTexture(width, height, encoder, this.toTextureData(dataType, data));\r\n\r\n if (this.config.reuseTextures) {\r\n inUseTextures!.push(texture);\r\n this.textureLookup.set(texture, key!);\r\n }\r\n return texture;\r\n }\r\n readTexture(td: TextureData, dataType: Tensor.DataType, channels?: number): Tensor.NumberType {\r\n if (!channels) {\r\n channels = 1;\r\n }\r\n return this.profiler.event('backend', 'TextureManager.readTexture', () => {\r\n const dataSize = td.shape.reduce((a, b) => a * b) * channels!;\r\n const data = this.glContext.readTexture(\r\n td.texture, td.width, td.height, dataSize, this.toEncoderType(dataType), channels!);\r\n return this.toTensorData(dataType, data);\r\n });\r\n }\r\n async readTextureAsync(td: TextureData, dataType: Tensor.DataType, channels?: number): Promise {\r\n const dataId = td.tensor.dataId;\r\n if (!channels) {\r\n channels = 1;\r\n }\r\n if (this.pendingRead.has(dataId)) {\r\n const subscribers = this.pendingRead.get(dataId);\r\n return new Promise(resolve => subscribers?.push(resolve));\r\n }\r\n return this.profiler.event('backend', 'TextureManager.readTextureAsync', async () => {\r\n this.pendingRead.set(dataId, []);\r\n const dataSize = td.shape.reduce((a, b) => a * b) * channels!;\r\n // add a fence waiting for the data to be ready\r\n await this.glContext.createAndWaitForFence();\r\n const data = this.glContext.readTexture(\r\n td.texture, td.width, td.height, dataSize, this.toEncoderType(dataType), channels!);\r\n const tensorData = this.toTensorData(dataType, data);\r\n const subscribers = this.pendingRead.get(dataId);\r\n this.pendingRead.delete(dataId);\r\n subscribers?.forEach(resolve => resolve(tensorData));\r\n return tensorData;\r\n });\r\n }\r\n readUint8TextureAsFloat(td: TextureData): Float32Array {\r\n return this.profiler.event('backend', 'TextureManager.readUint8TextureAsFloat', () => {\r\n const dataSize = td.shape.reduce((a, b) => a * b);\r\n const data = this.glContext.readTexture(td.texture, td.width, td.height, dataSize * 4, 'byte', 4);\r\n return new Float32Array(data.buffer, data.byteOffset, dataSize);\r\n });\r\n }\r\n releaseTexture(textureData: TextureData, deleteTexture?: boolean): void {\r\n let key: string|undefined;\r\n if (this.config.reuseTextures) {\r\n key = this.textureLookup.get(textureData.texture);\r\n if (key) {\r\n if (deleteTexture) {\r\n this.textureLookup.delete(key);\r\n }\r\n const inUseTextures = this.inUseTextures.get(key);\r\n if (inUseTextures) {\r\n const index = inUseTextures.indexOf(textureData.texture);\r\n if (index !== -1) {\r\n inUseTextures.splice(index, 1);\r\n let idleTextures = this.idleTextures.get(key);\r\n if (!idleTextures) {\r\n idleTextures = [];\r\n this.idleTextures.set(key, idleTextures);\r\n }\r\n idleTextures.push(textureData.texture);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!key || deleteTexture) {\r\n Logger.verbose('TextureManager', `Deleting texture of size ${textureData.width}x${textureData.height}`);\r\n this.glContext.deleteTexture(textureData.texture);\r\n }\r\n }\r\n toTensorData(dataType: Tensor.DataType, data: Encoder.DataArrayType): Tensor.NumberType {\r\n switch (dataType) {\r\n case 'int16':\r\n return data instanceof Int16Array ? data : Int16Array.from(data);\r\n case 'int32':\r\n return data instanceof Int32Array ? data : Int32Array.from(data);\r\n case 'int8':\r\n return data instanceof Int8Array ? data : Int8Array.from(data);\r\n case 'uint16':\r\n return data instanceof Uint16Array ? data : Uint16Array.from(data);\r\n case 'uint32':\r\n return data instanceof Uint32Array ? data : Uint32Array.from(data);\r\n case 'uint8':\r\n case 'bool':\r\n return data instanceof Uint8Array ? data : Uint8Array.from(data);\r\n case 'float32':\r\n return data instanceof Float32Array ? data : Float32Array.from(data);\r\n case 'float64':\r\n return data instanceof Float64Array ? data : Float64Array.from(data);\r\n default:\r\n throw new Error(`TensorData type ${dataType} is not supported`);\r\n }\r\n }\r\n toTextureData(dataType: Tensor.DataType, data: Tensor.NumberType|undefined): Encoder.DataArrayType|undefined {\r\n if (!data) {\r\n return undefined;\r\n }\r\n return (data instanceof Float32Array) ? data : new Float32Array(data);\r\n /*\r\n switch (dataType) {\r\n case 'int16':\r\n case 'int32':\r\n case 'uint16':\r\n case 'uint32':\r\n return (data.constructor === Uint32Array) ? data as Uint32Array : new Uint32Array(data);\r\n case 'int8':\r\n case 'uint8':\r\n case 'bool':\r\n return (data.constructor === Uint8Array) ? data as Uint8Array : new Uint8Array(data);\r\n case 'float32':\r\n case 'float64':\r\n return (data.constructor === Float32Array) ? data as Float32Array : new Float32Array(data);\r\n default:\r\n throw new Error(`TensorData type ${dataType} is not supported`);\r\n }\r\n */\r\n }\r\n toEncoderType(_dataType: Tensor.DataType): Encoder.DataType {\r\n return 'float';\r\n // switch (dataType) {\r\n // case 'int16':\r\n // case 'int32':\r\n // case 'uint16':\r\n // case 'uint32':\r\n // return 'int';\r\n // case 'uint8':\r\n // case 'bool':\r\n // return 'byte';\r\n // case 'float32':\r\n // case 'float64':\r\n // return 'float';\r\n // default:\r\n // throw new Error(`TensorData type ${dataType} is not supported`);\r\n // }\r\n }\r\n clearActiveTextures(): void {\r\n this.glContext.clearActiveTextures();\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Tensor} from '../../tensor';\r\n\r\n/**\r\n * Layout info is used for mapping n-dimensional array to 2D textures\r\n * The layout is created by the TextureLayoutStrategy based on\r\n * the Tensor's dimensions and strides\r\n */\r\nexport interface TextureLayout {\r\n width: number;\r\n height: number;\r\n /**\r\n * specify the number of value that encoded in a single pixel\r\n */\r\n channels: 1|2|3|4;\r\n /**\r\n * whether in packed mode or not\r\n */\r\n isPacked?: boolean;\r\n /**\r\n * the normalized shape\r\n */\r\n shape: readonly number[];\r\n /**\r\n * the stride of each dimensions, calculated according to shape\r\n */\r\n strides: readonly number[];\r\n /**\r\n * the original shape(dims) of the corresponding tensor\r\n */\r\n unpackedShape: readonly number[];\r\n\r\n reversedWH?: boolean;\r\n}\r\nexport interface TextureData extends TextureLayout {\r\n tensor: Tensor;\r\n texture: WebGLTexture;\r\n}\r\n\r\nexport enum TextureType {\r\n unpacked, // <-- normal unpacked texture\r\n unpackedReversed, // <-- unpacked texture used in old ONNX.js implementation (deprecated)\r\n packed, // <-- normal packed texture\r\n downloadUint8AsFloat, // <-- ONLY used in texture downloading for iOS devices\r\n packedLastDimension // <-- ONLY used in old ONNX.js Conv implementation for input W (deprecated)\r\n}\r\n\r\nexport interface TensorInfo {\r\n id?: Tensor.Id;\r\n dims: readonly number[];\r\n type: Tensor.DataType;\r\n textureType: TextureType;\r\n}\r\n\r\nexport interface ProgramVariable {\r\n type: 'float'|'int';\r\n name: string;\r\n arrayLength?: number;\r\n data: number|number[];\r\n}\r\n\r\n/**\r\n * A set of metadata of a shader program.\r\n */\r\nexport interface ProgramMetadata {\r\n /**\r\n * the name of the program. used for debugging and profiling\r\n */\r\n name: string;\r\n /**\r\n * texture types for each input\r\n */\r\n inputTypes: TextureType[];\r\n /**\r\n * names of each input\r\n */\r\n inputNames: string[];\r\n /**\r\n * an optional string as a cache hint in the artifact cache\r\n */\r\n cacheHint?: string;\r\n}\r\n\r\n/**\r\n * A ProgramInfoLoader allows\r\n */\r\nexport interface ProgramInfoLoader extends ProgramMetadata {\r\n /**\r\n * a function to get the program info\r\n */\r\n get(): ProgramInfo;\r\n}\r\n\r\n/**\r\n * A set of data that represent a shader program\r\n */\r\nexport interface ProgramInfo extends ProgramMetadata {\r\n /**\r\n * information of uniform variables\r\n */\r\n variables?: ProgramVariable[];\r\n /**\r\n * tensor info for output\r\n */\r\n output: TensorInfo;\r\n /**\r\n * the shader's processing source code\r\n */\r\n shaderSource: string;\r\n /**\r\n * whether the shader source contains a customized main function implementation\r\n */\r\n hasMain?: boolean;\r\n}\r\n\r\nexport interface VariableInfo {\r\n type: 'float'|'int';\r\n name: string;\r\n arrayLength?: number;\r\n}\r\n\r\nexport interface ProgramVariable {\r\n type: 'float'|'int';\r\n name: string;\r\n arrayLength?: number;\r\n data: number|number[];\r\n}\r\n\r\n/**\r\n * Information of uniforms that shader uses\r\n */\r\nexport interface UniformInfo {\r\n type: 'sampler2D'|VariableInfo['type'];\r\n name: string;\r\n arrayLength?: number;\r\n}\r\n\r\nexport interface UniformLocation extends UniformInfo {\r\n location: WebGLUniformLocation;\r\n}\r\n\r\n/**\r\n * Artifact is the result of compilation\r\n * It does not contain input of output data\r\n * However anything that could be run as a \"program\"\r\n */\r\nexport interface Artifact {\r\n programInfo: ProgramInfo;\r\n program: WebGLProgram;\r\n uniformLocations: UniformLocation[];\r\n attribLocations: {position: number; textureCoord: number};\r\n}\r\nexport declare namespace Artifact {\r\n type UniformLocations = Artifact['uniformLocations'];\r\n type AttribLocations = Artifact['attribLocations'];\r\n}\r\n\r\nexport interface UniformData {\r\n [name: string]: number|number[];\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {assert} from '../../util';\r\n/**\r\n * Given a non RGBA shape calculate the R version\r\n * It is assumed that the dimensions are multiples of given channels\r\n * NOTE: it is always the last dim that gets packed.\r\n * @param unpackedShape original shape to create a packed version from\r\n */\r\nexport function getPackedShape(unpackedShape: readonly number[]): readonly number[] {\r\n const len = unpackedShape.length;\r\n return unpackedShape.slice(0, len - 1).concat(unpackedShape[len - 1] / 4);\r\n}\r\n\r\nexport async function repeatedTry(\r\n checkFn: () => boolean, delayFn = (_counter: number) => 0, maxCounter?: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n let tryCount = 0;\r\n\r\n const tryFn = () => {\r\n if (checkFn()) {\r\n resolve();\r\n return;\r\n }\r\n\r\n tryCount++;\r\n\r\n const nextBackoff = delayFn(tryCount);\r\n\r\n if (maxCounter != null && tryCount >= maxCounter) {\r\n reject();\r\n return;\r\n }\r\n setTimeout(tryFn, nextBackoff);\r\n };\r\n\r\n tryFn();\r\n });\r\n}\r\n\r\n/**\r\n * Generates the function name from an input sampler name.\r\n * @param samplerName Name of the sampler.\r\n */\r\nexport function generateShaderFuncNameFromInputSamplerName(samplerName: string): string {\r\n assert(typeof samplerName !== 'undefined' && samplerName.length !== 0, () => 'empty string found for sampler name');\r\n return 'get' + samplerName.charAt(0).toUpperCase() + samplerName.slice(1);\r\n}\r\n\r\n/**\r\n * Generates the function name from an input sampler name at output coordinates.\r\n * @param samplerName Name of the sampler.\r\n */\r\nexport function generateShaderFuncNameFromInputSamplerNameAtOutCoords(samplerName: string): string {\r\n assert(typeof samplerName !== 'undefined' && samplerName.length !== 0, () => 'empty string found for sampler name');\r\n return 'get' + samplerName.charAt(0).toUpperCase() + samplerName.slice(1) + 'AtOutCoords';\r\n}\r\n\r\n/** Returns a new input shape (a copy) that has a squeezed logical shape. */\r\nexport function squeezeInputShape(inputShape: readonly number[], squeezedShape: number[]): number[] {\r\n // Deep copy.\r\n let newInputShape: number[] = JSON.parse(JSON.stringify(inputShape));\r\n newInputShape = squeezedShape;\r\n return newInputShape;\r\n}\r\n\r\n/** Returns a list of squeezed parameters for shader functions */\r\nexport function getSqueezedParams(params: string[], keptDims: number[]): string {\r\n return keptDims.map(d => params[d]).join(', ');\r\n}\r\n\r\n/** Returns the data type for different ranks. */\r\nexport function getCoordsDataType(rank: number): string {\r\n if (rank <= 1) {\r\n return 'int';\r\n } else if (rank === 2) {\r\n return 'ivec2';\r\n } else if (rank === 3) {\r\n return 'ivec3';\r\n } else if (rank === 4) {\r\n return 'ivec4';\r\n } else if (rank === 5) {\r\n return 'ivec5';\r\n } else if (rank === 6) {\r\n return 'ivec6';\r\n } else {\r\n throw Error(`GPU for rank ${rank} is not yet supported`);\r\n }\r\n}\r\n\r\nexport function getGlChannels(rank = 6): string[] {\r\n return ['x', 'y', 'z', 'w', 'u', 'v'].slice(0, rank);\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Logger} from '../../instrument';\r\n\r\nimport {WebGLContext} from './webgl-context';\r\n\r\nconst cache: {[contextId: string]: WebGLContext} = {};\r\n\r\n/**\r\n * This factory function creates proper WebGLRenderingContext based on\r\n * the current browsers capabilities\r\n * The order is from higher/most recent versions to most basic\r\n */\r\nexport function createWebGLContext(contextId?: 'webgl'|'webgl2'): WebGLContext {\r\n let context: WebGLContext|undefined;\r\n if ((!contextId || contextId === 'webgl2') && 'webgl2' in cache) {\r\n context = cache.webgl2;\r\n } else if ((!contextId || contextId === 'webgl') && 'webgl' in cache) {\r\n context = cache.webgl;\r\n }\r\n\r\n context = context || createNewWebGLContext(contextId);\r\n contextId = contextId || context.version === 1 ? 'webgl' : 'webgl2';\r\n const gl = context.gl;\r\n\r\n cache[contextId] = context;\r\n\r\n if (gl.isContextLost()) {\r\n delete cache[contextId];\r\n return createWebGLContext(contextId);\r\n }\r\n\r\n gl.disable(gl.DEPTH_TEST);\r\n gl.disable(gl.STENCIL_TEST);\r\n gl.disable(gl.BLEND);\r\n gl.disable(gl.DITHER);\r\n gl.disable(gl.POLYGON_OFFSET_FILL);\r\n gl.disable(gl.SAMPLE_COVERAGE);\r\n gl.enable(gl.SCISSOR_TEST);\r\n gl.enable(gl.CULL_FACE);\r\n gl.cullFace(gl.BACK);\r\n\r\n return context;\r\n}\r\n\r\nexport function createNewWebGLContext(contextId?: 'webgl'|'webgl2'): WebGLContext {\r\n const canvas = createCanvas();\r\n const contextAttributes: WebGLContextAttributes = {\r\n alpha: false,\r\n depth: false,\r\n antialias: false,\r\n stencil: false,\r\n preserveDrawingBuffer: false,\r\n premultipliedAlpha: false,\r\n failIfMajorPerformanceCaveat: false\r\n };\r\n let gl: WebGLRenderingContext|null;\r\n const ca = contextAttributes;\r\n if (!contextId || contextId === 'webgl2') {\r\n gl = canvas.getContext('webgl2', ca);\r\n if (gl) {\r\n try {\r\n return new WebGLContext(gl, 2);\r\n } catch (err) {\r\n Logger.warning('GlContextFactory', `failed to create WebGLContext using contextId 'webgl2'. Error: ${err}`);\r\n }\r\n }\r\n }\r\n if (!contextId || contextId === 'webgl') {\r\n gl = canvas.getContext('webgl', ca) || canvas.getContext('experimental-webgl', ca) as WebGLRenderingContext;\r\n if (gl) {\r\n try {\r\n return new WebGLContext(gl, 1);\r\n } catch (err) {\r\n Logger.warning(\r\n 'GlContextFactory',\r\n `failed to create WebGLContext using contextId 'webgl' or 'experimental-webgl'. Error: ${err}`);\r\n }\r\n }\r\n }\r\n\r\n throw new Error('WebGL is not supported');\r\n}\r\n\r\nfunction createCanvas(): HTMLCanvasElement {\r\n const canvas: HTMLCanvasElement = document.createElement('canvas');\r\n canvas.width = 1;\r\n canvas.height = 1;\r\n return canvas;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {env} from 'onnxruntime-common';\r\n\r\nimport * as DataEncoders from './texture-data-encoder';\r\nimport {DataEncoder, Encoder} from './texture-data-encoder';\r\nimport {repeatedTry} from './utils';\r\n\r\nexport interface FenceContext {\r\n query: WebGLSync|null;\r\n isFencePassed(): boolean;\r\n}\r\n\r\ntype PollItem = {\r\n isDoneFn: () => boolean; resolveFn: () => void;\r\n};\r\n\r\nexport function linearSearchLastTrue(arr: Array<() => boolean>): number {\r\n let i = 0;\r\n for (; i < arr.length; ++i) {\r\n const isDone = arr[i]();\r\n if (!isDone) {\r\n break;\r\n }\r\n }\r\n return i - 1;\r\n}\r\n\r\n/**\r\n * Abstraction and wrapper around WebGLRenderingContext and its operations\r\n */\r\nexport class WebGLContext {\r\n gl: WebGLRenderingContext;\r\n version: 1|2;\r\n\r\n private vertexbuffer: WebGLBuffer;\r\n private framebuffer: WebGLFramebuffer;\r\n\r\n // WebGL flags and vital parameters\r\n private isFloatTextureAttachableToFrameBuffer: boolean;\r\n isFloat32DownloadSupported: boolean;\r\n isRenderFloat32Supported: boolean;\r\n isBlendSupported: boolean;\r\n maxTextureSize: number;\r\n // private maxCombinedTextureImageUnits: number;\r\n private maxTextureImageUnits: number;\r\n // private maxCubeMapTextureSize: number;\r\n // private shadingLanguageVersion: string;\r\n // private webglVendor: string;\r\n // private webglVersion: string;\r\n\r\n // WebGL2 flags and vital parameters\r\n // private max3DTextureSize: number;\r\n // private maxArrayTextureLayers: number;\r\n // private maxColorAttachments: number;\r\n // private maxDrawBuffers: number;\r\n\r\n // WebGL extensions\r\n // eslint-disable-next-line camelcase\r\n textureFloatExtension: OES_texture_float|null;\r\n // eslint-disable-next-line camelcase\r\n textureHalfFloatExtension: OES_texture_half_float|null;\r\n\r\n // WebGL2 extensions\r\n colorBufferFloatExtension: unknown|null;\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n disjointTimerQueryWebgl2Extension: {TIME_ELAPSED_EXT: GLenum; GPU_DISJOINT_EXT: GLenum}|null;\r\n\r\n private disposed: boolean;\r\n private frameBufferBound = false;\r\n\r\n constructor(gl: WebGLRenderingContext, version: 1|2) {\r\n this.gl = gl;\r\n this.version = version;\r\n\r\n this.getExtensions();\r\n this.vertexbuffer = this.createVertexbuffer();\r\n this.framebuffer = this.createFramebuffer();\r\n this.queryVitalParameters();\r\n }\r\n\r\n allocateTexture(width: number, height: number, encoder: DataEncoder, data?: Encoder.DataArrayType): WebGLTexture {\r\n const gl = this.gl;\r\n // create the texture\r\n const texture = gl.createTexture();\r\n // bind the texture so the following methods effect this texture.\r\n gl.bindTexture(gl.TEXTURE_2D, texture);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n const buffer = data ? encoder.encode(data, width * height) : null;\r\n gl.texImage2D(\r\n gl.TEXTURE_2D,\r\n 0, // Level of detail.\r\n encoder.internalFormat, width, height,\r\n 0, // Always 0 in OpenGL ES.\r\n encoder.format, encoder.textureType, buffer);\r\n this.checkError();\r\n return texture as WebGLTexture;\r\n }\r\n updateTexture(\r\n texture: WebGLTexture, width: number, height: number, encoder: DataEncoder, data: Encoder.DataArrayType): void {\r\n const gl = this.gl;\r\n gl.bindTexture(gl.TEXTURE_2D, texture);\r\n const buffer = encoder.encode(data, width * height);\r\n gl.texSubImage2D(\r\n gl.TEXTURE_2D,\r\n 0, // level\r\n 0, // xoffset\r\n 0, // yoffset\r\n width, height, encoder.format, encoder.textureType, buffer);\r\n this.checkError();\r\n }\r\n attachFramebuffer(texture: WebGLTexture, width: number, height: number): void {\r\n const gl = this.gl;\r\n // Make it the target for framebuffer operations - including rendering.\r\n gl.bindTexture(gl.TEXTURE_2D, texture);\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);\r\n gl.framebufferTexture2D(\r\n gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture,\r\n 0); // 0, we aren't using MIPMAPs\r\n this.checkError();\r\n gl.viewport(0, 0, width, height);\r\n gl.scissor(0, 0, width, height);\r\n }\r\n readTexture(\r\n texture: WebGLTexture, width: number, height: number, dataSize: number, dataType: Encoder.DataType,\r\n channels: number): Encoder.DataArrayType {\r\n const gl = this.gl;\r\n if (!channels) {\r\n channels = 1;\r\n }\r\n if (!this.frameBufferBound) {\r\n this.attachFramebuffer(texture, width, height);\r\n }\r\n const encoder = this.getEncoder(dataType, channels);\r\n const buffer = encoder.allocate(width * height);\r\n // bind texture to framebuffer\r\n gl.bindTexture(gl.TEXTURE_2D, texture);\r\n gl.framebufferTexture2D(\r\n gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture,\r\n 0); // 0, we aren't using MIPMAPs\r\n // TODO: Check if framebuffer is ready\r\n gl.readPixels(0, 0, width, height, gl.RGBA, encoder.textureType, buffer);\r\n this.checkError();\r\n // unbind FB\r\n return encoder.decode(buffer, dataSize);\r\n }\r\n\r\n isFramebufferReady(): boolean {\r\n // TODO: Implement logic to check if the framebuffer is ready\r\n return true;\r\n }\r\n getActiveTexture(): string {\r\n const gl = this.gl;\r\n const n = gl.getParameter(this.gl.ACTIVE_TEXTURE);\r\n return `TEXTURE${(n - gl.TEXTURE0)}`;\r\n }\r\n getTextureBinding(): WebGLTexture {\r\n return this.gl.getParameter(this.gl.TEXTURE_BINDING_2D);\r\n }\r\n getFramebufferBinding(): WebGLFramebuffer {\r\n return this.gl.getParameter(this.gl.FRAMEBUFFER_BINDING);\r\n }\r\n setVertexAttributes(positionHandle: number, textureCoordHandle: number): void {\r\n const gl = this.gl;\r\n gl.vertexAttribPointer(positionHandle, 3, gl.FLOAT, false, 20, 0);\r\n gl.enableVertexAttribArray(positionHandle);\r\n if (textureCoordHandle !== -1) {\r\n gl.vertexAttribPointer(textureCoordHandle, 2, gl.FLOAT, false, 20, 12);\r\n gl.enableVertexAttribArray(textureCoordHandle);\r\n }\r\n this.checkError();\r\n }\r\n createProgram(\r\n vertexShader: WebGLShader,\r\n fragShader: WebGLShader,\r\n ): WebGLProgram {\r\n const gl = this.gl;\r\n const program = gl.createProgram()!;\r\n\r\n // the program consists of our shaders\r\n gl.attachShader(program, vertexShader);\r\n gl.attachShader(program, fragShader);\r\n gl.linkProgram(program);\r\n return program;\r\n }\r\n compileShader(shaderSource: string, shaderType: number): WebGLShader {\r\n const gl = this.gl;\r\n const shader = gl.createShader(shaderType);\r\n if (!shader) {\r\n throw new Error(`createShader() returned null with type ${shaderType}`);\r\n }\r\n\r\n gl.shaderSource(shader, shaderSource);\r\n gl.compileShader(shader);\r\n if (gl.getShaderParameter(shader, gl.COMPILE_STATUS) === false) {\r\n throw new Error(`Failed to compile shader: ${gl.getShaderInfoLog(shader)}\r\nShader source:\r\n${shaderSource}`);\r\n }\r\n return shader;\r\n }\r\n deleteShader(shader: WebGLShader): void {\r\n this.gl.deleteShader(shader);\r\n }\r\n bindTextureToUniform(texture: WebGLTexture, position: number, uniformHandle: WebGLUniformLocation): void {\r\n const gl = this.gl;\r\n gl.activeTexture(gl.TEXTURE0 + position);\r\n this.checkError();\r\n gl.bindTexture(gl.TEXTURE_2D, texture);\r\n this.checkError();\r\n gl.uniform1i(uniformHandle, position);\r\n this.checkError();\r\n }\r\n draw(): void {\r\n this.gl.drawArrays(this.gl.TRIANGLE_STRIP, 0, 4);\r\n this.checkError();\r\n }\r\n checkError(): void {\r\n if (env.debug) {\r\n const gl = this.gl;\r\n const error = gl.getError();\r\n let label = '';\r\n switch (error) {\r\n case (gl.NO_ERROR):\r\n return;\r\n case (gl.INVALID_ENUM):\r\n label = 'INVALID_ENUM';\r\n break;\r\n case (gl.INVALID_VALUE):\r\n label = 'INVALID_VALUE';\r\n break;\r\n case (gl.INVALID_OPERATION):\r\n label = 'INVALID_OPERATION';\r\n break;\r\n case (gl.INVALID_FRAMEBUFFER_OPERATION):\r\n label = 'INVALID_FRAMEBUFFER_OPERATION';\r\n break;\r\n case (gl.OUT_OF_MEMORY):\r\n label = 'OUT_OF_MEMORY';\r\n break;\r\n case (gl.CONTEXT_LOST_WEBGL):\r\n label = 'CONTEXT_LOST_WEBGL';\r\n break;\r\n default:\r\n label = `Unknown WebGL Error: ${error.toString(16)}`;\r\n }\r\n throw new Error(label);\r\n }\r\n }\r\n deleteTexture(texture: WebGLTexture): void {\r\n this.gl.deleteTexture(texture);\r\n }\r\n deleteProgram(program: WebGLProgram): void {\r\n this.gl.deleteProgram(program);\r\n }\r\n getEncoder(dataType: Encoder.DataType, channels: number, usage: Encoder.Usage = Encoder.Usage.Default): DataEncoder {\r\n if (this.version === 2) {\r\n return new DataEncoders.RedFloat32DataEncoder(this.gl as WebGL2RenderingContext, channels);\r\n }\r\n\r\n switch (dataType) {\r\n case 'float':\r\n if (usage === Encoder.Usage.UploadOnly || this.isRenderFloat32Supported) {\r\n return new DataEncoders.RGBAFloatDataEncoder(this.gl, channels);\r\n } else {\r\n return new DataEncoders.RGBAFloatDataEncoder(\r\n this.gl, channels, this.textureHalfFloatExtension!.HALF_FLOAT_OES);\r\n }\r\n case 'int':\r\n throw new Error('not implemented');\r\n case 'byte':\r\n return new DataEncoders.Uint8DataEncoder(this.gl, channels);\r\n default:\r\n throw new Error(`Invalid dataType: ${dataType}`);\r\n }\r\n }\r\n clearActiveTextures(): void {\r\n const gl = this.gl;\r\n for (let unit = 0; unit < this.maxTextureImageUnits; ++unit) {\r\n gl.activeTexture(gl.TEXTURE0 + unit);\r\n gl.bindTexture(gl.TEXTURE_2D, null);\r\n }\r\n }\r\n dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n const gl = this.gl;\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n gl.deleteFramebuffer(this.framebuffer);\r\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\r\n gl.deleteBuffer(this.vertexbuffer);\r\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\r\n gl.finish();\r\n this.disposed = true;\r\n }\r\n\r\n private createDefaultGeometry(): Float32Array {\r\n // Sets of x,y,z(=0),s,t coordinates.\r\n return new Float32Array([\r\n -1.0, 1.0, 0.0, 0.0, 1.0, // upper left\r\n -1.0, -1.0, 0.0, 0.0, 0.0, // lower left\r\n 1.0, 1.0, 0.0, 1.0, 1.0, // upper right\r\n 1.0, -1.0, 0.0, 1.0, 0.0 // lower right\r\n ]);\r\n }\r\n private createVertexbuffer(): WebGLBuffer {\r\n const gl = this.gl;\r\n const buffer = gl.createBuffer();\r\n if (!buffer) {\r\n throw new Error('createBuffer() returned null');\r\n }\r\n const geometry = this.createDefaultGeometry();\r\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\r\n gl.bufferData(gl.ARRAY_BUFFER, geometry, gl.STATIC_DRAW);\r\n this.checkError();\r\n return buffer;\r\n }\r\n private createFramebuffer(): WebGLFramebuffer {\r\n const fb = this.gl.createFramebuffer();\r\n if (!fb) {\r\n throw new Error('createFramebuffer returned null');\r\n }\r\n return fb;\r\n }\r\n\r\n private queryVitalParameters(): void {\r\n const gl = this.gl;\r\n\r\n this.isFloatTextureAttachableToFrameBuffer = this.checkFloatTextureAttachableToFrameBuffer();\r\n this.isRenderFloat32Supported = this.checkRenderFloat32();\r\n this.isFloat32DownloadSupported = this.checkFloat32Download();\r\n\r\n if (this.version === 1 && !this.textureHalfFloatExtension && !this.isRenderFloat32Supported) {\r\n throw new Error('both float32 and float16 TextureType are not supported');\r\n }\r\n\r\n this.isBlendSupported = !this.isRenderFloat32Supported || this.checkFloat32Blend();\r\n\r\n // this.maxCombinedTextureImageUnits = gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS);\r\n this.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\r\n this.maxTextureImageUnits = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);\r\n // this.maxCubeMapTextureSize = gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE);\r\n // this.shadingLanguageVersion = gl.getParameter(gl.SHADING_LANGUAGE_VERSION);\r\n // this.webglVendor = gl.getParameter(gl.VENDOR);\r\n // this.webglVersion = gl.getParameter(gl.VERSION);\r\n\r\n if (this.version === 2) {\r\n // this.max3DTextureSize = gl.getParameter(WebGL2RenderingContext.MAX_3D_TEXTURE_SIZE);\r\n // this.maxArrayTextureLayers = gl.getParameter(WebGL2RenderingContext.MAX_ARRAY_TEXTURE_LAYERS);\r\n // this.maxColorAttachments = gl.getParameter(WebGL2RenderingContext.MAX_COLOR_ATTACHMENTS);\r\n // this.maxDrawBuffers = gl.getParameter(WebGL2RenderingContext.MAX_DRAW_BUFFERS);\r\n }\r\n }\r\n private getExtensions(): void {\r\n if (this.version === 2) {\r\n this.colorBufferFloatExtension = this.gl.getExtension('EXT_color_buffer_float');\r\n this.disjointTimerQueryWebgl2Extension = this.gl.getExtension('EXT_disjoint_timer_query_webgl2');\r\n } else {\r\n this.textureFloatExtension = this.gl.getExtension('OES_texture_float');\r\n this.textureHalfFloatExtension = this.gl.getExtension('OES_texture_half_float');\r\n }\r\n }\r\n\r\n private checkFloatTextureAttachableToFrameBuffer(): boolean {\r\n // test whether Float32 texture is supported:\r\n // STEP.1 create a float texture\r\n const gl = this.gl;\r\n const texture = gl.createTexture();\r\n gl.bindTexture(gl.TEXTURE_2D, texture);\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const internalFormat = this.version === 2 ? (gl as unknown as {RGBA32F: number}).RGBA32F : gl.RGBA;\r\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, 1, 1, 0, gl.RGBA, gl.FLOAT, null);\r\n // STEP.2 bind a frame buffer\r\n const frameBuffer = gl.createFramebuffer();\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\r\n // STEP.3 attach texture to framebuffer\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\r\n // STEP.4 test whether framebuffer is complete\r\n const isComplete = gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE;\r\n gl.bindTexture(gl.TEXTURE_2D, null);\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n gl.deleteTexture(texture);\r\n gl.deleteFramebuffer(frameBuffer);\r\n return isComplete;\r\n }\r\n\r\n private checkRenderFloat32(): boolean {\r\n if (this.version === 2) {\r\n if (!this.colorBufferFloatExtension) {\r\n return false;\r\n }\r\n } else {\r\n if (!this.textureFloatExtension) {\r\n return false;\r\n }\r\n }\r\n return this.isFloatTextureAttachableToFrameBuffer;\r\n }\r\n\r\n private checkFloat32Download(): boolean {\r\n if (this.version === 2) {\r\n if (!this.colorBufferFloatExtension) {\r\n return false;\r\n }\r\n } else {\r\n if (!this.textureFloatExtension) {\r\n return false;\r\n }\r\n if (!this.gl.getExtension('WEBGL_color_buffer_float')) {\r\n return false;\r\n }\r\n }\r\n return this.isFloatTextureAttachableToFrameBuffer;\r\n }\r\n\r\n /**\r\n * Check whether GL_BLEND is supported\r\n */\r\n private checkFloat32Blend(): boolean {\r\n // it looks like currently (2019-05-08) there is no easy way to detect whether BLEND is supported\r\n // https://github.com/microsoft/onnxjs/issues/145\r\n\r\n const gl = this.gl;\r\n\r\n let texture: WebGLTexture|null|undefined;\r\n let frameBuffer: WebGLFramebuffer|null|undefined;\r\n let vertexShader: WebGLShader|null|undefined;\r\n let fragmentShader: WebGLShader|null|undefined;\r\n let program: WebGLProgram|null|undefined;\r\n\r\n try {\r\n texture = gl.createTexture();\r\n frameBuffer = gl.createFramebuffer();\r\n gl.bindTexture(gl.TEXTURE_2D, texture);\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const internalFormat = this.version === 2 ? (gl as unknown as {RGBA32F: number}).RGBA32F : gl.RGBA;\r\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, 1, 1, 0, gl.RGBA, gl.FLOAT, null);\r\n\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\r\n\r\n gl.enable(gl.BLEND);\r\n\r\n vertexShader = gl.createShader(gl.VERTEX_SHADER);\r\n if (!vertexShader) {\r\n return false;\r\n }\r\n gl.shaderSource(vertexShader, 'void main(){}');\r\n gl.compileShader(vertexShader);\r\n\r\n fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\r\n if (!fragmentShader) {\r\n return false;\r\n }\r\n gl.shaderSource(fragmentShader, 'precision highp float;void main(){gl_FragColor=vec4(0.5);}');\r\n gl.compileShader(fragmentShader);\r\n\r\n program = gl.createProgram();\r\n if (!program) {\r\n return false;\r\n }\r\n gl.attachShader(program, vertexShader);\r\n gl.attachShader(program, fragmentShader);\r\n gl.linkProgram(program);\r\n gl.useProgram(program);\r\n\r\n gl.drawArrays(gl.POINTS, 0, 1);\r\n return gl.getError() === gl.NO_ERROR;\r\n\r\n } finally {\r\n gl.disable(gl.BLEND);\r\n\r\n if (program) {\r\n gl.deleteProgram(program);\r\n }\r\n if (vertexShader) {\r\n gl.deleteShader(vertexShader);\r\n }\r\n if (fragmentShader) {\r\n gl.deleteShader(fragmentShader);\r\n }\r\n if (frameBuffer) {\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n gl.deleteFramebuffer(frameBuffer);\r\n }\r\n if (texture) {\r\n gl.bindTexture(gl.TEXTURE_2D, null);\r\n gl.deleteTexture(texture);\r\n }\r\n }\r\n }\r\n\r\n beginTimer(): WebGLQuery {\r\n if (this.version === 2 && this.disjointTimerQueryWebgl2Extension) {\r\n const gl2 = this.gl as WebGL2RenderingContext;\r\n const ext = this.disjointTimerQueryWebgl2Extension;\r\n\r\n const query = gl2.createQuery() as WebGLQuery;\r\n gl2.beginQuery(ext.TIME_ELAPSED_EXT, query);\r\n return query;\r\n } else {\r\n // TODO: add webgl 1 handling.\r\n throw new Error('WebGL1 profiling currently not supported.');\r\n }\r\n }\r\n\r\n endTimer() {\r\n if (this.version === 2 && this.disjointTimerQueryWebgl2Extension) {\r\n const gl2 = this.gl as WebGL2RenderingContext;\r\n const ext = this.disjointTimerQueryWebgl2Extension;\r\n gl2.endQuery(ext.TIME_ELAPSED_EXT);\r\n return;\r\n } else {\r\n // TODO: add webgl 1 handling.\r\n throw new Error('WebGL1 profiling currently not supported');\r\n }\r\n }\r\n\r\n isTimerResultAvailable(query: WebGLQuery): boolean {\r\n let available = false, disjoint = false;\r\n if (this.version === 2 && this.disjointTimerQueryWebgl2Extension) {\r\n const gl2 = this.gl as WebGL2RenderingContext;\r\n const ext = this.disjointTimerQueryWebgl2Extension;\r\n\r\n available = gl2.getQueryParameter(query, gl2.QUERY_RESULT_AVAILABLE);\r\n disjoint = gl2.getParameter(ext.GPU_DISJOINT_EXT);\r\n } else {\r\n // TODO: add webgl 1 handling.\r\n throw new Error('WebGL1 profiling currently not supported');\r\n }\r\n\r\n return available && !disjoint;\r\n }\r\n\r\n getTimerResult(query: WebGLQuery): number {\r\n let timeElapsed = 0;\r\n if (this.version === 2) {\r\n const gl2 = this.gl as WebGL2RenderingContext;\r\n timeElapsed = gl2.getQueryParameter(query, gl2.QUERY_RESULT);\r\n gl2.deleteQuery(query);\r\n } else {\r\n // TODO: add webgl 1 handling.\r\n throw new Error('WebGL1 profiling currently not supported');\r\n }\r\n // return miliseconds\r\n return timeElapsed / 1000000;\r\n }\r\n\r\n async waitForQueryAndGetTime(query: WebGLQuery): Promise {\r\n await repeatedTry(() => this.isTimerResultAvailable(query));\r\n return this.getTimerResult(query);\r\n }\r\n\r\n public async createAndWaitForFence(): Promise {\r\n const fenceContext = this.createFence(this.gl);\r\n return this.pollFence(fenceContext);\r\n }\r\n\r\n private createFence(gl: WebGLRenderingContext): FenceContext {\r\n let isFencePassed: () => boolean;\r\n const gl2 = gl as WebGL2RenderingContext;\r\n const query = gl2.fenceSync(gl2.SYNC_GPU_COMMANDS_COMPLETE, 0);\r\n gl.flush();\r\n if (query === null) {\r\n isFencePassed = () => true;\r\n } else {\r\n isFencePassed = () => {\r\n const status = gl2.clientWaitSync(query, 0, 0);\r\n return status === gl2.ALREADY_SIGNALED || status === gl2.CONDITION_SATISFIED;\r\n };\r\n }\r\n return {query, isFencePassed};\r\n }\r\n\r\n async pollFence(fenceContext: FenceContext) {\r\n return new Promise(resolve => {\r\n void this.addItemToPoll(() => fenceContext.isFencePassed(), () => resolve());\r\n });\r\n }\r\n\r\n private itemsToPoll: PollItem[] = [];\r\n\r\n pollItems(): void {\r\n // Find the last query that has finished.\r\n const index = linearSearchLastTrue(this.itemsToPoll.map(x => x.isDoneFn));\r\n for (let i = 0; i <= index; ++i) {\r\n const {resolveFn} = this.itemsToPoll[i];\r\n resolveFn();\r\n }\r\n this.itemsToPoll = this.itemsToPoll.slice(index + 1);\r\n }\r\n\r\n private async addItemToPoll(isDoneFn: () => boolean, resolveFn: () => void) {\r\n this.itemsToPoll.push({isDoneFn, resolveFn});\r\n if (this.itemsToPoll.length > 1) {\r\n // We already have a running loop that polls.\r\n return;\r\n }\r\n // Start a new loop that polls.\r\n await repeatedTry(() => {\r\n this.pollItems();\r\n // End the loop if no more items to poll.\r\n return this.itemsToPoll.length === 0;\r\n });\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {SessionHandler} from './backend';\r\nimport {Graph} from './graph';\r\nimport {Logger, Profiler} from './instrument';\r\nimport {Operator} from './operators';\r\nimport {Tensor} from './tensor';\r\n\r\nclass KernelOp {\r\n constructor(public op: Operator, public node: Graph.Node) {}\r\n}\r\n\r\nexport class ExecutionPlan {\r\n constructor(private graph: Graph, ops: Operator[], private profiler: Readonly) {\r\n this.initialize(ops);\r\n }\r\n\r\n initialize(ops: Operator[]) {\r\n this.profiler.event('session', 'ExecutionPlan.initialize', () => {\r\n const graphNodes = this.graph.getNodes();\r\n if (graphNodes.length !== ops.length) {\r\n throw new Error('The size of nodes and OPs do not match.');\r\n }\r\n\r\n this._ops = ops.map((op, i) => new KernelOp(op, graphNodes[i]));\r\n this.reset();\r\n\r\n // look for starter node(s)\r\n this._starter = [];\r\n this._ops.forEach((op, i) => {\r\n let resolved = true;\r\n for (const input of op.node.inputs) {\r\n if (\r\n !this._values[input] // not an initialized input\r\n && this.graph.getInputIndices().indexOf(input) === -1 // not model input\r\n ) {\r\n resolved = false;\r\n break;\r\n }\r\n }\r\n if (resolved) {\r\n this._starter.push(i);\r\n }\r\n });\r\n });\r\n }\r\n\r\n reset() {\r\n this._values = this.graph.getValues().map(i => i.tensor);\r\n }\r\n\r\n async execute(sessionHandler: SessionHandler, modelInputs: Tensor[]): Promise {\r\n return this.profiler.event('session', 'ExecutionPlan.execute', async () => {\r\n // reset mediem result\r\n this.reset();\r\n\r\n // create inference handler\r\n const inferenceHandler = sessionHandler.createInferenceHandler();\r\n\r\n // populate inputs value\r\n const graphInputs = this.graph.getInputIndices();\r\n if (modelInputs.length !== graphInputs.length) {\r\n throw new Error(`number of input tensors don't match the number of inputs to the model: actual: ${\r\n modelInputs.length} expected: ${graphInputs.length}`);\r\n }\r\n\r\n modelInputs.forEach((input, i) => {\r\n const index = graphInputs[i];\r\n this._values[index] = input;\r\n });\r\n\r\n // prepare running sequence\r\n const sequence: number[] = this._starter.slice(0);\r\n\r\n // execution iterations\r\n const graphValues = this.graph.getValues();\r\n const graphNodes = this.graph.getNodes();\r\n\r\n let rear = 0;\r\n while (rear < sequence.length) {\r\n const thisOpIndex = sequence[rear++];\r\n const thisOp = this._ops[thisOpIndex];\r\n\r\n // check input\r\n const inputList = thisOp.node.inputs.map(i => this._values[i]);\r\n if (inputList.indexOf(undefined) !== -1) {\r\n throw new Error(`unresolved input detected: op: ${thisOp.node}`);\r\n }\r\n\r\n // run\r\n const inputTensors = inputList as Tensor[];\r\n Logger.verbose(\r\n 'ExecPlan',\r\n `Runing op:${thisOp.node.name} (${\r\n inputTensors.map((t, i) => `'${thisOp.node.inputs[i]}': ${t.type}[${t.dims.join(',')}]`).join(', ')})`);\r\n\r\n const outputList = await this.profiler.event(\r\n 'node', thisOp.node.name, async () => thisOp.op.impl(inferenceHandler, inputTensors, thisOp.op.context));\r\n\r\n // check output\r\n if (outputList.length !== thisOp.node.outputs.length) {\r\n throw new Error('the size of output does not match model definition.');\r\n }\r\n\r\n // fill value\r\n outputList.forEach((output, i) => {\r\n const j = thisOp.node.outputs[i];\r\n if (this._values[j]) {\r\n throw new Error(`output [${j}] already has value: op:${thisOp.node.name}`);\r\n }\r\n this._values[j] = output;\r\n });\r\n\r\n // resolve downstream nodes\r\n const downstreamNodes = new Set();\r\n outputList.forEach((output, i) => {\r\n const j = thisOp.node.outputs[i];\r\n for (const currentDownstreamNodeIndex of graphValues[j].to) {\r\n const currentDownstreamNode = graphNodes[currentDownstreamNodeIndex];\r\n let resolved = true;\r\n for (const k of currentDownstreamNode.inputs) {\r\n if (!this._values[k]) {\r\n resolved = false;\r\n break;\r\n }\r\n }\r\n if (resolved) {\r\n downstreamNodes.add(currentDownstreamNodeIndex);\r\n }\r\n }\r\n });\r\n sequence.push(...downstreamNodes);\r\n }\r\n\r\n const output: Tensor[] = [];\r\n for (let i = 0; i < this.graph.getOutputIndices().length; i++) {\r\n const outputIndex = this.graph.getOutputIndices()[i];\r\n const outputTensor = this._values[outputIndex];\r\n if (outputTensor === undefined) {\r\n throw new Error(`required output [${outputIndex}] does not have value`);\r\n }\r\n if (outputIndex === 0) {\r\n await outputTensor.getData();\r\n } else {\r\n // eslint-disable-next-line no-unused-expressions\r\n outputTensor.data;\r\n }\r\n output.push(outputTensor);\r\n }\r\n Logger.verbose('ExecPlan', 'disposing of inferenceHandler');\r\n inferenceHandler.dispose();\r\n return output;\r\n });\r\n }\r\n\r\n _values: Array;\r\n _ops: KernelOp[];\r\n _starter: number[];\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {onnx} from 'onnx-proto';\r\n\r\nimport {Attribute} from './attribute';\r\nimport {onnxruntime} from './ort-schema/ort-generated';\r\nimport ortFbs = onnxruntime.experimental.fbs;\r\nimport {Tensor} from './tensor';\r\nimport {LongUtil, ProtoUtil, MIN_CLIP, MAX_CLIP} from './util';\r\n\r\nexport declare namespace Graph {\r\n export interface Shape {\r\n readonly dims: readonly number[];\r\n }\r\n export interface ValueType {\r\n readonly tensorType: Tensor.DataType;\r\n readonly shape: Shape;\r\n }\r\n export interface Value {\r\n // the tensor data. empty for non-initialized inputs\r\n readonly tensor?: Tensor;\r\n\r\n // index to the Node where the value comes from. -1 for initializer.\r\n readonly from: number;\r\n\r\n // indices to the Nodes where the values go to.\r\n readonly to: readonly number[];\r\n\r\n // value type specification. empty for non-input values.\r\n readonly type?: ValueType;\r\n }\r\n export interface Node {\r\n // name of the node\r\n readonly name: string;\r\n\r\n // the operator type\r\n readonly opType: string;\r\n\r\n // indices to the Values where the inputs come from.\r\n readonly inputs: readonly number[];\r\n\r\n // indices to the Values where the outpus go to.\r\n readonly outputs: readonly number[];\r\n\r\n // the attributes that used by the operator\r\n readonly attributes: Attribute;\r\n }\r\n\r\n /**\r\n * a Transformer is an instance that allows all possible transformation operations that applied to a graph\r\n */\r\n export interface Transformer {\r\n removeAllIdentityNodes(): void;\r\n removeAllDropoutNodes(): void;\r\n fuseConvActivationNodes(): void;\r\n // TODO: add generic functions to manipulate the graph\r\n }\r\n\r\n // an initializer can use transformer to transform the graph\r\n export interface Initializer {\r\n transformGraph(transformer: Transformer): void;\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-redeclare\r\nexport interface Graph {\r\n getInputIndices(): readonly number[];\r\n getInputNames(): readonly string[];\r\n getOutputIndices(): readonly number[];\r\n getOutputNames(): readonly string[];\r\n getValues(): readonly Graph.Value[];\r\n getNodes(): readonly Graph.Node[];\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-redeclare\r\nexport const Graph = {\r\n /**\r\n * construct a graph from a graph protobuf type\r\n */\r\n from: (graphProto: onnx.IGraphProto|ortFbs.Graph, initializer?: Graph.Initializer) =>\r\n new GraphImpl(graphProto, initializer),\r\n};\r\n\r\nclass Value implements Graph.Value {\r\n constructor(valueInfo?: onnx.IValueInfoProto) {\r\n this._from = undefined;\r\n this._to = [];\r\n this.tensor = undefined;\r\n this.type = undefined;\r\n\r\n if (valueInfo) {\r\n this.type = ProtoUtil.tensorValueTypeFromProto(valueInfo.type!.tensorType!);\r\n }\r\n }\r\n\r\n _from?: number; // -1 represent from initializer\r\n get from() {\r\n return this._from!;\r\n }\r\n _to: number[];\r\n get to() {\r\n return this._to;\r\n }\r\n type?: Graph.ValueType;\r\n tensor?: Tensor;\r\n}\r\n\r\nclass Node implements Graph.Node {\r\n constructor(_nodeProto: onnx.INodeProto|ortFbs.Node, name?: string) {\r\n if (_nodeProto instanceof onnx.NodeProto) {\r\n this.name = _nodeProto.name;\r\n this.opType = _nodeProto.opType;\r\n this.attributes = new Attribute(_nodeProto.attribute);\r\n } else if (_nodeProto instanceof ortFbs.Node) {\r\n this.name = name ?? _nodeProto.name()!;\r\n this.opType = _nodeProto.opType()!;\r\n this.attributes = new Attribute(ProtoUtil.tensorAttributesFromORTFormat(_nodeProto));\r\n }\r\n\r\n this.inputs = [];\r\n this.outputs = [];\r\n this.executeNode = true;\r\n }\r\n\r\n name: string;\r\n opType: string;\r\n inputs: number[];\r\n outputs: number[];\r\n attributes: Attribute;\r\n executeNode: boolean;\r\n}\r\n\r\nclass GraphImpl implements Graph, Graph.Transformer {\r\n private _allData: Value[];\r\n\r\n private _allInputIndices: number[];\r\n private _allInputNames: string[];\r\n\r\n private _allOutputIndices: number[];\r\n private _allOutputNames: string[];\r\n\r\n private _nodes: Node[];\r\n\r\n constructor(graph: onnx.IGraphProto|ortFbs.Graph, graphInitializer?: Graph.Initializer) {\r\n if (!graph) {\r\n throw new TypeError('graph is empty');\r\n }\r\n\r\n // build the graph - will throw exceptions if something fatal is detected\r\n this.buildGraph(graph);\r\n\r\n // execute any transformation logic for the graph (if applicable)\r\n this.transformGraph(graphInitializer);\r\n\r\n // check for cycles and other inconsistencies - will throw exceptions if something fatal is detected\r\n this.checkIsAcyclic();\r\n }\r\n\r\n getInputIndices(): readonly number[] {\r\n return this._allInputIndices;\r\n }\r\n\r\n getInputNames(): readonly string[] {\r\n return this._allInputNames;\r\n }\r\n\r\n getOutputIndices(): readonly number[] {\r\n return this._allOutputIndices;\r\n }\r\n\r\n getOutputNames(): readonly string[] {\r\n return this._allOutputNames;\r\n }\r\n\r\n getValues(): readonly Graph.Value[] {\r\n return this._allData;\r\n }\r\n\r\n getNodes(): readonly Graph.Node[] {\r\n return this._nodes;\r\n }\r\n\r\n private buildGraph(graph: onnx.IGraphProto|ortFbs.Graph) {\r\n // build the graph - will throw exceptions if something fatal is detected\r\n if (graph instanceof onnx.GraphProto) {\r\n this.buildGraphFromOnnxFormat(graph);\r\n } else if (graph instanceof ortFbs.Graph) {\r\n this.buildGraphFromOrtFormat(graph);\r\n } else {\r\n throw new TypeError('Graph type is not supported.');\r\n }\r\n }\r\n private buildGraphFromOnnxFormat(graph: onnx.IGraphProto) {\r\n const dataIndices = new Map();\r\n this._allData = [];\r\n\r\n this._allInputIndices = [];\r\n this._allInputNames = [];\r\n\r\n this._allOutputIndices = [];\r\n this._allOutputNames = [];\r\n\r\n this._nodes = [];\r\n\r\n const nodesIndices = new Map();\r\n\r\n // scan all inputs\r\n if (!graph.input) {\r\n throw new Error('missing information in graph: input');\r\n }\r\n const inputValueNames = [];\r\n for (const i of graph.input) {\r\n if (dataIndices.has(i.name!)) {\r\n throw new Error(`duplicated input name: ${i.name}`);\r\n }\r\n const currentIndex = this._allData.push(new Value(i)) - 1;\r\n dataIndices.set(i.name!, currentIndex);\r\n inputValueNames.push(i.name!);\r\n }\r\n\r\n // scan all initializers\r\n if (!graph.initializer) {\r\n throw new Error('missing information in graph: initializer');\r\n }\r\n for (const i of graph.initializer) {\r\n let index = dataIndices.get(i.name!);\r\n if (index === undefined) {\r\n const value = new Value();\r\n value.type = {\r\n shape: {dims: ProtoUtil.tensorDimsFromProto(i.dims!)},\r\n tensorType: ProtoUtil.tensorDataTypeFromProto(i.dataType!)\r\n };\r\n index = this._allData.push(value) - 1;\r\n dataIndices.set(i.name!, index);\r\n }\r\n this._allData[index]._from = -1;\r\n this._allData[index].tensor = Tensor.fromProto(i);\r\n }\r\n\r\n // filter out input indices\r\n for (let i = 0; i < this._allData.length; i++) {\r\n if (!this._allData[i].tensor) {\r\n this._allInputIndices.push(i);\r\n this._allInputNames.push(inputValueNames[i]);\r\n }\r\n }\r\n\r\n // scan all outputs\r\n if (!graph.output) {\r\n throw new Error('missing information in graph: output');\r\n }\r\n for (const i of graph.output) {\r\n if (dataIndices.has(i.name!)) {\r\n throw new Error(`duplicated output name: ${i.name}`);\r\n }\r\n const currentIndex = this._allData.push(new Value(i)) - 1;\r\n dataIndices.set(i.name!, currentIndex);\r\n this._allOutputIndices.push(currentIndex);\r\n this._allOutputNames.push(i.name!);\r\n }\r\n\r\n // scan all nodes\r\n if (!graph.node) {\r\n throw new Error('missing information in graph: node');\r\n }\r\n for (const nodeProto of graph.node) {\r\n if (!nodeProto.name) {\r\n // assign a name to the node if it doesn't have one\r\n for (let pick = 0;; pick++) {\r\n const name = `unnamed_${nodeProto.opType}_${pick}`;\r\n if (!nodesIndices.has(name)) {\r\n nodeProto.name = name;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (nodesIndices.has(nodeProto.name)) {\r\n throw new Error(`duplicated node name: ${nodeProto.name}`);\r\n }\r\n const currentIndex = this._nodes.push(new Node(nodeProto)) - 1;\r\n nodesIndices.set(nodeProto.name, currentIndex);\r\n }\r\n\r\n // scan node's outputs\r\n for (let i = 0; i < this._nodes.length; i++) {\r\n const node = this._nodes[i];\r\n const nodeProto = graph.node[i];\r\n if (!nodeProto.output) {\r\n throw new Error(`missing output for node: ${nodeProto.name}`);\r\n }\r\n for (const output of nodeProto.output) {\r\n let dataIndex = dataIndices.get(output);\r\n if (typeof dataIndex === 'undefined') {\r\n dataIndex = this._allData.push(new Value()) - 1;\r\n dataIndices.set(output, dataIndex);\r\n }\r\n node.outputs.push(dataIndex);\r\n\r\n if (this._allData[dataIndex]._from !== undefined) {\r\n throw new Error(`multiple nodes output to one data value: ${dataIndex}`);\r\n }\r\n this._allData[dataIndex]._from = i;\r\n\r\n // for the 'Constant' operator, just create a new edge in the graph corresponding to the 'output' of the\r\n // operator and ignore the node from the graph\r\n if (nodeProto.opType === 'Constant') {\r\n if (!nodeProto.attribute || nodeProto.attribute.length !== 1 || !nodeProto.attribute[0].t) {\r\n throw new Error('missing attributes or missing tensor value in attributes for this Constant operator');\r\n }\r\n if (!nodeProto.output || nodeProto.output.length !== 1) {\r\n throw new Error('missing output or incorrect number of outputs for this Constant operator');\r\n }\r\n node.outputs.pop();\r\n node.executeNode = false;\r\n\r\n this._allData[dataIndex]._from = -1;\r\n this._allData[dataIndex].tensor = Tensor.fromProto(nodeProto.attribute[0].t);\r\n }\r\n }\r\n }\r\n\r\n // scan node's inputs\r\n for (let i = 0; i < this._nodes.length; i++) {\r\n const node = this._nodes[i];\r\n const nodeProto = graph.node[i];\r\n\r\n if (!nodeProto.input) {\r\n throw new Error(`missing input for node: ${nodeProto.name}`);\r\n }\r\n for (const input of nodeProto.input) {\r\n const dataIndex = dataIndices.get(input);\r\n if (typeof dataIndex === 'undefined') {\r\n throw new Error(`unrecognized input '${input}' for node: ${nodeProto.name}`);\r\n }\r\n node.inputs.push(dataIndex);\r\n\r\n this._allData[dataIndex]._to.push(i);\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private buildGraphFromOrtFormat(graph: ortFbs.Graph) {\r\n const dataIndices = new Map();\r\n this._allData = [];\r\n\r\n this._allInputIndices = [];\r\n this._allInputNames = [];\r\n\r\n this._allOutputIndices = [];\r\n this._allOutputNames = [];\r\n\r\n this._nodes = [];\r\n\r\n const nodesIndices = new Map();\r\n\r\n // scan all inputs\r\n const inputValueNames = [];\r\n for (let i = 0; i < graph.inputsLength(); i++) {\r\n const inputName = graph.inputs(i);\r\n if (dataIndices.has(inputName)) {\r\n throw new Error(`duplicated input name: ${inputName}`);\r\n }\r\n // Find the input typeInfo from nodeargs\r\n for (let j = 0; j < graph.nodeArgsLength(); j++) {\r\n if (graph.nodeArgs(j)?.name() === inputName) {\r\n const value = new Value();\r\n const valueType = graph.nodeArgs(j)?.type()?.valueType();\r\n if (valueType !== ortFbs.TypeInfoValue.tensor_type) {\r\n throw new Error('Unexpected value type for the nodeArg.');\r\n }\r\n const valueInfo = graph.nodeArgs(j)!.type()!.value(new ortFbs.TensorTypeAndShape())!;\r\n const type = ProtoUtil.tensorDataTypeFromProto(valueInfo.elemType());\r\n const shape = valueInfo.shape()!;\r\n const dims = [];\r\n for (let k = 0; k < shape.dimLength()!; k++) {\r\n dims.push(LongUtil.longToNumber(shape.dim(k)!.value()!.dimValue()!));\r\n }\r\n value.type = {shape: {dims}, tensorType: type};\r\n const currentIndex = this._allData.push(value) - 1;\r\n dataIndices.set(inputName, currentIndex);\r\n inputValueNames.push(inputName);\r\n }\r\n }\r\n }\r\n // check initializers\r\n for (let i = 0; i < graph.initializersLength(); i++) {\r\n const initializer = graph.initializers(i)!;\r\n let index = dataIndices.get(initializer.name()!);\r\n if (index === undefined) {\r\n const value = new Value();\r\n const dims = ProtoUtil.tensorDimsFromORTFormat(initializer);\r\n const type = ProtoUtil.tensorDataTypeFromProto(initializer.dataType());\r\n value.type = {shape: {dims}, tensorType: type};\r\n index = this._allData.push(value) - 1;\r\n dataIndices.set(initializer.name()!, index);\r\n }\r\n this._allData[index]._from = -1;\r\n this._allData[index].tensor = Tensor.fromOrtTensor(initializer);\r\n }\r\n\r\n // filter out input indices\r\n for (let i = 0; i < this._allData.length; i++) {\r\n if (!this._allData[i].tensor) {\r\n this._allInputIndices.push(i);\r\n this._allInputNames.push(inputValueNames[i]);\r\n }\r\n }\r\n\r\n // scan all outputs\r\n for (let i = 0; i < graph.outputsLength(); i++) {\r\n const outputName = graph.outputs(i);\r\n if (dataIndices.has(outputName)) {\r\n throw new Error(`duplicated output name: ${outputName}`);\r\n }\r\n const currentIndex = this._allData.push(new Value()) - 1;\r\n dataIndices.set(outputName, currentIndex);\r\n this._allOutputIndices.push(currentIndex);\r\n this._allOutputNames.push(outputName);\r\n }\r\n\r\n // scan all nodes\r\n if (!graph.nodes) {\r\n throw new Error('missing information in graph: node');\r\n }\r\n for (let i = 0; i < graph.nodesLength(); i++) {\r\n const nodeProto = graph.nodes(i);\r\n let name = nodeProto!.name();\r\n if (!name) {\r\n // assign a name to the node if it doesn't have one\r\n for (let pick = 0;; pick++) {\r\n name = `unnamed_${nodeProto!.opType()}_${pick}`;\r\n if (!nodesIndices.has(name)) {\r\n // an unique name is found. break.\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (nodesIndices.has(name)) {\r\n throw new Error(`duplicated node name: ${name}`);\r\n }\r\n const currentIndex = this._nodes.push(new Node(nodeProto!, name)) - 1;\r\n nodesIndices.set(name, currentIndex);\r\n }\r\n\r\n // scan node's outputs\r\n for (let i = 0; i < this._nodes.length; i++) {\r\n const node = this._nodes[i];\r\n const nodeProto = graph.nodes(i);\r\n if (nodeProto == null) {\r\n throw new Error(`No node exists at index ${i}`);\r\n }\r\n if (nodeProto?.outputsLength() === 0) {\r\n throw new Error(`missing output for node: ${nodeProto.name}`);\r\n }\r\n for (let j = 0; j < nodeProto?.outputsLength(); j++) {\r\n const output = nodeProto?.outputs(j);\r\n let dataIndex = dataIndices.get(output);\r\n if (typeof dataIndex === 'undefined') {\r\n dataIndex = this._allData.push(new Value()) - 1;\r\n dataIndices.set(output, dataIndex);\r\n }\r\n node.outputs.push(dataIndex);\r\n\r\n if (this._allData[dataIndex]._from !== undefined) {\r\n throw new Error(`multiple nodes output to one data value: ${dataIndex}`);\r\n }\r\n this._allData[dataIndex]._from = i;\r\n\r\n // for the 'Constant' operator, just create a new edge in the graph corresponding to the 'output' of the\r\n // operator and ignore the node from the graph\r\n if (nodeProto.opType() === 'Constant') {\r\n if (nodeProto.attributesLength() !== 1 || !nodeProto.attributes(0)!.t()) {\r\n throw new Error('missing attributes or missing tensor value in attributes for this Constant operator');\r\n }\r\n if (nodeProto.outputsLength() !== 1) {\r\n throw new Error('missing output or incorrect number of outputs for this Constant operator');\r\n }\r\n node.outputs.pop();\r\n node.executeNode = false;\r\n\r\n this._allData[dataIndex]._from = -1;\r\n this._allData[dataIndex].tensor = Tensor.fromOrtTensor(nodeProto.attributes(0)!.t()!);\r\n }\r\n }\r\n }\r\n\r\n // scan node's inputs\r\n for (let i = 0; i < this._nodes.length; i++) {\r\n const node = this._nodes[i];\r\n const nodeProto = graph.nodes(i)!;\r\n\r\n if (nodeProto.inputsLength() === 0) {\r\n throw new Error(`missing input for node: ${nodeProto.name}`);\r\n }\r\n for (let j = 0; j < nodeProto.inputsLength()!; j++) {\r\n const input = nodeProto.inputs(j)!;\r\n const dataIndex = dataIndices.get(input);\r\n if (typeof dataIndex === 'undefined') {\r\n throw new Error(`unrecognized input '${input}' for node: ${nodeProto!.name()}`);\r\n }\r\n node.inputs.push(dataIndex);\r\n\r\n this._allData[dataIndex]._to.push(i);\r\n }\r\n }\r\n }\r\n\r\n private checkIsAcyclic() {\r\n // go through the graph and check for cycles or other fatal inconsistencies\r\n const starters: Set = new Set();\r\n this._allInputIndices.forEach(i => {\r\n const data = this._allData[i];\r\n data._to.forEach(j => {\r\n starters.add(j);\r\n });\r\n });\r\n\r\n // Iterative DFS to check for cycles\r\n const nodesStack = Array.from(starters);\r\n const nodesState = new Array(this._nodes.length).fill('white');\r\n\r\n while (nodesStack.length > 0) {\r\n const nodeIndex = nodesStack.pop()!;\r\n // this node has now been processed completely. Mark this node 'black' to denote this.\r\n if (nodesState[nodeIndex] === 'gray') {\r\n nodesState[nodeIndex] = 'black';\r\n } else {\r\n // this node is under processing stage. mark this node 'gray' to denote this.\r\n nodesStack.push(nodeIndex);\r\n nodesState[nodeIndex] = 'gray';\r\n\r\n this._nodes[nodeIndex].outputs.forEach((outgoingEdgeIndex) => {\r\n const data = this._allData[outgoingEdgeIndex];\r\n if (typeof data.tensor !== 'undefined') {\r\n throw new Error('node outputs should not be initialized');\r\n }\r\n if (data._from !== nodeIndex) {\r\n throw new Error('from property of the Value object doesn\\'t match index of Node being processed');\r\n }\r\n data._to.forEach((downstreamNodeIndex) => {\r\n // back edge found - cyclic\r\n if (nodesState[downstreamNodeIndex] === 'gray') {\r\n throw new Error('model graph is cyclic');\r\n }\r\n // tree edge found - continue processing by adding it to stack\r\n else if (nodesState[downstreamNodeIndex] === 'white') {\r\n nodesStack.push(downstreamNodeIndex);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n private transformGraph(graphInitializer?: Graph.Initializer): void {\r\n // apply common transform\r\n this.removeAllIdentityNodes();\r\n this.removeAllDropoutNodes();\r\n this.fuseConvActivationNodes();\r\n // apply initializer specific transform\r\n if (graphInitializer) {\r\n graphInitializer.transformGraph(this);\r\n }\r\n\r\n // finalize graph\r\n this.finalizeGraph();\r\n }\r\n\r\n /**\r\n * finalize the graph.\r\n *\r\n * this function should be called after all the transformation completed.\r\n * this function removes all unnecessary nodes and values from the graph\r\n */\r\n finalizeGraph() {\r\n let offset = 0;\r\n // delete all nodes that are not being executed\r\n for (let i = 0; i < this._nodes.length; i++) {\r\n if (!this._nodes[i].executeNode) {\r\n // delete this node and shift all subsequent nodes up\r\n offset++;\r\n // delete all output values\r\n this._nodes[i].outputs.forEach(ind => {\r\n this._allData[ind]._from = -2;\r\n });\r\n this._nodes.splice(i, 1);\r\n i--;\r\n continue;\r\n }\r\n if (offset > 0) {\r\n // update the value table\r\n this._nodes[i].inputs.forEach(value => {\r\n const ind = this._allData[value]._to.indexOf(i + offset);\r\n if (ind !== -1) {\r\n this._allData[value]._to[ind] = i;\r\n }\r\n });\r\n this._nodes[i].outputs.forEach(value => {\r\n if (this._allData[value]._from && this._allData[value]._from! === i + offset) {\r\n this._allData[value]._from! = i;\r\n }\r\n });\r\n }\r\n }\r\n offset = 0;\r\n // delete all values that are not being referenced\r\n for (let i = 0; i < this._allData.length; i++) {\r\n // if current value is neither linked to next node, nor an output value, remove it.\r\n if (this._allData[i].from === -2 && this._allOutputIndices.indexOf(i + offset) === -1) {\r\n offset++;\r\n this._allData.splice(i, 1);\r\n i--;\r\n continue;\r\n }\r\n if (offset > 0) {\r\n let ind = -1;\r\n // if current value is neither an input value nor an initializer, find the node it's\r\n // coming from and update the corresponding node output\r\n if (this._allData[i].from !== undefined && this._allData[i].from !== -1) {\r\n ind = this._nodes[this._allData[i].from].outputs.indexOf(i + offset);\r\n if (ind !== -1) {\r\n this._nodes[this._allData[i].from].outputs[ind] = i;\r\n }\r\n } else {\r\n // if current value is an input value, update its reference in inputIndices\r\n ind = this._allInputIndices.indexOf(i + offset);\r\n if (ind !== -1) {\r\n this._allInputIndices[ind] = i;\r\n }\r\n }\r\n\r\n // find the node that the current value is linking to and update its input reference\r\n this._allData[i].to.forEach(node => {\r\n ind = this._nodes[node].inputs.indexOf(i + offset);\r\n if (ind !== -1) {\r\n this._nodes[node].inputs[ind] = i;\r\n }\r\n });\r\n if (this._allData[i].to.length === 0) {\r\n // if current value is a graph output, update its reference in outputIndices\r\n ind = this._allOutputIndices.indexOf(i + offset);\r\n if (ind !== -1) {\r\n this._allOutputIndices[ind] = i;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Delete the specifed node. Assume the node has one incoming input and the first output connected to other nodes.\r\n * An input validation must be done before calling this function.\r\n * @param nodeIndex The index of node to be deleted\r\n */\r\n private deleteNode(nodeIndex: number) {\r\n const node = this._nodes[nodeIndex];\r\n if (node.outputs.length > 1) {\r\n for (let i = 1; i < node.outputs.length; i++) {\r\n if (this._allData[node.outputs[i]].to.length > 0) {\r\n throw new Error('Node deletion with more than one output connected to other nodes is not supported. ');\r\n }\r\n }\r\n }\r\n\r\n // this node wil not be executed\r\n node.executeNode = false;\r\n const inputValueIndex = node.inputs[0];\r\n const outputValueIndex = node.outputs[0];\r\n const nodesConsumingOutput = this._allData[outputValueIndex].to;\r\n\r\n // remove this node from the to property of the input Value\r\n const delIndex = this._allData[inputValueIndex].to.indexOf(nodeIndex);\r\n // should not happen\r\n if (delIndex === -1) {\r\n throw new Error('The Value object doesn\\'t have the current Node in it\\'s \\'to\\' property ');\r\n }\r\n this._allData[inputValueIndex].to.splice(delIndex, 1);\r\n\r\n // clear node indices consuming this output Value\r\n this._allData[outputValueIndex]._to = [];\r\n\r\n // if the output of this node is a graph output, adjust the index appropriately\r\n const index = this._allOutputIndices.indexOf(outputValueIndex);\r\n if (index !== -1) {\r\n this._allOutputIndices[index] = inputValueIndex;\r\n }\r\n\r\n // override the inputs for nodes consuming this node's output with the input to this node\r\n if (nodesConsumingOutput && nodesConsumingOutput.length > 0) {\r\n for (const nodeIndex of nodesConsumingOutput) {\r\n const replaceIndex = this._nodes[nodeIndex].inputs.indexOf(outputValueIndex);\r\n // should not happen\r\n if (replaceIndex === -1) {\r\n throw new Error('The Node object doesn\\'t have the output Value in it\\'s \\'inputs\\' property ');\r\n }\r\n this._nodes[nodeIndex].inputs[replaceIndex] = inputValueIndex;\r\n this._allData[inputValueIndex].to.push(nodeIndex);\r\n }\r\n }\r\n }\r\n\r\n removeAllDropoutNodes() {\r\n let nodeIndex = 0;\r\n for (const node of this._nodes) {\r\n // weed out 'Dropout' nodes so that no time is wasted in execution\r\n if (node.opType === 'Dropout') {\r\n // the node should have exactly 1 input and 1 or 2 outputs\r\n if (node.inputs.length !== 1) {\r\n throw new Error('Dropout nodes should only contain one input. ');\r\n }\r\n if (node.outputs.length !== 1 && node.outputs.length !== 2) {\r\n throw new Error('Dropout nodes should contain either 1 or 2 output(s)');\r\n }\r\n // the second output should not be referenced by any other node\r\n if (node.outputs.length === 2 && this._allData[node.outputs[1]]._to.length !== 0) {\r\n throw new Error('Dropout nodes\\'s second output should not be referenced by other nodes');\r\n }\r\n this.deleteNode(nodeIndex);\r\n }\r\n nodeIndex++;\r\n }\r\n }\r\n\r\n removeAllIdentityNodes() {\r\n let nodeIndex = 0;\r\n for (const node of this._nodes) {\r\n // weed out 'Identity' nodes so that no time is wasted in execution\r\n if (node.opType === 'Identity') {\r\n this.deleteNode(nodeIndex);\r\n }\r\n nodeIndex++;\r\n }\r\n }\r\n\r\n isActivation(n: Node): boolean {\r\n switch (n.opType) {\r\n // TODO: add other activation methods\r\n case 'Relu':\r\n case 'Sigmoid':\r\n case 'Clip':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n fuseConvActivationNodes() {\r\n for (const node of this._nodes) {\r\n if (node.opType === 'Conv') {\r\n const next = this._allData[node.outputs[0]]._to;\r\n if (next.length === 1 && this.isActivation(this._nodes[next[0]])) {\r\n const child = this._nodes[next[0]];\r\n if (child.opType === 'Clip') {\r\n if (child.inputs.length === 1) {\r\n try {\r\n node.attributes.set(\r\n 'activation_params', 'floats',\r\n [child.attributes.getFloat('min'), child.attributes.getFloat('max')]);\r\n } catch (e) {\r\n node.attributes.set('activation_params', 'floats', [MIN_CLIP, MAX_CLIP]);\r\n }\r\n } else if (\r\n child.inputs.length >= 3 && this._allData[child.inputs[1]].tensor !== undefined &&\r\n this._allData[child.inputs[2]].tensor !== undefined) {\r\n node.attributes.set('activation_params', 'floats', [\r\n this._allData[child.inputs[1]].tensor!.floatData[0], this._allData[child.inputs[2]].tensor!.floatData[0]\r\n ]);\r\n } else {\r\n // Skip fusion with clip node since clip min and clip max are not coming from initializer\r\n continue;\r\n }\r\n }\r\n node.attributes.set('activation', 'string', (child.opType));\r\n this.deleteNode(next[0]);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Env} from 'onnxruntime-common';\r\n\r\nimport {WebGLContext} from './backends/webgl/webgl-context';\r\n\r\nexport declare namespace Logger {\r\n export interface SeverityTypeMap {\r\n verbose: 'v';\r\n info: 'i';\r\n warning: 'w';\r\n error: 'e';\r\n fatal: 'f';\r\n }\r\n\r\n export type Severity = keyof SeverityTypeMap;\r\n\r\n export type Provider = 'none'|'console';\r\n\r\n /**\r\n * Logging config that used to control the behavior of logger\r\n */\r\n export interface Config {\r\n /**\r\n * Specify the logging provider. 'console' by default\r\n */\r\n provider?: Provider;\r\n /**\r\n * Specify the minimal logger serverity. 'warning' by default\r\n */\r\n minimalSeverity?: Logger.Severity;\r\n /**\r\n * Whether to output date time in log. true by default\r\n */\r\n logDateTime?: boolean;\r\n /**\r\n * Whether to output source information (Not yet supported). false by default\r\n */\r\n logSourceLocation?: boolean;\r\n }\r\n\r\n export interface CategorizedLogger {\r\n verbose(content: string): void;\r\n info(content: string): void;\r\n warning(content: string): void;\r\n error(content: string): void;\r\n fatal(content: string): void;\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-redeclare\r\nexport interface Logger {\r\n (category: string): Logger.CategorizedLogger;\r\n\r\n verbose(content: string): void;\r\n verbose(category: string, content: string): void;\r\n info(content: string): void;\r\n info(category: string, content: string): void;\r\n warning(content: string): void;\r\n warning(category: string, content: string): void;\r\n error(content: string): void;\r\n error(category: string, content: string): void;\r\n fatal(content: string): void;\r\n fatal(category: string, content: string): void;\r\n\r\n /**\r\n * Reset the logger configuration.\r\n * @param config specify an optional default config\r\n */\r\n reset(config?: Logger.Config): void;\r\n /**\r\n * Set the logger's behavior on the given category\r\n * @param category specify a category string. If '*' is specified, all previous configuration will be overwritten. If\r\n * '' is specified, the default behavior will be updated.\r\n * @param config the config object to indicate the logger's behavior\r\n */\r\n set(category: string, config: Logger.Config): void;\r\n\r\n /**\r\n * Set the logger's behavior from ort-common env\r\n * @param env the env used to set logger. Currently only setting loglevel is supported through Env.\r\n */\r\n setWithEnv(env: Env): void;\r\n}\r\n\r\ninterface LoggerProvider {\r\n log(severity: Logger.Severity, content: string, category?: string): void;\r\n}\r\nclass NoOpLoggerProvider implements LoggerProvider {\r\n log(_severity: Logger.Severity, _content: string, _category?: string) {\r\n // do nothing\r\n }\r\n}\r\nclass ConsoleLoggerProvider implements LoggerProvider {\r\n log(severity: Logger.Severity, content: string, category?: string) {\r\n // eslint-disable-next-line no-console\r\n console.log(`${this.color(severity)} ${category ? '\\x1b[35m' + category + '\\x1b[0m ' : ''}${content}`);\r\n }\r\n\r\n private color(severity: Logger.Severity) {\r\n switch (severity) {\r\n case 'verbose':\r\n return '\\x1b[34;40mv\\x1b[0m';\r\n case 'info':\r\n return '\\x1b[32mi\\x1b[0m';\r\n case 'warning':\r\n return '\\x1b[30;43mw\\x1b[0m';\r\n case 'error':\r\n return '\\x1b[31;40me\\x1b[0m';\r\n case 'fatal':\r\n return '\\x1b[101mf\\x1b[0m';\r\n default:\r\n throw new Error(`unsupported severity: ${severity}`);\r\n }\r\n }\r\n}\r\n\r\nconst SEVERITY_VALUE = {\r\n verbose: 1000,\r\n info: 2000,\r\n warning: 4000,\r\n error: 5000,\r\n fatal: 6000\r\n};\r\n\r\nconst LOGGER_PROVIDER_MAP: {readonly [provider: string]: Readonly} = {\r\n ['none']: new NoOpLoggerProvider(),\r\n ['console']: new ConsoleLoggerProvider()\r\n};\r\nconst LOGGER_DEFAULT_CONFIG = {\r\n provider: 'console',\r\n minimalSeverity: 'warning',\r\n logDateTime: true,\r\n logSourceLocation: false\r\n};\r\nlet LOGGER_CONFIG_MAP:\r\n {[category: string]: Readonly>} = {['']: LOGGER_DEFAULT_CONFIG as Required};\r\n\r\nfunction log(category: string): Logger.CategorizedLogger;\r\nfunction log(severity: Logger.Severity, content: string): void;\r\nfunction log(severity: Logger.Severity, category: string, content: string): void;\r\nfunction log(severity: Logger.Severity, arg1: string, arg2?: string): void;\r\nfunction log(\r\n arg0: string|Logger.Severity, arg1?: string, arg2?: string|number, arg3?: number): Logger.CategorizedLogger|void {\r\n if (arg1 === undefined) {\r\n // log(category: string): Logger.CategorizedLogger;\r\n return createCategorizedLogger(arg0);\r\n } else if (arg2 === undefined) {\r\n // log(severity, content);\r\n logInternal(arg0 as Logger.Severity, arg1, 1);\r\n } else if (typeof arg2 === 'number' && arg3 === undefined) {\r\n // log(severity, content, stack)\r\n logInternal(arg0 as Logger.Severity, arg1, arg2);\r\n } else if (typeof arg2 === 'string' && arg3 === undefined) {\r\n // log(severity, category, content)\r\n logInternal(arg0 as Logger.Severity, arg2, 1, arg1);\r\n } else if (typeof arg2 === 'string' && typeof arg3 === 'number') {\r\n // log(severity, category, content, stack)\r\n logInternal(arg0 as Logger.Severity, arg2, arg3, arg1);\r\n } else {\r\n throw new TypeError('input is valid');\r\n }\r\n}\r\n\r\nfunction createCategorizedLogger(category: string): Logger.CategorizedLogger {\r\n return {\r\n verbose: log.verbose.bind(null, category),\r\n info: log.info.bind(null, category),\r\n warning: log.warning.bind(null, category),\r\n error: log.error.bind(null, category),\r\n fatal: log.fatal.bind(null, category)\r\n };\r\n}\r\n\r\n// NOTE: argument 'category' is put the last parameter beacause typescript\r\n// doesn't allow optional argument put in front of required argument. This\r\n// order is different from a usual logging API.\r\nfunction logInternal(severity: Logger.Severity, content: string, stack: number, category?: string) {\r\n const config = LOGGER_CONFIG_MAP[category || ''] || LOGGER_CONFIG_MAP[''];\r\n if (SEVERITY_VALUE[severity] < SEVERITY_VALUE[config.minimalSeverity]) {\r\n return;\r\n }\r\n\r\n if (config.logDateTime) {\r\n content = `${new Date().toISOString()}|${content}`;\r\n }\r\n\r\n if (config.logSourceLocation) {\r\n // TODO: calculate source location from 'stack'\r\n }\r\n\r\n LOGGER_PROVIDER_MAP[config.provider].log(severity, content, category);\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-namespace\r\nnamespace log {\r\n export function verbose(content: string): void;\r\n export function verbose(category: string, content: string): void;\r\n export function verbose(arg0: string, arg1?: string) {\r\n log('verbose', arg0, arg1);\r\n }\r\n export function info(content: string): void;\r\n export function info(category: string, content: string): void;\r\n export function info(arg0: string, arg1?: string) {\r\n log('info', arg0, arg1);\r\n }\r\n export function warning(content: string): void;\r\n export function warning(category: string, content: string): void;\r\n export function warning(arg0: string, arg1?: string) {\r\n log('warning', arg0, arg1);\r\n }\r\n export function error(content: string): void;\r\n export function error(category: string, content: string): void;\r\n export function error(arg0: string, arg1?: string) {\r\n log('error', arg0, arg1);\r\n }\r\n export function fatal(content: string): void;\r\n export function fatal(category: string, content: string): void;\r\n export function fatal(arg0: string, arg1?: string) {\r\n log('fatal', arg0, arg1);\r\n }\r\n\r\n export function reset(config?: Logger.Config): void {\r\n LOGGER_CONFIG_MAP = {};\r\n set('', config || {});\r\n }\r\n export function set(category: string, config: Logger.Config): void {\r\n if (category === '*') {\r\n reset(config);\r\n } else {\r\n const previousConfig = LOGGER_CONFIG_MAP[category] || LOGGER_DEFAULT_CONFIG;\r\n LOGGER_CONFIG_MAP[category] = {\r\n provider: config.provider || previousConfig.provider,\r\n minimalSeverity: config.minimalSeverity || previousConfig.minimalSeverity,\r\n logDateTime: (config.logDateTime === undefined) ? previousConfig.logDateTime : config.logDateTime,\r\n logSourceLocation: (config.logSourceLocation === undefined) ? previousConfig.logSourceLocation :\r\n config.logSourceLocation\r\n };\r\n }\r\n\r\n // TODO: we want to support wildcard or regex?\r\n }\r\n\r\n export function setWithEnv(env: Env): void {\r\n const config: Logger.Config = {};\r\n if (env.logLevel) {\r\n config.minimalSeverity = env.logLevel as Logger.Severity;\r\n }\r\n set('', config);\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-redeclare, @typescript-eslint/naming-convention\r\nexport const Logger: Logger = log;\r\n\r\nexport declare namespace Profiler {\r\n export interface Config {\r\n maxNumberEvents?: number;\r\n flushBatchSize?: number;\r\n flushIntervalInMilliseconds?: number;\r\n }\r\n\r\n export type EventCategory = 'session'|'node'|'op'|'backend';\r\n\r\n export interface Event {\r\n end(): void|Promise;\r\n }\r\n}\r\n// TODO\r\n// class WebGLEvent implements Profiler.Event {}\r\n\r\nclass Event implements Profiler.Event {\r\n constructor(\r\n public category: Profiler.EventCategory, public name: string, public startTime: number,\r\n private endCallback: (e: Event) => void|Promise, public timer?: WebGLQuery, public ctx?: WebGLContext) {}\r\n\r\n end() {\r\n return this.endCallback(this);\r\n }\r\n\r\n async checkTimer(): Promise {\r\n if (this.ctx === undefined || this.timer === undefined) {\r\n throw new Error('No webgl timer found');\r\n } else {\r\n this.ctx.endTimer();\r\n return this.ctx.waitForQueryAndGetTime(this.timer);\r\n }\r\n }\r\n}\r\n\r\nclass EventRecord {\r\n constructor(\r\n public category: Profiler.EventCategory, public name: string, public startTime: number, public endTime: number) {}\r\n}\r\n\r\nexport class Profiler {\r\n static create(config?: Profiler.Config): Profiler {\r\n if (config === undefined) {\r\n return new this();\r\n }\r\n return new this(config.maxNumberEvents, config.flushBatchSize, config.flushIntervalInMilliseconds);\r\n }\r\n\r\n private constructor(maxNumberEvents?: number, flushBatchSize?: number, flushIntervalInMilliseconds?: number) {\r\n this._started = false;\r\n this._maxNumberEvents = maxNumberEvents === undefined ? 10000 : maxNumberEvents;\r\n this._flushBatchSize = flushBatchSize === undefined ? 10 : flushBatchSize;\r\n this._flushIntervalInMilliseconds = flushIntervalInMilliseconds === undefined ? 5000 : flushIntervalInMilliseconds;\r\n }\r\n\r\n // start profiling\r\n start() {\r\n this._started = true;\r\n this._timingEvents = [];\r\n this._flushTime = now();\r\n this._flushPointer = 0;\r\n }\r\n\r\n // stop profiling\r\n stop() {\r\n this._started = false;\r\n for (; this._flushPointer < this._timingEvents.length; this._flushPointer++) {\r\n this.logOneEvent(this._timingEvents[this._flushPointer]);\r\n }\r\n }\r\n\r\n // create an event scope for the specific function\r\n event(category: Profiler.EventCategory, name: string, func: () => T, ctx?: WebGLContext): T;\r\n event(category: Profiler.EventCategory, name: string, func: () => Promise, ctx?: WebGLContext): Promise;\r\n\r\n event(category: Profiler.EventCategory, name: string, func: () => T | Promise, ctx?: WebGLContext): T\r\n |Promise {\r\n const event = this._started ? this.begin(category, name, ctx) : undefined;\r\n let isPromise = false;\r\n\r\n const res = func();\r\n\r\n // we consider a then-able object is a promise\r\n if (res && typeof (res as Promise).then === 'function') {\r\n isPromise = true;\r\n return new Promise((resolve, reject) => {\r\n (res as Promise)\r\n .then(\r\n async value => { // fulfilled\r\n if (event) {\r\n await event.end();\r\n }\r\n resolve(value);\r\n },\r\n async reason => { // rejected\r\n if (event) {\r\n await event.end();\r\n }\r\n reject(reason);\r\n });\r\n });\r\n }\r\n if (!isPromise && event) {\r\n const eventRes = event.end();\r\n if (eventRes && typeof eventRes.then === 'function') {\r\n return new Promise((resolve, reject) => {\r\n (eventRes).then(\r\n () => { // fulfilled\r\n resolve(res);\r\n },\r\n (reason) => { // rejected\r\n reject(reason);\r\n });\r\n });\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n // begin an event\r\n begin(category: Profiler.EventCategory, name: string, ctx?: WebGLContext): Event {\r\n if (!this._started) {\r\n throw new Error('profiler is not started yet');\r\n }\r\n if (ctx === undefined) {\r\n const startTime = now();\r\n this.flush(startTime);\r\n return new Event(category, name, startTime, e => this.endSync(e));\r\n } else {\r\n const timer: WebGLQuery = ctx.beginTimer();\r\n return new Event(category, name, 0, async e => this.end(e), timer, ctx);\r\n }\r\n }\r\n\r\n // end the specific event\r\n private async end(event: Event): Promise {\r\n const endTime: number = await event.checkTimer();\r\n if (this._timingEvents.length < this._maxNumberEvents) {\r\n this._timingEvents.push(new EventRecord(event.category, event.name, event.startTime, endTime));\r\n this.flush(endTime);\r\n }\r\n }\r\n\r\n private endSync(event: Event): void {\r\n const endTime: number = now();\r\n if (this._timingEvents.length < this._maxNumberEvents) {\r\n this._timingEvents.push(new EventRecord(event.category, event.name, event.startTime, endTime));\r\n this.flush(endTime);\r\n }\r\n }\r\n\r\n private logOneEvent(event: EventRecord) {\r\n Logger.verbose(\r\n `Profiler.${event.category}`,\r\n `${(event.endTime - event.startTime).toFixed(2)}ms on event '${event.name}' at ${event.endTime.toFixed(2)}`);\r\n }\r\n\r\n private flush(currentTime: number) {\r\n if (this._timingEvents.length - this._flushPointer >= this._flushBatchSize ||\r\n currentTime - this._flushTime >= this._flushIntervalInMilliseconds) {\r\n // should flush when either batch size accumlated or interval elepsed\r\n\r\n for (const previousPointer = this._flushPointer; this._flushPointer < previousPointer + this._flushBatchSize &&\r\n this._flushPointer < this._timingEvents.length;\r\n this._flushPointer++) {\r\n this.logOneEvent(this._timingEvents[this._flushPointer]);\r\n }\r\n\r\n this._flushTime = now();\r\n }\r\n }\r\n\r\n get started() {\r\n return this._started;\r\n }\r\n private _started = false;\r\n private _timingEvents: EventRecord[];\r\n\r\n private readonly _maxNumberEvents: number;\r\n\r\n private readonly _flushBatchSize: number;\r\n private readonly _flushIntervalInMilliseconds: number;\r\n\r\n private _flushTime: number;\r\n private _flushPointer = 0;\r\n}\r\n\r\n/**\r\n * returns a number to represent the current timestamp in a resolution as high as possible.\r\n */\r\nexport const now = (typeof performance !== 'undefined' && performance.now) ? () => performance.now() : Date.now;\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {flatbuffers} from 'flatbuffers';\r\nimport {onnx} from 'onnx-proto';\r\n\r\nimport {Graph} from './graph';\r\nimport {OpSet} from './opset';\r\nimport {onnxruntime} from './ort-schema/ort-generated';\r\nimport ortFbs = onnxruntime.experimental.fbs;\r\nimport {LongUtil} from './util';\r\n\r\nexport class Model {\r\n // empty model\r\n constructor() {}\r\n\r\n load(buf: Uint8Array, graphInitializer?: Graph.Initializer, isOrtFormat?: boolean): void {\r\n if (!isOrtFormat) {\r\n // isOrtFormat === false || isOrtFormat === undefined\r\n try {\r\n this.loadFromOnnxFormat(buf, graphInitializer);\r\n return;\r\n } catch (e) {\r\n if (isOrtFormat !== undefined) {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n this.loadFromOrtFormat(buf, graphInitializer);\r\n }\r\n\r\n private loadFromOnnxFormat(buf: Uint8Array, graphInitializer?: Graph.Initializer): void {\r\n const modelProto = onnx.ModelProto.decode(buf);\r\n const irVersion = LongUtil.longToNumber(modelProto.irVersion);\r\n if (irVersion < 3) {\r\n throw new Error('only support ONNX model with IR_VERSION>=3');\r\n }\r\n\r\n this._opsets =\r\n modelProto.opsetImport.map(i => ({domain: i.domain as string, version: LongUtil.longToNumber(i.version!)}));\r\n\r\n this._graph = Graph.from(modelProto.graph!, graphInitializer);\r\n }\r\n\r\n private loadFromOrtFormat(buf: Uint8Array, graphInitializer?: Graph.Initializer): void {\r\n const fb = new flatbuffers.ByteBuffer(buf);\r\n const ortModel = ortFbs.InferenceSession.getRootAsInferenceSession(fb).model()!;\r\n const irVersion = LongUtil.longToNumber(ortModel.irVersion());\r\n if (irVersion < 3) {\r\n throw new Error('only support ONNX model with IR_VERSION>=3');\r\n }\r\n this._opsets = [];\r\n for (let i = 0; i < ortModel.opsetImportLength(); i++) {\r\n const opsetId = ortModel.opsetImport(i)!;\r\n this._opsets.push({domain: opsetId?.domain() as string, version: LongUtil.longToNumber(opsetId.version()!)});\r\n }\r\n\r\n this._graph = Graph.from(ortModel.graph()!, graphInitializer);\r\n }\r\n\r\n private _graph: Graph;\r\n get graph(): Graph {\r\n return this._graph;\r\n }\r\n\r\n private _opsets: OpSet[];\r\n get opsets(): readonly OpSet[] {\r\n return this._opsets;\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {InferenceHandler} from './backend';\r\nimport {Graph} from './graph';\r\nimport {Tensor} from './tensor';\r\n\r\nexport type OperatorImplementation = (inferenceHandler: InferenceHandler, inputs: Tensor[], context: T) => Tensor[];\r\nexport type OperatorInitialization = (node: Graph.Node, graph: Graph) => T;\r\n\r\nexport interface Operator {\r\n readonly impl: OperatorImplementation;\r\n readonly context: Graph.Node|unknown;\r\n}\r\n\r\nexport const NUMBER_TYPES: readonly Tensor.DataType[] =\r\n ['float32', 'float64', 'int32', 'int16', 'int8', 'uint16', 'uint32', 'uint8'];\r\nexport const INT_TYPES: readonly Tensor.DataType[] = ['int32', 'int16', 'int8', 'uint16', 'uint32', 'uint8'];\r\nexport const FLOAT_TYPES: readonly Tensor.DataType[] = ['float32', 'float64'];\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Graph} from './graph';\r\nimport {OperatorImplementation, OperatorInitialization} from './operators';\r\n\r\nexport interface OpSet {\r\n domain: string;\r\n version: number;\r\n}\r\n\r\nexport declare namespace OpSet {\r\n /**\r\n * Domain of an opset, it can be an empty string(default value, represent for ai.onnx), or 'ai.onnx.ml'\r\n */\r\n type Domain = ''|'ai.onnx.ml'|'com.microsoft';\r\n\r\n /**\r\n * A resolve rule consists of 4 or 5 items: opType, opSetDomain, versionSelector, operatorImplementation and\r\n * operatorInitialization (optional)\r\n */\r\n type ResolveRule = [\r\n string, Domain, string, OperatorImplementation\r\n ]|[string, Domain, string, OperatorImplementation, OperatorInitialization];\r\n}\r\n\r\nexport function resolveOperator(node: Graph.Node, opsets: readonly OpSet[], rules: readonly OpSet.ResolveRule[]) {\r\n for (const rule of rules) {\r\n const opType = rule[0];\r\n const domain = rule[1];\r\n const versionSelector = rule[2];\r\n const opImpl = rule[3];\r\n const opInit = rule[4];\r\n\r\n if (node.opType === opType) { // operator type matches\r\n for (const opset of opsets) {\r\n // opset '' and 'ai.onnx' are considered the same.\r\n if (opset.domain === domain || (opset.domain === 'ai.onnx' && domain === '')) { // opset domain found\r\n if (matchSelector(opset.version, versionSelector)) {\r\n return {opImpl, opInit};\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n throw new TypeError(`cannot resolve operator '${node.opType}' with opsets: ${\r\n opsets.map(set => `${set.domain || 'ai.onnx'} v${set.version}`).join(', ')}`);\r\n}\r\n\r\nfunction matchSelector(version: number, selector: string): boolean {\r\n if (selector.endsWith('+')) {\r\n // minimum version match ('7+' expects version>=7)\r\n const rangeStart = Number.parseInt(selector.substring(0, selector.length - 1), 10);\r\n return !isNaN(rangeStart) && rangeStart <= version;\r\n } else if (selector.split('-').length === 2) {\r\n // range match ('6-8' expects 6<=version<=8)\r\n const pair = selector.split('-');\r\n const rangeStart = Number.parseInt(pair[0], 10);\r\n const rangeEnd = Number.parseInt(pair[1], 10);\r\n return !isNaN(rangeStart) && !isNaN(rangeEnd) && rangeStart <= version && version <= rangeEnd;\r\n } else {\r\n // exact match ('7' expects version===7)\r\n return Number.parseInt(selector, 10) === version;\r\n }\r\n}\r\n","// automatically generated by the FlatBuffers compiler, do not modify\r\n/* eslint-disable */\r\n\r\nimport {flatbuffers} from 'flatbuffers';\r\n\r\n/**\r\n * @enum {number}\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export enum AttributeType {\r\n UNDEFINED = 0,\r\n FLOAT = 1,\r\n INT = 2,\r\n STRING = 3,\r\n TENSOR = 4,\r\n GRAPH = 5,\r\n FLOATS = 6,\r\n INTS = 7,\r\n STRINGS = 8,\r\n TENSORS = 9,\r\n GRAPHS = 10,\r\n SPARSE_TENSOR = 11,\r\n SPARSE_TENSORS = 12\r\n }\r\n}\r\n\r\n/**\r\n * @enum {number}\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export enum DimensionValueType {UNKNOWN = 0, VALUE = 1, PARAM = 2}\r\n}\r\n\r\n/**\r\n * @enum {number}\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export enum TensorDataType {\r\n UNDEFINED = 0,\r\n FLOAT = 1,\r\n UINT8 = 2,\r\n INT8 = 3,\r\n UINT16 = 4,\r\n INT16 = 5,\r\n INT32 = 6,\r\n INT64 = 7,\r\n STRING = 8,\r\n BOOL = 9,\r\n FLOAT16 = 10,\r\n DOUBLE = 11,\r\n UINT32 = 12,\r\n UINT64 = 13,\r\n COMPLEX64 = 14,\r\n COMPLEX128 = 15,\r\n BFLOAT16 = 16\r\n }\r\n}\r\n\r\n/**\r\n * @enum {number}\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export enum NodeType {Primitive = 0, Fused = 1}\r\n}\r\n\r\n/**\r\n * @enum {number}\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export enum TypeInfoValue {NONE = 0, tensor_type = 1, sequence_type = 2, map_type = 3}\r\n}\r\n\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class Shape {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns Shape\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): Shape {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param Shape= obj\r\n * @returns Shape\r\n */\r\n static getRootAsShape(bb: flatbuffers.ByteBuffer, obj?: Shape): Shape {\r\n return (obj || new Shape()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param Shape= obj\r\n * @returns Shape\r\n */\r\n static getSizePrefixedRootAsShape(bb: flatbuffers.ByteBuffer, obj?: Shape): Shape {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new Shape()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param onnxruntime.experimental.fbs.Dimension= obj\r\n * @returns onnxruntime.experimental.fbs.Dimension\r\n */\r\n dim(index: number, obj?: onnxruntime.experimental.fbs.Dimension): onnxruntime.experimental.fbs.Dimension|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.Dimension())\r\n .__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n dimLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startShape(builder: flatbuffers.Builder) {\r\n builder.startObject(1);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset dimOffset\r\n */\r\n static addDim(builder: flatbuffers.Builder, dimOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(0, dimOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createDimVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addOffset(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startDimVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endShape(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n static createShape(builder: flatbuffers.Builder, dimOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n Shape.startShape(builder);\r\n Shape.addDim(builder, dimOffset);\r\n return Shape.endShape(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class Dimension {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns Dimension\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): Dimension {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param Dimension= obj\r\n * @returns Dimension\r\n */\r\n static getRootAsDimension(bb: flatbuffers.ByteBuffer, obj?: Dimension): Dimension {\r\n return (obj || new Dimension()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param Dimension= obj\r\n * @returns Dimension\r\n */\r\n static getSizePrefixedRootAsDimension(bb: flatbuffers.ByteBuffer, obj?: Dimension): Dimension {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new Dimension()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param onnxruntime.experimental.fbs.DimensionValue= obj\r\n * @returns onnxruntime.experimental.fbs.DimensionValue|null\r\n */\r\n value(obj?: onnxruntime.experimental.fbs.DimensionValue): onnxruntime.experimental.fbs.DimensionValue|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.DimensionValue())\r\n .__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n denotation(): string|null;\r\n denotation(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n denotation(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startDimension(builder: flatbuffers.Builder) {\r\n builder.startObject(2);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset valueOffset\r\n */\r\n static addValue(builder: flatbuffers.Builder, valueOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(0, valueOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset denotationOffset\r\n */\r\n static addDenotation(builder: flatbuffers.Builder, denotationOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(1, denotationOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endDimension(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n static createDimension(\r\n builder: flatbuffers.Builder, valueOffset: flatbuffers.Offset,\r\n denotationOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n Dimension.startDimension(builder);\r\n Dimension.addValue(builder, valueOffset);\r\n Dimension.addDenotation(builder, denotationOffset);\r\n return Dimension.endDimension(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class DimensionValue {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns DimensionValue\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): DimensionValue {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param DimensionValue= obj\r\n * @returns DimensionValue\r\n */\r\n static getRootAsDimensionValue(bb: flatbuffers.ByteBuffer, obj?: DimensionValue): DimensionValue {\r\n return (obj || new DimensionValue()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param DimensionValue= obj\r\n * @returns DimensionValue\r\n */\r\n static getSizePrefixedRootAsDimensionValue(bb: flatbuffers.ByteBuffer, obj?: DimensionValue): DimensionValue {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new DimensionValue()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @returns onnxruntime.experimental.fbs.DimensionValueType\r\n */\r\n dimType(): onnxruntime.experimental.fbs.DimensionValueType {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? /** */ (this.bb!.readInt8(this.bb_pos + offset)) :\r\n onnxruntime.experimental.fbs.DimensionValueType.UNKNOWN;\r\n }\r\n\r\n /**\r\n * @returns flatbuffers.Long\r\n */\r\n dimValue(): flatbuffers.Long {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? this.bb!.readInt64(this.bb_pos + offset) : this.bb!.createLong(0, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n dimParam(): string|null;\r\n dimParam(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n dimParam(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 8);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startDimensionValue(builder: flatbuffers.Builder) {\r\n builder.startObject(3);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param onnxruntime.experimental.fbs.DimensionValueType dimType\r\n */\r\n static addDimType(builder: flatbuffers.Builder, dimType: onnxruntime.experimental.fbs.DimensionValueType) {\r\n builder.addFieldInt8(0, dimType, onnxruntime.experimental.fbs.DimensionValueType.UNKNOWN);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Long dimValue\r\n */\r\n static addDimValue(builder: flatbuffers.Builder, dimValue: flatbuffers.Long) {\r\n builder.addFieldInt64(1, dimValue, builder.createLong(0, 0));\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset dimParamOffset\r\n */\r\n static addDimParam(builder: flatbuffers.Builder, dimParamOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(2, dimParamOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endDimensionValue(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n static createDimensionValue(\r\n builder: flatbuffers.Builder, dimType: onnxruntime.experimental.fbs.DimensionValueType,\r\n dimValue: flatbuffers.Long, dimParamOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n DimensionValue.startDimensionValue(builder);\r\n DimensionValue.addDimType(builder, dimType);\r\n DimensionValue.addDimValue(builder, dimValue);\r\n DimensionValue.addDimParam(builder, dimParamOffset);\r\n return DimensionValue.endDimensionValue(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class TensorTypeAndShape {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns TensorTypeAndShape\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): TensorTypeAndShape {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param TensorTypeAndShape= obj\r\n * @returns TensorTypeAndShape\r\n */\r\n static getRootAsTensorTypeAndShape(bb: flatbuffers.ByteBuffer, obj?: TensorTypeAndShape): TensorTypeAndShape {\r\n return (obj || new TensorTypeAndShape()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param TensorTypeAndShape= obj\r\n * @returns TensorTypeAndShape\r\n */\r\n static getSizePrefixedRootAsTensorTypeAndShape(bb: flatbuffers.ByteBuffer, obj?: TensorTypeAndShape):\r\n TensorTypeAndShape {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new TensorTypeAndShape()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @returns onnxruntime.experimental.fbs.TensorDataType\r\n */\r\n elemType(): onnxruntime.experimental.fbs.TensorDataType {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? /** */ (this.bb!.readInt32(this.bb_pos + offset)) :\r\n onnxruntime.experimental.fbs.TensorDataType.UNDEFINED;\r\n }\r\n\r\n /**\r\n * @param onnxruntime.experimental.fbs.Shape= obj\r\n * @returns onnxruntime.experimental.fbs.Shape|null\r\n */\r\n shape(obj?: onnxruntime.experimental.fbs.Shape): onnxruntime.experimental.fbs.Shape|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.Shape())\r\n .__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startTensorTypeAndShape(builder: flatbuffers.Builder) {\r\n builder.startObject(2);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param onnxruntime.experimental.fbs.TensorDataType elemType\r\n */\r\n static addElemType(builder: flatbuffers.Builder, elemType: onnxruntime.experimental.fbs.TensorDataType) {\r\n builder.addFieldInt32(0, elemType, onnxruntime.experimental.fbs.TensorDataType.UNDEFINED);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset shapeOffset\r\n */\r\n static addShape(builder: flatbuffers.Builder, shapeOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(1, shapeOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endTensorTypeAndShape(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n static createTensorTypeAndShape(\r\n builder: flatbuffers.Builder, elemType: onnxruntime.experimental.fbs.TensorDataType,\r\n shapeOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n TensorTypeAndShape.startTensorTypeAndShape(builder);\r\n TensorTypeAndShape.addElemType(builder, elemType);\r\n TensorTypeAndShape.addShape(builder, shapeOffset);\r\n return TensorTypeAndShape.endTensorTypeAndShape(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class MapType {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns MapType\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): MapType {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param MapType= obj\r\n * @returns MapType\r\n */\r\n static getRootAsMapType(bb: flatbuffers.ByteBuffer, obj?: MapType): MapType {\r\n return (obj || new MapType()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param MapType= obj\r\n * @returns MapType\r\n */\r\n static getSizePrefixedRootAsMapType(bb: flatbuffers.ByteBuffer, obj?: MapType): MapType {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new MapType()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @returns onnxruntime.experimental.fbs.TensorDataType\r\n */\r\n keyType(): onnxruntime.experimental.fbs.TensorDataType {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? /** */ (this.bb!.readInt32(this.bb_pos + offset)) :\r\n onnxruntime.experimental.fbs.TensorDataType.UNDEFINED;\r\n }\r\n\r\n /**\r\n * @param onnxruntime.experimental.fbs.TypeInfo= obj\r\n * @returns onnxruntime.experimental.fbs.TypeInfo|null\r\n */\r\n valueType(obj?: onnxruntime.experimental.fbs.TypeInfo): onnxruntime.experimental.fbs.TypeInfo|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.TypeInfo())\r\n .__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startMapType(builder: flatbuffers.Builder) {\r\n builder.startObject(2);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param onnxruntime.experimental.fbs.TensorDataType keyType\r\n */\r\n static addKeyType(builder: flatbuffers.Builder, keyType: onnxruntime.experimental.fbs.TensorDataType) {\r\n builder.addFieldInt32(0, keyType, onnxruntime.experimental.fbs.TensorDataType.UNDEFINED);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset valueTypeOffset\r\n */\r\n static addValueType(builder: flatbuffers.Builder, valueTypeOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(1, valueTypeOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endMapType(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n static createMapType(\r\n builder: flatbuffers.Builder, keyType: onnxruntime.experimental.fbs.TensorDataType,\r\n valueTypeOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n MapType.startMapType(builder);\r\n MapType.addKeyType(builder, keyType);\r\n MapType.addValueType(builder, valueTypeOffset);\r\n return MapType.endMapType(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class SequenceType {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns SequenceType\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): SequenceType {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param SequenceType= obj\r\n * @returns SequenceType\r\n */\r\n static getRootAsSequenceType(bb: flatbuffers.ByteBuffer, obj?: SequenceType): SequenceType {\r\n return (obj || new SequenceType()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param SequenceType= obj\r\n * @returns SequenceType\r\n */\r\n static getSizePrefixedRootAsSequenceType(bb: flatbuffers.ByteBuffer, obj?: SequenceType): SequenceType {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new SequenceType()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param onnxruntime.experimental.fbs.TypeInfo= obj\r\n * @returns onnxruntime.experimental.fbs.TypeInfo|null\r\n */\r\n elemType(obj?: onnxruntime.experimental.fbs.TypeInfo): onnxruntime.experimental.fbs.TypeInfo|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.TypeInfo())\r\n .__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startSequenceType(builder: flatbuffers.Builder) {\r\n builder.startObject(1);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset elemTypeOffset\r\n */\r\n static addElemType(builder: flatbuffers.Builder, elemTypeOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(0, elemTypeOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endSequenceType(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n static createSequenceType(builder: flatbuffers.Builder, elemTypeOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n SequenceType.startSequenceType(builder);\r\n SequenceType.addElemType(builder, elemTypeOffset);\r\n return SequenceType.endSequenceType(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class EdgeEnd {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns EdgeEnd\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): EdgeEnd {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n nodeIndex(): number {\r\n return this.bb!.readUint32(this.bb_pos);\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n srcArgIndex(): number {\r\n return this.bb!.readInt32(this.bb_pos + 4);\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n dstArgIndex(): number {\r\n return this.bb!.readInt32(this.bb_pos + 8);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number node_index\r\n * @param number src_arg_index\r\n * @param number dst_arg_index\r\n * @returns flatbuffers.Offset\r\n */\r\n static createEdgeEnd(\r\n builder: flatbuffers.Builder, node_index: number, src_arg_index: number,\r\n dst_arg_index: number): flatbuffers.Offset {\r\n builder.prep(4, 12);\r\n builder.writeInt32(dst_arg_index);\r\n builder.writeInt32(src_arg_index);\r\n builder.writeInt32(node_index);\r\n return builder.offset();\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class NodeEdge {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns NodeEdge\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): NodeEdge {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param NodeEdge= obj\r\n * @returns NodeEdge\r\n */\r\n static getRootAsNodeEdge(bb: flatbuffers.ByteBuffer, obj?: NodeEdge): NodeEdge {\r\n return (obj || new NodeEdge()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param NodeEdge= obj\r\n * @returns NodeEdge\r\n */\r\n static getSizePrefixedRootAsNodeEdge(bb: flatbuffers.ByteBuffer, obj?: NodeEdge): NodeEdge {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new NodeEdge()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n nodeIndex(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? this.bb!.readUint32(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param onnxruntime.experimental.fbs.EdgeEnd= obj\r\n * @returns onnxruntime.experimental.fbs.EdgeEnd\r\n */\r\n inputEdges(index: number, obj?: onnxruntime.experimental.fbs.EdgeEnd): onnxruntime.experimental.fbs.EdgeEnd|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.EdgeEnd())\r\n .__init(this.bb!.__vector(this.bb_pos + offset) + index * 12, this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n inputEdgesLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param onnxruntime.experimental.fbs.EdgeEnd= obj\r\n * @returns onnxruntime.experimental.fbs.EdgeEnd\r\n */\r\n outputEdges(index: number, obj?: onnxruntime.experimental.fbs.EdgeEnd): onnxruntime.experimental.fbs.EdgeEnd|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 8);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.EdgeEnd())\r\n .__init(this.bb!.__vector(this.bb_pos + offset) + index * 12, this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n outputEdgesLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 8);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startNodeEdge(builder: flatbuffers.Builder) {\r\n builder.startObject(3);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number nodeIndex\r\n */\r\n static addNodeIndex(builder: flatbuffers.Builder, nodeIndex: number) {\r\n builder.addFieldInt32(0, nodeIndex, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset inputEdgesOffset\r\n */\r\n static addInputEdges(builder: flatbuffers.Builder, inputEdgesOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(1, inputEdgesOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startInputEdgesVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(12, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset outputEdgesOffset\r\n */\r\n static addOutputEdges(builder: flatbuffers.Builder, outputEdgesOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(2, outputEdgesOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startOutputEdgesVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(12, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endNodeEdge(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n static createNodeEdge(\r\n builder: flatbuffers.Builder, nodeIndex: number, inputEdgesOffset: flatbuffers.Offset,\r\n outputEdgesOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n NodeEdge.startNodeEdge(builder);\r\n NodeEdge.addNodeIndex(builder, nodeIndex);\r\n NodeEdge.addInputEdges(builder, inputEdgesOffset);\r\n NodeEdge.addOutputEdges(builder, outputEdgesOffset);\r\n return NodeEdge.endNodeEdge(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class Node {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns Node\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): Node {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param Node= obj\r\n * @returns Node\r\n */\r\n static getRootAsNode(bb: flatbuffers.ByteBuffer, obj?: Node): Node {\r\n return (obj || new Node()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param Node= obj\r\n * @returns Node\r\n */\r\n static getSizePrefixedRootAsNode(bb: flatbuffers.ByteBuffer, obj?: Node): Node {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new Node()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n name(): string|null;\r\n name(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n name(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n docString(): string|null;\r\n docString(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n docString(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n domain(): string|null;\r\n domain(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n domain(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 8);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n sinceVersion(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 10);\r\n return offset ? this.bb!.readInt32(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n index(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 12);\r\n return offset ? this.bb!.readUint32(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n opType(): string|null;\r\n opType(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n opType(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 14);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @returns onnxruntime.experimental.fbs.NodeType\r\n */\r\n type(): onnxruntime.experimental.fbs.NodeType {\r\n let offset = this.bb!.__offset(this.bb_pos, 16);\r\n return offset ? /** */ (this.bb!.readInt32(this.bb_pos + offset)) :\r\n onnxruntime.experimental.fbs.NodeType.Primitive;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n executionProviderType(): string|null;\r\n executionProviderType(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n executionProviderType(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 18);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array\r\n */\r\n inputs(index: number): string;\r\n inputs(index: number, optionalEncoding: flatbuffers.Encoding): string|Uint8Array;\r\n inputs(index: number, optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 20);\r\n return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n inputsLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 20);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array\r\n */\r\n outputs(index: number): string;\r\n outputs(index: number, optionalEncoding: flatbuffers.Encoding): string|Uint8Array;\r\n outputs(index: number, optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 22);\r\n return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n outputsLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 22);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param onnxruntime.experimental.fbs.Attribute= obj\r\n * @returns onnxruntime.experimental.fbs.Attribute\r\n */\r\n attributes(index: number, obj?: onnxruntime.experimental.fbs.Attribute): onnxruntime.experimental.fbs.Attribute\r\n |null {\r\n let offset = this.bb!.__offset(this.bb_pos, 24);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.Attribute())\r\n .__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n attributesLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 24);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @returns number\r\n */\r\n inputArgCounts(index: number): number|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 26);\r\n return offset ? this.bb!.readInt32(this.bb!.__vector(this.bb_pos + offset) + index * 4) : 0;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n inputArgCountsLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 26);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @returns Int32Array\r\n */\r\n inputArgCountsArray(): Int32Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 26);\r\n return offset ?\r\n new Int32Array(\r\n this.bb!.bytes().buffer, this.bb!.bytes().byteOffset + this.bb!.__vector(this.bb_pos + offset),\r\n this.bb!.__vector_len(this.bb_pos + offset)) :\r\n null;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array\r\n */\r\n implicitInputs(index: number): string;\r\n implicitInputs(index: number, optionalEncoding: flatbuffers.Encoding): string|Uint8Array;\r\n implicitInputs(index: number, optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 28);\r\n return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n implicitInputsLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 28);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startNode(builder: flatbuffers.Builder) {\r\n builder.startObject(13);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset nameOffset\r\n */\r\n static addName(builder: flatbuffers.Builder, nameOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(0, nameOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset docStringOffset\r\n */\r\n static addDocString(builder: flatbuffers.Builder, docStringOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(1, docStringOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset domainOffset\r\n */\r\n static addDomain(builder: flatbuffers.Builder, domainOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(2, domainOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number sinceVersion\r\n */\r\n static addSinceVersion(builder: flatbuffers.Builder, sinceVersion: number) {\r\n builder.addFieldInt32(3, sinceVersion, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number index\r\n */\r\n static addIndex(builder: flatbuffers.Builder, index: number) {\r\n builder.addFieldInt32(4, index, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset opTypeOffset\r\n */\r\n static addOpType(builder: flatbuffers.Builder, opTypeOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(5, opTypeOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param onnxruntime.experimental.fbs.NodeType type\r\n */\r\n static addType(builder: flatbuffers.Builder, type: onnxruntime.experimental.fbs.NodeType) {\r\n builder.addFieldInt32(6, type, onnxruntime.experimental.fbs.NodeType.Primitive);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset executionProviderTypeOffset\r\n */\r\n static addExecutionProviderType(builder: flatbuffers.Builder, executionProviderTypeOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(7, executionProviderTypeOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset inputsOffset\r\n */\r\n static addInputs(builder: flatbuffers.Builder, inputsOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(8, inputsOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createInputsVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addOffset(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startInputsVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset outputsOffset\r\n */\r\n static addOutputs(builder: flatbuffers.Builder, outputsOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(9, outputsOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createOutputsVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addOffset(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startOutputsVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset attributesOffset\r\n */\r\n static addAttributes(builder: flatbuffers.Builder, attributesOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(10, attributesOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createAttributesVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addOffset(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startAttributesVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset inputArgCountsOffset\r\n */\r\n static addInputArgCounts(builder: flatbuffers.Builder, inputArgCountsOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(11, inputArgCountsOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createInputArgCountsVector(builder: flatbuffers.Builder, data: number[]|Uint8Array): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addInt32(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startInputArgCountsVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset implicitInputsOffset\r\n */\r\n static addImplicitInputs(builder: flatbuffers.Builder, implicitInputsOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(12, implicitInputsOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createImplicitInputsVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addOffset(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startImplicitInputsVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endNode(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n static createNode(\r\n builder: flatbuffers.Builder, nameOffset: flatbuffers.Offset, docStringOffset: flatbuffers.Offset,\r\n domainOffset: flatbuffers.Offset, sinceVersion: number, index: number, opTypeOffset: flatbuffers.Offset,\r\n type: onnxruntime.experimental.fbs.NodeType, executionProviderTypeOffset: flatbuffers.Offset,\r\n inputsOffset: flatbuffers.Offset, outputsOffset: flatbuffers.Offset, attributesOffset: flatbuffers.Offset,\r\n inputArgCountsOffset: flatbuffers.Offset, implicitInputsOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n Node.startNode(builder);\r\n Node.addName(builder, nameOffset);\r\n Node.addDocString(builder, docStringOffset);\r\n Node.addDomain(builder, domainOffset);\r\n Node.addSinceVersion(builder, sinceVersion);\r\n Node.addIndex(builder, index);\r\n Node.addOpType(builder, opTypeOffset);\r\n Node.addType(builder, type);\r\n Node.addExecutionProviderType(builder, executionProviderTypeOffset);\r\n Node.addInputs(builder, inputsOffset);\r\n Node.addOutputs(builder, outputsOffset);\r\n Node.addAttributes(builder, attributesOffset);\r\n Node.addInputArgCounts(builder, inputArgCountsOffset);\r\n Node.addImplicitInputs(builder, implicitInputsOffset);\r\n return Node.endNode(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class ValueInfo {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns ValueInfo\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): ValueInfo {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param ValueInfo= obj\r\n * @returns ValueInfo\r\n */\r\n static getRootAsValueInfo(bb: flatbuffers.ByteBuffer, obj?: ValueInfo): ValueInfo {\r\n return (obj || new ValueInfo()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param ValueInfo= obj\r\n * @returns ValueInfo\r\n */\r\n static getSizePrefixedRootAsValueInfo(bb: flatbuffers.ByteBuffer, obj?: ValueInfo): ValueInfo {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new ValueInfo()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n name(): string|null;\r\n name(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n name(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n docString(): string|null;\r\n docString(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n docString(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @param onnxruntime.experimental.fbs.TypeInfo= obj\r\n * @returns onnxruntime.experimental.fbs.TypeInfo|null\r\n */\r\n type(obj?: onnxruntime.experimental.fbs.TypeInfo): onnxruntime.experimental.fbs.TypeInfo|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 8);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.TypeInfo())\r\n .__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startValueInfo(builder: flatbuffers.Builder) {\r\n builder.startObject(3);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset nameOffset\r\n */\r\n static addName(builder: flatbuffers.Builder, nameOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(0, nameOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset docStringOffset\r\n */\r\n static addDocString(builder: flatbuffers.Builder, docStringOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(1, docStringOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset typeOffset\r\n */\r\n static addType(builder: flatbuffers.Builder, typeOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(2, typeOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endValueInfo(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n static createValueInfo(\r\n builder: flatbuffers.Builder, nameOffset: flatbuffers.Offset, docStringOffset: flatbuffers.Offset,\r\n typeOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n ValueInfo.startValueInfo(builder);\r\n ValueInfo.addName(builder, nameOffset);\r\n ValueInfo.addDocString(builder, docStringOffset);\r\n ValueInfo.addType(builder, typeOffset);\r\n return ValueInfo.endValueInfo(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class TypeInfo {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns TypeInfo\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): TypeInfo {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param TypeInfo= obj\r\n * @returns TypeInfo\r\n */\r\n static getRootAsTypeInfo(bb: flatbuffers.ByteBuffer, obj?: TypeInfo): TypeInfo {\r\n return (obj || new TypeInfo()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param TypeInfo= obj\r\n * @returns TypeInfo\r\n */\r\n static getSizePrefixedRootAsTypeInfo(bb: flatbuffers.ByteBuffer, obj?: TypeInfo): TypeInfo {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new TypeInfo()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n denotation(): string|null;\r\n denotation(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n denotation(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @returns onnxruntime.experimental.fbs.TypeInfoValue\r\n */\r\n valueType(): onnxruntime.experimental.fbs.TypeInfoValue {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? /** */ (this.bb!.readUint8(this.bb_pos + offset)) :\r\n onnxruntime.experimental.fbs.TypeInfoValue.NONE;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Table obj\r\n * @returns ?flatbuffers.Table\r\n */\r\n value(obj: T): T|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 8);\r\n return offset ? this.bb!.__union(obj, this.bb_pos + offset) : null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startTypeInfo(builder: flatbuffers.Builder) {\r\n builder.startObject(3);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset denotationOffset\r\n */\r\n static addDenotation(builder: flatbuffers.Builder, denotationOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(0, denotationOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param onnxruntime.experimental.fbs.TypeInfoValue valueType\r\n */\r\n static addValueType(builder: flatbuffers.Builder, valueType: onnxruntime.experimental.fbs.TypeInfoValue) {\r\n builder.addFieldInt8(1, valueType, onnxruntime.experimental.fbs.TypeInfoValue.NONE);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset valueOffset\r\n */\r\n static addValue(builder: flatbuffers.Builder, valueOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(2, valueOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endTypeInfo(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n static createTypeInfo(\r\n builder: flatbuffers.Builder, denotationOffset: flatbuffers.Offset,\r\n valueType: onnxruntime.experimental.fbs.TypeInfoValue, valueOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n TypeInfo.startTypeInfo(builder);\r\n TypeInfo.addDenotation(builder, denotationOffset);\r\n TypeInfo.addValueType(builder, valueType);\r\n TypeInfo.addValue(builder, valueOffset);\r\n return TypeInfo.endTypeInfo(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class OperatorSetId {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns OperatorSetId\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): OperatorSetId {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param OperatorSetId= obj\r\n * @returns OperatorSetId\r\n */\r\n static getRootAsOperatorSetId(bb: flatbuffers.ByteBuffer, obj?: OperatorSetId): OperatorSetId {\r\n return (obj || new OperatorSetId()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param OperatorSetId= obj\r\n * @returns OperatorSetId\r\n */\r\n static getSizePrefixedRootAsOperatorSetId(bb: flatbuffers.ByteBuffer, obj?: OperatorSetId): OperatorSetId {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new OperatorSetId()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n domain(): string|null;\r\n domain(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n domain(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @returns flatbuffers.Long\r\n */\r\n version(): flatbuffers.Long {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? this.bb!.readInt64(this.bb_pos + offset) : this.bb!.createLong(0, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startOperatorSetId(builder: flatbuffers.Builder) {\r\n builder.startObject(2);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset domainOffset\r\n */\r\n static addDomain(builder: flatbuffers.Builder, domainOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(0, domainOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Long version\r\n */\r\n static addVersion(builder: flatbuffers.Builder, version: flatbuffers.Long) {\r\n builder.addFieldInt64(1, version, builder.createLong(0, 0));\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endOperatorSetId(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n static createOperatorSetId(\r\n builder: flatbuffers.Builder, domainOffset: flatbuffers.Offset, version: flatbuffers.Long): flatbuffers.Offset {\r\n OperatorSetId.startOperatorSetId(builder);\r\n OperatorSetId.addDomain(builder, domainOffset);\r\n OperatorSetId.addVersion(builder, version);\r\n return OperatorSetId.endOperatorSetId(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class Tensor {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns Tensor\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): Tensor {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param Tensor= obj\r\n * @returns Tensor\r\n */\r\n static getRootAsTensor(bb: flatbuffers.ByteBuffer, obj?: Tensor): Tensor {\r\n return (obj || new Tensor()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param Tensor= obj\r\n * @returns Tensor\r\n */\r\n static getSizePrefixedRootAsTensor(bb: flatbuffers.ByteBuffer, obj?: Tensor): Tensor {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new Tensor()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n name(): string|null;\r\n name(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n name(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n docString(): string|null;\r\n docString(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n docString(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @returns flatbuffers.Long\r\n */\r\n dims(index: number): flatbuffers.Long|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 8);\r\n return offset ? this.bb!.readInt64(this.bb!.__vector(this.bb_pos + offset) + index * 8) :\r\n this.bb!.createLong(0, 0);\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n dimsLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 8);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @returns onnxruntime.experimental.fbs.TensorDataType\r\n */\r\n dataType(): onnxruntime.experimental.fbs.TensorDataType {\r\n let offset = this.bb!.__offset(this.bb_pos, 10);\r\n return offset ? /** */ (this.bb!.readInt32(this.bb_pos + offset)) :\r\n onnxruntime.experimental.fbs.TensorDataType.UNDEFINED;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @returns number\r\n */\r\n rawData(index: number): number|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 12);\r\n return offset ? this.bb!.readUint8(this.bb!.__vector(this.bb_pos + offset) + index) : 0;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n rawDataLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 12);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @returns Uint8Array\r\n */\r\n rawDataArray(): Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 12);\r\n return offset ?\r\n new Uint8Array(\r\n this.bb!.bytes().buffer, this.bb!.bytes().byteOffset + this.bb!.__vector(this.bb_pos + offset),\r\n this.bb!.__vector_len(this.bb_pos + offset)) :\r\n null;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array\r\n */\r\n stringData(index: number): string;\r\n stringData(index: number, optionalEncoding: flatbuffers.Encoding): string|Uint8Array;\r\n stringData(index: number, optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 14);\r\n return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n stringDataLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 14);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startTensor(builder: flatbuffers.Builder) {\r\n builder.startObject(6);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset nameOffset\r\n */\r\n static addName(builder: flatbuffers.Builder, nameOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(0, nameOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset docStringOffset\r\n */\r\n static addDocString(builder: flatbuffers.Builder, docStringOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(1, docStringOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset dimsOffset\r\n */\r\n static addDims(builder: flatbuffers.Builder, dimsOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(2, dimsOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createDimsVector(builder: flatbuffers.Builder, data: flatbuffers.Long[]): flatbuffers.Offset {\r\n builder.startVector(8, data.length, 8);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addInt64(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startDimsVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(8, numElems, 8);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param onnxruntime.experimental.fbs.TensorDataType dataType\r\n */\r\n static addDataType(builder: flatbuffers.Builder, dataType: onnxruntime.experimental.fbs.TensorDataType) {\r\n builder.addFieldInt32(3, dataType, onnxruntime.experimental.fbs.TensorDataType.UNDEFINED);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset rawDataOffset\r\n */\r\n static addRawData(builder: flatbuffers.Builder, rawDataOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(4, rawDataOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createRawDataVector(builder: flatbuffers.Builder, data: number[]|Uint8Array): flatbuffers.Offset {\r\n builder.startVector(1, data.length, 1);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addInt8(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startRawDataVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(1, numElems, 1);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset stringDataOffset\r\n */\r\n static addStringData(builder: flatbuffers.Builder, stringDataOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(5, stringDataOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createStringDataVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addOffset(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startStringDataVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endTensor(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n static createTensor(\r\n builder: flatbuffers.Builder, nameOffset: flatbuffers.Offset, docStringOffset: flatbuffers.Offset,\r\n dimsOffset: flatbuffers.Offset, dataType: onnxruntime.experimental.fbs.TensorDataType,\r\n rawDataOffset: flatbuffers.Offset, stringDataOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n Tensor.startTensor(builder);\r\n Tensor.addName(builder, nameOffset);\r\n Tensor.addDocString(builder, docStringOffset);\r\n Tensor.addDims(builder, dimsOffset);\r\n Tensor.addDataType(builder, dataType);\r\n Tensor.addRawData(builder, rawDataOffset);\r\n Tensor.addStringData(builder, stringDataOffset);\r\n return Tensor.endTensor(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class SparseTensor {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns SparseTensor\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): SparseTensor {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param SparseTensor= obj\r\n * @returns SparseTensor\r\n */\r\n static getRootAsSparseTensor(bb: flatbuffers.ByteBuffer, obj?: SparseTensor): SparseTensor {\r\n return (obj || new SparseTensor()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param SparseTensor= obj\r\n * @returns SparseTensor\r\n */\r\n static getSizePrefixedRootAsSparseTensor(bb: flatbuffers.ByteBuffer, obj?: SparseTensor): SparseTensor {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new SparseTensor()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param onnxruntime.experimental.fbs.Tensor= obj\r\n * @returns onnxruntime.experimental.fbs.Tensor|null\r\n */\r\n values(obj?: onnxruntime.experimental.fbs.Tensor): onnxruntime.experimental.fbs.Tensor|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.Tensor())\r\n .__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @param onnxruntime.experimental.fbs.Tensor= obj\r\n * @returns onnxruntime.experimental.fbs.Tensor|null\r\n */\r\n indices(obj?: onnxruntime.experimental.fbs.Tensor): onnxruntime.experimental.fbs.Tensor|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.Tensor())\r\n .__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @returns flatbuffers.Long\r\n */\r\n dims(index: number): flatbuffers.Long|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 8);\r\n return offset ? this.bb!.readInt64(this.bb!.__vector(this.bb_pos + offset) + index * 8) :\r\n this.bb!.createLong(0, 0);\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n dimsLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 8);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startSparseTensor(builder: flatbuffers.Builder) {\r\n builder.startObject(3);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset valuesOffset\r\n */\r\n static addValues(builder: flatbuffers.Builder, valuesOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(0, valuesOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset indicesOffset\r\n */\r\n static addIndices(builder: flatbuffers.Builder, indicesOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(1, indicesOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset dimsOffset\r\n */\r\n static addDims(builder: flatbuffers.Builder, dimsOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(2, dimsOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createDimsVector(builder: flatbuffers.Builder, data: flatbuffers.Long[]): flatbuffers.Offset {\r\n builder.startVector(8, data.length, 8);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addInt64(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startDimsVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(8, numElems, 8);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endSparseTensor(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n static createSparseTensor(\r\n builder: flatbuffers.Builder, valuesOffset: flatbuffers.Offset, indicesOffset: flatbuffers.Offset,\r\n dimsOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n SparseTensor.startSparseTensor(builder);\r\n SparseTensor.addValues(builder, valuesOffset);\r\n SparseTensor.addIndices(builder, indicesOffset);\r\n SparseTensor.addDims(builder, dimsOffset);\r\n return SparseTensor.endSparseTensor(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class Attribute {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns Attribute\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): Attribute {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param Attribute= obj\r\n * @returns Attribute\r\n */\r\n static getRootAsAttribute(bb: flatbuffers.ByteBuffer, obj?: Attribute): Attribute {\r\n return (obj || new Attribute()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param Attribute= obj\r\n * @returns Attribute\r\n */\r\n static getSizePrefixedRootAsAttribute(bb: flatbuffers.ByteBuffer, obj?: Attribute): Attribute {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new Attribute()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n name(): string|null;\r\n name(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n name(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n docString(): string|null;\r\n docString(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n docString(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @returns onnxruntime.experimental.fbs.AttributeType\r\n */\r\n type(): onnxruntime.experimental.fbs.AttributeType {\r\n let offset = this.bb!.__offset(this.bb_pos, 8);\r\n return offset ? /** */ (this.bb!.readInt32(this.bb_pos + offset)) :\r\n onnxruntime.experimental.fbs.AttributeType.UNDEFINED;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n f(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 10);\r\n return offset ? this.bb!.readFloat32(this.bb_pos + offset) : 0.0;\r\n }\r\n\r\n /**\r\n * @returns flatbuffers.Long\r\n */\r\n i(): flatbuffers.Long {\r\n let offset = this.bb!.__offset(this.bb_pos, 12);\r\n return offset ? this.bb!.readInt64(this.bb_pos + offset) : this.bb!.createLong(0, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n s(): string|null;\r\n s(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n s(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 14);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @param onnxruntime.experimental.fbs.Tensor= obj\r\n * @returns onnxruntime.experimental.fbs.Tensor|null\r\n */\r\n t(obj?: onnxruntime.experimental.fbs.Tensor): onnxruntime.experimental.fbs.Tensor|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 16);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.Tensor())\r\n .__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @param onnxruntime.experimental.fbs.Graph= obj\r\n * @returns onnxruntime.experimental.fbs.Graph|null\r\n */\r\n g(obj?: onnxruntime.experimental.fbs.Graph): onnxruntime.experimental.fbs.Graph|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 18);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.Graph())\r\n .__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @returns number\r\n */\r\n floats(index: number): number|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 20);\r\n return offset ? this.bb!.readFloat32(this.bb!.__vector(this.bb_pos + offset) + index * 4) : 0;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n floatsLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 20);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @returns Float32Array\r\n */\r\n floatsArray(): Float32Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 20);\r\n return offset ?\r\n new Float32Array(\r\n this.bb!.bytes().buffer, this.bb!.bytes().byteOffset + this.bb!.__vector(this.bb_pos + offset),\r\n this.bb!.__vector_len(this.bb_pos + offset)) :\r\n null;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @returns flatbuffers.Long\r\n */\r\n ints(index: number): flatbuffers.Long|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 22);\r\n return offset ? this.bb!.readInt64(this.bb!.__vector(this.bb_pos + offset) + index * 8) :\r\n this.bb!.createLong(0, 0);\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n intsLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 22);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array\r\n */\r\n strings(index: number): string;\r\n strings(index: number, optionalEncoding: flatbuffers.Encoding): string|Uint8Array;\r\n strings(index: number, optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 24);\r\n return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n stringsLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 24);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param onnxruntime.experimental.fbs.Tensor= obj\r\n * @returns onnxruntime.experimental.fbs.Tensor\r\n */\r\n tensors(index: number, obj?: onnxruntime.experimental.fbs.Tensor): onnxruntime.experimental.fbs.Tensor|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 26);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.Tensor())\r\n .__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n tensorsLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 26);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param onnxruntime.experimental.fbs.Graph= obj\r\n * @returns onnxruntime.experimental.fbs.Graph\r\n */\r\n graphs(index: number, obj?: onnxruntime.experimental.fbs.Graph): onnxruntime.experimental.fbs.Graph|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 28);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.Graph())\r\n .__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n graphsLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 28);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startAttribute(builder: flatbuffers.Builder) {\r\n builder.startObject(13);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset nameOffset\r\n */\r\n static addName(builder: flatbuffers.Builder, nameOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(0, nameOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset docStringOffset\r\n */\r\n static addDocString(builder: flatbuffers.Builder, docStringOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(1, docStringOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param onnxruntime.experimental.fbs.AttributeType type\r\n */\r\n static addType(builder: flatbuffers.Builder, type: onnxruntime.experimental.fbs.AttributeType) {\r\n builder.addFieldInt32(2, type, onnxruntime.experimental.fbs.AttributeType.UNDEFINED);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number f\r\n */\r\n static addF(builder: flatbuffers.Builder, f: number) {\r\n builder.addFieldFloat32(3, f, 0.0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Long i\r\n */\r\n static addI(builder: flatbuffers.Builder, i: flatbuffers.Long) {\r\n builder.addFieldInt64(4, i, builder.createLong(0, 0));\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset sOffset\r\n */\r\n static addS(builder: flatbuffers.Builder, sOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(5, sOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset tOffset\r\n */\r\n static addT(builder: flatbuffers.Builder, tOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(6, tOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset gOffset\r\n */\r\n static addG(builder: flatbuffers.Builder, gOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(7, gOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset floatsOffset\r\n */\r\n static addFloats(builder: flatbuffers.Builder, floatsOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(8, floatsOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createFloatsVector(builder: flatbuffers.Builder, data: number[]|Uint8Array): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addFloat32(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startFloatsVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset intsOffset\r\n */\r\n static addInts(builder: flatbuffers.Builder, intsOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(9, intsOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createIntsVector(builder: flatbuffers.Builder, data: flatbuffers.Long[]): flatbuffers.Offset {\r\n builder.startVector(8, data.length, 8);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addInt64(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startIntsVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(8, numElems, 8);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset stringsOffset\r\n */\r\n static addStrings(builder: flatbuffers.Builder, stringsOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(10, stringsOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createStringsVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addOffset(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startStringsVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset tensorsOffset\r\n */\r\n static addTensors(builder: flatbuffers.Builder, tensorsOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(11, tensorsOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createTensorsVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addOffset(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startTensorsVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset graphsOffset\r\n */\r\n static addGraphs(builder: flatbuffers.Builder, graphsOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(12, graphsOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createGraphsVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addOffset(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startGraphsVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endAttribute(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n static createAttribute(\r\n builder: flatbuffers.Builder, nameOffset: flatbuffers.Offset, docStringOffset: flatbuffers.Offset,\r\n type: onnxruntime.experimental.fbs.AttributeType, f: number, i: flatbuffers.Long, sOffset: flatbuffers.Offset,\r\n tOffset: flatbuffers.Offset, gOffset: flatbuffers.Offset, floatsOffset: flatbuffers.Offset,\r\n intsOffset: flatbuffers.Offset, stringsOffset: flatbuffers.Offset, tensorsOffset: flatbuffers.Offset,\r\n graphsOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n Attribute.startAttribute(builder);\r\n Attribute.addName(builder, nameOffset);\r\n Attribute.addDocString(builder, docStringOffset);\r\n Attribute.addType(builder, type);\r\n Attribute.addF(builder, f);\r\n Attribute.addI(builder, i);\r\n Attribute.addS(builder, sOffset);\r\n Attribute.addT(builder, tOffset);\r\n Attribute.addG(builder, gOffset);\r\n Attribute.addFloats(builder, floatsOffset);\r\n Attribute.addInts(builder, intsOffset);\r\n Attribute.addStrings(builder, stringsOffset);\r\n Attribute.addTensors(builder, tensorsOffset);\r\n Attribute.addGraphs(builder, graphsOffset);\r\n return Attribute.endAttribute(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class Graph {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns Graph\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): Graph {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param Graph= obj\r\n * @returns Graph\r\n */\r\n static getRootAsGraph(bb: flatbuffers.ByteBuffer, obj?: Graph): Graph {\r\n return (obj || new Graph()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param Graph= obj\r\n * @returns Graph\r\n */\r\n static getSizePrefixedRootAsGraph(bb: flatbuffers.ByteBuffer, obj?: Graph): Graph {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new Graph()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param onnxruntime.experimental.fbs.Tensor= obj\r\n * @returns onnxruntime.experimental.fbs.Tensor\r\n */\r\n initializers(index: number, obj?: onnxruntime.experimental.fbs.Tensor): onnxruntime.experimental.fbs.Tensor|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.Tensor())\r\n .__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n initializersLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param onnxruntime.experimental.fbs.ValueInfo= obj\r\n * @returns onnxruntime.experimental.fbs.ValueInfo\r\n */\r\n nodeArgs(index: number, obj?: onnxruntime.experimental.fbs.ValueInfo): onnxruntime.experimental.fbs.ValueInfo|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.ValueInfo())\r\n .__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n nodeArgsLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param onnxruntime.experimental.fbs.Node= obj\r\n * @returns onnxruntime.experimental.fbs.Node\r\n */\r\n nodes(index: number, obj?: onnxruntime.experimental.fbs.Node): onnxruntime.experimental.fbs.Node|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 8);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.Node())\r\n .__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n nodesLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 8);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n maxNodeIndex(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 10);\r\n return offset ? this.bb!.readUint32(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param onnxruntime.experimental.fbs.NodeEdge= obj\r\n * @returns onnxruntime.experimental.fbs.NodeEdge\r\n */\r\n nodeEdges(index: number, obj?: onnxruntime.experimental.fbs.NodeEdge): onnxruntime.experimental.fbs.NodeEdge|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 12);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.NodeEdge())\r\n .__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n nodeEdgesLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 12);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array\r\n */\r\n inputs(index: number): string;\r\n inputs(index: number, optionalEncoding: flatbuffers.Encoding): string|Uint8Array;\r\n inputs(index: number, optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 14);\r\n return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n inputsLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 14);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array\r\n */\r\n outputs(index: number): string;\r\n outputs(index: number, optionalEncoding: flatbuffers.Encoding): string|Uint8Array;\r\n outputs(index: number, optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 16);\r\n return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n outputsLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 16);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param onnxruntime.experimental.fbs.SparseTensor= obj\r\n * @returns onnxruntime.experimental.fbs.SparseTensor\r\n */\r\n sparseInitializers(index: number, obj?: onnxruntime.experimental.fbs.SparseTensor):\r\n onnxruntime.experimental.fbs.SparseTensor|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 18);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.SparseTensor())\r\n .__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n sparseInitializersLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 18);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startGraph(builder: flatbuffers.Builder) {\r\n builder.startObject(8);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset initializersOffset\r\n */\r\n static addInitializers(builder: flatbuffers.Builder, initializersOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(0, initializersOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createInitializersVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addOffset(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startInitializersVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset nodeArgsOffset\r\n */\r\n static addNodeArgs(builder: flatbuffers.Builder, nodeArgsOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(1, nodeArgsOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createNodeArgsVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addOffset(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startNodeArgsVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset nodesOffset\r\n */\r\n static addNodes(builder: flatbuffers.Builder, nodesOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(2, nodesOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createNodesVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addOffset(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startNodesVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number maxNodeIndex\r\n */\r\n static addMaxNodeIndex(builder: flatbuffers.Builder, maxNodeIndex: number) {\r\n builder.addFieldInt32(3, maxNodeIndex, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset nodeEdgesOffset\r\n */\r\n static addNodeEdges(builder: flatbuffers.Builder, nodeEdgesOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(4, nodeEdgesOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createNodeEdgesVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addOffset(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startNodeEdgesVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset inputsOffset\r\n */\r\n static addInputs(builder: flatbuffers.Builder, inputsOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(5, inputsOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createInputsVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addOffset(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startInputsVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset outputsOffset\r\n */\r\n static addOutputs(builder: flatbuffers.Builder, outputsOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(6, outputsOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createOutputsVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addOffset(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startOutputsVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset sparseInitializersOffset\r\n */\r\n static addSparseInitializers(builder: flatbuffers.Builder, sparseInitializersOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(7, sparseInitializersOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createSparseInitializersVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]):\r\n flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addOffset(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startSparseInitializersVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endGraph(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n static createGraph(\r\n builder: flatbuffers.Builder, initializersOffset: flatbuffers.Offset, nodeArgsOffset: flatbuffers.Offset,\r\n nodesOffset: flatbuffers.Offset, maxNodeIndex: number, nodeEdgesOffset: flatbuffers.Offset,\r\n inputsOffset: flatbuffers.Offset, outputsOffset: flatbuffers.Offset,\r\n sparseInitializersOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n Graph.startGraph(builder);\r\n Graph.addInitializers(builder, initializersOffset);\r\n Graph.addNodeArgs(builder, nodeArgsOffset);\r\n Graph.addNodes(builder, nodesOffset);\r\n Graph.addMaxNodeIndex(builder, maxNodeIndex);\r\n Graph.addNodeEdges(builder, nodeEdgesOffset);\r\n Graph.addInputs(builder, inputsOffset);\r\n Graph.addOutputs(builder, outputsOffset);\r\n Graph.addSparseInitializers(builder, sparseInitializersOffset);\r\n return Graph.endGraph(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class Model {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns Model\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): Model {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param Model= obj\r\n * @returns Model\r\n */\r\n static getRootAsModel(bb: flatbuffers.ByteBuffer, obj?: Model): Model {\r\n return (obj || new Model()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param Model= obj\r\n * @returns Model\r\n */\r\n static getSizePrefixedRootAsModel(bb: flatbuffers.ByteBuffer, obj?: Model): Model {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new Model()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @returns flatbuffers.Long\r\n */\r\n irVersion(): flatbuffers.Long {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? this.bb!.readInt64(this.bb_pos + offset) : this.bb!.createLong(0, 0);\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param onnxruntime.experimental.fbs.OperatorSetId= obj\r\n * @returns onnxruntime.experimental.fbs.OperatorSetId\r\n */\r\n opsetImport(index: number, obj?: onnxruntime.experimental.fbs.OperatorSetId):\r\n onnxruntime.experimental.fbs.OperatorSetId|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.OperatorSetId())\r\n .__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n opsetImportLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n producerName(): string|null;\r\n producerName(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n producerName(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 8);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n producerVersion(): string|null;\r\n producerVersion(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n producerVersion(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 10);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n domain(): string|null;\r\n domain(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n domain(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 12);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @returns flatbuffers.Long\r\n */\r\n modelVersion(): flatbuffers.Long {\r\n let offset = this.bb!.__offset(this.bb_pos, 14);\r\n return offset ? this.bb!.readInt64(this.bb_pos + offset) : this.bb!.createLong(0, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n docString(): string|null;\r\n docString(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n docString(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 16);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @param onnxruntime.experimental.fbs.Graph= obj\r\n * @returns onnxruntime.experimental.fbs.Graph|null\r\n */\r\n graph(obj?: onnxruntime.experimental.fbs.Graph): onnxruntime.experimental.fbs.Graph|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 18);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.Graph())\r\n .__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n graphDocString(): string|null;\r\n graphDocString(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n graphDocString(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 20);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startModel(builder: flatbuffers.Builder) {\r\n builder.startObject(9);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Long irVersion\r\n */\r\n static addIrVersion(builder: flatbuffers.Builder, irVersion: flatbuffers.Long) {\r\n builder.addFieldInt64(0, irVersion, builder.createLong(0, 0));\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset opsetImportOffset\r\n */\r\n static addOpsetImport(builder: flatbuffers.Builder, opsetImportOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(1, opsetImportOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createOpsetImportVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addOffset(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startOpsetImportVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset producerNameOffset\r\n */\r\n static addProducerName(builder: flatbuffers.Builder, producerNameOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(2, producerNameOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset producerVersionOffset\r\n */\r\n static addProducerVersion(builder: flatbuffers.Builder, producerVersionOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(3, producerVersionOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset domainOffset\r\n */\r\n static addDomain(builder: flatbuffers.Builder, domainOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(4, domainOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Long modelVersion\r\n */\r\n static addModelVersion(builder: flatbuffers.Builder, modelVersion: flatbuffers.Long) {\r\n builder.addFieldInt64(5, modelVersion, builder.createLong(0, 0));\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset docStringOffset\r\n */\r\n static addDocString(builder: flatbuffers.Builder, docStringOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(6, docStringOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset graphOffset\r\n */\r\n static addGraph(builder: flatbuffers.Builder, graphOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(7, graphOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset graphDocStringOffset\r\n */\r\n static addGraphDocString(builder: flatbuffers.Builder, graphDocStringOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(8, graphDocStringOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endModel(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n static createModel(\r\n builder: flatbuffers.Builder, irVersion: flatbuffers.Long, opsetImportOffset: flatbuffers.Offset,\r\n producerNameOffset: flatbuffers.Offset, producerVersionOffset: flatbuffers.Offset,\r\n domainOffset: flatbuffers.Offset, modelVersion: flatbuffers.Long, docStringOffset: flatbuffers.Offset,\r\n graphOffset: flatbuffers.Offset, graphDocStringOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n Model.startModel(builder);\r\n Model.addIrVersion(builder, irVersion);\r\n Model.addOpsetImport(builder, opsetImportOffset);\r\n Model.addProducerName(builder, producerNameOffset);\r\n Model.addProducerVersion(builder, producerVersionOffset);\r\n Model.addDomain(builder, domainOffset);\r\n Model.addModelVersion(builder, modelVersion);\r\n Model.addDocString(builder, docStringOffset);\r\n Model.addGraph(builder, graphOffset);\r\n Model.addGraphDocString(builder, graphDocStringOffset);\r\n return Model.endModel(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class KernelCreateInfos {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns KernelCreateInfos\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): KernelCreateInfos {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param KernelCreateInfos= obj\r\n * @returns KernelCreateInfos\r\n */\r\n static getRootAsKernelCreateInfos(bb: flatbuffers.ByteBuffer, obj?: KernelCreateInfos): KernelCreateInfos {\r\n return (obj || new KernelCreateInfos()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param KernelCreateInfos= obj\r\n * @returns KernelCreateInfos\r\n */\r\n static getSizePrefixedRootAsKernelCreateInfos(bb: flatbuffers.ByteBuffer, obj?: KernelCreateInfos):\r\n KernelCreateInfos {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new KernelCreateInfos()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @returns number\r\n */\r\n nodeIndices(index: number): number|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? this.bb!.readUint32(this.bb!.__vector(this.bb_pos + offset) + index * 4) : 0;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n nodeIndicesLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @returns Uint32Array\r\n */\r\n nodeIndicesArray(): Uint32Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ?\r\n new Uint32Array(\r\n this.bb!.bytes().buffer, this.bb!.bytes().byteOffset + this.bb!.__vector(this.bb_pos + offset),\r\n this.bb!.__vector_len(this.bb_pos + offset)) :\r\n null;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @returns flatbuffers.Long\r\n */\r\n kernelDefHashes(index: number): flatbuffers.Long|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? this.bb!.readUint64(this.bb!.__vector(this.bb_pos + offset) + index * 8) :\r\n this.bb!.createLong(0, 0);\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n kernelDefHashesLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startKernelCreateInfos(builder: flatbuffers.Builder) {\r\n builder.startObject(2);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset nodeIndicesOffset\r\n */\r\n static addNodeIndices(builder: flatbuffers.Builder, nodeIndicesOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(0, nodeIndicesOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createNodeIndicesVector(builder: flatbuffers.Builder, data: number[]|Uint8Array): flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addInt32(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startNodeIndicesVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset kernelDefHashesOffset\r\n */\r\n static addKernelDefHashes(builder: flatbuffers.Builder, kernelDefHashesOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(1, kernelDefHashesOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createKernelDefHashesVector(builder: flatbuffers.Builder, data: flatbuffers.Long[]): flatbuffers.Offset {\r\n builder.startVector(8, data.length, 8);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addInt64(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startKernelDefHashesVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(8, numElems, 8);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endKernelCreateInfos(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n static createKernelCreateInfos(\r\n builder: flatbuffers.Builder, nodeIndicesOffset: flatbuffers.Offset,\r\n kernelDefHashesOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n KernelCreateInfos.startKernelCreateInfos(builder);\r\n KernelCreateInfos.addNodeIndices(builder, nodeIndicesOffset);\r\n KernelCreateInfos.addKernelDefHashes(builder, kernelDefHashesOffset);\r\n return KernelCreateInfos.endKernelCreateInfos(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class SubGraphSessionState {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns SubGraphSessionState\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): SubGraphSessionState {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param SubGraphSessionState= obj\r\n * @returns SubGraphSessionState\r\n */\r\n static getRootAsSubGraphSessionState(bb: flatbuffers.ByteBuffer, obj?: SubGraphSessionState): SubGraphSessionState {\r\n return (obj || new SubGraphSessionState()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param SubGraphSessionState= obj\r\n * @returns SubGraphSessionState\r\n */\r\n static getSizePrefixedRootAsSubGraphSessionState(bb: flatbuffers.ByteBuffer, obj?: SubGraphSessionState):\r\n SubGraphSessionState {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new SubGraphSessionState()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n graphId(): string|null;\r\n graphId(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n graphId(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @param onnxruntime.experimental.fbs.SessionState= obj\r\n * @returns onnxruntime.experimental.fbs.SessionState|null\r\n */\r\n sessionState(obj?: onnxruntime.experimental.fbs.SessionState): onnxruntime.experimental.fbs.SessionState|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.SessionState())\r\n .__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startSubGraphSessionState(builder: flatbuffers.Builder) {\r\n builder.startObject(2);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset graphIdOffset\r\n */\r\n static addGraphId(builder: flatbuffers.Builder, graphIdOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(0, graphIdOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset sessionStateOffset\r\n */\r\n static addSessionState(builder: flatbuffers.Builder, sessionStateOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(1, sessionStateOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endSubGraphSessionState(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n builder.requiredField(offset, 4); // graph_id\r\n return offset;\r\n }\r\n\r\n static createSubGraphSessionState(\r\n builder: flatbuffers.Builder, graphIdOffset: flatbuffers.Offset,\r\n sessionStateOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n SubGraphSessionState.startSubGraphSessionState(builder);\r\n SubGraphSessionState.addGraphId(builder, graphIdOffset);\r\n SubGraphSessionState.addSessionState(builder, sessionStateOffset);\r\n return SubGraphSessionState.endSubGraphSessionState(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class SessionState {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns SessionState\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): SessionState {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param SessionState= obj\r\n * @returns SessionState\r\n */\r\n static getRootAsSessionState(bb: flatbuffers.ByteBuffer, obj?: SessionState): SessionState {\r\n return (obj || new SessionState()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param SessionState= obj\r\n * @returns SessionState\r\n */\r\n static getSizePrefixedRootAsSessionState(bb: flatbuffers.ByteBuffer, obj?: SessionState): SessionState {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new SessionState()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param onnxruntime.experimental.fbs.KernelCreateInfos= obj\r\n * @returns onnxruntime.experimental.fbs.KernelCreateInfos|null\r\n */\r\n kernels(obj?: onnxruntime.experimental.fbs.KernelCreateInfos): onnxruntime.experimental.fbs.KernelCreateInfos|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.KernelCreateInfos())\r\n .__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @param number index\r\n * @param onnxruntime.experimental.fbs.SubGraphSessionState= obj\r\n * @returns onnxruntime.experimental.fbs.SubGraphSessionState\r\n */\r\n subGraphSessionStates(index: number, obj?: onnxruntime.experimental.fbs.SubGraphSessionState):\r\n onnxruntime.experimental.fbs.SubGraphSessionState|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.SubGraphSessionState())\r\n .__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @returns number\r\n */\r\n subGraphSessionStatesLength(): number {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startSessionState(builder: flatbuffers.Builder) {\r\n builder.startObject(2);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset kernelsOffset\r\n */\r\n static addKernels(builder: flatbuffers.Builder, kernelsOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(0, kernelsOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset subGraphSessionStatesOffset\r\n */\r\n static addSubGraphSessionStates(builder: flatbuffers.Builder, subGraphSessionStatesOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(1, subGraphSessionStatesOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param Array. data\r\n * @returns flatbuffers.Offset\r\n */\r\n static createSubGraphSessionStatesVector(builder: flatbuffers.Builder, data: flatbuffers.Offset[]):\r\n flatbuffers.Offset {\r\n builder.startVector(4, data.length, 4);\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n builder.addOffset(data[i]);\r\n }\r\n return builder.endVector();\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param number numElems\r\n */\r\n static startSubGraphSessionStatesVector(builder: flatbuffers.Builder, numElems: number) {\r\n builder.startVector(4, numElems, 4);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endSessionState(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n static createSessionState(\r\n builder: flatbuffers.Builder, kernelsOffset: flatbuffers.Offset,\r\n subGraphSessionStatesOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n SessionState.startSessionState(builder);\r\n SessionState.addKernels(builder, kernelsOffset);\r\n SessionState.addSubGraphSessionStates(builder, subGraphSessionStatesOffset);\r\n return SessionState.endSessionState(builder);\r\n }\r\n }\r\n}\r\n/**\r\n * @constructor\r\n */\r\nexport namespace onnxruntime.experimental.fbs {\r\n export class InferenceSession {\r\n bb: flatbuffers.ByteBuffer|null = null;\r\n\r\n bb_pos = 0;\r\n /**\r\n * @param number i\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns InferenceSession\r\n */\r\n __init(i: number, bb: flatbuffers.ByteBuffer): InferenceSession {\r\n this.bb_pos = i;\r\n this.bb = bb;\r\n return this;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param InferenceSession= obj\r\n * @returns InferenceSession\r\n */\r\n static getRootAsInferenceSession(bb: flatbuffers.ByteBuffer, obj?: InferenceSession): InferenceSession {\r\n return (obj || new InferenceSession()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @param InferenceSession= obj\r\n * @returns InferenceSession\r\n */\r\n static getSizePrefixedRootAsInferenceSession(bb: flatbuffers.ByteBuffer, obj?: InferenceSession): InferenceSession {\r\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\r\n return (obj || new InferenceSession()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.ByteBuffer bb\r\n * @returns boolean\r\n */\r\n static bufferHasIdentifier(bb: flatbuffers.ByteBuffer): boolean {\r\n return bb.__has_identifier('ORTM');\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Encoding= optionalEncoding\r\n * @returns string|Uint8Array|null\r\n */\r\n ortVersion(): string|null;\r\n ortVersion(optionalEncoding: flatbuffers.Encoding): string|Uint8Array|null;\r\n ortVersion(optionalEncoding?: any): string|Uint8Array|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 4);\r\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\r\n }\r\n\r\n /**\r\n * @param onnxruntime.experimental.fbs.Model= obj\r\n * @returns onnxruntime.experimental.fbs.Model|null\r\n */\r\n model(obj?: onnxruntime.experimental.fbs.Model): onnxruntime.experimental.fbs.Model|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 6);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.Model())\r\n .__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @param onnxruntime.experimental.fbs.SessionState= obj\r\n * @returns onnxruntime.experimental.fbs.SessionState|null\r\n */\r\n sessionState(obj?: onnxruntime.experimental.fbs.SessionState): onnxruntime.experimental.fbs.SessionState|null {\r\n let offset = this.bb!.__offset(this.bb_pos, 8);\r\n return offset ? (obj || new onnxruntime.experimental.fbs.SessionState())\r\n .__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) :\r\n null;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n */\r\n static startInferenceSession(builder: flatbuffers.Builder) {\r\n builder.startObject(3);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset ortVersionOffset\r\n */\r\n static addOrtVersion(builder: flatbuffers.Builder, ortVersionOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(0, ortVersionOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset modelOffset\r\n */\r\n static addModel(builder: flatbuffers.Builder, modelOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(1, modelOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset sessionStateOffset\r\n */\r\n static addSessionState(builder: flatbuffers.Builder, sessionStateOffset: flatbuffers.Offset) {\r\n builder.addFieldOffset(2, sessionStateOffset, 0);\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @returns flatbuffers.Offset\r\n */\r\n static endInferenceSession(builder: flatbuffers.Builder): flatbuffers.Offset {\r\n let offset = builder.endObject();\r\n return offset;\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset offset\r\n */\r\n static finishInferenceSessionBuffer(builder: flatbuffers.Builder, offset: flatbuffers.Offset) {\r\n builder.finish(offset, 'ORTM');\r\n }\r\n\r\n /**\r\n * @param flatbuffers.Builder builder\r\n * @param flatbuffers.Offset offset\r\n */\r\n static finishSizePrefixedInferenceSessionBuffer(builder: flatbuffers.Builder, offset: flatbuffers.Offset) {\r\n builder.finish(offset, 'ORTM', true);\r\n }\r\n\r\n static createInferenceSession(\r\n builder: flatbuffers.Builder, ortVersionOffset: flatbuffers.Offset, modelOffset: flatbuffers.Offset,\r\n sessionStateOffset: flatbuffers.Offset): flatbuffers.Offset {\r\n InferenceSession.startInferenceSession(builder);\r\n InferenceSession.addOrtVersion(builder, ortVersionOffset);\r\n InferenceSession.addModel(builder, modelOffset);\r\n InferenceSession.addSessionState(builder, sessionStateOffset);\r\n return InferenceSession.endInferenceSession(builder);\r\n }\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {InferenceSession, SessionHandler, Tensor} from 'onnxruntime-common';\r\nimport {Session} from './session';\r\nimport {Tensor as OnnxjsTensor} from './tensor';\r\n\r\nexport class OnnxjsSessionHandler implements SessionHandler {\r\n constructor(private session: Session) {\r\n this.inputNames = this.session.inputNames;\r\n this.outputNames = this.session.outputNames;\r\n }\r\n\r\n async dispose(): Promise {}\r\n inputNames: readonly string[];\r\n outputNames: readonly string[];\r\n async run(\r\n feeds: SessionHandler.FeedsType, _fetches: SessionHandler.FetchesType,\r\n _options: InferenceSession.RunOptions): Promise {\r\n const inputMap = new Map();\r\n for (const name in feeds) {\r\n if (Object.hasOwnProperty.call(feeds, name)) {\r\n const feed = feeds[name];\r\n inputMap.set(\r\n name,\r\n new OnnxjsTensor(\r\n feed.dims, feed.type as OnnxjsTensor.DataType, undefined, undefined,\r\n feed.data as OnnxjsTensor.NumberType));\r\n }\r\n }\r\n const outputMap = await this.session.run(inputMap);\r\n const output: SessionHandler.ReturnType = {};\r\n outputMap.forEach((tensor, name) => {\r\n output[name] = new Tensor(tensor.type, tensor.data, tensor.dims);\r\n });\r\n return output;\r\n }\r\n startProfiling(): void {\r\n this.session.startProfiling();\r\n }\r\n endProfiling(): void {\r\n this.session.endProfiling();\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {readFile} from 'fs';\r\nimport {promisify} from 'util';\r\n\r\nimport {resolveBackend, SessionHandlerType} from './backend';\r\nimport {ExecutionPlan} from './execution-plan';\r\nimport {Graph} from './graph';\r\nimport {Profiler} from './instrument';\r\nimport {Model} from './model';\r\nimport {Operator} from './operators';\r\nimport {Tensor} from './tensor';\r\n\r\nexport declare namespace Session {\r\n export interface Config {\r\n backendHint?: string;\r\n profiler?: Profiler.Config;\r\n }\r\n\r\n export interface Context {\r\n profiler: Readonly;\r\n graphInputTypes?: Tensor.DataType[];\r\n graphInputDims?: Array;\r\n }\r\n}\r\n\r\nexport class Session {\r\n constructor(config: Session.Config = {}) {\r\n this._initialized = false;\r\n this.backendHint = config.backendHint;\r\n this.profiler = Profiler.create(config.profiler);\r\n this.context = {profiler: this.profiler, graphInputTypes: [], graphInputDims: []};\r\n }\r\n\r\n get inputNames(): readonly string[] {\r\n return this._model.graph.getInputNames();\r\n }\r\n get outputNames(): readonly string[] {\r\n return this._model.graph.getOutputNames();\r\n }\r\n\r\n startProfiling() {\r\n this.profiler.start();\r\n }\r\n\r\n endProfiling() {\r\n this.profiler.stop();\r\n }\r\n\r\n async loadModel(uri: string): Promise;\r\n async loadModel(buffer: ArrayBuffer, byteOffset?: number, length?: number): Promise;\r\n async loadModel(buffer: Uint8Array): Promise;\r\n async loadModel(arg: string|ArrayBuffer|Uint8Array, byteOffset?: number, length?: number): Promise {\r\n await this.profiler.event('session', 'Session.loadModel', async () => {\r\n // resolve backend and session handler\r\n const backend = await resolveBackend(this.backendHint);\r\n this.sessionHandler = backend.createSessionHandler(this.context);\r\n\r\n this._model = new Model();\r\n if (typeof arg === 'string') {\r\n const isOrtFormat = arg.endsWith('.ort');\r\n if (typeof fetch === 'undefined') {\r\n // node\r\n const buf = await promisify(readFile)(arg);\r\n this.initialize(buf, isOrtFormat);\r\n } else {\r\n // browser\r\n const response = await fetch(arg);\r\n const buf = await response.arrayBuffer();\r\n this.initialize(new Uint8Array(buf), isOrtFormat);\r\n }\r\n } else if (!ArrayBuffer.isView(arg)) {\r\n // load model from ArrayBuffer\r\n const arr = new Uint8Array(arg, byteOffset || 0, length || arg.byteLength);\r\n this.initialize(arr);\r\n } else {\r\n // load model from Uint8array\r\n this.initialize(arg);\r\n }\r\n });\r\n }\r\n\r\n private initialize(modelProtoBlob: Uint8Array, isOrtFormat?: boolean): void {\r\n if (this._initialized) {\r\n throw new Error('already initialized');\r\n }\r\n\r\n this.profiler.event('session', 'Session.initialize', () => {\r\n // load graph\r\n const graphInitializer =\r\n this.sessionHandler.transformGraph ? this.sessionHandler as Graph.Initializer : undefined;\r\n this._model.load(modelProtoBlob, graphInitializer, isOrtFormat);\r\n\r\n // graph is completely initialzied at this stage , let the interested handlers know\r\n if (this.sessionHandler.onGraphInitialized) {\r\n this.sessionHandler.onGraphInitialized(this._model.graph);\r\n }\r\n // initialize each operator in the graph\r\n this.initializeOps(this._model.graph);\r\n\r\n // instantiate an ExecutionPlan object to be used by the Session object\r\n this._executionPlan = new ExecutionPlan(this._model.graph, this._ops, this.profiler);\r\n });\r\n\r\n this._initialized = true;\r\n }\r\n\r\n async run(inputs: Map|Tensor[]): Promise> {\r\n if (!this._initialized) {\r\n throw new Error('session not initialized yet');\r\n }\r\n\r\n return this.profiler.event('session', 'Session.run', async () => {\r\n const inputTensors = this.normalizeAndValidateInputs(inputs);\r\n\r\n const outputTensors = await this._executionPlan.execute(this.sessionHandler, inputTensors);\r\n\r\n return this.createOutput(outputTensors);\r\n });\r\n }\r\n\r\n private normalizeAndValidateInputs(inputs: Map|Tensor[]): Tensor[] {\r\n const modelInputNames = this._model.graph.getInputNames();\r\n\r\n // normalize inputs\r\n // inputs: Tensor[]\r\n if (Array.isArray(inputs)) {\r\n if (inputs.length !== modelInputNames.length) {\r\n throw new Error(`incorrect input array length: expected ${modelInputNames.length} but got ${inputs.length}`);\r\n }\r\n }\r\n // convert map to array\r\n // inputs: Map\r\n else {\r\n if (inputs.size !== modelInputNames.length) {\r\n throw new Error(`incorrect input map size: expected ${modelInputNames.length} but got ${inputs.size}`);\r\n }\r\n\r\n const sortedInputs = new Array(inputs.size);\r\n let sortedInputsIndex = 0;\r\n for (let i = 0; i < modelInputNames.length; ++i) {\r\n const tensor = inputs.get(modelInputNames[i]);\r\n if (!tensor) {\r\n throw new Error(`missing input tensor for: '${name}'`);\r\n }\r\n sortedInputs[sortedInputsIndex++] = tensor;\r\n }\r\n\r\n inputs = sortedInputs;\r\n }\r\n\r\n // validate dims requirements\r\n // First session run - graph input data is not cached for the session\r\n if (!this.context.graphInputTypes || this.context.graphInputTypes.length === 0 || !this.context.graphInputDims ||\r\n this.context.graphInputDims.length === 0) {\r\n const modelInputIndices = this._model.graph.getInputIndices();\r\n const modelValues = this._model.graph.getValues();\r\n\r\n const graphInputDims = new Array(modelInputIndices.length);\r\n\r\n for (let i = 0; i < modelInputIndices.length; ++i) {\r\n const graphInput = modelValues[modelInputIndices[i]];\r\n graphInputDims[i] = graphInput.type!.shape.dims;\r\n\r\n // cached for second and subsequent runs.\r\n // Some parts of the framework works on the assumption that the graph and types and shapes are static\r\n this.context.graphInputTypes!.push(graphInput.type!.tensorType);\r\n this.context.graphInputDims!.push(inputs[i].dims);\r\n }\r\n\r\n this.validateInputTensorDims(graphInputDims, inputs, true);\r\n }\r\n\r\n // Second and subsequent session runs - graph input data is cached for the session\r\n else {\r\n this.validateInputTensorDims(this.context.graphInputDims, inputs, false);\r\n }\r\n\r\n // validate types requirement\r\n this.validateInputTensorTypes(this.context.graphInputTypes!, inputs);\r\n\r\n return inputs;\r\n }\r\n\r\n private validateInputTensorTypes(graphInputTypes: Tensor.DataType[], givenInputs: Tensor[]) {\r\n for (let i = 0; i < givenInputs.length; i++) {\r\n const expectedType = graphInputTypes[i];\r\n const actualType = givenInputs[i].type;\r\n if (expectedType !== actualType) {\r\n throw new Error(`input tensor[${i}] check failed: expected type '${expectedType}' but got ${actualType}`);\r\n }\r\n }\r\n }\r\n\r\n private validateInputTensorDims(\r\n graphInputDims: Array, givenInputs: Tensor[], noneDimSupported: boolean) {\r\n for (let i = 0; i < givenInputs.length; i++) {\r\n const expectedDims = graphInputDims[i];\r\n const actualDims = givenInputs[i].dims;\r\n if (!this.compareTensorDims(expectedDims, actualDims, noneDimSupported)) {\r\n throw new Error(`input tensor[${i}] check failed: expected shape '[${expectedDims.join(',')}]' but got [${\r\n actualDims.join(',')}]`);\r\n }\r\n }\r\n }\r\n\r\n private compareTensorDims(expectedDims: readonly number[], actualDims: readonly number[], noneDimSupported: boolean):\r\n boolean {\r\n if (expectedDims.length !== actualDims.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < expectedDims.length; ++i) {\r\n if (expectedDims[i] !== actualDims[i] && (!noneDimSupported || expectedDims[i] !== 0)) {\r\n // data shape mis-match AND not a 'None' dimension.\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private createOutput(outputTensors: Tensor[]): Map {\r\n const modelOutputNames = this._model.graph.getOutputNames();\r\n if (outputTensors.length !== modelOutputNames.length) {\r\n throw new Error('expected number of outputs do not match number of generated outputs');\r\n }\r\n\r\n const output = new Map();\r\n for (let i = 0; i < modelOutputNames.length; ++i) {\r\n output.set(modelOutputNames[i], outputTensors[i]);\r\n }\r\n\r\n return output;\r\n }\r\n\r\n private initializeOps(graph: Graph): void {\r\n const nodes = graph.getNodes();\r\n this._ops = new Array(nodes.length);\r\n\r\n for (let i = 0; i < nodes.length; i++) {\r\n this._ops[i] = this.sessionHandler.resolve(nodes[i], this._model.opsets, graph);\r\n }\r\n }\r\n\r\n private _model: Model;\r\n private _initialized: boolean;\r\n\r\n private _ops: Operator[];\r\n private _executionPlan: ExecutionPlan;\r\n\r\n private backendHint?: string;\r\n\r\n private sessionHandler: SessionHandlerType;\r\n private context: Session.Context;\r\n private profiler: Readonly;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Guid} from 'guid-typescript';\r\nimport Long from 'long';\r\nimport {onnx} from 'onnx-proto';\r\n\r\nimport {onnxruntime} from './ort-schema/ort-generated';\r\n\r\nimport ortFbs = onnxruntime.experimental.fbs;\r\n\r\nimport {decodeUtf8String, ProtoUtil, ShapeUtil} from './util';\r\n\r\nexport declare namespace Tensor {\r\n export interface DataTypeMap {\r\n bool: Uint8Array;\r\n float32: Float32Array;\r\n float64: Float64Array;\r\n string: string[];\r\n int8: Int8Array;\r\n uint8: Uint8Array;\r\n int16: Int16Array;\r\n uint16: Uint16Array;\r\n int32: Int32Array;\r\n uint32: Uint32Array;\r\n }\r\n\r\n export type DataType = keyof DataTypeMap;\r\n\r\n export type StringType = Tensor.DataTypeMap['string'];\r\n export type BooleanType = Tensor.DataTypeMap['bool'];\r\n export type IntegerType = Tensor.DataTypeMap['int8']|Tensor.DataTypeMap['uint8']|Tensor.DataTypeMap['int16']|\r\n Tensor.DataTypeMap['uint16']|Tensor.DataTypeMap['int32']|Tensor.DataTypeMap['uint32'];\r\n export type FloatType = Tensor.DataTypeMap['float32']|Tensor.DataTypeMap['float64'];\r\n export type NumberType = BooleanType|IntegerType|FloatType;\r\n\r\n export type Id = Guid;\r\n}\r\n\r\ntype TensorData = Tensor.DataTypeMap[Tensor.DataType];\r\n\r\ntype DataProvider = (id: Tensor.Id) => TensorData;\r\ntype AsyncDataProvider = (id: Tensor.Id) => Promise;\r\n\r\nexport class Tensor {\r\n /**\r\n * get the underlying tensor data\r\n */\r\n get data(): TensorData {\r\n if (this.cache === undefined) {\r\n const data = this.dataProvider!(this.dataId);\r\n if (data.length !== this.size) {\r\n throw new Error('Length of data provided by the Data Provider is inconsistent with the dims of this Tensor.');\r\n }\r\n this.cache = data;\r\n }\r\n return this.cache;\r\n }\r\n\r\n /**\r\n * get the underlying string tensor data. Should only use when type is STRING\r\n */\r\n get stringData() {\r\n if (this.type !== 'string') {\r\n throw new TypeError('data type is not string');\r\n }\r\n\r\n return this.data as Tensor.StringType;\r\n }\r\n\r\n /**\r\n * get the underlying integer tensor data. Should only use when type is one of the following: (UINT8, INT8, UINT16,\r\n * INT16, INT32, UINT32, BOOL)\r\n */\r\n get integerData() {\r\n switch (this.type) {\r\n case 'uint8':\r\n case 'int8':\r\n case 'uint16':\r\n case 'int16':\r\n case 'int32':\r\n case 'uint32':\r\n case 'bool':\r\n return this.data as Tensor.IntegerType;\r\n\r\n default:\r\n throw new TypeError('data type is not integer (uint8, int8, uint16, int16, int32, uint32, bool)');\r\n }\r\n }\r\n\r\n /**\r\n * get the underlying float tensor data. Should only use when type is one of the following: (FLOAT, DOUBLE)\r\n */\r\n get floatData() {\r\n switch (this.type) {\r\n case 'float32':\r\n case 'float64':\r\n return this.data as Tensor.FloatType;\r\n\r\n default:\r\n throw new TypeError('data type is not float (float32, float64)');\r\n }\r\n }\r\n\r\n /**\r\n * get the underlying number tensor data. Should only use when type is one of the following: (UINT8, INT8, UINT16,\r\n * INT16, INT32, UINT32, BOOL, FLOAT, DOUBLE)\r\n */\r\n get numberData() {\r\n if (this.type !== 'string') {\r\n return this.data as Tensor.NumberType;\r\n }\r\n throw new TypeError('type cannot be non-number (string)');\r\n }\r\n\r\n /**\r\n * get value of an element at the given indices\r\n */\r\n get(indices: readonly number[]): Tensor.DataTypeMap[Tensor.DataType][number] {\r\n return this.data[ShapeUtil.indicesToOffset(indices, this.strides)];\r\n }\r\n\r\n /**\r\n * set value of an element at the given indices\r\n */\r\n set(indices: readonly number[], value: Tensor.DataTypeMap[Tensor.DataType][number]) {\r\n this.data[ShapeUtil.indicesToOffset(indices, this.strides)] = value;\r\n }\r\n\r\n /**\r\n * get the underlying tensor data asynchronously\r\n */\r\n async getData(): Promise {\r\n if (this.cache === undefined) {\r\n this.cache = await this.asyncDataProvider!(this.dataId);\r\n }\r\n return this.cache;\r\n }\r\n\r\n /**\r\n * get the number of elements in the tensor\r\n */\r\n public readonly size: number;\r\n\r\n private _strides: readonly number[];\r\n /**\r\n * get the strides for each dimension\r\n */\r\n get strides(): readonly number[] {\r\n if (!this._strides) {\r\n this._strides = ShapeUtil.computeStrides(this.dims);\r\n }\r\n return this._strides;\r\n }\r\n\r\n constructor(\r\n /**\r\n * get the dimensions of the tensor\r\n */\r\n public readonly dims: readonly number[],\r\n /**\r\n * get the type of the tensor\r\n */\r\n public readonly type: Tensor.DataType, private dataProvider?: DataProvider,\r\n private asyncDataProvider?: AsyncDataProvider, private cache?: TensorData,\r\n /**\r\n * get the data ID that used to map to a tensor data\r\n */\r\n public readonly dataId: Guid = Guid.create()) {\r\n this.size = ShapeUtil.validateDimsAndCalcSize(dims);\r\n const size = this.size;\r\n const empty = (dataProvider === undefined && asyncDataProvider === undefined && cache === undefined);\r\n\r\n if (cache !== undefined) {\r\n if (cache.length !== size) {\r\n throw new RangeError('Input dims doesn\\'t match data length.');\r\n }\r\n }\r\n\r\n if (type === 'string') {\r\n if (cache !== undefined && (!Array.isArray(cache) || !cache.every(i => typeof i === 'string'))) {\r\n throw new TypeError('cache should be a string array');\r\n }\r\n\r\n if (empty) {\r\n this.cache = new Array(size);\r\n }\r\n } else {\r\n if (cache !== undefined) {\r\n const constructor = dataviewConstructor(type);\r\n if (!(cache instanceof constructor)) {\r\n throw new TypeError(`cache should be type ${constructor.name}`);\r\n }\r\n }\r\n\r\n if (empty) {\r\n const buf = new ArrayBuffer(size * sizeof(type));\r\n this.cache = createView(buf, type);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Construct new Tensor from a ONNX Tensor object\r\n * @param tensorProto the ONNX Tensor\r\n */\r\n static fromProto(tensorProto: onnx.ITensorProto): Tensor {\r\n if (!tensorProto) {\r\n throw new Error('cannot construct Value from an empty tensor');\r\n }\r\n const type = ProtoUtil.tensorDataTypeFromProto(tensorProto.dataType!);\r\n const dims = ProtoUtil.tensorDimsFromProto(tensorProto.dims!);\r\n\r\n const value = new Tensor(dims, type);\r\n\r\n if (type === 'string') {\r\n // When it's STRING type, the value should always be stored in field\r\n // 'stringData'\r\n tensorProto.stringData!.forEach((str, i) => {\r\n value.data[i] = decodeUtf8String(str);\r\n });\r\n\r\n } else if (\r\n tensorProto.rawData && typeof tensorProto.rawData.byteLength === 'number' &&\r\n tensorProto.rawData.byteLength > 0) {\r\n // NOT considering segment for now (IMPORTANT)\r\n\r\n // populate value from rawData\r\n const dataDest = value.data;\r\n const dataSource =\r\n new DataView(tensorProto.rawData.buffer, tensorProto.rawData.byteOffset, tensorProto.rawData.byteLength);\r\n const elementSize = sizeofProto(tensorProto.dataType!);\r\n const length = tensorProto.rawData.byteLength / elementSize;\r\n\r\n if (tensorProto.rawData.byteLength % elementSize !== 0) {\r\n throw new Error('invalid buffer length');\r\n }\r\n if (dataDest.length !== length) {\r\n throw new Error('buffer length mismatch');\r\n }\r\n\r\n for (let i = 0; i < length; i++) {\r\n const n = readProto(dataSource, tensorProto.dataType!, i * elementSize);\r\n dataDest[i] = n;\r\n }\r\n } else {\r\n // populate value from array\r\n let array: Array;\r\n switch (tensorProto.dataType) {\r\n case onnx.TensorProto.DataType.FLOAT:\r\n array = tensorProto.floatData!;\r\n break;\r\n case onnx.TensorProto.DataType.INT32:\r\n case onnx.TensorProto.DataType.INT16:\r\n case onnx.TensorProto.DataType.UINT16:\r\n case onnx.TensorProto.DataType.INT8:\r\n case onnx.TensorProto.DataType.UINT8:\r\n case onnx.TensorProto.DataType.BOOL:\r\n array = tensorProto.int32Data!;\r\n break;\r\n case onnx.TensorProto.DataType.INT64:\r\n array = tensorProto.int64Data!;\r\n break;\r\n case onnx.TensorProto.DataType.DOUBLE:\r\n array = tensorProto.doubleData!;\r\n break;\r\n case onnx.TensorProto.DataType.UINT32:\r\n case onnx.TensorProto.DataType.UINT64:\r\n array = tensorProto.uint64Data!;\r\n break;\r\n default:\r\n // should never run here\r\n throw new Error('unspecific error');\r\n }\r\n\r\n if (array === null || array === undefined) {\r\n throw new Error('failed to populate data from a tensorproto value');\r\n }\r\n\r\n const data = value.data;\r\n if (data.length !== array.length) {\r\n throw new Error('array length mismatch');\r\n }\r\n\r\n for (let i = 0; i < array.length; i++) {\r\n const element = array[i];\r\n if (Long.isLong(element)) {\r\n data[i] = longToNumber(element, tensorProto.dataType);\r\n } else {\r\n data[i] = element;\r\n }\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Construct new Tensor from raw data\r\n * @param data the raw data object. Should be a string array for 'string' tensor, and the corresponding typed array\r\n * for other types of tensor.\r\n * @param dims the dimensions of the tensor\r\n * @param type the type of the tensor\r\n */\r\n static fromData(data: Tensor.DataTypeMap[Tensor.DataType], dims: readonly number[], type: Tensor.DataType) {\r\n return new Tensor(dims, type, undefined, undefined, data);\r\n }\r\n\r\n static fromOrtTensor(ortTensor: ortFbs.Tensor) {\r\n if (!ortTensor) {\r\n throw new Error('cannot construct Value from an empty tensor');\r\n }\r\n const dims = ProtoUtil.tensorDimsFromORTFormat(ortTensor);\r\n const type = ProtoUtil.tensorDataTypeFromProto(ortTensor.dataType());\r\n\r\n const value = new Tensor(dims, type);\r\n\r\n if (type === 'string') {\r\n // When it's STRING type, the value should always be stored in field\r\n // 'stringData'\r\n for (let i = 0; i < ortTensor.stringDataLength(); i++) {\r\n value.data[i] = ortTensor.stringData(i);\r\n }\r\n\r\n } else if (\r\n ortTensor.rawDataArray() && typeof ortTensor.rawDataLength() === 'number' && ortTensor.rawDataLength() > 0) {\r\n // NOT considering segment for now (IMPORTANT)\r\n\r\n // populate value from rawData\r\n const dataDest = value.data;\r\n const dataSource = new DataView(\r\n ortTensor.rawDataArray()!.buffer, ortTensor.rawDataArray()!.byteOffset, ortTensor.rawDataLength());\r\n const elementSize = sizeofProto(ortTensor.dataType());\r\n const length = ortTensor.rawDataLength() / elementSize;\r\n\r\n if (ortTensor.rawDataLength() % elementSize !== 0) {\r\n throw new Error('invalid buffer length');\r\n }\r\n if (dataDest.length !== length) {\r\n throw new Error('buffer length mismatch');\r\n }\r\n\r\n for (let i = 0; i < length; i++) {\r\n const n = readProto(dataSource, ortTensor.dataType(), i * elementSize);\r\n dataDest[i] = n;\r\n }\r\n }\r\n return value;\r\n }\r\n}\r\n\r\nfunction sizeof(type: Tensor.DataType): number {\r\n switch (type) {\r\n case 'bool':\r\n case 'int8':\r\n case 'uint8':\r\n return 1;\r\n case 'int16':\r\n case 'uint16':\r\n return 2;\r\n case 'int32':\r\n case 'uint32':\r\n case 'float32':\r\n return 4;\r\n case 'float64':\r\n return 8;\r\n default:\r\n throw new Error(`cannot calculate sizeof() on type ${type}`);\r\n }\r\n}\r\n\r\nfunction sizeofProto(type: onnx.TensorProto.DataType|ortFbs.TensorDataType): number {\r\n switch (type) {\r\n case onnx.TensorProto.DataType.UINT8:\r\n case onnx.TensorProto.DataType.INT8:\r\n case onnx.TensorProto.DataType.BOOL:\r\n return 1;\r\n case onnx.TensorProto.DataType.UINT16:\r\n case onnx.TensorProto.DataType.INT16:\r\n return 2;\r\n case onnx.TensorProto.DataType.FLOAT:\r\n case onnx.TensorProto.DataType.INT32:\r\n case onnx.TensorProto.DataType.UINT32:\r\n return 4;\r\n case onnx.TensorProto.DataType.INT64:\r\n case onnx.TensorProto.DataType.DOUBLE:\r\n case onnx.TensorProto.DataType.UINT64:\r\n return 8;\r\n default:\r\n throw new Error(`cannot calculate sizeof() on type ${onnx.TensorProto.DataType[type]}`);\r\n }\r\n}\r\n\r\nfunction createView(dataBuffer: ArrayBuffer, type: Tensor.DataType) {\r\n return new (dataviewConstructor(type))(dataBuffer);\r\n}\r\n\r\nfunction dataviewConstructor(type: Tensor.DataType) {\r\n switch (type) {\r\n case 'bool':\r\n case 'uint8':\r\n return Uint8Array;\r\n case 'int8':\r\n return Int8Array;\r\n case 'int16':\r\n return Int16Array;\r\n case 'uint16':\r\n return Uint16Array;\r\n case 'int32':\r\n return Int32Array;\r\n case 'uint32':\r\n return Uint32Array;\r\n case 'float32':\r\n return Float32Array;\r\n case 'float64':\r\n return Float64Array;\r\n default:\r\n // should never run to here\r\n throw new Error('unspecified error');\r\n }\r\n}\r\n\r\n// convert a long number to a 32-bit integer (cast-down)\r\nfunction longToNumber(i: Long, type: onnx.TensorProto.DataType|ortFbs.TensorDataType): number {\r\n // INT64, UINT32, UINT64\r\n if (type === onnx.TensorProto.DataType.INT64 || type === ortFbs.TensorDataType.INT64) {\r\n if (i.greaterThanOrEqual(2147483648) || i.lessThan(-2147483648)) {\r\n throw new TypeError('int64 is not supported');\r\n }\r\n } else if (\r\n type === onnx.TensorProto.DataType.UINT32 || type === ortFbs.TensorDataType.UINT32 ||\r\n type === onnx.TensorProto.DataType.UINT64 || type === ortFbs.TensorDataType.UINT64) {\r\n if (i.greaterThanOrEqual(4294967296) || i.lessThan(0)) {\r\n throw new TypeError('uint64 is not supported');\r\n }\r\n } else {\r\n throw new TypeError(`not a LONG type: ${onnx.TensorProto.DataType[type]}`);\r\n }\r\n\r\n return i.toNumber();\r\n}\r\n\r\n// read one value from TensorProto\r\nfunction readProto(view: DataView, type: onnx.TensorProto.DataType|ortFbs.TensorDataType, byteOffset: number): number {\r\n switch (type) {\r\n case onnx.TensorProto.DataType.BOOL:\r\n case onnx.TensorProto.DataType.UINT8:\r\n return view.getUint8(byteOffset);\r\n case onnx.TensorProto.DataType.INT8:\r\n return view.getInt8(byteOffset);\r\n case onnx.TensorProto.DataType.UINT16:\r\n return view.getUint16(byteOffset, true);\r\n case onnx.TensorProto.DataType.INT16:\r\n return view.getInt16(byteOffset, true);\r\n case onnx.TensorProto.DataType.FLOAT:\r\n return view.getFloat32(byteOffset, true);\r\n case onnx.TensorProto.DataType.INT32:\r\n return view.getInt32(byteOffset, true);\r\n case onnx.TensorProto.DataType.UINT32:\r\n return view.getUint32(byteOffset, true);\r\n case onnx.TensorProto.DataType.INT64:\r\n return longToNumber(\r\n Long.fromBits(view.getUint32(byteOffset, true), view.getUint32(byteOffset + 4, true), false), type);\r\n case onnx.TensorProto.DataType.DOUBLE:\r\n return view.getFloat64(byteOffset, true);\r\n case onnx.TensorProto.DataType.UINT64:\r\n return longToNumber(\r\n Long.fromBits(view.getUint32(byteOffset, true), view.getUint32(byteOffset + 4, true), true), type);\r\n default:\r\n throw new Error(`cannot read from DataView for type ${onnx.TensorProto.DataType[type]}`);\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {flatbuffers} from 'flatbuffers';\r\nimport Long from 'long';\r\nimport {onnx} from 'onnx-proto';\r\n\r\nimport {Graph} from './graph';\r\nimport {onnxruntime} from './ort-schema/ort-generated';\r\nimport {Tensor} from './tensor';\r\n\r\n// check the inputs shape before running an OP.\r\n// return true when the inputs pass the check\r\n// return false when the inputs do not fit the requirement\r\n// throw exception when fatal error or not implemented\r\nexport function checkInputsShape(inputs: Tensor[], ...expectedDimensions: number[]): boolean {\r\n if (!inputs || inputs.length !== expectedDimensions.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < inputs.length; i++) {\r\n if (!inputs[i].dims || inputs[i].dims.length !== expectedDimensions[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\n// Evaluates the given expression and asserts error message if condition is unmet.\r\nexport function assert(expr: boolean, msg: () => string) {\r\n if (!expr) {\r\n throw new Error(typeof msg === 'string' ? msg : msg());\r\n }\r\n}\r\n\r\nexport class ArrayUtil {\r\n /**\r\n * Verifies if 2 input arrays contain the same elements.\r\n * @param n1 Array 1\r\n * @param n2 Array 2\r\n * @returns Whether these 2 are equal\r\n */\r\n static arraysEqual(\r\n n1: readonly number[]|Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Uint8ClampedArray|\r\n Float32Array|Float64Array,\r\n n2: readonly number[]|Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Uint8ClampedArray|\r\n Float32Array|Float64Array) {\r\n if (n1.length !== n2.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < n1.length; i++) {\r\n if (n1[i] !== n2[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n\r\nexport class MatMulUtil {\r\n /**\r\n * Fix the input shapes for MatMul operation if they need fixing\r\n * @param dimsA The shape of tensor A. Should be an array of positive integers\r\n * @param dimsB The shape of tensor B. Should be an array of positive integers\r\n * @returns A tuple containing the preprocessed input shapes as required by ONNX specifications\r\n */\r\n static preprocessInputShapes(dimsA: readonly number[], dimsB: readonly number[]):\r\n [readonly number[], readonly number[]] {\r\n // If the first argument is 1-D, it is promoted to a matrix by prepending\r\n // a 1 to its dimensions. After matrix multiplication the prepended 1 is\r\n // removed.\r\n const a = (dimsA.length === 1) ? [1, dimsA[0]] : dimsA;\r\n\r\n // If the second argument is 1-D, it is promoted to a matrix by appending\r\n // a 1 to its dimensions. After matrix multiplication the appended 1 is\r\n // removed.\r\n const b = (dimsB.length === 1) ? [dimsB[0], 1] : dimsB;\r\n\r\n return [a, b];\r\n }\r\n\r\n /**\r\n * Fix the output shape computed for MatMul operation if it needs fixing\r\n * @param outputShape The computed outputShape. Should be an array (atleast of length 2) of positive integers.\r\n * This will be mutated.\r\n * @param aRank The rank of tensor A.\r\n * @param bRank The rank of tensor B.\r\n */\r\n static postprocessOutputShape(outputShape: number[], aRank: number, bRank: number) {\r\n // Remove prepended dimension if first input is 1d\r\n if (aRank === 1) {\r\n // outputShape = outputShape.slice(0, outputShape.length - 2).concat(outputShape.slice(outputShape.length - 1));\r\n outputShape.splice(outputShape.length - 2, 1);\r\n }\r\n // Remove appended dimension if second input is 1d\r\n if (bRank === 1) {\r\n outputShape.pop();\r\n }\r\n }\r\n\r\n /**\r\n * Calculate the expected shape when matrix multiplication\r\n * @param a The shape of tensor A. Should be a tuple of 2 positive integers\r\n * @param b The shape of tensor B. Should be a tuple of 2 positive integers\r\n * @returns The expected shape of the result, or undefined if N/A\r\n */\r\n static calcMatMulShape(a: [number, number], b: [number, number]): [number, number]|undefined {\r\n return (a[1] !== b[0]) ? undefined : [a[0], b[1]];\r\n }\r\n}\r\n\r\nexport class BroadcastUtil {\r\n /**\r\n * Calculate the expected shape when broadcasting 2 tensors\r\n * @param a The shape of tensor A. Should be an array of positive integers\r\n * @param b The shape of tensor B. Should be an array of positive integers\r\n * @param isMatMul Whether the operation is MatMul\r\n * @returns The expected shape of the result, or undefined if N/A\r\n */\r\n static calcShape(adims: readonly number[], bdims: readonly number[], isMatMul = false): readonly number[]|undefined {\r\n const arank = adims.length;\r\n const brank = bdims.length;\r\n if (arank === 0) {\r\n return bdims;\r\n }\r\n if (brank === 0) {\r\n return adims;\r\n }\r\n const crank = Math.max(adims.length, bdims.length);\r\n const cdims = new Array(crank);\r\n\r\n // calculate the last 2 dimension if it is MatMul\r\n if (isMatMul) {\r\n if (arank < 2 || brank < 2) {\r\n return undefined;\r\n }\r\n const cShapeMatMul =\r\n MatMulUtil.calcMatMulShape([adims[arank - 2], adims[arank - 1]], [bdims[brank - 2], bdims[brank - 1]]);\r\n if (cShapeMatMul === undefined) {\r\n return undefined;\r\n }\r\n [cdims[crank - 2], cdims[crank - 1]] = cShapeMatMul;\r\n }\r\n\r\n for (let i = isMatMul ? 3 : 1; i <= crank; i++) {\r\n const aLen = arank - i < 0 ? 1 : adims[arank - i];\r\n const bLen = brank - i < 0 ? 1 : bdims[brank - i];\r\n\r\n if (aLen !== bLen && aLen > 1 && bLen > 1) {\r\n return undefined;\r\n }\r\n cdims[crank - i] = Math.max(aLen, bLen);\r\n }\r\n\r\n return cdims;\r\n }\r\n\r\n /**\r\n * Given the indices of a broadcasted tensor, calculate the original indices\r\n * @param broadcastedIndices The given indices of the broadcasted tensor.\r\n * @param originalShape The original shape of the tensor before broadcas\r\n * @returns The calculated indices that maps to the original tensor.\r\n */\r\n static index(broadcastedIndices: readonly number[], originalShape: readonly number[]): number[] {\r\n // NOTE 1: we assume the parameter broadcastedIndices is valid. ie. it should have the same\r\n // length as the broadcasted shape, and for each dimension the index should\r\n // not be out of range.\r\n const originalIndices = new Array(originalShape.length);\r\n BroadcastUtil.fillIndex(broadcastedIndices, originalShape, originalIndices);\r\n return originalIndices;\r\n }\r\n\r\n /**\r\n * Given the indices of a broadcasted tensor, calculate the original indices\r\n * @param broadcastedIndices The given indices of the broadcasted tensor.\r\n * @param originalShape The original shape of the tensor before broadcast\r\n * @param originalIndices The mapping of broadcastedIndices to the originalIndices (output parameter - will be\r\n * mutated).\r\n */\r\n static fillIndex(broadcastedIndices: readonly number[], originalShape: readonly number[], originalIndices: number[]) {\r\n // NOTE 1: we assume the parameter broadcastedIndices is valid. ie. it should have the same length as the\r\n // broadcasted shape, and for each dimension the index should not be out of range.\r\n // NOTE 2: we assume the parameter originalIndices has the same length as the originalShape\r\n const dimOffset = broadcastedIndices.length - originalShape.length;\r\n for (let i = 0; i < originalShape.length; i++) {\r\n originalIndices[i] = broadcastedIndices[dimOffset + i] % originalShape[i];\r\n }\r\n }\r\n\r\n /**\r\n * Perform the broadcasting operation on the specific operator\r\n * @param a The input tensor A\r\n * @param b The input tensor B\r\n * @param op The operator lambda function\r\n * @param inplace Whether to write the result back to A.\r\n * @returns The result tensor, or undefined if input not broadcastable.\r\n */\r\n static calc(\r\n a: Tensor, b: Tensor, op: (a: string|number, b: string|number) => (string | number), inplace: boolean,\r\n resultType?: Tensor.DataType): Tensor|undefined {\r\n const outputShape = BroadcastUtil.calcShape(a.dims, b.dims);\r\n\r\n if (outputShape) {\r\n if (inplace && !ShapeUtil.areEqual(outputShape, a.dims)) {\r\n // B is not broadcastable to A, failed to calculate inplace.\r\n return undefined;\r\n }\r\n\r\n const size = ShapeUtil.size(outputShape);\r\n const c = inplace ? a : new Tensor(outputShape, resultType || a.type);\r\n\r\n // both inputs are scalars\r\n if (outputShape.length === 0) {\r\n c.set([], op(a.get([]), b.get([])));\r\n }\r\n\r\n // atleast one input is a non-scalar\r\n else {\r\n const outputIndices = new Array(outputShape.length);\r\n const originalIndicesA = new Array(a.dims.length);\r\n const originalIndicesB = new Array(b.dims.length);\r\n let valA: string|number = 0;\r\n let valB: string|number = 0;\r\n let isAScalar = false;\r\n let isBScalar = false;\r\n if (a.dims.length === 0) {\r\n valA = a.get([]);\r\n isAScalar = true;\r\n }\r\n if (b.dims.length === 0) {\r\n valB = b.get([]);\r\n isBScalar = true;\r\n }\r\n let rest: number;\r\n for (let i = 0; i < size; i++) {\r\n // traversal indices\r\n rest = i;\r\n for (let j = outputShape.length - 1; j >= 0; j--) {\r\n outputIndices[j] = rest % outputShape[j];\r\n rest = Math.floor(rest / outputShape[j]);\r\n }\r\n\r\n if (!isAScalar) {\r\n // map outputIndices (which is actually broadcasted) to the originalIndices\r\n BroadcastUtil.fillIndex(outputIndices, a.dims, originalIndicesA);\r\n valA = a.get(originalIndicesA);\r\n }\r\n if (!isBScalar) {\r\n BroadcastUtil.fillIndex(outputIndices, b.dims, originalIndicesB);\r\n valB = b.get(originalIndicesB);\r\n }\r\n\r\n c.set(outputIndices, op(valA, valB));\r\n }\r\n }\r\n\r\n return c;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Determine if a shape is unidirectional broadcastable to another shape\r\n * @param shape The input shape\r\n * @param finalShape The desired shape after broadcasting\r\n */\r\n static isValidBroadcast(shape: readonly number[], finalShape: readonly number[]): boolean {\r\n // align shape to the right\r\n const inputRank = shape.length;\r\n const finalRank = finalShape.length;\r\n if (inputRank > finalRank) {\r\n return false;\r\n }\r\n for (let i = 1; i <= inputRank; i++) {\r\n if (shape[inputRank - i] !== 1 && shape[inputRank - i] !== finalShape[finalRank - i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Determine the broadcasted dims in input shape based on the given output shape.\r\n * Note that this function only returns the broadcasted dims.\r\n * @param inputShape The input shape\r\n * @param outputShape The output shape\r\n * @returns The broadcasted dims in input shape.\r\n */\r\n static getBroadcastDims(inputShape: readonly number[], outputShape: readonly number[]): number[] {\r\n const inRank = inputShape.length;\r\n const dims: number[] = [];\r\n for (let i = 0; i < inRank; i++) {\r\n const dim = inRank - 1 - i;\r\n const a = inputShape[dim] || 1;\r\n const b = outputShape[outputShape.length - 1 - i] || 1;\r\n if (b > 1 && a === 1) {\r\n dims.unshift(dim);\r\n }\r\n }\r\n return dims;\r\n }\r\n}\r\n\r\n// copy array helper\r\n// mimics memcpy as much as possible\r\nexport function arrayCopyHelper(\r\n target: number[]|Tensor.NumberType, source: number[]|Tensor.NumberType, targetIndex: number, sourceIndex: number,\r\n blockSize: number) {\r\n if (sourceIndex < 0 || sourceIndex >= source.length) {\r\n throw new Error('sourceIndex out of bounds');\r\n }\r\n if (targetIndex < 0 || targetIndex >= target.length) {\r\n throw new Error('targetIndex out of bounds');\r\n }\r\n if (sourceIndex + blockSize > source.length) {\r\n throw new Error('source indices to be copied are outside bounds');\r\n }\r\n if (targetIndex + blockSize > target.length) {\r\n throw new Error('target array is too small to hold result');\r\n }\r\n\r\n for (let offset = 0; offset < blockSize; offset++) {\r\n target[targetIndex + offset] = source[sourceIndex + offset];\r\n }\r\n}\r\n\r\nexport class GemmUtil {\r\n // will make sure input shapes are compatible for this op\r\n // and return back the shape of the output in the form of a tuple\r\n // will throw exception if the input shapes are not compatible\r\n static getShapeOfGemmResult(\r\n leftShape: readonly number[], transLeft: boolean, rightShape: readonly number[], transRight: boolean,\r\n biasShape?: readonly number[]): readonly number[] {\r\n if (leftShape.length !== 2 || rightShape.length !== 2) {\r\n throw new Error('shape need to be of size 2');\r\n }\r\n\r\n let M: number;\r\n let K: number;\r\n let N: number;\r\n\r\n if (transLeft) {\r\n M = leftShape[1];\r\n K = leftShape[0];\r\n } else {\r\n M = leftShape[0];\r\n K = leftShape[1];\r\n }\r\n\r\n let kDim = -1;\r\n\r\n if (transRight) {\r\n N = rightShape[0];\r\n kDim = 1;\r\n } else {\r\n N = rightShape[1];\r\n kDim = 0;\r\n }\r\n\r\n if (rightShape[kDim] !== K) {\r\n throw new Error('dimension mismatch');\r\n }\r\n\r\n if (M <= 0 || N <= 0 || K <= 0) {\r\n throw new Error('invalid shape specified');\r\n }\r\n\r\n if (biasShape && !BroadcastUtil.isValidBroadcast(biasShape, [M, N])) {\r\n throw new Error('gemm: invalid bias shape for broadcast');\r\n }\r\n\r\n return [M, N, K];\r\n }\r\n}\r\n\r\nexport class ProtoUtil {\r\n static tensorDataTypeFromProto(typeProto: onnx.TensorProto.DataType|\r\n onnxruntime.experimental.fbs.TensorDataType): Tensor.DataType {\r\n switch (typeProto) {\r\n case onnx.TensorProto.DataType.INT8:\r\n return 'int8';\r\n case onnx.TensorProto.DataType.UINT8:\r\n return 'uint8';\r\n case onnx.TensorProto.DataType.BOOL:\r\n return 'bool';\r\n case onnx.TensorProto.DataType.INT16:\r\n return 'int16';\r\n case onnx.TensorProto.DataType.UINT16:\r\n return 'uint16';\r\n case onnx.TensorProto.DataType.INT32:\r\n return 'int32';\r\n case onnx.TensorProto.DataType.UINT32:\r\n return 'uint32';\r\n case onnx.TensorProto.DataType.FLOAT:\r\n return 'float32';\r\n case onnx.TensorProto.DataType.DOUBLE:\r\n return 'float64';\r\n case onnx.TensorProto.DataType.STRING:\r\n return 'string';\r\n\r\n // For INT64/UINT64, reduce their value to 32-bits.\r\n // Should throw exception when overflow\r\n case onnx.TensorProto.DataType.INT64:\r\n return 'int32';\r\n case onnx.TensorProto.DataType.UINT64:\r\n return 'uint32';\r\n\r\n default:\r\n throw new Error(`unsupported data type: ${onnx.TensorProto.DataType[typeProto]}`);\r\n }\r\n }\r\n\r\n static tensorDataTypeStringToEnum(type: string): onnx.TensorProto.DataType {\r\n switch (type) {\r\n case 'int8':\r\n return onnx.TensorProto.DataType.INT8;\r\n case 'uint8':\r\n return onnx.TensorProto.DataType.UINT8;\r\n case 'bool':\r\n return onnx.TensorProto.DataType.BOOL;\r\n case 'int16':\r\n return onnx.TensorProto.DataType.INT16;\r\n case 'uint16':\r\n return onnx.TensorProto.DataType.UINT16;\r\n case 'int32':\r\n return onnx.TensorProto.DataType.INT32;\r\n case 'uint32':\r\n return onnx.TensorProto.DataType.UINT32;\r\n case 'float32':\r\n return onnx.TensorProto.DataType.FLOAT;\r\n case 'float64':\r\n return onnx.TensorProto.DataType.DOUBLE;\r\n case 'string':\r\n return onnx.TensorProto.DataType.STRING;\r\n case 'int64':\r\n return onnx.TensorProto.DataType.INT64;\r\n case 'uint64':\r\n return onnx.TensorProto.DataType.UINT64;\r\n\r\n default:\r\n throw new Error(`unsupported data type: ${type}`);\r\n }\r\n }\r\n\r\n static tensorDimsFromProto(dims: Array): number[] {\r\n // get rid of Long type for dims\r\n return dims.map(d => Long.isLong(d) ? d.toNumber() : d);\r\n }\r\n\r\n static tensorValueTypeFromProto(valueType: onnx.TypeProto.ITensor): Graph.ValueType {\r\n return {\r\n tensorType: ProtoUtil.tensorDataTypeFromProto(valueType.elemType!),\r\n shape: {dims: ProtoUtil.tensorDimsFromProto(valueType.shape!.dim!.map(d => d.dimValue!))}\r\n };\r\n }\r\n\r\n static tensorDimsFromORTFormat(tensor: onnxruntime.experimental.fbs.Tensor) {\r\n const dims = [];\r\n for (let i = 0; i < tensor.dimsLength(); i++) {\r\n dims.push(LongUtil.longToNumber(tensor.dims(i)!));\r\n }\r\n return dims;\r\n }\r\n\r\n static tensorAttributesFromORTFormat(node: onnxruntime.experimental.fbs.Node) {\r\n const attributes = [];\r\n for (let i = 0; i < node.attributesLength(); i++) {\r\n attributes.push(node.attributes(i)!);\r\n }\r\n return attributes;\r\n }\r\n}\r\n\r\nexport class LongUtil {\r\n // This function is called to get a number from long type of data for attribute, dim, and ir version,\r\n // which values are signed integers.\r\n // To make it more generic, add an optional paramter to convert to a unsigned number.\r\n static longToNumber(n: Long|flatbuffers.Long|number, unsigned?: boolean) {\r\n if (Long.isLong(n)) {\r\n return n.toNumber();\r\n } else if (n instanceof flatbuffers.Long) {\r\n return Long.fromValue({low: n.low, high: n.high, unsigned: unsigned ?? false}).toNumber();\r\n }\r\n return n;\r\n }\r\n static isLong(n: unknown) {\r\n return Long.isLong(n) || n instanceof flatbuffers.Long;\r\n }\r\n}\r\n\r\nexport class ShapeUtil {\r\n static size(dims: readonly number[]): number {\r\n return ShapeUtil.getSizeFromDimensionRange(dims, 0, dims.length);\r\n }\r\n\r\n // `axis` inclusive\r\n static sizeFromDimension(dims: readonly number[], axis: number): number {\r\n if (axis < 0 || axis > dims.length) {\r\n throw new Error(`invalid dimension of ${axis} for sizeFromDimension as Tensor has ${dims.length} dimensions.`);\r\n }\r\n return ShapeUtil.getSizeFromDimensionRange(dims, axis, dims.length);\r\n }\r\n\r\n // `axis` exclusive\r\n static sizeToDimension(dims: readonly number[], axis: number): number {\r\n if (axis < 0 || axis > dims.length) {\r\n throw new Error(`invalid dimension of ${axis} for sizeToDimension as Tensor has ${dims.length} dimensions.`);\r\n }\r\n return ShapeUtil.getSizeFromDimensionRange(dims, 0, axis);\r\n }\r\n\r\n static getSizeFromDimensionRange(dims: readonly number[], start: number, end: number): number {\r\n let size = 1;\r\n for (let i = start; i < end; i++) {\r\n // safety check as this method is called by multiple other methods requiring size.\r\n // size cannot be 0 or negative.\r\n if (dims[i] <= 0) {\r\n throw new Error(\r\n // eslint-disable-next-line max-len\r\n 'cannot get valid size from specified dimension range. Most likely the range contains 0 or negative values in them.');\r\n }\r\n size *= dims[i];\r\n }\r\n return size;\r\n }\r\n\r\n static computeStrides(dims: readonly number[]): readonly number[] {\r\n const rank = dims.length;\r\n if (rank === 0) {\r\n return [];\r\n } else if (rank === 1) {\r\n return [1];\r\n }\r\n const strides = new Array(rank);\r\n strides[rank - 1] = 1;\r\n strides[rank - 2] = dims[rank - 1];\r\n for (let i = rank - 3; i >= 0; --i) {\r\n strides[i] = strides[i + 1] * dims[i + 1];\r\n }\r\n return strides;\r\n }\r\n\r\n static transpose(dims: readonly number[]): readonly number[] {\r\n const copy = dims.slice();\r\n return copy.reverse();\r\n }\r\n\r\n static indicesToOffset(indices: readonly number[], strides: readonly number[], axis?: number): number {\r\n if (axis === undefined) {\r\n axis = indices.length;\r\n }\r\n let offset = 0;\r\n for (let i = 0; i < axis; ++i) {\r\n offset += strides[i] * indices[i];\r\n }\r\n return offset;\r\n }\r\n\r\n static offsetToIndices(offset: number, strides: readonly number[]): readonly number[] {\r\n const rank = strides.length;\r\n if (rank === 0) {\r\n return [];\r\n } else if (rank === 1) {\r\n return [offset * strides[0]];\r\n }\r\n const indices: number[] = new Array(strides.length);\r\n for (let i = 0; i < indices.length - 1; ++i) {\r\n indices[i] = Math.floor(offset / strides[i]);\r\n offset -= indices[i] * strides[i];\r\n }\r\n indices[indices.length - 1] = offset;\r\n return indices;\r\n }\r\n\r\n /**\r\n * normailze axis of range [-r, r) into [0, r).\r\n */\r\n static normalizeAxis(axis: number, tensorRank: number): number {\r\n if (axis < -tensorRank && axis >= tensorRank) {\r\n throw new Error('unsupported axis for this operation.');\r\n }\r\n return axis < 0 ? axis + tensorRank : axis;\r\n }\r\n\r\n static normalizeAxes(axes: readonly number[], tensorRank: number): number[] {\r\n return axes.map(x => this.normalizeAxis(x, tensorRank));\r\n }\r\n\r\n // Increment an index into a tensor (in lexicographic\r\n // ordering), wrapping around the specified upper_bound.\r\n /**\r\n * Increment an index into a tensor (in lexicographic ordering), wrapping around the specified upper_bound.\r\n * @param index Given index to increment (Will be mutated)\r\n * @param dims The dimensions of the tensor for which the given index corresponds to\r\n * @param axisToIncrementOn The 1-indexed axis to increment on. If undefined, axisToIncrementOn == rank\r\n */\r\n static incrementIndex(index: number[], dims: readonly number[], axisToIncrementOn?: number) {\r\n if (dims.length === 0 || index.length === 0) {\r\n throw new Error('Index incrementing unsupported for scalar Tensor');\r\n }\r\n if (axisToIncrementOn === undefined) {\r\n axisToIncrementOn = dims.length;\r\n } else {\r\n if (axisToIncrementOn <= 0 || axisToIncrementOn > dims.length) {\r\n throw new Error('Incorrect axis to increment on');\r\n }\r\n }\r\n\r\n for (let k = axisToIncrementOn - 1; k >= 0; --k) {\r\n index[k]++;\r\n if (index[k] < dims[k]) {\r\n break;\r\n }\r\n index[k] = 0;\r\n }\r\n }\r\n\r\n /**\r\n * Produces a new dimensions array based on the values in the 'originalDimensions' and 'shape' array\r\n * Used in Reshape\r\n * @param originalDims Original Shape array\r\n * @param shapeHints array containing values to compute the new dimensions\r\n * For example:\r\n * originalDims = [2,2] and shapeHints = [0,-1] will return [2,2]\r\n * originalDims = [2,2] and shapeHints = [4] will return [4]\r\n * originalDims = [2,2] and shapeHints = [5] will throw an exception\r\n * https://github.com/onnx/onnx/blob/master/docs/Operators.md#Reshape\r\n */\r\n\r\n static calculateReshapedDims(originalDims: readonly number[], shapeHints: ArrayLike): number[] {\r\n // reshape to a Scalar Tensor\r\n if (shapeHints.length === 0) {\r\n if (originalDims.length === 0 || ShapeUtil.size(originalDims) === 1) {\r\n return [];\r\n } else {\r\n throw new Error('cannot reshape to a scalar Tensor');\r\n }\r\n }\r\n\r\n const nDims = shapeHints.length;\r\n const reshapedDims = new Array(nDims);\r\n let unknownDimension = -1;\r\n let newTensorSize = 1;\r\n for (let i = 0; i < nDims; i++) {\r\n if (shapeHints[i] < -1) {\r\n throw new Error('a dimension in shape hints cannot be less than -1');\r\n }\r\n if (shapeHints[i] === -1) {\r\n if (unknownDimension !== -1) {\r\n throw new Error('at most one dimension in shape hints can be -1');\r\n }\r\n unknownDimension = i;\r\n } else {\r\n if (shapeHints[i] === 0) {\r\n if (i >= originalDims.length) {\r\n throw new Error('the dimension with value zero exceeds the dimension size of the input tensor');\r\n }\r\n reshapedDims[i] = originalDims[i];\r\n } else {\r\n reshapedDims[i] = shapeHints[i];\r\n }\r\n newTensorSize *= reshapedDims[i];\r\n }\r\n }\r\n\r\n const oldTensorSize = ShapeUtil.size(originalDims);\r\n if (unknownDimension !== -1) {\r\n if (oldTensorSize % newTensorSize !== 0) {\r\n throw new Error(`the input tensor cannot be reshaped to the requested shape. Input shape: [${\r\n originalDims}] Output shape: [${shapeHints}]`);\r\n }\r\n reshapedDims[unknownDimension] = oldTensorSize / newTensorSize;\r\n }\r\n // validate sizes from originalDims and reshapedDims match\r\n else {\r\n if (newTensorSize !== oldTensorSize) {\r\n throw new Error('reshapedDims and originalDims don\\'t have matching sizes');\r\n }\r\n }\r\n return reshapedDims;\r\n }\r\n\r\n /**\r\n * Sorts a given array based on the indices in the Perm array\r\n * Used in Transpose\r\n * @param a Array to be sorted such as dims or strides\r\n * @param perm Perm given; if null a will be reversed\r\n */\r\n static sortBasedOnPerm(a: readonly number[], perm?: readonly number[]): readonly number[] {\r\n if (perm) {\r\n return perm.map((v) => a[v]);\r\n } else {\r\n return a.slice().reverse();\r\n }\r\n }\r\n\r\n /**\r\n * Pads a given shape according to the padding values\r\n * @param dims shape of the Tensor to be padded\r\n * @param pad pad values\r\n */\r\n static padShape(dims: readonly number[], pad: readonly number[]): readonly number[] {\r\n const rank = dims.length;\r\n return dims.map((v, i) => v + pad[i] + pad[i + rank]);\r\n }\r\n\r\n /**\r\n * Determines if the two shapes are identical\r\n * @param shape1\r\n * @param shape2\r\n */\r\n static areEqual(shape1: readonly number[], shape2: readonly number[]): boolean {\r\n if (shape1.length !== shape2.length) {\r\n return false;\r\n }\r\n return shape1.every((v, i) => v === shape2[i]);\r\n }\r\n\r\n /**\r\n * Validates if the given `dims` or `shape` is valid in ONNX.js context and returns data size\r\n * @param dims - input `dims` that needs to be checked\r\n */\r\n static validateDimsAndCalcSize(dims: readonly number[]): number {\r\n if (dims.length > 6) {\r\n throw new TypeError('Only rank 0 to 6 is supported for tensor shape.');\r\n }\r\n let size = 1;\r\n for (const n of dims) {\r\n if (!Number.isInteger(n)) {\r\n throw new TypeError(`Invalid shape: ${n} is not an integer`);\r\n }\r\n if (n < 0 || n > 2147483647) {\r\n throw new TypeError(`Invalid shape: length ${n} is not allowed`);\r\n }\r\n size *= n;\r\n }\r\n return size;\r\n }\r\n\r\n /**\r\n * Determines the shape of output tensor y = flatten(x, axis)\r\n * @param dims - shape of input tensor\r\n * @param axis - flatten axis, in the range [-r, r]\r\n */\r\n static flattenShape(dims: readonly number[], axis: number): readonly number[] {\r\n if (axis < 0) {\r\n axis += dims.length;\r\n }\r\n const total = dims.reduce((x, y) => x * y, 1);\r\n const right = dims.slice(axis).reduce((x, y) => x * y, 1);\r\n const outputDims = [total / right, right];\r\n\r\n return outputDims;\r\n }\r\n\r\n /**\r\n * Determines the shape of output tensor y = squeeze(x, axes)\r\n * @param dims - shape of input tensor\r\n * @param axes - squeeze axes\r\n */\r\n static squeezeShape(dims: readonly number[], axes: readonly number[]): readonly number[] {\r\n const outputDims = new Array();\r\n\r\n // sanity check\r\n axes = ShapeUtil.normalizeAxes(axes, dims.length);\r\n\r\n for (let i = 0; i < dims.length; i++) {\r\n const inSqueezeList = axes.indexOf(i) >= 0;\r\n if (inSqueezeList && dims[i] !== 1) {\r\n throw new Error('squeeze an axis of size different than 1');\r\n }\r\n\r\n if ((axes.length === 0 && dims[i] > 1) || (axes.length > 0 && !inSqueezeList)) {\r\n outputDims.push(dims[i]);\r\n }\r\n }\r\n\r\n return outputDims;\r\n }\r\n\r\n /**\r\n * Determines the shape of output tensor y = unsqueeze(x, axes)\r\n * @param dims - shape of input tensor\r\n * @param axes - unsqueeze axes\r\n */\r\n static unsqueezeShape(dims: readonly number[], axes: readonly number[]): readonly number[] {\r\n const outputDims = new Array(dims.length + axes.length);\r\n\r\n // initialize the array elements to 0\r\n outputDims.fill(0);\r\n\r\n // set all axes indices to 1 in outputDims and check for duplicates\r\n for (let i = 0; i < axes.length; i++) {\r\n const axis = ShapeUtil.normalizeAxis(axes[i], dims.length);\r\n if (axis >= outputDims.length) {\r\n throw new Error('\\'axes\\' has an out of range axis');\r\n }\r\n if (outputDims[axis] !== 0) {\r\n throw new Error('\\'axes\\' has a duplicate axis');\r\n }\r\n\r\n outputDims[axis] = 1;\r\n }\r\n\r\n // fill in the zero entries of outputDims with the input tensor's shape\r\n let inputDimsIterator = 0;\r\n for (let i = 0; i < outputDims.length; i++) {\r\n if (outputDims[i] === 0) {\r\n outputDims[i] = dims[inputDimsIterator++];\r\n }\r\n }\r\n\r\n // sanity check assertion. 'inputDimsIterator'\r\n // should be equal to the length of 'dims'\r\n if (inputDimsIterator !== dims.length) {\r\n throw new Error('the unsqueezed dimension could not be established');\r\n }\r\n\r\n return outputDims;\r\n }\r\n}\r\n\r\n// bunch of helper methods that do a variety of math operations\r\nexport class MathUtil {\r\n // y = (x*x) + y\r\n static sqr(\r\n target: number[]|Tensor.NumberType, source: number[]|Tensor.NumberType, targetIndex: number, sourceIndex: number,\r\n blockSize: number) {\r\n if (sourceIndex < 0 || sourceIndex >= source.length) {\r\n throw new Error('sourceIndex out of bounds');\r\n }\r\n if (targetIndex < 0 || targetIndex >= target.length) {\r\n throw new Error('targetIndex out of bounds');\r\n }\r\n if (sourceIndex + blockSize > source.length) {\r\n throw new Error('source indices to be copied are outside bounds');\r\n }\r\n if (targetIndex + blockSize > target.length) {\r\n throw new Error('target array is too small to hold result');\r\n }\r\n\r\n for (let offset = 0; offset < blockSize; offset++) {\r\n target[targetIndex + offset] += Math.pow(source[sourceIndex + offset], 2);\r\n }\r\n }\r\n\r\n // y = ax + y\r\n static axpy(\r\n target: number[]|Tensor.NumberType, source: number[]|Tensor.NumberType, targetIndex: number, sourceIndex: number,\r\n blockSize: number, alpha: number) {\r\n if (sourceIndex < 0 || sourceIndex >= source.length) {\r\n throw new Error('sourceIndex out of bounds');\r\n }\r\n if (targetIndex < 0 || targetIndex >= target.length) {\r\n throw new Error('targetIndex out of bounds');\r\n }\r\n if (sourceIndex + blockSize > source.length) {\r\n throw new Error('source indices to be copied are outside bounds');\r\n }\r\n if (targetIndex + blockSize > target.length) {\r\n throw new Error('target array is too small to hold result');\r\n }\r\n\r\n for (let offset = 0; offset < blockSize; offset++) {\r\n target[targetIndex + offset] += (alpha * source[sourceIndex + offset]);\r\n }\r\n }\r\n\r\n // y = pow(x, b)\r\n static powx(\r\n target: number[]|Tensor.NumberType, source: number[]|Tensor.NumberType, targetIndex: number, sourceIndex: number,\r\n blockSize: number, b: number) {\r\n if (sourceIndex < 0 || sourceIndex >= source.length) {\r\n throw new Error('sourceIndex out of bounds');\r\n }\r\n if (targetIndex < 0 || targetIndex >= target.length) {\r\n throw new Error('targetIndex out of bounds');\r\n }\r\n if (sourceIndex + blockSize > source.length) {\r\n throw new Error('source indices to be copied are outside bounds');\r\n }\r\n if (targetIndex + blockSize > target.length) {\r\n throw new Error('target array is too small to hold result');\r\n }\r\n\r\n for (let offset = 0; offset < blockSize; offset++) {\r\n target[targetIndex + offset] = Math.pow(source[sourceIndex + offset], b);\r\n }\r\n }\r\n\r\n // y = x * y\r\n static mul(\r\n target: number[]|Tensor.NumberType, source: number[]|Tensor.NumberType, targetIndex: number, sourceIndex: number,\r\n blockSize: number) {\r\n if (sourceIndex < 0 || sourceIndex >= source.length) {\r\n throw new Error('sourceIndex out of bounds');\r\n }\r\n if (targetIndex < 0 || targetIndex >= target.length) {\r\n throw new Error('targetIndex out of bounds');\r\n }\r\n if (sourceIndex + blockSize > source.length) {\r\n throw new Error('source indices to be copied are outside bounds');\r\n }\r\n if (targetIndex + blockSize > target.length) {\r\n throw new Error('target array is too small to hold result');\r\n }\r\n\r\n for (let offset = 0; offset < blockSize; offset++) {\r\n target[targetIndex + offset] = (source[sourceIndex + offset] * target[targetIndex + offset]);\r\n }\r\n }\r\n}\r\n\r\nexport class SplitUtil {\r\n /**\r\n * Calculates new Shapes from existing one and the splits given along the axis provides\r\n * @param dims Shape of the Tensor to be splitted into two or more Shapes\r\n * @param axis The dimension along which the Tensor will be split\r\n * @param splits Offsets for the start of each split\r\n */\r\n static splitShape(dims: readonly number[], axis: number, split: number[], numOutputs?: number):\r\n [number[][], number[]] {\r\n if (split.length === 0) {\r\n if (!numOutputs) {\r\n throw new Error('need to know number of outputs when the \\'split\\' attribute is not specified');\r\n }\r\n SplitUtil.determineSplit(dims[axis], numOutputs, split);\r\n }\r\n\r\n const shapes: number[][] = [];\r\n const offsets = [0];\r\n for (let i = 0; i < split.length; ++i) {\r\n if (i !== 0) {\r\n offsets.push(offsets[i - 1] + split[i - 1]);\r\n }\r\n const shape = dims.slice();\r\n shape[axis] = split[i];\r\n shapes.push(shape);\r\n }\r\n return [shapes, offsets];\r\n }\r\n\r\n static determineSplit(numElementsAlongAxis: number, numOutputs: number, split: number[]) {\r\n // If 'split' is not specified by the user, we need to partition the number of elements equally among the outputs\r\n if (numElementsAlongAxis % numOutputs !== 0) {\r\n throw new Error('cannot split tensor to equal sized parts');\r\n }\r\n for (let i = 0; i < numOutputs; ++i) {\r\n split.push(numElementsAlongAxis / numOutputs);\r\n }\r\n }\r\n}\r\n\r\nexport class ReduceUtil {\r\n /**\r\n * Perform reduce operations on the specific operator\r\n * @param a Input tensor data\r\n * @param axes The dimensions along which the Tensor will be reduced\r\n * @param keepdims If set to true, the axes which are reduced are left in the\r\n * result as dimensions with size one.\r\n * @param op1 The operation to be performed on each element in the tensor\r\n * @param op2 The operation to be performed between elements in the tensor\r\n */\r\n static calcReduce(\r\n a: Tensor, axes: number[], keepdims: boolean, op1: (b: number) => number,\r\n op2: (a: number, b: number) => number): Tensor {\r\n const dims = a.dims.slice(0);\r\n // if axes is not set, perform reduce on all axes\r\n if (axes.length === 0) {\r\n dims.forEach((d, ind) => axes.push(ind));\r\n }\r\n // get a temporary broadcastable output shape\r\n const outputDims = ReduceUtil.calcReduceShape(dims, axes, true);\r\n\r\n // loop through the output and calculate result one by one\r\n const size = ShapeUtil.size(outputDims);\r\n const y = new Tensor(outputDims, a.type);\r\n const strides = ShapeUtil.computeStrides(outputDims);\r\n const inputStrides = ShapeUtil.computeStrides(dims);\r\n const indicesY = new Array(dims.length);\r\n for (let i = 0; i < size; i++) {\r\n const indices = ShapeUtil.offsetToIndices(i, strides);\r\n // map index\r\n BroadcastUtil.fillIndex(indices, dims, indicesY);\r\n y.set(\r\n indices,\r\n ReduceUtil.calcReduceByAxis(\r\n a.numberData, axes, dims, 0, ShapeUtil.indicesToOffset(indicesY, inputStrides), op1, op2));\r\n }\r\n\r\n if (keepdims) {\r\n return y;\r\n } else {\r\n // keepdims == 0, calculate the expected shape\r\n return new Tensor(\r\n ReduceUtil.calcReduceShape(dims, axes, keepdims), y.type, undefined, undefined, y.data, y.dataId);\r\n }\r\n }\r\n\r\n /**\r\n * Perform reduce operations on the specific operator on specific axes\r\n * @param a Input tensor data\r\n * @param axes The dimensions along which the Tensor will be reduced\r\n * @param dims The input dimension.\r\n * @param curAxisInd Index in axes specifying the current dimension along\r\n * which the tensor will be reduced\r\n * @param pos The current index of element to perform operation\r\n * @param op1 The operation to be performed on each element in the tensor\r\n * @param op2 The operation to be performed between elements in the tensor\r\n */\r\n static calcReduceByAxis(\r\n input: Tensor.NumberType, axes: number[], dims: number[], curAxisInd: number, pos: number,\r\n op1: (b: number) => number, op2: (a: number, b: number) => number): number {\r\n let res = 0;\r\n if (curAxisInd >= axes.length) {\r\n return op1(input[pos]);\r\n }\r\n const axis = axes[curAxisInd];\r\n const step = axis >= dims.length ? 1 : ShapeUtil.size(dims.slice(axis + 1));\r\n for (let i = 0; i < dims[axis]; i++) {\r\n res = i === 0 ? ReduceUtil.calcReduceByAxis(input, axes, dims, curAxisInd + 1, pos, op1, op2) :\r\n op2(res, ReduceUtil.calcReduceByAxis(input, axes, dims, curAxisInd + 1, pos, op1, op2));\r\n pos += step;\r\n }\r\n return res;\r\n }\r\n\r\n /**\r\n * Calculate the expected shape of a reduce operation\r\n * @param dims The input tensor dimension\r\n * @param axes The dimensions along which the Tensor will be reduced\r\n * @param keepdims If set to true, the axes which are reduced are left in the\r\n * result as dimensions with size one.\r\n */\r\n static calcReduceShape(dims: readonly number[], axes: readonly number[], keepDims: boolean): number[] {\r\n const outputDims = dims.slice();\r\n for (let i = 0; i < axes.length; i++) {\r\n if (keepDims) {\r\n outputDims[axes[i]] = 1;\r\n } else {\r\n outputDims[axes[i]] = 0;\r\n }\r\n }\r\n return outputDims.filter(dim => dim !== 0);\r\n }\r\n}\r\n\r\nexport class PoolConvUtil {\r\n /**\r\n * Adjust the kernel, strides, pads to correct rank. Set to default value if not present\r\n * @param isGlobalOperator If true, perform global pooling.\r\n * @param inputDims The input tensor dimension.\r\n * @param kernelShape The size of the kernel along each axis.\r\n * @param strides Stride along each axis.\r\n * @param dilations Dilation along each axis.\r\n * @param pads Padding for the beginning and ending along each axis.\r\n */\r\n static adjustPoolAttributes(\r\n isGlobalOperator: boolean, inputDims: readonly number[], kernelShape: number[], strides: number[],\r\n dilations: number[], pads: number[]) {\r\n if (!isGlobalOperator && kernelShape.length !== inputDims.length - 2) {\r\n throw new Error('length of specified kernel shapes should be 2 less than length of input dimensions');\r\n }\r\n\r\n if (isGlobalOperator) {\r\n // adjust kernel shape to cover the input dims\r\n for (let dim = 0; dim < inputDims.length - 2; dim++) {\r\n if (dim >= kernelShape.length) {\r\n kernelShape.push(inputDims[dim + 2]);\r\n } else {\r\n kernelShape[dim] = inputDims[dim + 2];\r\n }\r\n }\r\n }\r\n\r\n // adjust strides length to match kernel shape length\r\n for (let dim = 0; dim < kernelShape.length; dim++) {\r\n if (dim < strides.length) {\r\n if (strides[dim] < 0) {\r\n throw new Error('strides should be greater than or equal to 1');\r\n }\r\n } else {\r\n strides.push(1);\r\n }\r\n }\r\n\r\n // adjust dilation value\r\n for (let dim = 0; dim < kernelShape.length; dim++) {\r\n if (dim < dilations.length) {\r\n if (dilations[dim] < 0) {\r\n throw new Error('dilations should be greater than or equal to 1');\r\n }\r\n } else {\r\n dilations.push(1);\r\n }\r\n }\r\n\r\n // adjust pads length to match 2 * kernel shape length\r\n for (let dim = 0; dim < kernelShape.length * 2; dim++) {\r\n if (dim < pads.length) {\r\n if (pads[dim] < 0) {\r\n throw new Error('pad should be greater than or equal to 1');\r\n }\r\n } else {\r\n pads.push(0);\r\n }\r\n }\r\n\r\n // sanity checks for values in kernel shapes and pads\r\n for (let dim = 0; dim < kernelShape.length; dim++) {\r\n if (kernelShape[dim] <= 0) {\r\n throw new Error('kernel shapes need to be greater than 0');\r\n }\r\n\r\n if (pads[dim] >= kernelShape[dim] || pads[dim + kernelShape.length] >= kernelShape[dim]) {\r\n throw new Error('pads should be smaller than kernel');\r\n }\r\n }\r\n }\r\n\r\n // adjust pad values based on 'autoPad' attribute\r\n static adjustPadsBasedOnAutoPad(\r\n inputDims: readonly number[], strides: readonly number[], dilations: readonly number[],\r\n kernelShape: readonly number[], pads: number[], autoPad?: string) {\r\n if (!autoPad) {\r\n return;\r\n }\r\n\r\n if (pads.length !== 2 * (inputDims.length - 2)) {\r\n throw new Error('length of pads should be twice the length of data dimensions');\r\n }\r\n\r\n if (strides.length !== (inputDims.length - 2)) {\r\n throw new Error('length of strides should be the length of data dimensions');\r\n }\r\n\r\n if (kernelShape.length !== (inputDims.length - 2)) {\r\n throw new Error('length of kernel shapes should be the length of data dimensions');\r\n }\r\n\r\n for (let dim = 0; dim < inputDims.length - 2; dim++) {\r\n PoolConvUtil.adjustPadAndReturnShape(\r\n inputDims[dim + 2], strides[dim], dilations[dim], kernelShape[dim], pads, dim, dim + inputDims.length - 2,\r\n autoPad);\r\n }\r\n }\r\n\r\n /**\r\n * Calculate the output shape for Pool ops based on input attributes. (Should be used only for Pool ops)\r\n * @param isGlobalOperator If true, perform global pooling.\r\n * @param inputDims The input tensor dimension. (inputs[0].dims)\r\n * @param strides Stride along each axis.\r\n * @param dilations Dilation along each axis.\r\n * @param kernelShape The size of the kernel along each axis.\r\n * @param pads Padding for the beginning and ending along each axis.\r\n * @param autoPad DEPRECATED attribute supported for legacy models. Specifies how to implicitly calculate pads in each\r\n * dimension. Can take values NOTSET, SAME_UPPER, SAME_LOWER, or VALID.\r\n */\r\n static computePoolOutputShape(\r\n isGlobalOperator: boolean, inputDims: readonly number[], strides: number[], dilations: number[],\r\n kernelShape: number[], pads: number[], autoPad?: string): number[] {\r\n if (inputDims.length <= 0) {\r\n throw new Error('input shape must be of size greater than 0');\r\n }\r\n\r\n // Add batch size and number of channels of output\r\n const outputDims = [inputDims[0], inputDims[1]];\r\n\r\n PoolConvUtil.computeShapeHelper(\r\n isGlobalOperator, inputDims, outputDims, strides, dilations, kernelShape, pads, autoPad);\r\n return outputDims;\r\n }\r\n\r\n /**\r\n * Calculate the output shape for Conv op based on input attributes. (Should be used only for Conv op)\r\n * @param inputDims The input tensor dimension. (inputs[0].dims)\r\n * @param filterDims The filter tensor dimension. (inputs[1].dims)\r\n * @param strides Stride along each axis.\r\n * @param kernelShape The size of the kernel along each axis.\r\n * @param pads Padding for the beginning and ending along each axis.\r\n * @param autoPad DEPRECATED attribute supported for legacy models. Specifies how to implicitly calculate pads in each\r\n * dimension. Can take values NOTSET, SAME_UPPER, SAME_LOWER, or VALID.\r\n */\r\n static computeConvOutputShape(\r\n inputDims: readonly number[], filterDims: readonly number[], strides: number[], dilations: number[],\r\n kernelShape: number[], pads: number[], autoPad?: string): number[] {\r\n if (inputDims.length <= 0 || filterDims.length <= 0) {\r\n throw new Error('invalid input tensor dims or invalid filter tensor dims');\r\n }\r\n\r\n // Add batch size and number of channels of output\r\n const outputDims = [inputDims[0], filterDims[0]];\r\n\r\n PoolConvUtil.computeShapeHelper(false, inputDims, outputDims, strides, dilations, kernelShape, pads, autoPad);\r\n return outputDims;\r\n }\r\n\r\n // will compute output shapes for data dimensions ONLY (i.e.) no batch size and channels\r\n // called by computePoolOutputShape() and computeConvOutputShape()\r\n // adjust pads based on 'autoPad' attribute prior to shape computation\r\n private static computeShapeHelper(\r\n isGlobalOperator: boolean, inputDims: readonly number[], outputDims: number[], strides: readonly number[],\r\n dilations: readonly number[], kernelShape: readonly number[], pads: number[], autoPad?: string) {\r\n if (isGlobalOperator) {\r\n for (let dim = 0; dim < inputDims.length - 2; dim++) {\r\n outputDims.push(1);\r\n }\r\n } else {\r\n for (let dim = 0; dim < inputDims.length - 2; dim++) {\r\n outputDims.push(PoolConvUtil.adjustPadAndReturnShape(\r\n inputDims[dim + 2], strides[dim], dilations[dim], kernelShape[dim], pads, dim, dim + inputDims.length - 2,\r\n autoPad));\r\n }\r\n }\r\n }\r\n\r\n // helper for computeShapeHelper() and adjustPadsBasedOnAutoPad()\r\n // adjusts pad value for given 'autoPad' string and computes output shape along a particular dimension\r\n private static adjustPadAndReturnShape(\r\n inSize: number, stride: number, dilation: number, kernel: number, pads: number[], padHeadIndex: number,\r\n padTailIndex: number, autoPad?: string): number {\r\n const dkernel = dilation * (kernel - 1) + 1;\r\n if (autoPad && autoPad !== 'NOTSET') {\r\n switch (autoPad) {\r\n case 'VALID':\r\n pads[padHeadIndex] = 0;\r\n pads[padTailIndex] = 0;\r\n return Math.floor(((inSize - dkernel) / stride) + 1);\r\n case 'SAME_LOWER':\r\n case 'SAME_UPPER':\r\n if (dilation !== 1) {\r\n throw new Error('Dilation not supported for SAME_UPPER or SAME_LOWER');\r\n } else {\r\n const legacyTargetSize = (inSize + stride - 1) / stride;\r\n const padNeeded = (legacyTargetSize - 1) * stride + kernel - inSize;\r\n pads[padHeadIndex] =\r\n (autoPad === 'SAME_LOWER') ? Math.floor((padNeeded + 1) / 2) : Math.floor(padNeeded / 2);\r\n pads[padTailIndex] = padNeeded - pads[padHeadIndex];\r\n return Math.floor(((inSize + padNeeded - kernel) / stride) + 1);\r\n }\r\n default:\r\n throw new Error('Unsupported AutoPad type');\r\n }\r\n } else {\r\n return Math.floor(((inSize + pads[padHeadIndex] + pads[padTailIndex] - dkernel) / stride) + 1);\r\n }\r\n }\r\n}\r\n\r\nexport const MIN_CLIP = -3.4028234663852886e+38;\r\nexport const MAX_CLIP = 3.4028234663852886e+38;\r\n\r\nexport function decodeUtf8String(buffer: Uint8Array): string {\r\n return new TextDecoder().decode(buffer);\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\ninterface ExtraOptionsHandler {\r\n (name: string, value: string): void;\r\n}\r\n\r\nexport const iterateExtraOptions =\r\n (options: Record, prefix: string, seen: WeakSet>,\r\n handler: ExtraOptionsHandler): void => {\r\n if (typeof options == 'object' && options !== null) {\r\n if (seen.has(options)) {\r\n throw new Error('Circular reference in options');\r\n } else {\r\n seen.add(options);\r\n }\r\n }\r\n\r\n Object.entries(options).forEach(([key, value]) => {\r\n const name = (prefix) ? prefix + key : key;\r\n if (typeof value === 'object') {\r\n iterateExtraOptions(value as Record, name + '.', seen, handler);\r\n } else if (typeof value === 'string' || typeof value === 'number') {\r\n handler(name, value.toString());\r\n } else if (typeof value === 'boolean') {\r\n handler(name, (value) ? '1' : '0');\r\n } else {\r\n throw new Error(`Can't handle extra config type: ${typeof value}`);\r\n }\r\n });\r\n };\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {env, InferenceSession} from 'onnxruntime-common';\r\nimport {OrtWasmMessage, SerializableSessionMetadata, SerializableTensor} from './proxy-messages';\r\nimport * as core from './wasm-core-impl';\r\nimport {initializeWebAssembly} from './wasm-factory';\r\n\r\nconst isProxy = (): boolean => !!env.wasm.proxy && typeof document !== 'undefined';\r\nlet proxyWorker: Worker|undefined;\r\nlet initializing = false;\r\nlet initialized = false;\r\nlet aborted = false;\r\n\r\n// resolve; reject\r\ntype PromiseCallbacks = [(result: T) => void, (reason: unknown) => void];\r\n\r\nlet initWasmCallbacks: PromiseCallbacks;\r\nlet initOrtCallbacks: PromiseCallbacks;\r\nconst createSessionCallbacks: Array> = [];\r\nconst releaseSessionCallbacks: Array> = [];\r\nconst runCallbacks: Array> = [];\r\nconst endProfilingCallbacks: Array> = [];\r\n\r\nconst ensureWorker = (): void => {\r\n if (initializing || !initialized || aborted || !proxyWorker) {\r\n throw new Error('worker not ready');\r\n }\r\n};\r\n\r\nconst onProxyWorkerMessage = (ev: MessageEvent): void => {\r\n switch (ev.data.type) {\r\n case 'init-wasm':\r\n initializing = false;\r\n if (ev.data.err) {\r\n aborted = true;\r\n initWasmCallbacks[1](ev.data.err);\r\n } else {\r\n initialized = true;\r\n initWasmCallbacks[0]();\r\n }\r\n break;\r\n case 'init-ort':\r\n if (ev.data.err) {\r\n initOrtCallbacks[1](ev.data.err);\r\n } else {\r\n initOrtCallbacks[0]();\r\n }\r\n break;\r\n case 'create':\r\n if (ev.data.err) {\r\n createSessionCallbacks.shift()![1](ev.data.err);\r\n } else {\r\n createSessionCallbacks.shift()![0](ev.data.out!);\r\n }\r\n break;\r\n case 'release':\r\n if (ev.data.err) {\r\n releaseSessionCallbacks.shift()![1](ev.data.err);\r\n } else {\r\n releaseSessionCallbacks.shift()![0]();\r\n }\r\n break;\r\n case 'run':\r\n if (ev.data.err) {\r\n runCallbacks.shift()![1](ev.data.err);\r\n } else {\r\n runCallbacks.shift()![0](ev.data.out!);\r\n }\r\n break;\r\n case 'end-profiling':\r\n if (ev.data.err) {\r\n endProfilingCallbacks.shift()![1](ev.data.err);\r\n } else {\r\n endProfilingCallbacks.shift()![0]();\r\n }\r\n break;\r\n default:\r\n }\r\n};\r\n\r\nconst scriptSrc = typeof document !== 'undefined' ? (document?.currentScript as HTMLScriptElement)?.src : undefined;\r\n\r\nexport const initWasm = async(): Promise => {\r\n if (!BUILD_DEFS.DISABLE_WASM_PROXY && isProxy()) {\r\n if (initialized) {\r\n return;\r\n }\r\n if (initializing) {\r\n throw new Error('multiple calls to \\'initWasm()\\' detected.');\r\n }\r\n if (aborted) {\r\n throw new Error('previous call to \\'initWasm()\\' failed.');\r\n }\r\n\r\n initializing = true;\r\n\r\n // overwrite wasm filepaths\r\n if (env.wasm.wasmPaths === undefined) {\r\n if (scriptSrc && scriptSrc.indexOf('blob:') !== 0) {\r\n env.wasm.wasmPaths = scriptSrc.substr(0, (scriptSrc as string).lastIndexOf('/') + 1);\r\n }\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n proxyWorker?.terminate();\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports\r\n proxyWorker = require('worker-loader?inline=no-fallback!./proxy-worker/main').default() as Worker;\r\n proxyWorker.onmessage = onProxyWorkerMessage;\r\n initWasmCallbacks = [resolve, reject];\r\n const message: OrtWasmMessage = {type: 'init-wasm', in : env.wasm};\r\n proxyWorker.postMessage(message);\r\n });\r\n\r\n } else {\r\n return initializeWebAssembly(env.wasm);\r\n }\r\n};\r\n\r\nexport const initOrt = async(numThreads: number, loggingLevel: number): Promise => {\r\n if (!BUILD_DEFS.DISABLE_WASM_PROXY && isProxy()) {\r\n ensureWorker();\r\n return new Promise((resolve, reject) => {\r\n initOrtCallbacks = [resolve, reject];\r\n const message: OrtWasmMessage = {type: 'init-ort', in : {numThreads, loggingLevel}};\r\n proxyWorker!.postMessage(message);\r\n });\r\n } else {\r\n core.initOrt(numThreads, loggingLevel);\r\n }\r\n};\r\n\r\nexport const createSession =\r\n async(model: Uint8Array, options?: InferenceSession.SessionOptions): Promise => {\r\n if (!BUILD_DEFS.DISABLE_WASM_PROXY && isProxy()) {\r\n ensureWorker();\r\n return new Promise((resolve, reject) => {\r\n createSessionCallbacks.push([resolve, reject]);\r\n const message: OrtWasmMessage = {type: 'create', in : {model, options}};\r\n proxyWorker!.postMessage(message, [model.buffer]);\r\n });\r\n } else {\r\n return core.createSession(model, options);\r\n }\r\n};\r\n\r\nexport const releaseSession = async(sessionId: number): Promise => {\r\n if (!BUILD_DEFS.DISABLE_WASM_PROXY && isProxy()) {\r\n ensureWorker();\r\n return new Promise((resolve, reject) => {\r\n releaseSessionCallbacks.push([resolve, reject]);\r\n const message: OrtWasmMessage = {type: 'release', in : sessionId};\r\n proxyWorker!.postMessage(message);\r\n });\r\n } else {\r\n core.releaseSession(sessionId);\r\n }\r\n};\r\n\r\nexport const run = async(\r\n sessionId: number, inputIndices: number[], inputs: SerializableTensor[], outputIndices: number[],\r\n options: InferenceSession.RunOptions): Promise => {\r\n if (!BUILD_DEFS.DISABLE_WASM_PROXY && isProxy()) {\r\n ensureWorker();\r\n return new Promise((resolve, reject) => {\r\n runCallbacks.push([resolve, reject]);\r\n const message: OrtWasmMessage = {type: 'run', in : {sessionId, inputIndices, inputs, outputIndices, options}};\r\n proxyWorker!.postMessage(message, core.extractTransferableBuffers(inputs));\r\n });\r\n } else {\r\n return core.run(sessionId, inputIndices, inputs, outputIndices, options);\r\n }\r\n};\r\n\r\nexport const endProfiling = async(sessionId: number): Promise => {\r\n if (!BUILD_DEFS.DISABLE_WASM_PROXY && isProxy()) {\r\n ensureWorker();\r\n return new Promise((resolve, reject) => {\r\n endProfilingCallbacks.push([resolve, reject]);\r\n const message: OrtWasmMessage = {type: 'end-profiling', in : sessionId};\r\n proxyWorker!.postMessage(message);\r\n });\r\n } else {\r\n core.endProfiling(sessionId);\r\n }\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {InferenceSession} from 'onnxruntime-common';\r\n\r\nimport {iterateExtraOptions} from './options-utils';\r\nimport {allocWasmString} from './string-utils';\r\nimport {getInstance} from './wasm-factory';\r\n\r\nexport const setRunOptions = (options: InferenceSession.RunOptions): [number, number[]] => {\r\n const wasm = getInstance();\r\n let runOptionsHandle = 0;\r\n const allocs: number[] = [];\r\n\r\n const runOptions: InferenceSession.RunOptions = options || {};\r\n\r\n try {\r\n if (options?.logSeverityLevel === undefined) {\r\n runOptions.logSeverityLevel = 2; // Default to warning\r\n } else if (\r\n typeof options.logSeverityLevel !== 'number' || !Number.isInteger(options.logSeverityLevel) ||\r\n options.logSeverityLevel < 0 || options.logSeverityLevel > 4) {\r\n throw new Error(`log serverity level is not valid: ${options.logSeverityLevel}`);\r\n }\r\n\r\n if (options?.logVerbosityLevel === undefined) {\r\n runOptions.logVerbosityLevel = 0; // Default to 0\r\n } else if (typeof options.logVerbosityLevel !== 'number' || !Number.isInteger(options.logVerbosityLevel)) {\r\n throw new Error(`log verbosity level is not valid: ${options.logVerbosityLevel}`);\r\n }\r\n\r\n if (options?.terminate === undefined) {\r\n runOptions.terminate = false;\r\n }\r\n\r\n let tagDataOffset = 0;\r\n if (options?.tag !== undefined) {\r\n tagDataOffset = allocWasmString(options.tag, allocs);\r\n }\r\n\r\n runOptionsHandle = wasm._OrtCreateRunOptions(\r\n runOptions.logSeverityLevel!, runOptions.logVerbosityLevel!, !!runOptions.terminate!, tagDataOffset);\r\n if (runOptionsHandle === 0) {\r\n throw new Error('Can\\'t create run options');\r\n }\r\n\r\n if (options?.extra !== undefined) {\r\n iterateExtraOptions(options.extra, '', new WeakSet>(), (key, value) => {\r\n const keyDataOffset = allocWasmString(key, allocs);\r\n const valueDataOffset = allocWasmString(value, allocs);\r\n\r\n if (wasm._OrtAddRunConfigEntry(runOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\r\n throw new Error(`Can't set a run config entry: ${key} - ${value}`);\r\n }\r\n });\r\n }\r\n\r\n return [runOptionsHandle, allocs];\r\n } catch (e) {\r\n if (runOptionsHandle !== 0) {\r\n wasm._OrtReleaseRunOptions(runOptionsHandle);\r\n }\r\n allocs.forEach(wasm._free);\r\n throw e;\r\n }\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {env, InferenceSession, SessionHandler, Tensor} from 'onnxruntime-common';\r\n\r\nimport {createSession, endProfiling, initOrt, releaseSession, run} from './proxy-wrapper';\r\n\r\nlet ortInit: boolean;\r\n\r\n\r\nconst getLogLevel = (logLevel: 'verbose'|'info'|'warning'|'error'|'fatal'): number => {\r\n switch (logLevel) {\r\n case 'verbose':\r\n return 0;\r\n case 'info':\r\n return 1;\r\n case 'warning':\r\n return 2;\r\n case 'error':\r\n return 3;\r\n case 'fatal':\r\n return 4;\r\n default:\r\n throw new Error(`unsupported logging level: ${logLevel}`);\r\n }\r\n};\r\n\r\nexport class OnnxruntimeWebAssemblySessionHandler implements SessionHandler {\r\n private sessionId: number;\r\n\r\n inputNames: string[];\r\n outputNames: string[];\r\n\r\n async loadModel(model: Uint8Array, options?: InferenceSession.SessionOptions): Promise {\r\n if (!ortInit) {\r\n await initOrt(env.wasm.numThreads!, getLogLevel(env.logLevel!));\r\n ortInit = true;\r\n }\r\n\r\n [this.sessionId, this.inputNames, this.outputNames] = await createSession(model, options);\r\n }\r\n\r\n async dispose(): Promise {\r\n return releaseSession(this.sessionId);\r\n }\r\n\r\n async run(feeds: SessionHandler.FeedsType, fetches: SessionHandler.FetchesType, options: InferenceSession.RunOptions):\r\n Promise {\r\n const inputArray: Tensor[] = [];\r\n const inputIndices: number[] = [];\r\n Object.entries(feeds).forEach(kvp => {\r\n const name = kvp[0];\r\n const tensor = kvp[1];\r\n const index = this.inputNames.indexOf(name);\r\n if (index === -1) {\r\n throw new Error(`invalid input '${name}'`);\r\n }\r\n inputArray.push(tensor);\r\n inputIndices.push(index);\r\n });\r\n\r\n const outputIndices: number[] = [];\r\n Object.entries(fetches).forEach(kvp => {\r\n const name = kvp[0];\r\n // TODO: support pre-allocated output\r\n const index = this.outputNames.indexOf(name);\r\n if (index === -1) {\r\n throw new Error(`invalid output '${name}'`);\r\n }\r\n outputIndices.push(index);\r\n });\r\n\r\n const outputs =\r\n await run(this.sessionId, inputIndices, inputArray.map(t => [t.type, t.dims, t.data]), outputIndices, options);\r\n\r\n const result: SessionHandler.ReturnType = {};\r\n for (let i = 0; i < outputs.length; i++) {\r\n result[this.outputNames[outputIndices[i]]] = new Tensor(outputs[i][0], outputs[i][2], outputs[i][1]);\r\n }\r\n return result;\r\n }\r\n\r\n startProfiling(): void {\r\n // TODO: implement profiling\r\n }\r\n\r\n endProfiling(): void {\r\n void endProfiling(this.sessionId);\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {InferenceSession} from 'onnxruntime-common';\r\n\r\nimport {iterateExtraOptions} from './options-utils';\r\nimport {allocWasmString} from './string-utils';\r\nimport {getInstance} from './wasm-factory';\r\n\r\nconst getGraphOptimzationLevel = (graphOptimizationLevel: string|unknown): number => {\r\n switch (graphOptimizationLevel) {\r\n case 'disabled':\r\n return 0;\r\n case 'basic':\r\n return 1;\r\n case 'extended':\r\n return 2;\r\n case 'all':\r\n return 99;\r\n default:\r\n throw new Error(`unsupported graph optimization level: ${graphOptimizationLevel}`);\r\n }\r\n};\r\n\r\nconst getExecutionMode = (executionMode: 'sequential'|'parallel'): number => {\r\n switch (executionMode) {\r\n case 'sequential':\r\n return 0;\r\n case 'parallel':\r\n return 1;\r\n default:\r\n throw new Error(`unsupported execution mode: ${executionMode}`);\r\n }\r\n};\r\n\r\nconst appendDefaultOptions = (options: InferenceSession.SessionOptions): void => {\r\n if (!options.extra) {\r\n options.extra = {};\r\n }\r\n if (!options.extra.session) {\r\n options.extra.session = {};\r\n }\r\n const session = options.extra.session as Record;\r\n if (!session.use_ort_model_bytes_directly) {\r\n // eslint-disable-next-line camelcase\r\n session.use_ort_model_bytes_directly = '1';\r\n }\r\n};\r\n\r\nexport const setSessionOptions = (options?: InferenceSession.SessionOptions): [number, number[]] => {\r\n const wasm = getInstance();\r\n let sessionOptionsHandle = 0;\r\n const allocs: number[] = [];\r\n\r\n const sessionOptions: InferenceSession.SessionOptions = options || {};\r\n appendDefaultOptions(sessionOptions);\r\n\r\n try {\r\n if (options?.graphOptimizationLevel === undefined) {\r\n sessionOptions.graphOptimizationLevel = 'all';\r\n }\r\n const graphOptimizationLevel = getGraphOptimzationLevel(sessionOptions.graphOptimizationLevel!);\r\n\r\n if (options?.enableCpuMemArena === undefined) {\r\n sessionOptions.enableCpuMemArena = true;\r\n }\r\n\r\n if (options?.enableMemPattern === undefined) {\r\n sessionOptions.enableMemPattern = true;\r\n }\r\n\r\n if (options?.executionMode === undefined) {\r\n sessionOptions.executionMode = 'sequential';\r\n }\r\n const executionMode = getExecutionMode(sessionOptions.executionMode!);\r\n\r\n let logIdDataOffset = 0;\r\n if (options?.logId !== undefined) {\r\n logIdDataOffset = allocWasmString(options.logId, allocs);\r\n }\r\n\r\n if (options?.logSeverityLevel === undefined) {\r\n sessionOptions.logSeverityLevel = 2; // Default to warning\r\n } else if (\r\n typeof options.logSeverityLevel !== 'number' || !Number.isInteger(options.logSeverityLevel) ||\r\n options.logSeverityLevel < 0 || options.logSeverityLevel > 4) {\r\n throw new Error(`log serverity level is not valid: ${options.logSeverityLevel}`);\r\n }\r\n\r\n if (options?.logVerbosityLevel === undefined) {\r\n sessionOptions.logVerbosityLevel = 0; // Default to 0\r\n } else if (typeof options.logVerbosityLevel !== 'number' || !Number.isInteger(options.logVerbosityLevel)) {\r\n throw new Error(`log verbosity level is not valid: ${options.logVerbosityLevel}`);\r\n }\r\n\r\n if (options?.enableProfiling === undefined) {\r\n sessionOptions.enableProfiling = false;\r\n }\r\n\r\n sessionOptionsHandle = wasm._OrtCreateSessionOptions(\r\n graphOptimizationLevel, !!sessionOptions.enableCpuMemArena!, !!sessionOptions.enableMemPattern!, executionMode,\r\n !!sessionOptions.enableProfiling!, 0, logIdDataOffset, sessionOptions.logSeverityLevel!,\r\n sessionOptions.logVerbosityLevel!);\r\n if (sessionOptionsHandle === 0) {\r\n throw new Error('Can\\'t create session options');\r\n }\r\n\r\n if (options?.extra !== undefined) {\r\n iterateExtraOptions(options.extra, '', new WeakSet>(), (key, value) => {\r\n const keyDataOffset = allocWasmString(key, allocs);\r\n const valueDataOffset = allocWasmString(value, allocs);\r\n\r\n if (wasm._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\r\n throw new Error(`Can't set a session config entry: ${key} - ${value}`);\r\n }\r\n });\r\n }\r\n\r\n return [sessionOptionsHandle, allocs];\r\n } catch (e) {\r\n if (sessionOptionsHandle !== 0) {\r\n wasm._OrtReleaseSessionOptions(sessionOptionsHandle);\r\n }\r\n allocs.forEach(wasm._free);\r\n throw e;\r\n }\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {getInstance} from './wasm-factory';\r\n\r\nexport const allocWasmString = (data: string, allocs: number[]): number => {\r\n const wasm = getInstance();\r\n\r\n const dataLength = wasm.lengthBytesUTF8(data) + 1;\r\n const dataOffset = wasm._malloc(dataLength);\r\n wasm.stringToUTF8(data, dataOffset, dataLength);\r\n allocs.push(dataOffset);\r\n\r\n return dataOffset;\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {InferenceSession, Tensor} from 'onnxruntime-common';\r\nimport {SerializableSessionMetadata, SerializableTensor} from './proxy-messages';\r\nimport {setRunOptions} from './run-options';\r\nimport {setSessionOptions} from './session-options';\r\nimport {allocWasmString} from './string-utils';\r\nimport {getInstance} from './wasm-factory';\r\n\r\n/**\r\n * initialize ORT environment.\r\n * @param numThreads SetGlobalIntraOpNumThreads(numThreads)\r\n * @param loggingLevel CreateEnv(static_cast(logging_level))\r\n */\r\nexport const initOrt = (numThreads: number, loggingLevel: number): void => {\r\n const errorCode = getInstance()._OrtInit(numThreads, loggingLevel);\r\n if (errorCode !== 0) {\r\n throw new Error(`Can't initialize onnxruntime. error code = ${errorCode}`);\r\n }\r\n};\r\n\r\n/**\r\n * tuple elements are: InferenceSession ID; inputNamesUTF8Encoded; outputNamesUTF8Encoded\r\n */\r\ntype SessionMetadata = [number, number[], number[]];\r\n\r\nconst activeSessions = new Map();\r\n\r\n/**\r\n * create an instance of InferenceSession.\r\n * @returns the metadata of InferenceSession. 0-value handle for failure.\r\n */\r\nexport const createSession =\r\n (model: Uint8Array, options?: InferenceSession.SessionOptions): SerializableSessionMetadata => {\r\n const wasm = getInstance();\r\n const modelDataOffset = wasm._malloc(model.byteLength);\r\n let sessionHandle = 0;\r\n let sessionOptionsHandle = 0;\r\n let allocs: number[] = [];\r\n\r\n try {\r\n [sessionOptionsHandle, allocs] = setSessionOptions(options);\r\n\r\n wasm.HEAPU8.set(model, modelDataOffset);\r\n sessionHandle = wasm._OrtCreateSession(modelDataOffset, model.byteLength, sessionOptionsHandle);\r\n if (sessionHandle === 0) {\r\n throw new Error('Can\\'t create a session');\r\n }\r\n } finally {\r\n wasm._free(modelDataOffset);\r\n wasm._OrtReleaseSessionOptions(sessionOptionsHandle);\r\n allocs.forEach(wasm._free);\r\n }\r\n\r\n const inputCount = wasm._OrtGetInputCount(sessionHandle);\r\n const outputCount = wasm._OrtGetOutputCount(sessionHandle);\r\n\r\n const inputNames = [];\r\n const inputNamesUTF8Encoded = [];\r\n const outputNames = [];\r\n const outputNamesUTF8Encoded = [];\r\n for (let i = 0; i < inputCount; i++) {\r\n const name = wasm._OrtGetInputName(sessionHandle, i);\r\n if (name === 0) {\r\n throw new Error('Can\\'t get an input name');\r\n }\r\n inputNamesUTF8Encoded.push(name);\r\n inputNames.push(wasm.UTF8ToString(name));\r\n }\r\n for (let i = 0; i < outputCount; i++) {\r\n const name = wasm._OrtGetOutputName(sessionHandle, i);\r\n if (name === 0) {\r\n throw new Error('Can\\'t get an output name');\r\n }\r\n outputNamesUTF8Encoded.push(name);\r\n outputNames.push(wasm.UTF8ToString(name));\r\n }\r\n\r\n activeSessions.set(sessionHandle, [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded]);\r\n return [sessionHandle, inputNames, outputNames];\r\n };\r\n\r\nexport const releaseSession = (sessionId: number): void => {\r\n const wasm = getInstance();\r\n const session = activeSessions.get(sessionId);\r\n if (!session) {\r\n throw new Error('invalid session id');\r\n }\r\n const sessionHandle = session[0];\r\n const inputNamesUTF8Encoded = session[1];\r\n const outputNamesUTF8Encoded = session[2];\r\n\r\n inputNamesUTF8Encoded.forEach(wasm._OrtFree);\r\n outputNamesUTF8Encoded.forEach(wasm._OrtFree);\r\n wasm._OrtReleaseSession(sessionHandle);\r\n activeSessions.delete(sessionId);\r\n};\r\n\r\n/**\r\n * Copied from ONNX definition. Use this to drop dependency 'onnx_proto' to decrease compiled .js file size.\r\n */\r\nconst enum DataType {\r\n undefined = 0,\r\n float = 1,\r\n uint8 = 2,\r\n int8 = 3,\r\n uint16 = 4,\r\n int16 = 5,\r\n int32 = 6,\r\n int64 = 7,\r\n string = 8,\r\n bool = 9,\r\n float16 = 10,\r\n double = 11,\r\n uint32 = 12,\r\n uint64 = 13,\r\n complex64 = 14,\r\n complex128 = 15,\r\n bfloat16 = 16\r\n}\r\n\r\n\r\nconst tensorDataTypeStringToEnum = (type: string): DataType => {\r\n switch (type) {\r\n case 'int8':\r\n return DataType.int8;\r\n case 'uint8':\r\n return DataType.uint8;\r\n case 'bool':\r\n return DataType.bool;\r\n case 'int16':\r\n return DataType.int16;\r\n case 'uint16':\r\n return DataType.uint16;\r\n case 'int32':\r\n return DataType.int32;\r\n case 'uint32':\r\n return DataType.uint32;\r\n case 'float32':\r\n return DataType.float;\r\n case 'float64':\r\n return DataType.double;\r\n case 'string':\r\n return DataType.string;\r\n case 'int64':\r\n return DataType.int64;\r\n case 'uint64':\r\n return DataType.uint64;\r\n\r\n default:\r\n throw new Error(`unsupported data type: ${type}`);\r\n }\r\n};\r\n\r\nconst tensorDataTypeEnumToString = (typeProto: DataType): Tensor.Type => {\r\n switch (typeProto) {\r\n case DataType.int8:\r\n return 'int8';\r\n case DataType.uint8:\r\n return 'uint8';\r\n case DataType.bool:\r\n return 'bool';\r\n case DataType.int16:\r\n return 'int16';\r\n case DataType.uint16:\r\n return 'uint16';\r\n case DataType.int32:\r\n return 'int32';\r\n case DataType.uint32:\r\n return 'uint32';\r\n case DataType.float:\r\n return 'float32';\r\n case DataType.double:\r\n return 'float64';\r\n case DataType.string:\r\n return 'string';\r\n case DataType.int64:\r\n return 'int32';\r\n case DataType.uint64:\r\n return 'uint32';\r\n\r\n default:\r\n throw new Error(`unsupported data type: ${typeProto}`);\r\n }\r\n};\r\n\r\nconst numericTensorTypeToTypedArray = (type: Tensor.Type): Float32ArrayConstructor|Uint8ArrayConstructor|\r\n Int8ArrayConstructor|Uint16ArrayConstructor|Int16ArrayConstructor|Int32ArrayConstructor|BigInt64ArrayConstructor|\r\n Uint8ArrayConstructor|Float64ArrayConstructor|Uint32ArrayConstructor|BigUint64ArrayConstructor => {\r\n switch (type) {\r\n case 'float32':\r\n return Float32Array;\r\n case 'uint8':\r\n return Uint8Array;\r\n case 'int8':\r\n return Int8Array;\r\n case 'uint16':\r\n return Uint16Array;\r\n case 'int16':\r\n return Int16Array;\r\n case 'int32':\r\n return Int32Array;\r\n case 'bool':\r\n return Uint8Array;\r\n case 'float64':\r\n return Float64Array;\r\n case 'uint32':\r\n return Uint32Array;\r\n case 'int64':\r\n return BigInt64Array;\r\n case 'uint64':\r\n return BigUint64Array;\r\n default:\r\n throw new Error(`unsupported type: ${type}`);\r\n }\r\n };\r\n\r\n/**\r\n * perform inference run\r\n */\r\nexport const run =\r\n (sessionId: number, inputIndices: number[], inputs: SerializableTensor[], outputIndices: number[],\r\n options: InferenceSession.RunOptions): SerializableTensor[] => {\r\n const wasm = getInstance();\r\n const session = activeSessions.get(sessionId);\r\n if (!session) {\r\n throw new Error('invalid session id');\r\n }\r\n const sessionHandle = session[0];\r\n const inputNamesUTF8Encoded = session[1];\r\n const outputNamesUTF8Encoded = session[2];\r\n\r\n const inputCount = inputIndices.length;\r\n const outputCount = outputIndices.length;\r\n\r\n let runOptionsHandle = 0;\r\n let runOptionsAllocs: number[] = [];\r\n\r\n const inputValues: number[] = [];\r\n const inputAllocs: number[] = [];\r\n\r\n try {\r\n [runOptionsHandle, runOptionsAllocs] = setRunOptions(options);\r\n\r\n // create input tensors\r\n for (let i = 0; i < inputCount; i++) {\r\n const dataType = inputs[i][0];\r\n const dims = inputs[i][1];\r\n const data = inputs[i][2];\r\n\r\n let dataOffset: number;\r\n let dataByteLength: number;\r\n\r\n if (Array.isArray(data)) {\r\n // string tensor\r\n dataByteLength = 4 * data.length;\r\n dataOffset = wasm._malloc(dataByteLength);\r\n inputAllocs.push(dataOffset);\r\n let dataIndex = dataOffset / 4;\r\n for (let i = 0; i < data.length; i++) {\r\n if (typeof data[i] !== 'string') {\r\n throw new TypeError(`tensor data at index ${i} is not a string`);\r\n }\r\n wasm.HEAPU32[dataIndex++] = allocWasmString(data[i], inputAllocs);\r\n }\r\n } else {\r\n dataByteLength = data.byteLength;\r\n dataOffset = wasm._malloc(dataByteLength);\r\n inputAllocs.push(dataOffset);\r\n wasm.HEAPU8.set(new Uint8Array(data.buffer, data.byteOffset, dataByteLength), dataOffset);\r\n }\r\n\r\n const stack = wasm.stackSave();\r\n const dimsOffset = wasm.stackAlloc(4 * dims.length);\r\n try {\r\n let dimIndex = dimsOffset / 4;\r\n dims.forEach(d => wasm.HEAP32[dimIndex++] = d);\r\n const tensor = wasm._OrtCreateTensor(\r\n tensorDataTypeStringToEnum(dataType), dataOffset, dataByteLength, dimsOffset, dims.length);\r\n if (tensor === 0) {\r\n throw new Error('Can\\'t create a tensor');\r\n }\r\n inputValues.push(tensor);\r\n } finally {\r\n wasm.stackRestore(stack);\r\n }\r\n }\r\n\r\n const beforeRunStack = wasm.stackSave();\r\n const inputValuesOffset = wasm.stackAlloc(inputCount * 4);\r\n const inputNamesOffset = wasm.stackAlloc(inputCount * 4);\r\n const outputValuesOffset = wasm.stackAlloc(outputCount * 4);\r\n const outputNamesOffset = wasm.stackAlloc(outputCount * 4);\r\n\r\n try {\r\n let inputValuesIndex = inputValuesOffset / 4;\r\n let inputNamesIndex = inputNamesOffset / 4;\r\n let outputValuesIndex = outputValuesOffset / 4;\r\n let outputNamesIndex = outputNamesOffset / 4;\r\n for (let i = 0; i < inputCount; i++) {\r\n wasm.HEAPU32[inputValuesIndex++] = inputValues[i];\r\n wasm.HEAPU32[inputNamesIndex++] = inputNamesUTF8Encoded[inputIndices[i]];\r\n }\r\n for (let i = 0; i < outputCount; i++) {\r\n wasm.HEAPU32[outputValuesIndex++] = 0;\r\n wasm.HEAPU32[outputNamesIndex++] = outputNamesUTF8Encoded[outputIndices[i]];\r\n }\r\n\r\n // support RunOptions\r\n let errorCode = wasm._OrtRun(\r\n sessionHandle, inputNamesOffset, inputValuesOffset, inputCount, outputNamesOffset, outputCount,\r\n outputValuesOffset, runOptionsHandle);\r\n\r\n const output: SerializableTensor[] = [];\r\n\r\n if (errorCode === 0) {\r\n for (let i = 0; i < outputCount; i++) {\r\n const tensor = wasm.HEAPU32[outputValuesOffset / 4 + i];\r\n\r\n const beforeGetTensorDataStack = wasm.stackSave();\r\n // stack allocate 4 pointer value\r\n const tensorDataOffset = wasm.stackAlloc(4 * 4);\r\n\r\n let type: Tensor.Type|undefined, dataOffset = 0;\r\n try {\r\n errorCode = wasm._OrtGetTensorData(\r\n tensor, tensorDataOffset, tensorDataOffset + 4, tensorDataOffset + 8, tensorDataOffset + 12);\r\n if (errorCode !== 0) {\r\n throw new Error(`Can't get a tensor data. error code = ${errorCode}`);\r\n }\r\n let tensorDataIndex = tensorDataOffset / 4;\r\n const dataType = wasm.HEAPU32[tensorDataIndex++];\r\n dataOffset = wasm.HEAPU32[tensorDataIndex++];\r\n const dimsOffset = wasm.HEAPU32[tensorDataIndex++];\r\n const dimsLength = wasm.HEAPU32[tensorDataIndex++];\r\n const dims = [];\r\n for (let i = 0; i < dimsLength; i++) {\r\n dims.push(wasm.HEAPU32[dimsOffset / 4 + i]);\r\n }\r\n wasm._OrtFree(dimsOffset);\r\n\r\n const size = dims.length === 0 ? 1 : dims.reduce((a, b) => a * b);\r\n type = tensorDataTypeEnumToString(dataType);\r\n if (type === 'string') {\r\n const stringData: string[] = [];\r\n let dataIndex = dataOffset / 4;\r\n for (let i = 0; i < size; i++) {\r\n const offset = wasm.HEAPU32[dataIndex++];\r\n const maxBytesToRead = i === size - 1 ? undefined : wasm.HEAPU32[dataIndex] - offset;\r\n stringData.push(wasm.UTF8ToString(offset, maxBytesToRead));\r\n }\r\n output.push([type, dims, stringData]);\r\n } else {\r\n const typedArrayConstructor = numericTensorTypeToTypedArray(type);\r\n const data = new typedArrayConstructor(size);\r\n new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\r\n .set(wasm.HEAPU8.subarray(dataOffset, dataOffset + data.byteLength));\r\n output.push([type, dims, data]);\r\n }\r\n } finally {\r\n wasm.stackRestore(beforeGetTensorDataStack);\r\n if (type === 'string' && dataOffset) {\r\n wasm._free(dataOffset);\r\n }\r\n wasm._OrtReleaseTensor(tensor);\r\n }\r\n }\r\n }\r\n\r\n if (errorCode === 0) {\r\n return output;\r\n } else {\r\n throw new Error(`failed to call OrtRun(). error code = ${errorCode}.`);\r\n }\r\n } finally {\r\n wasm.stackRestore(beforeRunStack);\r\n }\r\n } finally {\r\n inputValues.forEach(wasm._OrtReleaseTensor);\r\n inputAllocs.forEach(wasm._free);\r\n\r\n wasm._OrtReleaseRunOptions(runOptionsHandle);\r\n runOptionsAllocs.forEach(wasm._free);\r\n }\r\n };\r\n\r\n/**\r\n * end profiling\r\n */\r\nexport const endProfiling = (sessionId: number): void => {\r\n const wasm = getInstance();\r\n const session = activeSessions.get(sessionId);\r\n if (!session) {\r\n throw new Error('invalid session id');\r\n }\r\n const sessionHandle = session[0];\r\n\r\n // profile file name is not used yet, but it must be freed.\r\n const profileFileName = wasm._OrtEndProfiling(sessionHandle);\r\n if (profileFileName === 0) {\r\n throw new Error('Can\\'t get an profile file name');\r\n }\r\n wasm._OrtFree(profileFileName);\r\n};\r\n\r\nexport const extractTransferableBuffers = (tensors: readonly SerializableTensor[]): ArrayBufferLike[] => {\r\n const buffers: ArrayBufferLike[] = [];\r\n for (const tensor of tensors) {\r\n const data = tensor[2];\r\n if (!Array.isArray(data) && data.buffer) {\r\n buffers.push(data.buffer);\r\n }\r\n }\r\n return buffers;\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport {Env} from 'onnxruntime-common';\r\nimport * as path from 'path';\r\n\r\nimport {OrtWasmModule} from './binding/ort-wasm';\r\nimport {OrtWasmThreadedModule} from './binding/ort-wasm-threaded';\r\nimport ortWasmFactory from './binding/ort-wasm.js';\r\nconst ortWasmFactoryThreaded: EmscriptenModuleFactory =\r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n !BUILD_DEFS.DISABLE_WASM_THREAD ? require('./binding/ort-wasm-threaded.js') : ortWasmFactory;\r\n\r\nlet wasm: OrtWasmModule|undefined;\r\nlet initialized = false;\r\nlet initializing = false;\r\nlet aborted = false;\r\n\r\nconst isMultiThreadSupported = (): boolean => {\r\n try {\r\n // If 'SharedArrayBuffer' is not available, WebAssembly threads will not work.\r\n if (typeof SharedArrayBuffer === 'undefined') {\r\n return false;\r\n }\r\n\r\n // Test for transferability of SABs (for browsers. needed for Firefox)\r\n // https://groups.google.com/forum/#!msg/mozilla.dev.platform/IHkBZlHETpA/dwsMNchWEQAJ\r\n if (typeof MessageChannel !== 'undefined') {\r\n new MessageChannel().port1.postMessage(new SharedArrayBuffer(1));\r\n }\r\n\r\n // Test for WebAssembly threads capability (for both browsers and Node.js)\r\n // This typed array is a WebAssembly program containing threaded instructions.\r\n return WebAssembly.validate(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 2, 1, 0, 5,\r\n 4, 1, 3, 1, 1, 10, 11, 1, 9, 0, 65, 0, 254, 16, 2, 0, 26, 11\r\n ]));\r\n } catch (e) {\r\n return false;\r\n }\r\n};\r\n\r\nconst isSimdSupported = (): boolean => {\r\n try {\r\n // Test for WebAssembly SIMD capability (for both browsers and Node.js)\r\n // This typed array is a WebAssembly program containing SIMD instructions.\r\n\r\n // The binary data is generated from the following code by wat2wasm:\r\n //\r\n // (module\r\n // (type $t0 (func))\r\n // (func $f0 (type $t0)\r\n // (drop\r\n // (i32x4.dot_i16x8_s\r\n // (i8x16.splat\r\n // (i32.const 0))\r\n // (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)))))\r\n\r\n return WebAssembly.validate(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 2, 1, 0, 10, 30, 1, 28, 0, 65, 0,\r\n 253, 15, 253, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 186, 1, 26, 11\r\n ]));\r\n } catch (e) {\r\n return false;\r\n }\r\n};\r\n\r\nconst getWasmFileName = (useSimd: boolean, useThreads: boolean) => {\r\n if (useThreads) {\r\n return useSimd ? 'ort-wasm-simd-threaded.wasm' : 'ort-wasm-threaded.wasm';\r\n } else {\r\n return useSimd ? 'ort-wasm-simd.wasm' : 'ort-wasm.wasm';\r\n }\r\n};\r\n\r\nexport const initializeWebAssembly = async(flags: Env.WebAssemblyFlags): Promise => {\r\n if (initialized) {\r\n return Promise.resolve();\r\n }\r\n if (initializing) {\r\n throw new Error('multiple calls to \\'initializeWebAssembly()\\' detected.');\r\n }\r\n if (aborted) {\r\n throw new Error('previous call to \\'initializeWebAssembly()\\' failed.');\r\n }\r\n\r\n initializing = true;\r\n\r\n // wasm flags are already initialized\r\n const timeout = flags.initTimeout!;\r\n const numThreads = flags.numThreads!;\r\n const simd = flags.simd!;\r\n\r\n const useThreads = numThreads > 1 && isMultiThreadSupported();\r\n const useSimd = simd && isSimdSupported();\r\n\r\n const wasmPrefixOverride = typeof flags.wasmPaths === 'string' ? flags.wasmPaths : undefined;\r\n const wasmFileName = getWasmFileName(false, useThreads);\r\n const wasmOverrideFileName = getWasmFileName(useSimd, useThreads);\r\n const wasmPathOverride = typeof flags.wasmPaths === 'object' ? flags.wasmPaths[wasmOverrideFileName] : undefined;\r\n\r\n let isTimeout = false;\r\n\r\n const tasks: Array> = [];\r\n\r\n // promise for timeout\r\n if (timeout > 0) {\r\n tasks.push(new Promise((resolve) => {\r\n setTimeout(() => {\r\n isTimeout = true;\r\n resolve();\r\n }, timeout);\r\n }));\r\n }\r\n\r\n // promise for module initialization\r\n tasks.push(new Promise((resolve, reject) => {\r\n const factory = useThreads ? ortWasmFactoryThreaded : ortWasmFactory;\r\n const config: Partial = {\r\n locateFile: (fileName: string, scriptDirectory: string) => {\r\n if (!BUILD_DEFS.DISABLE_WASM_THREAD && useThreads && fileName.endsWith('.worker.js') &&\r\n typeof Blob !== 'undefined') {\r\n return URL.createObjectURL(new Blob(\r\n [\r\n // This require() function is handled by webpack to load file content of the corresponding .worker.js\r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n require('./binding/ort-wasm-threaded.worker.js')\r\n ],\r\n {type: 'text/javascript'}));\r\n }\r\n\r\n if (fileName === wasmFileName) {\r\n const prefix: string = wasmPrefixOverride ?? scriptDirectory;\r\n return wasmPathOverride ?? prefix + wasmOverrideFileName;\r\n }\r\n\r\n return scriptDirectory + fileName;\r\n }\r\n };\r\n\r\n if (!BUILD_DEFS.DISABLE_WASM_THREAD && useThreads) {\r\n if (typeof Blob === 'undefined') {\r\n config.mainScriptUrlOrBlob = path.join(__dirname, 'ort-wasm-threaded.js');\r\n } else {\r\n const scriptSourceCode = `var ortWasmThreaded=(function(){var _scriptDir;return ${factory.toString()}})();`;\r\n config.mainScriptUrlOrBlob = new Blob([scriptSourceCode], {type: 'text/javascript'});\r\n }\r\n }\r\n\r\n factory(config).then(\r\n // wasm module initialized successfully\r\n module => {\r\n initializing = false;\r\n initialized = true;\r\n wasm = module;\r\n resolve();\r\n },\r\n // wasm module failed to initialize\r\n (what) => {\r\n initializing = false;\r\n aborted = true;\r\n reject(what);\r\n });\r\n }));\r\n\r\n await Promise.race(tasks);\r\n\r\n if (isTimeout) {\r\n throw new Error(`WebAssembly backend initializing failed due to timeout: ${timeout}ms`);\r\n }\r\n};\r\n\r\nexport const getInstance = (): OrtWasmModule => {\r\n if (initialized && wasm) {\r\n return wasm;\r\n }\r\n\r\n throw new Error('WebAssembly is not initialized yet.');\r\n};\r\n\r\nexport const dispose = (): void => {\r\n if (initialized && !initializing && !aborted) {\r\n initializing = true;\r\n\r\n (wasm as OrtWasmThreadedModule).PThread?.terminateAllThreads();\r\n wasm = undefined;\r\n\r\n initializing = false;\r\n initialized = false;\r\n aborted = true;\r\n }\r\n};\r\n","\nimport worker from \"!!../../../node_modules/worker-loader/dist/runtime/inline.js\";\n\nexport default function Worker_fn() {\n return worker(\"/*!\\n* ONNX Runtime Web v1.10.0\\n* Copyright (c) Microsoft Corporation. All rights reserved.\\n* Licensed under the MIT License.\\n*/\\n(()=>{var e={474:(e,t,n)=>{var _scriptDir,r=(_scriptDir=(_scriptDir=\\\"undefined\\\"!=typeof document&&document.currentScript?document.currentScript.src:void 0)||\\\"/index.js\\\",function(e){function t(){return R.buffer!=j&&J(R.buffer),L}function r(){return R.buffer!=j&&J(R.buffer),W}function a(){return R.buffer!=j&&J(R.buffer),H}function o(){return R.buffer!=j&&J(R.buffer),Y}function i(){return R.buffer!=j&&J(R.buffer),z}var u,s,c;e=e||{},u||(u=void 0!==e?e:{}),u.ready=new Promise((function(e,t){s=e,c=t}));var l,f={};for(l in u)u.hasOwnProperty(l)&&(f[l]=u[l]);var p=\\\"./this.program\\\";function d(e,t){throw t}var m,h,g,b,y,_=\\\"object\\\"==typeof window,v=\\\"function\\\"==typeof importScripts,w=\\\"object\\\"==typeof process&&\\\"object\\\"==typeof process.versions&&\\\"string\\\"==typeof process.versions.node,O=u.ENVIRONMENT_IS_PTHREAD||!1,A=\\\"\\\";function E(e){return u.locateFile?u.locateFile(e,A):A+e}if(w){var T;A=v?n(908).dirname(A)+\\\"/\\\":\\\"//\\\",m=function(e,t){return b||(b=n(384)),y||(y=n(908)),e=y.normalize(e),b.readFileSync(e,t?null:\\\"utf8\\\")},g=function(e){return(e=m(e,!0)).buffer||(e=new Uint8Array(e)),F(e.buffer),e},h=function(e,t,r){b||(b=n(384)),y||(y=n(908)),e=y.normalize(e),b.readFile(e,(function(e,n){e?r(e):t(n.buffer)}))},1=r);)++n;if(16(a=224==(240&a)?(15&a)<<12|o<<6|i:(7&a)<<18|o<<12|i<<6|63&e[t++])?r+=String.fromCharCode(a):(a-=65536,r+=String.fromCharCode(55296|a>>10,56320|1023&a))}}else r+=String.fromCharCode(a)}return r}function N(e,t){return e?G(r(),e,t):\\\"\\\"}function q(e,t,n,r){if(!(0=i&&(i=65536+((1023&i)<<10)|1023&e.charCodeAt(++o)),127>=i){if(n>=r)break;t[n++]=i}else{if(2047>=i){if(n+1>=r)break;t[n++]=192|i>>6}else{if(65535>=i){if(n+2>=r)break;t[n++]=224|i>>12}else{if(n+3>=r)break;t[n++]=240|i>>18,t[n++]=128|i>>12&63}t[n++]=128|i>>6&63}t[n++]=128|63&i}}return t[n]=0,n-a}function V(e,t,n){return q(e,r(),t,n)}function $(e){for(var t=0,n=0;n=r&&(r=65536+((1023&r)<<10)|1023&e.charCodeAt(++n)),127>=r?++t:t=2047>=r?t+2:65535>=r?t+3:t+4}return t}function X(e){var n=$(e)+1,r=bt(n);return r&&q(e,t(),r,n),r}function J(e){j=e,u.HEAP8=L=new Int8Array(e),u.HEAP16=new Int16Array(e),u.HEAP32=H=new Int32Array(e),u.HEAPU8=W=new Uint8Array(e),u.HEAPU16=new Uint16Array(e),u.HEAPU32=Y=new Uint32Array(e),u.HEAPF32=new Float32Array(e),u.HEAPF64=z=new Float64Array(e)}\\\"undefined\\\"!=typeof TextDecoder&&new U(\\\"utf-16le\\\"),O&&(j=u.buffer);var Q=u.INITIAL_MEMORY||16777216;if(O)R=u.wasmMemory,j=u.buffer;else if(u.wasmMemory)R=u.wasmMemory;else if(!((R=new WebAssembly.Memory({initial:Q/65536,maximum:32768,shared:!0})).buffer instanceof SharedArrayBuffer))throw D(\\\"requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag\\\"),w&&console.log(\\\"(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)\\\"),Error(\\\"bad memory\\\");R&&(j=R.buffer),Q=j.byteLength,J(j);var Z,K=[],ee=[],te=[],ne=[],re=0;function ae(){return x||0=e||e>t().length||1&e||0>n)return-28;if(0==n)return 0;2147483647<=n&&(n=1/0);var r=Atomics.load(a(),zt>>2),o=0;if(r==e&&Atomics.compareExchange(a(),zt>>2,r,0)==r&&(o=1,0>=--n))return 1;if(0<=(e=Atomics.notify(a(),e>>2,n)))return e+o;throw\\\"Atomics.notify returned an unexpected value \\\"+e}function ge(e){if(O)throw\\\"Internal Error! cleanupThread() can only ever be called from main application thread!\\\";if(!e)throw\\\"Internal Error! Null pthread_ptr in cleanupThread!\\\";var t=ye.cb[e];t&&(a()[e+12>>2]=0,ye.sb(t.worker))}u._emscripten_futex_wake=he;var be,ye={gb:[],fb:[],zb:[],xc:function(){},Rb:function(){for(var e=bt(228),t=0;57>t;++t)o()[e/4+t]=0;a()[e+12>>2]=e,t=e+152,a()[t>>2]=t;var n=bt(512);for(t=0;128>t;++t)o()[n/4+t]=0;Atomics.store(o(),e+100>>2,n),Atomics.store(o(),e+40>>2,e),xt(e,!v,1),Ot(e)},Sb:function(){ye.receiveObjectTransfer=ye.Xb,ye.threadInit=ye.hc,ye.threadCancel=ye.fc,ye.threadExit=ye.Hb,ye.setExitStatus=ye.Zb},cb:{},yb:[],Eb:function(){for(;0>2,1),Atomics.store(o(),e+60>>2,0),ye.Eb(),Atomics.store(o(),e+4>>2,t),Atomics.store(o(),e+0>>2,1),he(e+0,2147483647),xt(0,0,0)},Zb:function(e){P=e},Hb:function(e){var t=vt();t&&(ye.Fb(t,e),O&&postMessage({cmd:\\\"exit\\\"}))},fc:function(){ye.Fb(vt(),-1),postMessage({cmd:\\\"cancelDone\\\"})},Gb:function(){for(var e in ye.cb){var t=ye.cb[e];t&&t.worker&&ye.sb(t.worker)}for(ye.cb={},e=0;e>2];a()[e.eb+100>>2]=0,_t(t),_t(e.eb)}e.eb=0,e.wb&&e.hb&&_t(e.hb),e.hb=0,e.worker&&(e.worker.bb=null)}},sb:function(e){ye.Yb((function(){delete ye.cb[e.bb.eb],ye.gb.push(e),ye.fb.splice(ye.fb.indexOf(e),1),ye.xb(e.bb),e.bb=void 0}))},Yb:function(e){a()[Yt>>2]=0;try{e()}finally{a()[Yt>>2]=1}},Xb:function(){},hc:function(){for(var e in ye.zb)ye.zb[e]()},Ub:function(e,t){e.onmessage=function(n){var r=n.data,i=r.cmd;if(e.bb&&(ye.Lb=e.bb.eb),r.targetThread&&r.targetThread!=vt()){var u=ye.cb[r.Dc];u?u.worker.postMessage(n.data,r.transferList):D('Internal error! Worker sent a message \\\"'+i+'\\\" to target pthread '+r.targetThread+\\\", but that thread no longer exists!\\\")}else if(\\\"processQueuedMainThreadWork\\\"===i)Tt();else if(\\\"spawnThread\\\"===i)Oe(n.data);else if(\\\"cleanupThread\\\"===i)ge(r.thread);else if(\\\"killThread\\\"===i){if(n=r.thread,O)throw\\\"Internal Error! killThread() can only ever be called from main application thread!\\\";if(!n)throw\\\"Internal Error! Null pthread_ptr in killThread!\\\";a()[n+12>>2]=0,r=ye.cb[n],delete ye.cb[n],r.worker.terminate(),ye.xb(r),ye.fb.splice(ye.fb.indexOf(r.worker),1),r.worker.bb=void 0}else if(\\\"cancelThread\\\"===i){if(n=r.thread,O)throw\\\"Internal Error! cancelThread() can only ever be called from main application thread!\\\";if(!n)throw\\\"Internal Error! Null pthread_ptr in cancelThread!\\\";ye.cb[n].worker.postMessage({cmd:\\\"cancel\\\"})}else if(\\\"loaded\\\"===i)e.loaded=!0,t&&t(e),e.mb&&(e.mb(),delete e.mb);else if(\\\"print\\\"===i)k(\\\"Thread \\\"+r.threadId+\\\": \\\"+r.text);else if(\\\"printErr\\\"===i)D(\\\"Thread \\\"+r.threadId+\\\": \\\"+r.text);else if(\\\"alert\\\"===i)alert(\\\"Thread \\\"+r.threadId+\\\": \\\"+r.text);else if(\\\"exit\\\"===i)e.bb&&Atomics.load(o(),e.bb.eb+64>>2)&&ye.sb(e);else if(\\\"exitProcess\\\"===i)try{Nt(r.returnCode)}catch(e){if(e instanceof Bt)return;throw e}else\\\"cancelDone\\\"===i?ye.sb(e):\\\"objectTransfer\\\"!==i&&(\\\"setimmediate\\\"===n.data.target?e.postMessage(n.data):D(\\\"worker sent an unknown command \\\"+i));ye.Lb=void 0},e.onerror=function(e){D(\\\"pthread sent an error! \\\"+e.filename+\\\":\\\"+e.lineno+\\\": \\\"+e.message)},w&&(e.on(\\\"message\\\",(function(t){e.onmessage({data:t})})),e.on(\\\"error\\\",(function(t){e.onerror(t)})),e.on(\\\"exit\\\",(function(){}))),e.postMessage({cmd:\\\"load\\\",urlOrBlob:u.mainScriptUrlOrBlob||_scriptDir,wasmMemory:R,wasmModule:C})},Ib:function(){var e=E(\\\"ort-wasm-threaded.worker.js\\\");ye.gb.push(new Worker(e))},Ob:function(){return 0==ye.gb.length&&(ye.Ib(),ye.Ub(ye.gb[0])),ye.gb.pop()},nc:function(e){for(e=performance.now()+e;performance.now()>2]=28,-1;e=be()}return a()[t>>2]=e/1e3|0,a()[t+4>>2]=e%1e3*1e6|0,0}function ve(e,t){if(O)return Ne(1,1,e,t);te.unshift({Nb:e,ib:t})}function we(e){this.lb=e-16,this.dc=function(e){a()[this.lb+4>>2]=e},this.ac=function(e){a()[this.lb+8>>2]=e},this.bc=function(){a()[this.lb>>2]=0},this.$b=function(){t()[this.lb+12>>0]=0},this.cc=function(){t()[this.lb+13>>0]=0},this.Pb=function(e,t){this.dc(e),this.ac(t),this.bc(),this.$b(),this.cc()}}function Oe(e){if(O)throw\\\"Internal Error! spawnThread() can only ever be called from main application thread!\\\";var t=ye.Ob();if(!t)return 6;if(void 0!==t.bb)throw\\\"Internal error!\\\";if(!e.rb)throw\\\"Internal error, no pthread ptr!\\\";ye.fb.push(t);for(var n=bt(512),r=0;128>r;++r)a()[n+4*r>>2]=0;var i=e.hb+e.jb,u=(r=ye.cb[e.rb]={worker:t,hb:e.hb,jb:e.jb,wb:e.wb,eb:e.rb}).eb>>2;Atomics.store(o(),u+16,e.detached),Atomics.store(o(),u+25,n),Atomics.store(o(),u+10,r.eb),Atomics.store(o(),u+20,e.jb),Atomics.store(o(),u+19,i),Atomics.store(o(),u+26,e.jb),Atomics.store(o(),u+28,i),Atomics.store(o(),u+29,e.detached),n=Rt()+40,Atomics.store(o(),u+43,n),t.bb=r;var s={cmd:\\\"run\\\",start_routine:e.ec,arg:e.ib,threadInfoStruct:e.rb,stackBase:e.hb,stackSize:e.jb};return t.mb=function(){s.time=performance.now(),t.postMessage(s,e.mc)},t.loaded&&(t.mb(),delete t.mb),0}function Ae(e,n,r){if(0>=e||e>t().length||1&e)return-28;if(_){if(Atomics.load(a(),e>>2)!=n)return-6;var o=performance.now();for(r=o+r,Atomics.exchange(a(),zt>>2,e);;){if((o=performance.now())>r)return Atomics.exchange(a(),zt>>2,0),-73;if(0==(o=Atomics.exchange(a(),zt>>2,0)))break;if(Tt(),Atomics.load(a(),e>>2)!=n)return-6;Atomics.exchange(a(),zt>>2,e)}return 0}if(\\\"timed-out\\\"===(e=Atomics.wait(a(),e>>2,n,r)))return-73;if(\\\"not-equal\\\"===e)return-6;if(\\\"ok\\\"===e)return 0;throw\\\"Atomics.wait returned an unexpected value \\\"+e}function Ee(){w||v||(S||(S={}),S[\\\"Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread\\\"]||(S[\\\"Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread\\\"]=1,D(\\\"Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread\\\")))}u.establishStackSpace=function(e,t){Wt(e,t),jt(e)},u.invokeEntryPoint=function(e,t){return Z.get(e)(t)},be=w?function(){var e=process.hrtime();return 1e3*e[0]+e[1]/1e6}:O?function(){return performance.now()-u.__performance_now_clock_drift}:function(){return performance.now()};var Te={},Se=[null,[],[]];function Me(e,t){var n=Se[e];0===t||10===t?((1===e?k:D)(G(n,0)),n.length=0):n.push(t)}var ke={};function De(e,t){return O?Ne(2,1,e,t):(e=N(e),ke.rc(e,t))}function xe(e,t,n){return O?Ne(3,1,e,t,n):0}function Re(e,t){if(O)return Ne(4,1,e,t)}function Ce(e,t,n){if(O)return Ne(5,1,e,t,n)}function Pe(e,t,n){return O?Ne(6,1,e,t,n):0}function Ie(e,t){if(O)return Ne(7,1,e,t)}function Fe(e,t){return O?Ne(8,1,e,t):(e=N(e),ke.sc(e,t))}function Ue(e,t,n,a,o,i){if(O)t=Ne(9,1,e,t,n,a,o,i);else if(i<<=12,0!=(16&a)&&0!=e%65536)t=-28;else if(0!=(32&a)){var u=65536*Math.ceil(t/65536);(e=Ht(65536,u))?r().fill(0,e,e+u):e=0,e?(Te[e]={Wb:e,Tb:t,Jb:!0,fd:o,Ac:n,flags:a,offset:i},t=e):t=-48}else t=-52;return t}function je(e,t){if(O)e=Ne(10,1,e,t);else{var n=Te[e];0!==t&&n?(t===n.Tb&&(Te[e]=null,n.Jb&&_t(n.Wb)),e=0):e=-28}return e}function Le(e,t,n){if(O)return Ne(11,1,e,t,n)}function We(e,t,n){return O?Ne(12,1,e,t,n):(e=N(e),ke.tc(e,t,n))}function He(e){if(O)return Ne(13,1,e)}function Ye(e,t){if(O)return Ne(14,1,e,t)}function ze(e){if(O)return Ne(15,1,e)}function Be(){if(O)return Ne(16,1);le()}var Ge=[];function Ne(e,t){for(var n=arguments.length-2,r=Ut(),a=Lt(8*n),o=a>>3,u=0;u>2]=t,a()[r.qb+4>>2]=n),!r.Db&&r.pc){if(r.qb){r=a()[r.qb+8>>2],e=e?N(e):\\\"\\\";var o=Ut(),i=Lt(12),u=0;if(e){u=$(e)+1;var s=bt(u);V(e,s,u),u=s}return a()[i>>2]=u,a()[i+4>>2]=t,a()[i+8>>2]=n,Mt(0,r,657457152,0,u,i),jt(o),1}return-4}return r.Db&&(r=r.Db),e=!1,r.pb&&r.pb.ob&&(e=0===(e=r.pb.ob.getParameter(2978))[0]&&0===e[1]&&e[2]===r.width&&e[3]===r.height),r.width=t,r.height=n,e&&r.pb.ob.viewport(0,0,t,n),0}function Je(e,t,n){return O?Ne(17,1,e,t,n):Xe(e,t,n)}var Qe,Ze=[\\\"default\\\",\\\"low-power\\\",\\\"high-performance\\\"],Ke={};function et(){if(!Qe){var e,t={USER:\\\"web_user\\\",LOGNAME:\\\"web_user\\\",PATH:\\\"/\\\",PWD:\\\"/\\\",HOME:\\\"/home/web_user\\\",LANG:(\\\"object\\\"==typeof navigator&&navigator.languages&&navigator.languages[0]||\\\"C\\\").replace(\\\"-\\\",\\\"_\\\")+\\\".UTF-8\\\",_:p||\\\"./this.program\\\"};for(e in Ke)void 0===Ke[e]?delete t[e]:t[e]=Ke[e];var n=[];for(e in t)n.push(e+\\\"=\\\"+t[e]);Qe=n}return Qe}function tt(e,n){if(O)return Ne(18,1,e,n);var r=0;return et().forEach((function(o,i){var u=n+r;for(i=a()[e+4*i>>2]=u,u=0;u>0]=o.charCodeAt(u);t()[i>>0]=0,r+=o.length+1})),0}function nt(e,t){if(O)return Ne(19,1,e,t);var n=et();a()[e>>2]=n.length;var r=0;return n.forEach((function(e){r+=e.length+1})),a()[t>>2]=r,0}function rt(e){return O?Ne(20,1,e):0}function at(e,n){return O?Ne(21,1,e,n):(e=1==e||2==e?2:le(),t()[n>>0]=e,0)}function ot(e,t,n,r){return O?Ne(22,1,e,t,n,r):(e=ke.vc(e),t=ke.uc(e,t,n),a()[r>>2]=t,0)}function it(e,t,n,r,a){if(O)return Ne(23,1,e,t,n,r,a)}function ut(e,t,n,o){if(O)return Ne(24,1,e,t,n,o);for(var i=0,u=0;u>2],c=a()[t+(8*u+4)>>2],l=0;l>2]=i,0}function st(){function e(e){return(e=e.toTimeString().match(/\\\\(([A-Za-z ]+)\\\\)$/))?e[1]:\\\"GMT\\\"}if(O)return Ne(25,1);if(!st.Kb){st.Kb=!0;var t=(new Date).getFullYear(),n=new Date(t,0,1),r=new Date(t,6,1);t=n.getTimezoneOffset();var o=r.getTimezoneOffset(),i=Math.max(t,o);a()[Ft()>>2]=60*i,a()[It()>>2]=Number(t!=o),n=e(n),r=e(r),n=X(n),r=X(r),o>2]=n,a()[Pt()+4>>2]=r):(a()[Pt()>>2]=r,a()[Pt()+4>>2]=n)}}function ct(e){return 0==e%4&&(0!=e%100||0==e%400)}function lt(e,t){for(var n=0,r=0;r<=t;n+=e[r++]);return n}var ft=[31,29,31,30,31,30,31,31,30,31,30,31],pt=[31,28,31,30,31,30,31,31,30,31,30,31];function dt(e,t){for(e=new Date(e.getTime());0r-e.getDate())){e.setDate(e.getDate()+t);break}t-=r-e.getDate()+1,e.setDate(1),11>n?e.setMonth(n+1):(e.setMonth(0),e.setFullYear(e.getFullYear()+1))}return e}function mt(e,n,r,o){function i(e,t,n){for(e=\\\"number\\\"==typeof e?e.toString():e||\\\"\\\";e.lengthe?-1:0=s(n,e)?0>=s(t,e)?e.getFullYear()+1:e.getFullYear():e.getFullYear()-1}var f=a()[o+40>>2];for(var p in o={kc:a()[o>>2],jc:a()[o+4>>2],tb:a()[o+8>>2],nb:a()[o+12>>2],kb:a()[o+16>>2],ab:a()[o+20>>2],ub:a()[o+24>>2],vb:a()[o+28>>2],Ec:a()[o+32>>2],ic:a()[o+36>>2],lc:f?N(f):\\\"\\\"},r=N(r),f={\\\"%c\\\":\\\"%a %b %d %H:%M:%S %Y\\\",\\\"%D\\\":\\\"%m/%d/%y\\\",\\\"%F\\\":\\\"%Y-%m-%d\\\",\\\"%h\\\":\\\"%b\\\",\\\"%r\\\":\\\"%I:%M:%S %p\\\",\\\"%R\\\":\\\"%H:%M\\\",\\\"%T\\\":\\\"%H:%M:%S\\\",\\\"%x\\\":\\\"%m/%d/%y\\\",\\\"%X\\\":\\\"%H:%M:%S\\\",\\\"%Ec\\\":\\\"%c\\\",\\\"%EC\\\":\\\"%C\\\",\\\"%Ex\\\":\\\"%m/%d/%y\\\",\\\"%EX\\\":\\\"%H:%M:%S\\\",\\\"%Ey\\\":\\\"%y\\\",\\\"%EY\\\":\\\"%Y\\\",\\\"%Od\\\":\\\"%d\\\",\\\"%Oe\\\":\\\"%e\\\",\\\"%OH\\\":\\\"%H\\\",\\\"%OI\\\":\\\"%I\\\",\\\"%Om\\\":\\\"%m\\\",\\\"%OM\\\":\\\"%M\\\",\\\"%OS\\\":\\\"%S\\\",\\\"%Ou\\\":\\\"%u\\\",\\\"%OU\\\":\\\"%U\\\",\\\"%OV\\\":\\\"%V\\\",\\\"%Ow\\\":\\\"%w\\\",\\\"%OW\\\":\\\"%W\\\",\\\"%Oy\\\":\\\"%y\\\"})r=r.replace(new RegExp(p,\\\"g\\\"),f[p]);var d=\\\"Sunday Monday Tuesday Wednesday Thursday Friday Saturday\\\".split(\\\" \\\"),m=\\\"January February March April May June July August September October November December\\\".split(\\\" \\\");for(p in f={\\\"%a\\\":function(e){return d[e.ub].substring(0,3)},\\\"%A\\\":function(e){return d[e.ub]},\\\"%b\\\":function(e){return m[e.kb].substring(0,3)},\\\"%B\\\":function(e){return m[e.kb]},\\\"%C\\\":function(e){return u((e.ab+1900)/100|0,2)},\\\"%d\\\":function(e){return u(e.nb,2)},\\\"%e\\\":function(e){return i(e.nb,2,\\\" \\\")},\\\"%g\\\":function(e){return l(e).toString().substring(2)},\\\"%G\\\":function(e){return l(e)},\\\"%H\\\":function(e){return u(e.tb,2)},\\\"%I\\\":function(e){return 0==(e=e.tb)?e=12:12e.tb?\\\"AM\\\":\\\"PM\\\"},\\\"%S\\\":function(e){return u(e.kc,2)},\\\"%t\\\":function(){return\\\"\\\\t\\\"},\\\"%u\\\":function(e){return e.ub||7},\\\"%U\\\":function(e){var t=new Date(e.ab+1900,0,1),n=0===t.getDay()?t:dt(t,7-t.getDay());return 0>s(n,e=new Date(e.ab+1900,e.kb,e.nb))?u(Math.ceil((31-n.getDate()+(lt(ct(e.getFullYear())?ft:pt,e.getMonth()-1)-31)+e.getDate())/7),2):0===s(n,t)?\\\"01\\\":\\\"00\\\"},\\\"%V\\\":function(e){var t=new Date(e.ab+1901,0,4),n=c(new Date(e.ab+1900,0,4));t=c(t);var r=dt(new Date(e.ab+1900,0,1),e.vb);return 0>s(r,n)?\\\"53\\\":0>=s(t,r)?\\\"01\\\":u(Math.ceil((n.getFullYear()s(n,e=new Date(e.ab+1900,e.kb,e.nb))?u(Math.ceil((31-n.getDate()+(lt(ct(e.getFullYear())?ft:pt,e.getMonth()-1)-31)+e.getDate())/7),2):0===s(n,t)?\\\"01\\\":\\\"00\\\"},\\\"%y\\\":function(e){return(e.ab+1900).toString().substring(2)},\\\"%Y\\\":function(e){return e.ab+1900},\\\"%z\\\":function(e){var t=0<=(e=e.ic);return e=Math.abs(e)/60,(t?\\\"+\\\":\\\"-\\\")+String(\\\"0000\\\"+(e/60*100+e%60)).slice(-4)},\\\"%Z\\\":function(e){return e.lc},\\\"%%\\\":function(){return\\\"%\\\"}})r.includes(p)&&(r=r.replace(new RegExp(p,\\\"g\\\"),f[p](o)));return p=function(e){var t=Array($(e)+1);return q(e,t,0,t.length),t}(r),p.length>n?0:(function(e,n){t().set(e,n)}(p,e),p.length-1)}var ht=[null,ve,De,xe,Re,Ce,Pe,Ie,Fe,Ue,je,Le,We,He,Ye,ze,Be,Je,tt,nt,rt,at,ot,it,ut,st],gt={h:function(e,t,n,r){le(\\\"Assertion failed: \\\"+N(e)+\\\", at: \\\"+[t?N(t):\\\"unknown filename\\\",n,r?N(r):\\\"unknown function\\\"])},M:function(e,t){return _e(e,t)},b:function(e){return bt(e+16)+16},d:function(e,t){return ve(e,t)},e:function(e,t){ye.yb.push((function(){Z.get(e)(t)}))},c:function(e,t,n){throw new we(e).Pb(t,n),e},Z:function(e,t,n,r){if(\\\"undefined\\\"==typeof SharedArrayBuffer)return D(\\\"Current environment does not support SharedArrayBuffer, pthreads are not available!\\\"),6;if(!e)return D(\\\"pthread_create called with a null thread pointer!\\\"),28;var i=[];if(O&&0===i.length)return Et(687865856,e,t,n,r);var u=0,s=0;if(t&&-1!=t){var c=a()[t>>2];c+=81920,u=a()[t+8>>2],s=0!==a()[t+12>>2]}else c=2097152;(t=0==u)?u=Ht(16,c):F(0<(u-=c));for(var l=bt(228),f=0;57>f;++f)o()[(l>>2)+f]=0;return a()[e>>2]=l,a()[l+12>>2]=l,e=l+152,a()[e>>2]=e,n={hb:u,jb:c,wb:t,detached:s,ec:n,rb:l,ib:r,mc:i},O?(n.oc=\\\"spawnThread\\\",postMessage(n,i),0):Oe(n)},X:function(e){throw O?ye.Hb(e):(ye.Eb(),Nt(e)),\\\"unwind\\\"},Y:function(e,t){return function(e,t){if(!e)return D(\\\"pthread_join attempted on a null thread pointer!\\\"),71;if(O&&vt()==e)return D(\\\"PThread \\\"+e+\\\" is attempting to join to itself!\\\"),16;if(!O&&At()==e)return D(\\\"Main thread \\\"+e+\\\" is attempting to join to itself!\\\"),16;if(a()[e+12>>2]!==e)return D(\\\"pthread_join attempted on thread \\\"+e+\\\", which does not point to a valid thread, or does not exist anymore!\\\"),71;if(Atomics.load(o(),e+64>>2))return D(\\\"Attempted to join thread \\\"+e+\\\", which was already detached!\\\"),28;for(Ee();;){var n=Atomics.load(o(),e+0>>2);if(1==n)return n=Atomics.load(o(),e+4>>2),t&&(a()[t>>2]=n),Atomics.store(o(),e+64>>2,1),O?postMessage({cmd:\\\"cleanupThread\\\",thread:e}):ge(e),0;kt(),O||Tt(),Ae(e+0,n,O?100:1)}}(e,t)},L:De,s:xe,S:Re,V:Ce,u:function(){return 42},F:Pe,Q:Ie,P:Fe,U:Ue,T:je,q:Le,K:We,N:He,v:Ye,O:ze,da:function(e,t){if(e==t)postMessage({cmd:\\\"processQueuedMainThreadWork\\\"});else if(O)postMessage({targetThread:e,cmd:\\\"processThreadQueue\\\"});else{if(!(e=(e=ye.cb[e])&&e.worker))return;e.postMessage({cmd:\\\"processThreadQueue\\\"})}return 1},f:Be,w:_e,ga:function(e,t){return e-t},A:function(){le(\\\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\\\")},l:function(){le(\\\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\\\")},C:function(){le(\\\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\\\")},z:function(){le(\\\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\\\")},ea:function(e,t,n){var o;for(Ge.length=0,n>>=2;o=r()[t++];)(o=105>o)&&1&n&&n++,Ge.push(o?i()[n++>>1]:a()[n]),++n;return de[e].apply(null,Ge)},G:Ee,n:function(){},k:Ae,j:he,W:function(){return 2147483648},i:be,D:function(e,t,n){r().copyWithin(e,t,t+n)},o:function(){return w?n(993).cpus().length:navigator.hardwareConcurrency},aa:function(e,t,n){qe.length=t,n>>=3;for(var r=0;re?de[-e-1]:ht[e]).apply(null,qe)},E:function(e){var t=r().length;if((e>>>=0)<=t||2147483648=n;n*=2){var a=t*(1+.2/n);a=Math.min(a,e+100663296),0<(a=Math.max(e,a))%65536&&(a+=65536-a%65536);e:{try{R.grow(Math.min(2147483648,a)-j.byteLength+65535>>>16),J(R.buffer);var o=1;break e}catch(e){}o=void 0}if(o)return!0}return!1},ba:function(e,t,n){return $e(e)?Xe(e,t,n):Je(e,t,n)},x:function(){},$:function(e,t,n){return re+=1,setTimeout((function(){--re,function(e){if(!I){try{e()}catch(e){if(e instanceof Bt)return;if(\\\"unwind\\\"!==e)throw e&&\\\"object\\\"==typeof e&&e.stack&&D(\\\"exception thrown: \\\"+[e,e.stack]),e}if(!ae())try{O?Dt(P):Nt(P)}catch(e){if(!(e instanceof Bt))throw e}}}((function(){Z.get(e)(n)}))}),t)},ca:function(e,t){t>>=2;var n=a()[t+6];return t={alpha:!!a()[t],depth:!!a()[t+1],stencil:!!a()[t+2],antialias:!!a()[t+3],premultipliedAlpha:!!a()[t+4],preserveDrawingBuffer:!!a()[t+5],powerPreference:Ze[n],failIfMajorPerformanceCaveat:!!a()[t+7],Vb:a()[t+8],yc:a()[t+9],Bb:a()[t+10],Mb:a()[t+11],Bc:a()[t+12],Cc:a()[t+13]},!(e=$e(e))||t.Mb?0:function(e,t){e.Cb||(e.Cb=e.getContext,e.getContext=function(t,n){return\\\"webgl\\\"==t==(n=e.Cb(t,n))instanceof WebGLRenderingContext?n:null});var n=e.getContext(\\\"webgl\\\",t);return n?function(e,t){var n=bt(8);a()[n+4>>2]=vt();var r={wc:n,attributes:t,version:t.Vb,ob:e};return e.canvas&&(e.canvas.pb=r),(void 0===t.Bb||t.Bb)&&function(e){if(e||(e=void 0),!e.Qb){e.Qb=!0;var t=e.ob;!function(e){var t=e.getExtension(\\\"ANGLE_instanced_arrays\\\");t&&(e.vertexAttribDivisor=function(e,n){t.vertexAttribDivisorANGLE(e,n)},e.drawArraysInstanced=function(e,n,r,a){t.drawArraysInstancedANGLE(e,n,r,a)},e.drawElementsInstanced=function(e,n,r,a,o){t.drawElementsInstancedANGLE(e,n,r,a,o)})}(t),function(e){var t=e.getExtension(\\\"OES_vertex_array_object\\\");t&&(e.createVertexArray=function(){return t.createVertexArrayOES()},e.deleteVertexArray=function(e){t.deleteVertexArrayOES(e)},e.bindVertexArray=function(e){t.bindVertexArrayOES(e)},e.isVertexArray=function(e){return t.isVertexArrayOES(e)})}(t),function(e){var t=e.getExtension(\\\"WEBGL_draw_buffers\\\");t&&(e.drawBuffers=function(e,n){t.drawBuffersWEBGL(e,n)})}(t),t.qc=t.getExtension(\\\"EXT_disjoint_timer_query\\\"),t.zc=t.getExtension(\\\"WEBGL_multi_draw\\\"),(t.getSupportedExtensions()||[]).forEach((function(e){e.includes(\\\"lose_context\\\")||e.includes(\\\"debug\\\")||t.getExtension(e)}))}}(r),n}(n,t):0}(e,t)},I:tt,J:nt,m:rt,H:at,t:ot,B:it,p:ut,R:function(e){var t=Date.now();return a()[e>>2]=t/1e3|0,a()[e+4>>2]=t%1e3*1e3|0,0},ha:function e(t,n){return t=new Date(1e3*a()[t>>2]),a()[n>>2]=t.getUTCSeconds(),a()[n+4>>2]=t.getUTCMinutes(),a()[n+8>>2]=t.getUTCHours(),a()[n+12>>2]=t.getUTCDate(),a()[n+16>>2]=t.getUTCMonth(),a()[n+20>>2]=t.getUTCFullYear()-1900,a()[n+24>>2]=t.getUTCDay(),a()[n+36>>2]=0,a()[n+32>>2]=0,t=(t.getTime()-Date.UTC(t.getUTCFullYear(),0,1,0,0,0,0))/864e5|0,a()[n+28>>2]=t,e.Ab||(e.Ab=X(\\\"GMT\\\")),a()[n+40>>2]=e.Ab,n},_:function(){ye.Rb()},r:function(e,t){st(),e=new Date(1e3*a()[e>>2]),a()[t>>2]=e.getSeconds(),a()[t+4>>2]=e.getMinutes(),a()[t+8>>2]=e.getHours(),a()[t+12>>2]=e.getDate(),a()[t+16>>2]=e.getMonth(),a()[t+20>>2]=e.getFullYear()-1900,a()[t+24>>2]=e.getDay();var n=new Date(e.getFullYear(),0,1),r=(e.getTime()-n.getTime())/864e5|0;return a()[t+28>>2]=r,a()[t+36>>2]=-60*e.getTimezoneOffset(),r=new Date(e.getFullYear(),6,1).getTimezoneOffset(),e=0|(r!=(n=n.getTimezoneOffset())&&e.getTimezoneOffset()==Math.min(n,r)),a()[t+32>>2]=e,e=a()[Pt()+(e?4:0)>>2],a()[t+40>>2]=e,t},a:R||u.wasmMemory,y:function(e){st();var t=new Date(a()[e+20>>2]+1900,a()[e+16>>2],a()[e+12>>2],a()[e+8>>2],a()[e+4>>2],a()[e>>2],0),n=a()[e+32>>2],r=t.getTimezoneOffset(),o=new Date(t.getFullYear(),0,1),i=new Date(t.getFullYear(),6,1).getTimezoneOffset(),u=o.getTimezoneOffset(),s=Math.min(u,i);return 0>n?a()[e+32>>2]=Number(i!=u&&s==r):0>2]=t.getDay(),n=(t.getTime()-o.getTime())/864e5|0,a()[e+28>>2]=n,a()[e>>2]=t.getSeconds(),a()[e+4>>2]=t.getMinutes(),a()[e+8>>2]=t.getHours(),a()[e+12>>2]=t.getDate(),a()[e+16>>2]=t.getMonth(),t.getTime()/1e3|0},fa:mt,g:function(e,t,n,r){return mt(e,t,n,r)}};!function(){function e(e,t){u.asm=e.exports,Z=u.asm.Ca,ee.unshift(u.asm.ia),ye.zb.push(u.asm.Ha),C=t,O||(ue--,u.monitorRunDependencies&&u.monitorRunDependencies(ue),0==ue&&(null!==se&&(clearInterval(se),se=null),ce&&(e=ce,ce=null,e())))}function t(t){e(t.instance,t.module)}function n(e){return function(){if(!M&&(_||v)){if(\\\"function\\\"==typeof fetch&&!ie.startsWith(\\\"file://\\\"))return fetch(ie,{credentials:\\\"same-origin\\\"}).then((function(e){if(!e.ok)throw\\\"failed to load wasm binary file at '\\\"+ie+\\\"'\\\";return e.arrayBuffer()})).catch((function(){return pe()}));if(h)return new Promise((function(e,t){h(ie,(function(t){e(new Uint8Array(t))}),t)}))}return Promise.resolve().then((function(){return pe()}))}().then((function(e){return WebAssembly.instantiate(e,r)})).then(e,(function(e){D(\\\"failed to asynchronously prepare wasm: \\\"+e),le(e)}))}var r={a:gt};if(O||(ue++,u.monitorRunDependencies&&u.monitorRunDependencies(ue)),u.instantiateWasm)try{return u.instantiateWasm(r,e)}catch(e){return D(\\\"Module.instantiateWasm callback failed with error: \\\"+e),!1}(M||\\\"function\\\"!=typeof WebAssembly.instantiateStreaming||fe()||ie.startsWith(\\\"file://\\\")||\\\"function\\\"!=typeof fetch?n(t):fetch(ie,{credentials:\\\"same-origin\\\"}).then((function(e){return WebAssembly.instantiateStreaming(e,r).then(t,(function(e){return D(\\\"wasm streaming compile failed: \\\"+e),D(\\\"falling back to ArrayBuffer instantiation\\\"),n(t)}))}))).catch(c)}(),u.___wasm_call_ctors=function(){return(u.___wasm_call_ctors=u.asm.ia).apply(null,arguments)},u._OrtInit=function(){return(u._OrtInit=u.asm.ja).apply(null,arguments)},u._OrtCreateSessionOptions=function(){return(u._OrtCreateSessionOptions=u.asm.ka).apply(null,arguments)},u._OrtAddSessionConfigEntry=function(){return(u._OrtAddSessionConfigEntry=u.asm.la).apply(null,arguments)},u._OrtReleaseSessionOptions=function(){return(u._OrtReleaseSessionOptions=u.asm.ma).apply(null,arguments)},u._OrtCreateSession=function(){return(u._OrtCreateSession=u.asm.na).apply(null,arguments)},u._OrtReleaseSession=function(){return(u._OrtReleaseSession=u.asm.oa).apply(null,arguments)},u._OrtGetInputCount=function(){return(u._OrtGetInputCount=u.asm.pa).apply(null,arguments)},u._OrtGetOutputCount=function(){return(u._OrtGetOutputCount=u.asm.qa).apply(null,arguments)},u._OrtGetInputName=function(){return(u._OrtGetInputName=u.asm.ra).apply(null,arguments)},u._OrtGetOutputName=function(){return(u._OrtGetOutputName=u.asm.sa).apply(null,arguments)},u._OrtFree=function(){return(u._OrtFree=u.asm.ta).apply(null,arguments)},u._OrtCreateTensor=function(){return(u._OrtCreateTensor=u.asm.ua).apply(null,arguments)},u._OrtGetTensorData=function(){return(u._OrtGetTensorData=u.asm.va).apply(null,arguments)},u._OrtReleaseTensor=function(){return(u._OrtReleaseTensor=u.asm.wa).apply(null,arguments)},u._OrtCreateRunOptions=function(){return(u._OrtCreateRunOptions=u.asm.xa).apply(null,arguments)},u._OrtAddRunConfigEntry=function(){return(u._OrtAddRunConfigEntry=u.asm.ya).apply(null,arguments)},u._OrtReleaseRunOptions=function(){return(u._OrtReleaseRunOptions=u.asm.za).apply(null,arguments)},u._OrtRun=function(){return(u._OrtRun=u.asm.Aa).apply(null,arguments)},u._OrtEndProfiling=function(){return(u._OrtEndProfiling=u.asm.Ba).apply(null,arguments)};var bt=u._malloc=function(){return(bt=u._malloc=u.asm.Da).apply(null,arguments)},yt=u.___errno_location=function(){return(yt=u.___errno_location=u.asm.Ea).apply(null,arguments)},_t=u._free=function(){return(_t=u._free=u.asm.Fa).apply(null,arguments)},vt=u._pthread_self=function(){return(vt=u._pthread_self=u.asm.Ga).apply(null,arguments)};u._emscripten_tls_init=function(){return(u._emscripten_tls_init=u.asm.Ha).apply(null,arguments)},u._emscripten_current_thread_process_queued_calls=function(){return(u._emscripten_current_thread_process_queued_calls=u.asm.Ia).apply(null,arguments)};var wt,Ot=u._emscripten_register_main_browser_thread_id=function(){return(Ot=u._emscripten_register_main_browser_thread_id=u.asm.Ja).apply(null,arguments)},At=u._emscripten_main_browser_thread_id=function(){return(At=u._emscripten_main_browser_thread_id=u.asm.Ka).apply(null,arguments)},Et=u._emscripten_sync_run_in_main_thread_4=function(){return(Et=u._emscripten_sync_run_in_main_thread_4=u.asm.La).apply(null,arguments)},Tt=u._emscripten_main_thread_process_queued_calls=function(){return(Tt=u._emscripten_main_thread_process_queued_calls=u.asm.Ma).apply(null,arguments)},St=u._emscripten_run_in_main_runtime_thread_js=function(){return(St=u._emscripten_run_in_main_runtime_thread_js=u.asm.Na).apply(null,arguments)},Mt=u.__emscripten_call_on_thread=function(){return(Mt=u.__emscripten_call_on_thread=u.asm.Oa).apply(null,arguments)},kt=u._pthread_testcancel=function(){return(kt=u._pthread_testcancel=u.asm.Pa).apply(null,arguments)},Dt=u._pthread_exit=function(){return(Dt=u._pthread_exit=u.asm.Qa).apply(null,arguments)},xt=u.__emscripten_thread_init=function(){return(xt=u.__emscripten_thread_init=u.asm.Ra).apply(null,arguments)},Rt=u._emscripten_get_global_libc=function(){return(Rt=u._emscripten_get_global_libc=u.asm.Sa).apply(null,arguments)},Ct=u.___pthread_tsd_run_dtors=function(){return(Ct=u.___pthread_tsd_run_dtors=u.asm.Ta).apply(null,arguments)},Pt=u.__get_tzname=function(){return(Pt=u.__get_tzname=u.asm.Ua).apply(null,arguments)},It=u.__get_daylight=function(){return(It=u.__get_daylight=u.asm.Va).apply(null,arguments)},Ft=u.__get_timezone=function(){return(Ft=u.__get_timezone=u.asm.Wa).apply(null,arguments)},Ut=u.stackSave=function(){return(Ut=u.stackSave=u.asm.Xa).apply(null,arguments)},jt=u.stackRestore=function(){return(jt=u.stackRestore=u.asm.Ya).apply(null,arguments)},Lt=u.stackAlloc=function(){return(Lt=u.stackAlloc=u.asm.Za).apply(null,arguments)},Wt=u._emscripten_stack_set_limits=function(){return(Wt=u._emscripten_stack_set_limits=u.asm._a).apply(null,arguments)},Ht=u._memalign=function(){return(Ht=u._memalign=u.asm.$a).apply(null,arguments)},Yt=u.__emscripten_allow_main_runtime_queued_calls=688928,zt=u.__emscripten_main_thread_futex=694164;function Bt(e){this.name=\\\"ExitStatus\\\",this.message=\\\"Program terminated with exit(\\\"+e+\\\")\\\",this.status=e}function Gt(){function e(){if(!wt&&(wt=!0,u.calledRun=!0,!I)&&(O||me(ee),s(u),u.onRuntimeInitialized&&u.onRuntimeInitialized(),!O)){if(u.postRun)for(\\\"function\\\"==typeof u.postRun&&(u.postRun=[u.postRun]);u.postRun.length;){var e=u.postRun.shift();ne.unshift(e)}me(ne)}}if(!(0{\\\"use strict\\\";e.exports='\\\"use strict\\\";var e={};if(\\\"object\\\"==typeof process&&\\\"object\\\"==typeof process.versions&&\\\"string\\\"==typeof process.versions.node){var a=require(\\\"worker_threads\\\"),t=a.parentPort;t.on(\\\"message\\\",(function(e){onmessage({data:e})}));var r=require(\\\"fs\\\");Object.assign(global,{self:global,require:require,Module:e,location:{href:__filename},Worker:a.Worker,importScripts:function(e){(0,eval)(r.readFileSync(e,\\\"utf8\\\"))},postMessage:function(e){t.postMessage(e)},performance:global.performance||{now:function(){return Date.now()}}})}var s=function(){var e=Array.prototype.slice.call(arguments).join(\\\" \\\");console.error(e)};self.alert=function(){var a=Array.prototype.slice.call(arguments).join(\\\" \\\");postMessage({cmd:\\\"alert\\\",text:a,threadId:e._pthread_self()})},e.instantiateWasm=function(a,t){var r=new WebAssembly.Instance(e.wasmModule,a);return t(r),e.wasmModule=null,r.exports},self.onmessage=function(a){try{if(\\\"load\\\"===a.data.cmd){if(e.wasmModule=a.data.wasmModule,e.wasmMemory=a.data.wasmMemory,e.buffer=e.wasmMemory.buffer,e.ENVIRONMENT_IS_PTHREAD=!0,\\\"string\\\"==typeof a.data.urlOrBlob)importScripts(a.data.urlOrBlob);else{var t=URL.createObjectURL(a.data.urlOrBlob);importScripts(t),URL.revokeObjectURL(t)}ortWasmThreaded(e).then((function(a){e=a}))}else if(\\\"objectTransfer\\\"===a.data.cmd)e.PThread.receiveObjectTransfer(a.data);else if(\\\"run\\\"===a.data.cmd){e.__performance_now_clock_drift=performance.now()-a.data.time,e.__emscripten_thread_init(a.data.threadInfoStruct,0,0);var r=a.data.stackBase,o=a.data.stackBase+a.data.stackSize;e.establishStackSpace(o,r),e.PThread.receiveObjectTransfer(a.data),e.PThread.threadInit();try{var n=e.invokeEntryPoint(a.data.start_routine,a.data.arg);e.keepRuntimeAlive()?e.PThread.setExitStatus(n):e.PThread.threadExit(n)}catch(a){if(\\\"Canceled!\\\"===a)e.PThread.threadCancel();else if(\\\"unwind\\\"!=a){if(!(a instanceof e.ExitStatus))throw e.PThread.threadExit(-2),a;e.keepRuntimeAlive()||e.PThread.threadExit(a.status)}}}else\\\"cancel\\\"===a.data.cmd?e._pthread_self()&&e.PThread.threadCancel():\\\"setimmediate\\\"===a.data.target||(\\\"processThreadQueue\\\"===a.data.cmd?e._pthread_self()&&e._emscripten_current_thread_process_queued_calls():(s(\\\"worker.js received unknown command \\\"+a.data.cmd),s(a.data)))}catch(e){throw s(\\\"worker.js onmessage() captured an uncaught exception: \\\"+e),e&&e.stack&&s(e.stack),e}};\\\\n'},932:(e,t,n)=>{var _scriptDir,r=(_scriptDir=(_scriptDir=\\\"undefined\\\"!=typeof document&&document.currentScript?document.currentScript.src:void 0)||\\\"/index.js\\\",function(e){var t,r,a;e=e||{},t||(t=void 0!==e?e:{}),t.ready=new Promise((function(e,t){r=e,a=t}));var o,i={};for(o in t)t.hasOwnProperty(o)&&(i[o]=t[o]);var u,s,c,l,f,p=\\\"./this.program\\\",d=\\\"object\\\"==typeof window,m=\\\"function\\\"==typeof importScripts,h=\\\"object\\\"==typeof process&&\\\"object\\\"==typeof process.versions&&\\\"string\\\"==typeof process.versions.node,g=\\\"\\\";h?(g=m?n(908).dirname(g)+\\\"/\\\":\\\"//\\\",u=function(e,t){return l||(l=n(384)),f||(f=n(908)),e=f.normalize(e),l.readFileSync(e,t?null:\\\"utf8\\\")},c=function(e){return(e=u(e,!0)).buffer||(e=new Uint8Array(e)),e.buffer||B(\\\"Assertion failed: undefined\\\"),e},s=function(e,t,r){l||(l=n(384)),f||(f=n(908)),e=f.normalize(e),l.readFile(e,(function(e,n){e?r(e):t(n.buffer)}))},1=r);)++n;if(16(a=224==(240&a)?(15&a)<<12|o<<6|i:(7&a)<<18|o<<12|i<<6|63&e[t++])?r+=String.fromCharCode(a):(a-=65536,r+=String.fromCharCode(55296|a>>10,56320|1023&a))}}else r+=String.fromCharCode(a)}return r}function k(e,t){return e?M(A,e,t):\\\"\\\"}function D(e,t,n,r){if(!(0=i&&(i=65536+((1023&i)<<10)|1023&e.charCodeAt(++o)),127>=i){if(n>=r)break;t[n++]=i}else{if(2047>=i){if(n+1>=r)break;t[n++]=192|i>>6}else{if(65535>=i){if(n+2>=r)break;t[n++]=224|i>>12}else{if(n+3>=r)break;t[n++]=240|i>>18,t[n++]=128|i>>12&63}t[n++]=128|i>>6&63}t[n++]=128|63&i}}return t[n]=0,n-a}function x(e){for(var t=0,n=0;n=r&&(r=65536+((1023&r)<<10)|1023&e.charCodeAt(++n)),127>=r?++t:t=2047>=r?t+2:65535>=r?t+3:t+4}return t}function R(e){var t=x(e)+1,n=pe(t);return n&&D(e,O,n,t),n}function C(){var e=v.buffer;w=e,t.HEAP8=O=new Int8Array(e),t.HEAP16=new Int16Array(e),t.HEAP32=E=new Int32Array(e),t.HEAPU8=A=new Uint8Array(e),t.HEAPU16=new Uint16Array(e),t.HEAPU32=new Uint32Array(e),t.HEAPF32=new Float32Array(e),t.HEAPF64=new Float64Array(e)}var P,I=[],F=[],U=[],j=[];function L(){var e=t.preRun.shift();I.unshift(e)}var W,H=0,Y=null,z=null;function B(e){throw t.onAbort&&t.onAbort(e),_(e),T=!0,e=new WebAssembly.RuntimeError(\\\"abort(\\\"+e+\\\"). Build with -s ASSERTIONS=1 for more info.\\\"),a(e),e}function G(){return W.startsWith(\\\"data:application/octet-stream;base64,\\\")}if(t.preloadedImages={},t.preloadedAudios={},W=\\\"ort-wasm.wasm\\\",!G()){var N=W;W=t.locateFile?t.locateFile(N,g):g+N}function q(){var e=W;try{if(e==W&&b)return new Uint8Array(b);if(c)return c(e);throw\\\"both async and sync fetching of the wasm failed\\\"}catch(e){B(e)}}function V(e){for(;0>2]=e},this.Ka=function(e){E[this.ya+8>>2]=e},this.La=function(){E[this.ya>>2]=0},this.Ja=function(){O[this.ya+12>>0]=0},this.Ma=function(){O[this.ya+13>>0]=0},this.Ga=function(e,t){this.Na(e),this.Ka(t),this.La(),this.Ja(),this.Ma()}}var X,J={},Q=[null,[],[]],Z={};X=h?function(){var e=process.hrtime();return 1e3*e[0]+e[1]/1e6}:function(){return performance.now()};var K,ee,te={};function ne(){if(!K){var e,t={USER:\\\"web_user\\\",LOGNAME:\\\"web_user\\\",PATH:\\\"/\\\",PWD:\\\"/\\\",HOME:\\\"/home/web_user\\\",LANG:(\\\"object\\\"==typeof navigator&&navigator.languages&&navigator.languages[0]||\\\"C\\\").replace(\\\"-\\\",\\\"_\\\")+\\\".UTF-8\\\",_:p||\\\"./this.program\\\"};for(e in te)void 0===te[e]?delete t[e]:t[e]=te[e];var n=[];for(e in t)n.push(e+\\\"=\\\"+t[e]);K=n}return K}function re(){function e(e){return(e=e.toTimeString().match(/\\\\(([A-Za-z ]+)\\\\)$/))?e[1]:\\\"GMT\\\"}if(!ee){ee=!0;var t=(new Date).getFullYear(),n=new Date(t,0,1),r=new Date(t,6,1);t=n.getTimezoneOffset();var a=r.getTimezoneOffset(),o=Math.max(t,a);E[be()>>2]=60*o,E[ge()>>2]=Number(t!=a),n=e(n),r=e(r),n=R(n),r=R(r),a>2]=n,E[he()+4>>2]=r):(E[he()>>2]=r,E[he()+4>>2]=n)}}function ae(e){return 0==e%4&&(0!=e%100||0==e%400)}function oe(e,t){for(var n=0,r=0;r<=t;n+=e[r++]);return n}var ie=[31,29,31,30,31,30,31,31,30,31,30,31],ue=[31,28,31,30,31,30,31,31,30,31,30,31];function se(e,t){for(e=new Date(e.getTime());0r-e.getDate())){e.setDate(e.getDate()+t);break}t-=r-e.getDate()+1,e.setDate(1),11>n?e.setMonth(n+1):(e.setMonth(0),e.setFullYear(e.getFullYear()+1))}return e}function ce(e,t,n,r){function a(e,t,n){for(e=\\\"number\\\"==typeof e?e.toString():e||\\\"\\\";e.lengthe?-1:0=i(n,e)?0>=i(t,e)?e.getFullYear()+1:e.getFullYear():e.getFullYear()-1}var c=E[r+40>>2];for(var l in r={Qa:E[r>>2],Pa:E[r+4>>2],Aa:E[r+8>>2],za:E[r+12>>2],wa:E[r+16>>2],va:E[r+20>>2],Ba:E[r+24>>2],Ca:E[r+28>>2],Ya:E[r+32>>2],Oa:E[r+36>>2],Ra:c?k(c):\\\"\\\"},n=k(n),c={\\\"%c\\\":\\\"%a %b %d %H:%M:%S %Y\\\",\\\"%D\\\":\\\"%m/%d/%y\\\",\\\"%F\\\":\\\"%Y-%m-%d\\\",\\\"%h\\\":\\\"%b\\\",\\\"%r\\\":\\\"%I:%M:%S %p\\\",\\\"%R\\\":\\\"%H:%M\\\",\\\"%T\\\":\\\"%H:%M:%S\\\",\\\"%x\\\":\\\"%m/%d/%y\\\",\\\"%X\\\":\\\"%H:%M:%S\\\",\\\"%Ec\\\":\\\"%c\\\",\\\"%EC\\\":\\\"%C\\\",\\\"%Ex\\\":\\\"%m/%d/%y\\\",\\\"%EX\\\":\\\"%H:%M:%S\\\",\\\"%Ey\\\":\\\"%y\\\",\\\"%EY\\\":\\\"%Y\\\",\\\"%Od\\\":\\\"%d\\\",\\\"%Oe\\\":\\\"%e\\\",\\\"%OH\\\":\\\"%H\\\",\\\"%OI\\\":\\\"%I\\\",\\\"%Om\\\":\\\"%m\\\",\\\"%OM\\\":\\\"%M\\\",\\\"%OS\\\":\\\"%S\\\",\\\"%Ou\\\":\\\"%u\\\",\\\"%OU\\\":\\\"%U\\\",\\\"%OV\\\":\\\"%V\\\",\\\"%Ow\\\":\\\"%w\\\",\\\"%OW\\\":\\\"%W\\\",\\\"%Oy\\\":\\\"%y\\\"})n=n.replace(new RegExp(l,\\\"g\\\"),c[l]);var f=\\\"Sunday Monday Tuesday Wednesday Thursday Friday Saturday\\\".split(\\\" \\\"),p=\\\"January February March April May June July August September October November December\\\".split(\\\" \\\");for(l in c={\\\"%a\\\":function(e){return f[e.Ba].substring(0,3)},\\\"%A\\\":function(e){return f[e.Ba]},\\\"%b\\\":function(e){return p[e.wa].substring(0,3)},\\\"%B\\\":function(e){return p[e.wa]},\\\"%C\\\":function(e){return o((e.va+1900)/100|0,2)},\\\"%d\\\":function(e){return o(e.za,2)},\\\"%e\\\":function(e){return a(e.za,2,\\\" \\\")},\\\"%g\\\":function(e){return s(e).toString().substring(2)},\\\"%G\\\":function(e){return s(e)},\\\"%H\\\":function(e){return o(e.Aa,2)},\\\"%I\\\":function(e){return 0==(e=e.Aa)?e=12:12e.Aa?\\\"AM\\\":\\\"PM\\\"},\\\"%S\\\":function(e){return o(e.Qa,2)},\\\"%t\\\":function(){return\\\"\\\\t\\\"},\\\"%u\\\":function(e){return e.Ba||7},\\\"%U\\\":function(e){var t=new Date(e.va+1900,0,1),n=0===t.getDay()?t:se(t,7-t.getDay());return 0>i(n,e=new Date(e.va+1900,e.wa,e.za))?o(Math.ceil((31-n.getDate()+(oe(ae(e.getFullYear())?ie:ue,e.getMonth()-1)-31)+e.getDate())/7),2):0===i(n,t)?\\\"01\\\":\\\"00\\\"},\\\"%V\\\":function(e){var t=new Date(e.va+1901,0,4),n=u(new Date(e.va+1900,0,4));t=u(t);var r=se(new Date(e.va+1900,0,1),e.Ca);return 0>i(r,n)?\\\"53\\\":0>=i(t,r)?\\\"01\\\":o(Math.ceil((n.getFullYear()i(n,e=new Date(e.va+1900,e.wa,e.za))?o(Math.ceil((31-n.getDate()+(oe(ae(e.getFullYear())?ie:ue,e.getMonth()-1)-31)+e.getDate())/7),2):0===i(n,t)?\\\"01\\\":\\\"00\\\"},\\\"%y\\\":function(e){return(e.va+1900).toString().substring(2)},\\\"%Y\\\":function(e){return e.va+1900},\\\"%z\\\":function(e){var t=0<=(e=e.Oa);return e=Math.abs(e)/60,(t?\\\"+\\\":\\\"-\\\")+String(\\\"0000\\\"+(e/60*100+e%60)).slice(-4)},\\\"%Z\\\":function(e){return e.Ra},\\\"%%\\\":function(){return\\\"%\\\"}})n.includes(l)&&(n=n.replace(new RegExp(l,\\\"g\\\"),c[l](r)));return l=function(e){var t=Array(x(e)+1);return D(e,t,0,t.length),t}(n),l.length>t?0:(O.set(l,e),l.length-1)}var le={a:function(e){return pe(e+16)+16},c:function(e,t){U.unshift({Ea:e,xa:t})},d:function(e,t){U.unshift({Ea:e,xa:t})},b:function(e,t,n){throw new $(e).Ga(t,n),e},D:function(e,t){return e=k(e),Z.Sa(e,t)},m:function(){return 0},I:function(){},L:function(){},o:function(){return 42},x:function(){return 0},H:function(){},G:function(e,t){return e=k(e),Z.Ta(e,t)},K:function(e,t,n,r,a,o){if(o<<=12,0!=(16&r)&&0!=e%65536)t=-28;else if(0!=(32&r)){e=65536*Math.ceil(t/65536);var i=we(65536,e);i?(A.fill(0,i,i+e),e=i):e=0,e?(J[e]={Ia:e,Ha:t,Fa:!0,fd:a,Xa:n,flags:r,offset:o},t=e):t=-48}else t=-52;return t},J:function(e,t){var n=J[e];return 0!==t&&n?(t===n.Ha&&(J[e]=null,n.Fa&&me(n.Ia)),e=0):e=-28,e},j:function(){},C:function(e,t,n){return e=k(e),Z.Ua(e,t,n)},E:function(){},r:function(){},F:function(){},h:function(){B()},p:function(e,t){if(0===e)e=Date.now();else{if(1!==e&&4!==e)return E[de()>>2]=28,-1;e=X()}return E[t>>2]=e/1e3|0,E[t+4>>2]=e%1e3*1e6|0,0},s:function(e,t){return e-t},P:function(){B(\\\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\\\")},g:function(){B(\\\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\\\")},Q:function(){B(\\\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\\\")},O:function(){B(\\\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\\\")},M:function(){return 2147483648},v:function(e,t,n){A.copyWithin(e,t,t+n)},i:function(e){var t=A.length;if(2147483648<(e>>>=0))return!1;for(var n=1;4>=n;n*=2){var r=t*(1+.2/n);r=Math.min(r,e+100663296),0<(r=Math.max(e,r))%65536&&(r+=65536-r%65536);e:{try{v.grow(Math.min(2147483648,r)-w.byteLength+65535>>>16),C();var a=1;break e}catch(e){}a=void 0}if(a)return!0}return!1},B:function(e){for(var t=X();X()-t>2]=o,o=0;o>0]=r.charCodeAt(o);O[a>>0]=0,n+=r.length+1})),0},A:function(e,t){var n=ne();E[e>>2]=n.length;var r=0;return n.forEach((function(e){r+=e.length+1})),E[t>>2]=r,0},f:function(){return 0},y:function(e,t){return e=1==e||2==e?2:B(),O[t>>0]=e,0},n:function(e,t,n,r){return e=Z.Wa(e),t=Z.Va(e,t,n),E[r>>2]=t,0},u:function(){},q:function(e,t,n,r){for(var a=0,o=0;o>2],u=E[t+(8*o+4)>>2],s=0;s>2]=a,0},w:function(e){var t=Date.now();return E[e>>2]=t/1e3|0,E[e+4>>2]=t%1e3*1e3|0,0},t:function e(t,n){return t=new Date(1e3*E[t>>2]),E[n>>2]=t.getUTCSeconds(),E[n+4>>2]=t.getUTCMinutes(),E[n+8>>2]=t.getUTCHours(),E[n+12>>2]=t.getUTCDate(),E[n+16>>2]=t.getUTCMonth(),E[n+20>>2]=t.getUTCFullYear()-1900,E[n+24>>2]=t.getUTCDay(),E[n+36>>2]=0,E[n+32>>2]=0,E[n+28>>2]=(t.getTime()-Date.UTC(t.getUTCFullYear(),0,1,0,0,0,0))/864e5|0,e.Da||(e.Da=R(\\\"GMT\\\")),E[n+40>>2]=e.Da,n},l:function(e,t){re(),e=new Date(1e3*E[e>>2]),E[t>>2]=e.getSeconds(),E[t+4>>2]=e.getMinutes(),E[t+8>>2]=e.getHours(),E[t+12>>2]=e.getDate(),E[t+16>>2]=e.getMonth(),E[t+20>>2]=e.getFullYear()-1900,E[t+24>>2]=e.getDay();var n=new Date(e.getFullYear(),0,1);E[t+28>>2]=(e.getTime()-n.getTime())/864e5|0,E[t+36>>2]=-60*e.getTimezoneOffset();var r=new Date(e.getFullYear(),6,1).getTimezoneOffset();return e=0|(r!=(n=n.getTimezoneOffset())&&e.getTimezoneOffset()==Math.min(n,r)),E[t+32>>2]=e,e=E[he()+(e?4:0)>>2],E[t+40>>2]=e,t},k:function(e){re();var t=new Date(E[e+20>>2]+1900,E[e+16>>2],E[e+12>>2],E[e+8>>2],E[e+4>>2],E[e>>2],0),n=E[e+32>>2],r=t.getTimezoneOffset(),a=new Date(t.getFullYear(),0,1),o=new Date(t.getFullYear(),6,1).getTimezoneOffset(),i=a.getTimezoneOffset(),u=Math.min(i,o);return 0>n?E[e+32>>2]=Number(o!=i&&u==r):0>2]=t.getDay(),E[e+28>>2]=(t.getTime()-a.getTime())/864e5|0,E[e>>2]=t.getSeconds(),E[e+4>>2]=t.getMinutes(),E[e+8>>2]=t.getHours(),E[e+12>>2]=t.getDate(),E[e+16>>2]=t.getMonth(),t.getTime()/1e3|0},N:ce,e:function(e,t,n,r){return ce(e,t,n,r)}};!function(){function e(e){t.asm=e.exports,v=t.asm.R,C(),P=t.asm.ua,F.unshift(t.asm.S),H--,t.monitorRunDependencies&&t.monitorRunDependencies(H),0==H&&(null!==Y&&(clearInterval(Y),Y=null),z&&(e=z,z=null,e()))}function n(t){e(t.instance)}function r(e){return function(){if(!b&&(d||m)){if(\\\"function\\\"==typeof fetch&&!W.startsWith(\\\"file://\\\"))return fetch(W,{credentials:\\\"same-origin\\\"}).then((function(e){if(!e.ok)throw\\\"failed to load wasm binary file at '\\\"+W+\\\"'\\\";return e.arrayBuffer()})).catch((function(){return q()}));if(s)return new Promise((function(e,t){s(W,(function(t){e(new Uint8Array(t))}),t)}))}return Promise.resolve().then((function(){return q()}))}().then((function(e){return WebAssembly.instantiate(e,o)})).then(e,(function(e){_(\\\"failed to asynchronously prepare wasm: \\\"+e),B(e)}))}var o={a:le};if(H++,t.monitorRunDependencies&&t.monitorRunDependencies(H),t.instantiateWasm)try{return t.instantiateWasm(o,e)}catch(e){return _(\\\"Module.instantiateWasm callback failed with error: \\\"+e),!1}(b||\\\"function\\\"!=typeof WebAssembly.instantiateStreaming||G()||W.startsWith(\\\"file://\\\")||\\\"function\\\"!=typeof fetch?r(n):fetch(W,{credentials:\\\"same-origin\\\"}).then((function(e){return WebAssembly.instantiateStreaming(e,o).then(n,(function(e){return _(\\\"wasm streaming compile failed: \\\"+e),_(\\\"falling back to ArrayBuffer instantiation\\\"),r(n)}))}))).catch(a)}(),t.___wasm_call_ctors=function(){return(t.___wasm_call_ctors=t.asm.S).apply(null,arguments)},t._OrtInit=function(){return(t._OrtInit=t.asm.T).apply(null,arguments)},t._OrtCreateSessionOptions=function(){return(t._OrtCreateSessionOptions=t.asm.U).apply(null,arguments)},t._OrtAddSessionConfigEntry=function(){return(t._OrtAddSessionConfigEntry=t.asm.V).apply(null,arguments)},t._OrtReleaseSessionOptions=function(){return(t._OrtReleaseSessionOptions=t.asm.W).apply(null,arguments)},t._OrtCreateSession=function(){return(t._OrtCreateSession=t.asm.X).apply(null,arguments)},t._OrtReleaseSession=function(){return(t._OrtReleaseSession=t.asm.Y).apply(null,arguments)},t._OrtGetInputCount=function(){return(t._OrtGetInputCount=t.asm.Z).apply(null,arguments)},t._OrtGetOutputCount=function(){return(t._OrtGetOutputCount=t.asm._).apply(null,arguments)},t._OrtGetInputName=function(){return(t._OrtGetInputName=t.asm.$).apply(null,arguments)},t._OrtGetOutputName=function(){return(t._OrtGetOutputName=t.asm.aa).apply(null,arguments)},t._OrtFree=function(){return(t._OrtFree=t.asm.ba).apply(null,arguments)},t._OrtCreateTensor=function(){return(t._OrtCreateTensor=t.asm.ca).apply(null,arguments)},t._OrtGetTensorData=function(){return(t._OrtGetTensorData=t.asm.da).apply(null,arguments)},t._OrtReleaseTensor=function(){return(t._OrtReleaseTensor=t.asm.ea).apply(null,arguments)},t._OrtCreateRunOptions=function(){return(t._OrtCreateRunOptions=t.asm.fa).apply(null,arguments)},t._OrtAddRunConfigEntry=function(){return(t._OrtAddRunConfigEntry=t.asm.ga).apply(null,arguments)},t._OrtReleaseRunOptions=function(){return(t._OrtReleaseRunOptions=t.asm.ha).apply(null,arguments)},t._OrtRun=function(){return(t._OrtRun=t.asm.ia).apply(null,arguments)},t._OrtEndProfiling=function(){return(t._OrtEndProfiling=t.asm.ja).apply(null,arguments)};var fe,pe=t._malloc=function(){return(pe=t._malloc=t.asm.ka).apply(null,arguments)},de=t.___errno_location=function(){return(de=t.___errno_location=t.asm.la).apply(null,arguments)},me=t._free=function(){return(me=t._free=t.asm.ma).apply(null,arguments)},he=t.__get_tzname=function(){return(he=t.__get_tzname=t.asm.na).apply(null,arguments)},ge=t.__get_daylight=function(){return(ge=t.__get_daylight=t.asm.oa).apply(null,arguments)},be=t.__get_timezone=function(){return(be=t.__get_timezone=t.asm.pa).apply(null,arguments)},ye=t.stackSave=function(){return(ye=t.stackSave=t.asm.qa).apply(null,arguments)},_e=t.stackRestore=function(){return(_e=t.stackRestore=t.asm.ra).apply(null,arguments)},ve=t.stackAlloc=function(){return(ve=t.stackAlloc=t.asm.sa).apply(null,arguments)},we=t._memalign=function(){return(we=t._memalign=t.asm.ta).apply(null,arguments)};function Oe(){function e(){if(!fe&&(fe=!0,t.calledRun=!0,!T)){if(V(F),r(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),t.postRun)for(\\\"function\\\"==typeof t.postRun&&(t.postRun=[t.postRun]);t.postRun.length;){var e=t.postRun.shift();j.unshift(e)}V(j)}}if(!(0{\\\"use strict\\\";Object.defineProperty(t,\\\"__esModule\\\",{value:!0}),t.iterateExtraOptions=void 0,t.iterateExtraOptions=(e,n,r,a)=>{if(\\\"object\\\"==typeof e&&null!==e){if(r.has(e))throw new Error(\\\"Circular reference in options\\\");r.add(e)}Object.entries(e).forEach((([e,o])=>{const i=n?n+e:e;if(\\\"object\\\"==typeof o)t.iterateExtraOptions(o,i+\\\".\\\",r,a);else if(\\\"string\\\"==typeof o||\\\"number\\\"==typeof o)a(i,o.toString());else{if(\\\"boolean\\\"!=typeof o)throw new Error(\\\"Can't handle extra config type: \\\"+typeof o);a(i,o?\\\"1\\\":\\\"0\\\")}}))}},586:(e,t,n)=>{\\\"use strict\\\";Object.defineProperty(t,\\\"__esModule\\\",{value:!0}),t.setRunOptions=void 0;const r=n(967),a=n(983),o=n(361);t.setRunOptions=e=>{const t=o.getInstance();let n=0;const i=[],u=e||{};try{if(void 0===(null==e?void 0:e.logSeverityLevel))u.logSeverityLevel=2;else if(\\\"number\\\"!=typeof e.logSeverityLevel||!Number.isInteger(e.logSeverityLevel)||e.logSeverityLevel<0||e.logSeverityLevel>4)throw new Error(`log serverity level is not valid: ${e.logSeverityLevel}`);if(void 0===(null==e?void 0:e.logVerbosityLevel))u.logVerbosityLevel=0;else if(\\\"number\\\"!=typeof e.logVerbosityLevel||!Number.isInteger(e.logVerbosityLevel))throw new Error(`log verbosity level is not valid: ${e.logVerbosityLevel}`);void 0===(null==e?void 0:e.terminate)&&(u.terminate=!1);let o=0;if(void 0!==(null==e?void 0:e.tag)&&(o=a.allocWasmString(e.tag,i)),n=t._OrtCreateRunOptions(u.logSeverityLevel,u.logVerbosityLevel,!!u.terminate,o),0===n)throw new Error(\\\"Can't create run options\\\");return void 0!==(null==e?void 0:e.extra)&&r.iterateExtraOptions(e.extra,\\\"\\\",new WeakSet,((e,r)=>{const o=a.allocWasmString(e,i),u=a.allocWasmString(r,i);if(0!==t._OrtAddRunConfigEntry(n,o,u))throw new Error(`Can't set a run config entry: ${e} - ${r}`)})),[n,i]}catch(e){throw 0!==n&&t._OrtReleaseRunOptions(n),i.forEach(t._free),e}}},919:(e,t,n)=>{\\\"use strict\\\";Object.defineProperty(t,\\\"__esModule\\\",{value:!0}),t.setSessionOptions=void 0;const r=n(967),a=n(983),o=n(361);t.setSessionOptions=e=>{const t=o.getInstance();let n=0;const i=[],u=e||{};(e=>{e.extra||(e.extra={}),e.extra.session||(e.extra.session={});const t=e.extra.session;t.use_ort_model_bytes_directly||(t.use_ort_model_bytes_directly=\\\"1\\\")})(u);try{void 0===(null==e?void 0:e.graphOptimizationLevel)&&(u.graphOptimizationLevel=\\\"all\\\");const o=(e=>{switch(e){case\\\"disabled\\\":return 0;case\\\"basic\\\":return 1;case\\\"extended\\\":return 2;case\\\"all\\\":return 99;default:throw new Error(`unsupported graph optimization level: ${e}`)}})(u.graphOptimizationLevel);void 0===(null==e?void 0:e.enableCpuMemArena)&&(u.enableCpuMemArena=!0),void 0===(null==e?void 0:e.enableMemPattern)&&(u.enableMemPattern=!0),void 0===(null==e?void 0:e.executionMode)&&(u.executionMode=\\\"sequential\\\");const s=(e=>{switch(e){case\\\"sequential\\\":return 0;case\\\"parallel\\\":return 1;default:throw new Error(`unsupported execution mode: ${e}`)}})(u.executionMode);let c=0;if(void 0!==(null==e?void 0:e.logId)&&(c=a.allocWasmString(e.logId,i)),void 0===(null==e?void 0:e.logSeverityLevel))u.logSeverityLevel=2;else if(\\\"number\\\"!=typeof e.logSeverityLevel||!Number.isInteger(e.logSeverityLevel)||e.logSeverityLevel<0||e.logSeverityLevel>4)throw new Error(`log serverity level is not valid: ${e.logSeverityLevel}`);if(void 0===(null==e?void 0:e.logVerbosityLevel))u.logVerbosityLevel=0;else if(\\\"number\\\"!=typeof e.logVerbosityLevel||!Number.isInteger(e.logVerbosityLevel))throw new Error(`log verbosity level is not valid: ${e.logVerbosityLevel}`);if(void 0===(null==e?void 0:e.enableProfiling)&&(u.enableProfiling=!1),n=t._OrtCreateSessionOptions(o,!!u.enableCpuMemArena,!!u.enableMemPattern,s,!!u.enableProfiling,0,c,u.logSeverityLevel,u.logVerbosityLevel),0===n)throw new Error(\\\"Can't create session options\\\");return void 0!==(null==e?void 0:e.extra)&&r.iterateExtraOptions(e.extra,\\\"\\\",new WeakSet,((e,r)=>{const o=a.allocWasmString(e,i),u=a.allocWasmString(r,i);if(0!==t._OrtAddSessionConfigEntry(n,o,u))throw new Error(`Can't set a session config entry: ${e} - ${r}`)})),[n,i]}catch(e){throw 0!==n&&t._OrtReleaseSessionOptions(n),i.forEach(t._free),e}}},983:(e,t,n)=>{\\\"use strict\\\";Object.defineProperty(t,\\\"__esModule\\\",{value:!0}),t.allocWasmString=void 0;const r=n(361);t.allocWasmString=(e,t)=>{const n=r.getInstance(),a=n.lengthBytesUTF8(e)+1,o=n._malloc(a);return n.stringToUTF8(e,o,a),t.push(o),o}},349:(e,t,n)=>{\\\"use strict\\\";Object.defineProperty(t,\\\"__esModule\\\",{value:!0}),t.extractTransferableBuffers=t.endProfiling=t.run=t.releaseSession=t.createSession=t.initOrt=void 0;const r=n(586),a=n(919),o=n(983),i=n(361);t.initOrt=(e,t)=>{const n=i.getInstance()._OrtInit(e,t);if(0!==n)throw new Error(`Can't initialize onnxruntime. error code = ${n}`)};const u=new Map;t.createSession=(e,t)=>{const n=i.getInstance(),r=n._malloc(e.byteLength);let o=0,s=0,c=[];try{if([s,c]=a.setSessionOptions(t),n.HEAPU8.set(e,r),o=n._OrtCreateSession(r,e.byteLength,s),0===o)throw new Error(\\\"Can't create a session\\\")}finally{n._free(r),n._OrtReleaseSessionOptions(s),c.forEach(n._free)}const l=n._OrtGetInputCount(o),f=n._OrtGetOutputCount(o),p=[],d=[],m=[],h=[];for(let e=0;e{const t=i.getInstance(),n=u.get(e);if(!n)throw new Error(\\\"invalid session id\\\");const r=n[0],a=n[1],o=n[2];a.forEach(t._OrtFree),o.forEach(t._OrtFree),t._OrtReleaseSession(r),u.delete(e)};const s=e=>{switch(e){case\\\"int8\\\":return 3;case\\\"uint8\\\":return 2;case\\\"bool\\\":return 9;case\\\"int16\\\":return 5;case\\\"uint16\\\":return 4;case\\\"int32\\\":return 6;case\\\"uint32\\\":return 12;case\\\"float32\\\":return 1;case\\\"float64\\\":return 11;case\\\"string\\\":return 8;case\\\"int64\\\":return 7;case\\\"uint64\\\":return 13;default:throw new Error(`unsupported data type: ${e}`)}},c=e=>{switch(e){case 3:return\\\"int8\\\";case 2:return\\\"uint8\\\";case 9:return\\\"bool\\\";case 5:return\\\"int16\\\";case 4:return\\\"uint16\\\";case 6:case 7:return\\\"int32\\\";case 12:case 13:return\\\"uint32\\\";case 1:return\\\"float32\\\";case 11:return\\\"float64\\\";case 8:return\\\"string\\\";default:throw new Error(`unsupported data type: ${e}`)}},l=e=>{switch(e){case\\\"float32\\\":return Float32Array;case\\\"uint8\\\":case\\\"bool\\\":return Uint8Array;case\\\"int8\\\":return Int8Array;case\\\"uint16\\\":return Uint16Array;case\\\"int16\\\":return Int16Array;case\\\"int32\\\":return Int32Array;case\\\"float64\\\":return Float64Array;case\\\"uint32\\\":return Uint32Array;case\\\"int64\\\":return BigInt64Array;case\\\"uint64\\\":return BigUint64Array;default:throw new Error(`unsupported type: ${e}`)}};t.run=(e,t,n,a,f)=>{const p=i.getInstance(),d=u.get(e);if(!d)throw new Error(\\\"invalid session id\\\");const m=d[0],h=d[1],g=d[2],b=t.length,y=a.length;let _=0,v=[];const w=[],O=[];try{[_,v]=r.setRunOptions(f);for(let e=0;ep.HEAP32[e++]=t));const n=p._OrtCreateTensor(s(t),i,u,l,r.length);if(0===n)throw new Error(\\\"Can't create a tensor\\\");w.push(n)}finally{p.stackRestore(c)}}const e=p.stackSave(),i=p.stackAlloc(4*b),u=p.stackAlloc(4*b),d=p.stackAlloc(4*y),A=p.stackAlloc(4*y);try{let n=i/4,r=u/4,o=d/4,s=A/4;for(let e=0;ee*t));if(a=c(i),\\\"string\\\"===a){const e=[];let t=o/4;for(let n=0;n{const t=i.getInstance(),n=u.get(e);if(!n)throw new Error(\\\"invalid session id\\\");const r=n[0],a=t._OrtEndProfiling(r);if(0===a)throw new Error(\\\"Can't get an profile file name\\\");t._OrtFree(a)},t.extractTransferableBuffers=e=>{const t=[];for(const n of e){const e=n[2];!Array.isArray(e)&&e.buffer&&t.push(e.buffer)}return t}},361:function(e,t,n){\\\"use strict\\\";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\\\"default\\\",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)\\\"default\\\"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\\\"__esModule\\\",{value:!0}),t.dispose=t.getInstance=t.initializeWebAssembly=void 0;const u=o(n(449)),s=i(n(932)),c=n(474);let l,f=!1,p=!1,d=!1;const m=(e,t)=>t?e?\\\"ort-wasm-simd-threaded.wasm\\\":\\\"ort-wasm-threaded.wasm\\\":e?\\\"ort-wasm-simd.wasm\\\":\\\"ort-wasm.wasm\\\";t.initializeWebAssembly=async e=>{if(f)return Promise.resolve();if(p)throw new Error(\\\"multiple calls to 'initializeWebAssembly()' detected.\\\");if(d)throw new Error(\\\"previous call to 'initializeWebAssembly()' failed.\\\");p=!0;const t=e.initTimeout,r=e.numThreads,a=e.simd,o=r>1&&(()=>{try{return\\\"undefined\\\"!=typeof SharedArrayBuffer&&(\\\"undefined\\\"!=typeof MessageChannel&&(new MessageChannel).port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11])))}catch(e){return!1}})(),i=a&&(()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,30,1,28,0,65,0,253,15,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,186,1,26,11]))}catch(e){return!1}})(),h=\\\"string\\\"==typeof e.wasmPaths?e.wasmPaths:void 0,g=m(!1,o),b=m(i,o),y=\\\"object\\\"==typeof e.wasmPaths?e.wasmPaths[b]:void 0;let _=!1;const v=[];if(t>0&&v.push(new Promise((e=>{setTimeout((()=>{_=!0,e()}),t)}))),v.push(new Promise(((e,t)=>{const r=o?c:s.default,a={locateFile:(e,t)=>{if(o&&e.endsWith(\\\".worker.js\\\")&&\\\"undefined\\\"!=typeof Blob)return URL.createObjectURL(new Blob([n(118)],{type:\\\"text/javascript\\\"}));if(e===g){const e=null!=h?h:t;return null!=y?y:e+b}return t+e}};if(o)if(\\\"undefined\\\"==typeof Blob)a.mainScriptUrlOrBlob=u.join(\\\"/\\\",\\\"ort-wasm-threaded.js\\\");else{const e=`var ortWasmThreaded=(function(){var _scriptDir;return ${r.toString()}})();`;a.mainScriptUrlOrBlob=new Blob([e],{type:\\\"text/javascript\\\"})}r(a).then((t=>{p=!1,f=!0,l=t,e()}),(e=>{p=!1,d=!0,t(e)}))}))),await Promise.race(v),_)throw new Error(`WebAssembly backend initializing failed due to timeout: ${t}ms`)},t.getInstance=()=>{if(f&&l)return l;throw new Error(\\\"WebAssembly is not initialized yet.\\\")},t.dispose=()=>{var e;!f||p||d||(p=!0,null===(e=l.PThread)||void 0===e||e.terminateAllThreads(),l=void 0,p=!1,f=!1,d=!0)}},384:()=>{},993:()=>{},908:()=>{},953:()=>{},925:()=>{},449:()=>{}},t={};function n(r){var a=t[r];if(void 0!==a)return a.exports;var o=t[r]={exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}n.g=function(){if(\\\"object\\\"==typeof globalThis)return globalThis;try{return this||new Function(\\\"return this\\\")()}catch(e){if(\\\"object\\\"==typeof window)return window}}(),(()=>{\\\"use strict\\\";const e=n(349),t=n(361);self.onmessage=n=>{switch(n.data.type){case\\\"init-wasm\\\":t.initializeWebAssembly(n.data.in).then((()=>postMessage({type:\\\"init-wasm\\\"})),(e=>postMessage({type:\\\"init-wasm\\\",err:e})));break;case\\\"init-ort\\\":try{const{numThreads:t,loggingLevel:r}=n.data.in;e.initOrt(t,r),postMessage({type:\\\"init-ort\\\"})}catch(e){postMessage({type:\\\"init-ort\\\",err:e})}break;case\\\"create\\\":try{const{model:t,options:r}=n.data.in,a=e.createSession(t,r);postMessage({type:\\\"create\\\",out:a})}catch(e){postMessage({type:\\\"create\\\",err:e})}break;case\\\"release\\\":try{const t=n.data.in;e.releaseSession(t),postMessage({type:\\\"release\\\"})}catch(e){postMessage({type:\\\"release\\\",err:e})}break;case\\\"run\\\":try{const{sessionId:t,inputIndices:r,inputs:a,outputIndices:o,options:i}=n.data.in,u=e.run(t,r,a,o,i);postMessage({type:\\\"run\\\",out:u},e.extractTransferableBuffers(u))}catch(e){postMessage({type:\\\"run\\\",err:e})}break;case\\\"end-profiling\\\":try{const t=n.data.in;e.endProfiling(t),postMessage({type:\\\"end-profiling\\\"})}catch(e){postMessage({type:\\\"end-profiling\\\",err:e})}}}})()})();\\n\", \"Worker\", undefined, undefined);\n}\n","\"use strict\";\n\n/* eslint-env browser */\n\n/* eslint-disable no-undef, no-use-before-define, new-cap */\nmodule.exports = function (content, workerConstructor, workerOptions, url) {\n var globalScope = self || window;\n\n try {\n try {\n var blob;\n\n try {\n // New API\n blob = new globalScope.Blob([content]);\n } catch (e) {\n // BlobBuilder = Deprecated, but widely implemented\n var BlobBuilder = globalScope.BlobBuilder || globalScope.WebKitBlobBuilder || globalScope.MozBlobBuilder || globalScope.MSBlobBuilder;\n blob = new BlobBuilder();\n blob.append(content);\n blob = blob.getBlob();\n }\n\n var URL = globalScope.URL || globalScope.webkitURL;\n var objectURL = URL.createObjectURL(blob);\n var worker = new globalScope[workerConstructor](objectURL, workerOptions);\n URL.revokeObjectURL(objectURL);\n return worker;\n } catch (e) {\n return new globalScope[workerConstructor](\"data:application/javascript,\".concat(encodeURIComponent(content)), workerOptions);\n }\n } catch (e) {\n if (!url) {\n throw Error(\"Inline worker is not supported\");\n }\n\n return new globalScope[workerConstructor](url, workerOptions);\n }\n};","module.exports = __WEBPACK_EXTERNAL_MODULE__2174__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(6018);\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"\nimport dev.fritz2.binding.RootStore\nimport dev.fritz2.components.clickButton\nimport dev.fritz2.components.data.File\nimport dev.fritz2.components.file\nimport dev.fritz2.components.showAlertToast\nimport dev.fritz2.dom.html.Canvas\nimport dev.fritz2.dom.html.Img\nimport dev.fritz2.dom.html.render\nimport dev.fritz2.tracking.tracker\nimport kotlinx.coroutines.ExperimentalCoroutinesApi\nimport kotlinx.coroutines.await\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.flow.map\nimport onnx.ONNX\nimport onnx.TensorHelper\nimport onnx.TensorHelper.rescaleToMaxSize\nimport onnx.bindings.Tensor\nimport org.khronos.webgl.Float32Array\nimport org.khronos.webgl.get\nimport org.khronos.webgl.set\nimport org.w3c.dom.CanvasRenderingContext2D\nimport org.w3c.dom.ImageData\nimport kotlin.time.ExperimentalTime\n\nobject OnnxInferenceStore : RootStore(\"\") {\n val tracking = tracker()\n\n\n @OptIn(ExperimentalCoroutinesApi::class)\n val processImage = handle> { b64, (targetCanvas, srcImg) ->\n tracking.track {\n kotlin.runCatching {\n delay(60)\n val imgContext = targetCanvas.domNode.getContext(\"2d\") as CanvasRenderingContext2D\n val (width, height) = rescaleToMaxSize(srcImg.domNode.naturalWidth, srcImg.domNode.naturalHeight)\n val intData = TensorHelper.imgToUInt8ClampedArray(srcImg.domNode, imgContext, width, height)\n val floats = TensorHelper.uInt8ClampedToFloat32Array(intData)\n\n val tensor = Tensor(\"float32\", floats, arrayOf(1, 3, width, height))\n val input = TensorHelper.tensorToInput(tensor)\n\n val ir = ONNX.loadInferenceSession()\n val out = ir.run(input).await()\n val outTensor = out[\"output\"] as Tensor\n val outData = outTensor.data as Float32Array\n\n for (i in 0 until outData.length) {\n outData[i] = if (outData[i] > 1) 255f else outData[i] * 255f\n }\n\n val intOut = TensorHelper.float32ToUInt8Clamped(outData)\n\n val imgData = ImageData(intOut, width, height)\n imgContext.putImageData(imgData, 0.0, 0.0)\n\n targetCanvas.domNode.toDataURL()\n }.onFailure { showAlertToast { alert { title(\"Failed Inference\") } } }.getOrDefault(b64)\n\n }\n }\n}\n\nobject SourceImgStore : RootStore(\"\") {\n val parseFile = handleAndEmit { _, file ->\n val name = file.name.split('.')[0]\n emit(\"${name}_night_vision\")\n\n \"data:${file.type};base64,${file.content}\"\n }\n}\n\n\n@OptIn(ExperimentalTime::class, ExperimentalCoroutinesApi::class)\nfun main() {\n render {\n file {\n accept(\"image/*\")\n button {\n text(\"Upload Image\")\n icon { cloudUpload }\n }\n } handledBy SourceImgStore.parseFile\n\n val fromImg = img(id = \"img-from\") {\n width(300)\n src(SourceImgStore.data)\n }\n val targetCanvas = canvas { inlineStyle(\"display:none;\") }\n\n clickButton {\n enabled(SourceImgStore.data.map { it.isNotEmpty() })\n text(\"Transform Image\")\n loading(OnnxInferenceStore.tracking.data)\n loadingText(\"Transforming data...\")\n }.map { targetCanvas to fromImg } handledBy OnnxInferenceStore.processImage\n\n img(id = \"img-to\") {\n width(300)\n src(OnnxInferenceStore.data)\n }\n\n a {\n download(SourceImgStore.parseFile)\n href(OnnxInferenceStore.data)\n clickButton {\n enabled(OnnxInferenceStore.data.map { it.isNotEmpty() })\n text(\"Download\")\n icon { download }\n }\n }\n }\n}","package onnx\n\nimport dev.fritz2.components.showAlertToast\nimport kotlinx.coroutines.ExperimentalCoroutinesApi\nimport kotlinx.coroutines.await\nimport onnx.bindings.InferenceSession\n\nobject ONNX {\n val webgl = jsObject { executionProviders = arrayOf(\"webgl\") }\n\n @OptIn(ExperimentalCoroutinesApi::class)\n suspend fun loadInferenceSession(): InferenceSession =\n runCatching { InferenceSession.create(\"./dce2.onnx\", webgl).await() }\n .onFailure { showAlertToast { alert { title(\"Could not load WebGL, using WASM.\") } } }\n .getOrDefault(InferenceSession.create(\"./dce2.onnx\").await())\n\n inline fun jsObject(init: dynamic.() -> Unit): dynamic {\n val o = js(\"{}\")\n init(o)\n return o\n }\n}","package onnx\n\nimport onnx.bindings.FeedsType\nimport onnx.bindings.Tensor\nimport org.khronos.webgl.Float32Array\nimport org.khronos.webgl.Uint8ClampedArray\nimport org.khronos.webgl.get\nimport org.khronos.webgl.set\nimport org.w3c.dom.CanvasRenderingContext2D\nimport org.w3c.dom.HTMLImageElement\n\nobject TensorHelper {\n private const val maxSize: Float = 1280*720f\n\n fun rescaleToMaxSize(width: Int, height: Int): Pair {\n val scale = maxSize / (width * height)\n\n return (scale * width).toInt().coerceAtMost(width) to (scale * height).toInt().coerceAtMost(height)\n }\n\n fun imgToUInt8ClampedArray(img: HTMLImageElement, ctx: CanvasRenderingContext2D, width: Int, height: Int): Uint8ClampedArray {\n val canvas = ctx.canvas\n canvas.width = width\n canvas.height = height\n ctx.drawImage(img, 0.0, 0.0, width.toDouble(), height.toDouble())\n\n return ctx.getImageData(0.0, 0.0, width.toDouble(), height.toDouble()).data\n }\n\n fun float32ToUInt8Clamped(data: Float32Array): Uint8ClampedArray {\n val rgb = arrayOf(0, data.length / 3, data.length / 3 * 2)\n val intOut = Uint8ClampedArray(data.length / 3 * 4)\n\n for (i in 0 until intOut.length / 4) {\n intOut.asDynamic()[i * 4 + 0] = data[rgb[0] + i].toInt()\n intOut.asDynamic()[i * 4 + 1] = data[rgb[1] + i].toInt()\n intOut.asDynamic()[i * 4 + 2] = data[rgb[2] + i].toInt()\n intOut.asDynamic()[i * 4 + 3] = 255\n }\n\n return intOut\n }\n\n fun tensorToInput(tensor: Tensor, inputName: String = \"input\"): FeedsType {\n val input: dynamic = object {}\n input[inputName] = tensor\n\n return input.unsafeCast()\n }\n\n fun uInt8ClampedToFloat32Array(data: Uint8ClampedArray): Float32Array {\n val floats = Float32Array(data.length / 4 * 3)\n val rgb = listOf(0, data.length / 4, data.length / 4 * 2)\n\n for (i in 0 until data.length step 4) {\n floats[rgb[0] + i / 4] = data[i + 0] / 255f\n floats[rgb[1] + i / 4] = data[i + 1] / 255f\n floats[rgb[2] + i / 4] = data[i + 2] / 255f // Skip i+3 as that's ALPHA\n }\n\n return floats\n }\n}",null,null,null,null,null,null,null,"(function(e,r){typeof exports===\"object\"&&typeof module!==\"undefined\"?r(exports):typeof define===\"function\"&&define.amd?define([\"exports\"],r):(e=e||self,r(e.stylis={}))})(this,(function(e){\"use strict\";var r=\"-ms-\";var a=\"-moz-\";var c=\"-webkit-\";var t=\"comm\";var n=\"rule\";var s=\"decl\";var i=\"@page\";var u=\"@media\";var o=\"@import\";var f=\"@charset\";var l=\"@viewport\";var h=\"@supports\";var p=\"@document\";var v=\"@namespace\";var b=\"@keyframes\";var d=\"@font-face\";var w=\"@counter-style\";var m=\"@font-feature-values\";var $=Math.abs;var k=String.fromCharCode;function x(e,r){return(((r<<2^A(e,0))<<2^A(e,1))<<2^A(e,2))<<2^A(e,3)}function g(e){return e.trim()}function E(e,r){return(e=r.exec(e))?e[0]:e}function y(e,r,a){return e.replace(r,a)}function T(e,r){return e.indexOf(r)}function A(e,r){return e.charCodeAt(r)|0}function O(e,r,a){return e.slice(r,a)}function M(e){return e.length}function C(e){return e.length}function S(e,r){return r.push(e),e}function R(e,r){return e.map(r).join(\"\")}e.line=1;e.column=1;e.length=0;e.position=0;e.character=0;e.characters=\"\";function z(r,a,c,t,n,s,i){return{value:r,root:a,parent:c,type:t,props:n,children:s,line:e.line,column:e.column,length:i,return:\"\"}}function N(e,r,a){return z(e,r.root,r.parent,a,r.props,r.children,0)}function P(){return e.character}function U(){e.character=e.position2||I(e.character)>3?\"\":\" \"}function Y(r){while(U())switch(I(e.character)){case 0:S(H(e.position-1),r);break;case 2:S(K(e.character),r);break;default:S(k(e.character),r)}return r}function B(r){while(U())switch(e.character){case r:return e.position;case 34:case 39:return B(r===34||r===39?r:e.character);case 40:if(r===41)B(r);break;case 92:U();break}return e.position}function G(r,a){while(U())if(r+e.character===47+10)break;else if(r+e.character===42+42&&_()===47)break;return\"/*\"+F(a,e.position-1)+\"*\"+k(r===47?r:U())}function H(r){while(!I(_()))U();return F(r,e.position)}function Z(e){return D(q(\"\",null,null,null,[\"\"],e=L(e),0,[0],e))}function q(e,r,a,c,t,n,s,i,u){var o=0;var f=0;var l=s;var h=0;var p=0;var v=0;var b=1;var d=1;var w=1;var m=0;var $=\"\";var x=t;var g=n;var E=c;var T=$;while(d)switch(v=m,m=U()){case 34:case 39:case 91:case 40:T+=K(m);break;case 9:case 10:case 13:case 32:T+=W(v);break;case 47:switch(_()){case 42:case 47:S(Q(G(U(),j()),r,a),u);break;default:T+=\"/\"}break;case 123*b:i[o++]=M(T)*w;case 125*b:case 59:case 0:switch(m){case 0:case 125:d=0;case 59+f:if(p>0)S(p>32?X(T+\";\",c,a,l-1):X(y(T,\" \",\"\")+\";\",c,a,l-2),u);break;case 59:T+=\";\";default:S(E=J(T,r,a,o,f,t,i,$,x=[],g=[],l),n);if(m===123)if(f===0)q(T,r,E,E,x,n,l,i,g);else switch(h){case 100:case 109:case 115:q(e,E,E,c&&S(J(e,E,E,0,0,t,i,$,t,x=[],l),g),t,g,l,i,c?x:g);break;default:q(T,E,E,E,[\"\"],g,l,i,g)}}o=f=p=0,b=w=1,$=T=\"\",l=s;break;case 58:l=1+M(T),p=v;default:switch(T+=k(m),m*b){case 38:w=f>0?1:(T+=\"\\f\",-1);break;case 44:i[o++]=(M(T)-1)*w,w=1;break;case 64:if(_()===45)T+=K(U());h=_(),f=M($=T+=H(j())),m++;break;case 45:if(v===45&&M(T)==2)b=0}}return n}function J(e,r,a,c,t,s,i,u,o,f,l){var h=t-1;var p=t===0?s:[\"\"];var v=C(p);for(var b=0,d=0,w=0;b0?p[m]+\" \"+k:y(k,/&\\f/g,p[m])))o[w++]=x;return z(e,r,a,t===0?n:u,o,f,l)}function Q(e,r,a){return z(e,r,a,t,k(P()),O(e,2,-2),0)}function X(e,r,a,c){return z(e,r,a,s,O(e,0,c),O(e,c+1,-1),c)}function ee(e,t){switch(x(e,t)){case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return c+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return c+e+a+e+r+e+e;case 6828:case 4268:return c+e+r+e+e;case 6165:return c+e+r+\"flex-\"+e+e;case 5187:return c+e+y(e,/(\\w+).+(:[^]+)/,c+\"box-$1$2\"+r+\"flex-$1$2\")+e;case 5443:return c+e+r+\"flex-item-\"+y(e,/flex-|-self/,\"\")+e;case 4675:return c+e+r+\"flex-line-pack\"+y(e,/align-content|flex-|-self/,\"\")+e;case 5548:return c+e+r+y(e,\"shrink\",\"negative\")+e;case 5292:return c+e+r+y(e,\"basis\",\"preferred-size\")+e;case 6060:return c+\"box-\"+y(e,\"-grow\",\"\")+c+e+r+y(e,\"grow\",\"positive\")+e;case 4554:return c+y(e,/([^-])(transform)/g,\"$1\"+c+\"$2\")+e;case 6187:return y(y(y(e,/(zoom-|grab)/,c+\"$1\"),/(image-set)/,c+\"$1\"),e,\"\")+e;case 5495:case 3959:return y(e,/(image-set\\([^]*)/,c+\"$1\"+\"$`$1\");case 4968:return y(y(e,/(.+:)(flex-)?(.*)/,c+\"box-pack:$3\"+r+\"flex-pack:$3\"),/s.+-b[^;]+/,\"justify\")+c+e+e;case 4095:case 3583:case 4068:case 2532:return y(e,/(.+)-inline(.+)/,c+\"$1$2\")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(M(e)-1-t>6)switch(A(e,t+1)){case 109:return y(e,/(.+:)(.+)-([^]+)/,\"$1\"+c+\"$2-$3\"+\"$1\"+a+\"$2-$3\")+e;case 102:return y(e,/(.+:)(.+)-([^]+)/,\"$1\"+c+\"$2-$3\"+\"$1\"+a+\"$3\")+e;case 115:return ee(y(e,\"stretch\",\"fill-available\"),t)+e}break;case 4949:if(A(e,t+1)!==115)break;case 6444:switch(A(e,M(e)-3-(~T(e,\"!important\")&&10))){case 107:case 111:return y(e,e,c+e)+e;case 101:return y(e,/(.+:)([^;!]+)(;|!.+)?/,\"$1\"+c+(A(e,14)===45?\"inline-\":\"\")+\"box$3\"+\"$1\"+c+\"$2$3\"+\"$1\"+r+\"$2box$3\")+e}break;case 5936:switch(A(e,t+11)){case 114:return c+e+r+y(e,/[svh]\\w+-[tblr]{2}/,\"tb\")+e;case 108:return c+e+r+y(e,/[svh]\\w+-[tblr]{2}/,\"tb-rl\")+e;case 45:return c+e+r+y(e,/[svh]\\w+-[tblr]{2}/,\"lr\")+e}return c+e+r+e+e}return e}function re(e,r){var a=\"\";var c=C(e);for(var t=0;t1?\"\":r;case a=C(c)-1:case 2:return a===2?r+e+e:r+e;default:return r}}}))}))}}e.CHARSET=f;e.COMMENT=t;e.COUNTER_STYLE=w;e.DECLARATION=s;e.DOCUMENT=p;e.FONT_FACE=d;e.FONT_FEATURE_VALUES=m;e.IMPORT=o;e.KEYFRAMES=b;e.MEDIA=u;e.MOZ=a;e.MS=r;e.NAMESPACE=v;e.PAGE=i;e.RULESET=n;e.SUPPORTS=h;e.VIEWPORT=l;e.WEBKIT=c;e.abs=$;e.alloc=L;e.append=S;e.caret=j;e.char=P;e.charat=A;e.combine=R;e.comment=Q;e.commenter=G;e.compile=Z;e.copy=N;e.dealloc=D;e.declaration=X;e.delimit=K;e.delimiter=B;e.from=k;e.hash=x;e.identifier=H;e.indexof=T;e.match=E;e.middleware=ce;e.namespace=se;e.next=U;e.node=z;e.parse=q;e.peek=_;e.prefix=ee;e.prefixer=ne;e.replace=y;e.ruleset=J;e.rulesheet=te;e.serialize=re;e.sizeof=C;e.slice=F;e.stringify=ae;e.strlen=M;e.substr=O;e.token=I;e.tokenize=V;e.tokenizer=Y;e.trim=g;e.whitespace=W;Object.defineProperty(e,\"__esModule\",{value:true})}));\n//# sourceMappingURL=stylis.cjs.map\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(689);\n"],"names":["root","factory","exports","module","define","amd","this","createBuffer","val","TextEncoder","encode","MurmurHashV3","key","seed","remainder","bytes","h1","h1b","c1","c2","k1","i","length","murmur","v2","str","k","l","h","v3","backends","backendsSortedByPriority","registerBackend","name","backend","priority","init","createSessionHandler","TypeError","currentBackend","undefined","Error","splice","push","env","constructor","wasm","webgl","logLevelInternal","logLevel","value","indexOf","isBigInt64ArrayAvailable","BigInt64Array","from","isBigUint64ArrayAvailable","BigUint64Array","NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP","Map","Float32Array","Uint8Array","Int8Array","Uint16Array","Int16Array","Int32Array","Float64Array","Uint32Array","NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP","set","Tensor","arg0","arg1","arg2","type","data","dims","Array","isArray","typedArrayConstructor","get","firstElementType","mappedType","size","dim","Number","isSafeInteger","RangeError","calculateSize","reshape","InferenceSession","handler","async","feeds","fetches","options","isFetchesEmpty","outputNames","isFetches","arg1Keys","Object","getOwnPropertyNames","v","inputNames","results","run","returnValue","hasOwnProperty","call","static","arg3","filePathOrUint8Array","ArrayBuffer","SharedArrayBuffer","buffer","byteOffset","byteLength","backendHints","executionProviders","map","backendNames","errors","backendName","backendInfo","initialized","initializing","aborted","e","err","join","resolveBackend","startProfiling","endProfiling","self","__WEBPACK_EXTERNAL_MODULE__2174__","_scriptDir","document","currentScript","src","t","S","Y","Q","P","n","W","r","q","a","U","B","o","u","s","ready","Promise","c","f","p","d","m","b","g","_","window","y","importScripts","w","process","versions","node","ENVIRONMENT_IS_PTHREAD","A","T","locateFile","O","__dirname","normalize","readFileSync","F","readFile","argv","replace","slice","on","Gt","ce","re","exitCode","exit","inspect","console","error","Worker","location","href","substr","lastIndexOf","XMLHttpRequest","open","send","responseText","responseType","response","onload","status","onerror","performance","E","x","print","log","bind","M","printErr","warn","thisProgram","quit","wasmBinary","D","noExitRuntime","WebAssembly","C","R","I","j","TextDecoder","decode","G","H","subarray","String","fromCharCode","z","L","charCodeAt","N","V","X","ht","HEAP8","HEAP16","HEAP32","HEAPU8","HEAPU16","HEAPU32","HEAPF32","HEAPF64","J","INITIAL_MEMORY","wasmMemory","Memory","initial","maximum","shared","Z","$","K","ee","te","ne","ae","preRun","shift","unshift","ie","oe","ue","se","onAbort","RuntimeError","fe","startsWith","le","preloadedImages","preloadedAudios","pe","de","Nb","ib","me","Atomics","load","Bt","compareExchange","notify","be","ge","cb","sb","worker","_emscripten_futex_wake","he","gb","fb","zb","xc","Rb","store","Dt","vt","Sb","receiveObjectTransfer","Xb","threadInit","hc","threadCancel","fc","threadExit","Hb","setExitStatus","Zb","yb","Eb","pop","Ct","Fb","yt","postMessage","cmd","Gb","terminate","bb","xb","eb","_t","wb","hb","Yb","Ut","Ub","onmessage","Lb","targetThread","Dc","transferList","Ot","ve","thread","loaded","mb","threadId","text","alert","zt","returnCode","target","filename","lineno","message","urlOrBlob","mainScriptUrlOrBlob","wasmModule","Ib","Ob","nc","now","_e","Date","gt","ye","ze","we","lb","dc","ac","bc","$b","cc","Pb","rb","jb","detached","St","start_routine","ec","arg","threadInfoStruct","stackBase","stackSize","time","mc","Ae","exchange","wait","Te","establishStackSpace","Wt","Yt","invokeEntryPoint","hrtime","__performance_now_clock_drift","Oe","ke","Ee","xe","Me","rc","De","Se","Ce","Re","Ie","Fe","sc","je","Math","ceil","qt","fill","Wb","Tb","Jb","fd","Ac","flags","offset","Ye","Pe","We","tc","qe","Ue","Be","Ge","He","arguments","jt","Pt","kt","Le","Ne","Ve","querySelector","Xe","qb","Db","pc","Et","pb","ob","getParameter","width","height","viewport","Qe","Je","Ze","$e","Ke","USER","LOGNAME","PATH","PWD","HOME","LANG","navigator","languages","et","forEach","tt","nt","rt","at","vc","uc","it","ot","ut","toTimeString","match","Kb","getFullYear","getTimezoneOffset","max","Ft","It","Rt","st","ct","ft","lt","pt","getTime","getMonth","getDate","setDate","setMonth","setFullYear","dt","toString","getDay","ab","vb","kc","jc","tb","nb","kb","ub","Ec","ic","lc","RegExp","split","substring","abs","includes","mt","bt","Tt","oc","At","xt","da","ga","ea","apply","copyWithin","hardwareConcurrency","aa","min","grow","ba","setTimeout","stack","Mt","ca","alpha","depth","stencil","antialias","premultipliedAlpha","preserveDrawingBuffer","powerPreference","failIfMajorPerformanceCaveat","Vb","yc","Bb","Mb","Bc","Cc","Cb","getContext","WebGLRenderingContext","wc","attributes","version","canvas","Qb","getExtension","vertexAttribDivisor","vertexAttribDivisorANGLE","drawArraysInstanced","drawArraysInstancedANGLE","drawElementsInstanced","drawElementsInstancedANGLE","createVertexArray","createVertexArrayOES","deleteVertexArray","deleteVertexArrayOES","bindVertexArray","bindVertexArrayOES","isVertexArray","isVertexArrayOES","drawBuffers","drawBuffersWEBGL","qc","zc","getSupportedExtensions","ha","getUTCSeconds","getUTCMinutes","getUTCHours","getUTCDate","getUTCMonth","getUTCFullYear","getUTCDay","UTC","Ab","getSeconds","getMinutes","getHours","setTime","fa","asm","Ca","ia","Ha","monitorRunDependencies","clearInterval","instance","fetch","credentials","then","ok","arrayBuffer","catch","resolve","instantiate","instantiateWasm","instantiateStreaming","___wasm_call_ctors","_OrtInit","ja","_OrtCreateSessionOptions","ka","_OrtAddSessionConfigEntry","la","_OrtReleaseSessionOptions","ma","_OrtCreateSession","na","_OrtReleaseSession","oa","_OrtGetInputCount","pa","_OrtGetOutputCount","qa","_OrtGetInputName","ra","_OrtGetOutputName","sa","_OrtFree","ta","_OrtCreateTensor","ua","_OrtGetTensorData","va","_OrtReleaseTensor","wa","_OrtCreateRunOptions","xa","_OrtAddRunConfigEntry","ya","_OrtReleaseRunOptions","za","_OrtRun","Aa","_OrtEndProfiling","Ba","_malloc","Da","___errno_location","Ea","_free","Fa","_pthread_self","Ga","_emscripten_tls_init","_emscripten_current_thread_process_queued_calls","Ia","wt","_emscripten_register_main_browser_thread_id","Ja","_emscripten_main_browser_thread_id","Ka","_emscripten_sync_run_in_main_thread_4","La","_emscripten_main_thread_process_queued_calls","Ma","_emscripten_run_in_main_runtime_thread_js","Na","__emscripten_call_on_thread","Oa","_pthread_testcancel","Pa","_pthread_exit","Qa","__emscripten_thread_init","Ra","_emscripten_get_global_libc","Sa","___pthread_tsd_run_dtors","Ta","__get_tzname","Ua","__get_daylight","Va","__get_timezone","Wa","stackSave","Xa","stackRestore","Ya","stackAlloc","Za","_emscripten_stack_set_limits","_a","_memalign","$a","__emscripten_allow_main_runtime_queued_calls","__emscripten_main_thread_futex","Ht","calledRun","onRuntimeInitialized","postRun","setStatus","_fflush","onExit","UTF8ToString","stringToUTF8","lengthBytesUTF8","keepRuntimeAlive","PThread","ExitStatus","preInit","ortWasm","fn","ctx","params","index","pending","reject","base64","string","charAt","b64","s64","start","end","parts","chunk","invalidEncoding","test","EventEmitter","_listeners","prototype","evt","off","listeners","emit","args","f32","f8b","writeFloat_f32_cpy","buf","pos","writeFloat_f32_rev","readFloat_f32_cpy","readFloat_f32_rev","writeFloatLE","writeFloatBE","readFloatLE","readFloatBE","writeFloat_ieee754","writeUint","sign","isNaN","round","exponent","floor","LN2","pow","readFloat_ieee754","readUint","uint","mantissa","NaN","writeUintLE","writeUintBE","readUintLE","readUintBE","f64","writeDouble_f64_cpy","writeDouble_f64_rev","readDouble_f64_cpy","readDouble_f64_rev","writeDoubleLE","writeDoubleBE","readDoubleLE","readDoubleBE","writeDouble_ieee754","off0","off1","readDouble_ieee754","lo","hi","inquire","moduleName","mod","eval","keys","alloc","SIZE","MAX","slab","utf8","len","read","write","flatbuffers","Offset","Table","SIZEOF_SHORT","SIZEOF_INT","FILE_IDENTIFIER_LENGTH","SIZE_PREFIX_LENGTH","Encoding","UTF8_BYTES","UTF16_STRING","int32","float32","float64","isLittleEndian","Long","low","high","create","ZERO","toFloat64","equals","other","Builder","opt_initial_size","initial_size","ByteBuffer","allocate","space","minalign","vtable","vtable_in_use","isNested","object_start","vtables","vector_num_elems","force_defaults","clear","capacity","forceDefaults","dataBuffer","asUint8Array","position","prep","additional_bytes","align_size","old_buf_size","growByteBuffer","pad","byte_size","writeInt8","writeInt16","writeInt32","writeInt64","writeFloat32","writeFloat64","addInt8","addInt16","addInt32","addInt64","addFloat32","addFloat64","addFieldInt8","voffset","defaultValue","slot","addFieldInt16","addFieldInt32","addFieldInt64","addFieldFloat32","addFieldFloat64","addFieldOffset","addOffset","addFieldStruct","nested","obj","notNested","new_buf_size","nbb","setPosition","startObject","numfields","endObject","vtableloc","trimmed_size","existing_vtable","vt1","outer_loop","vt2","readInt16","finish","root_table","opt_file_identifier","opt_size_prefix","size_prefix","file_identifier","finishSizePrefixed","requiredField","table","field","table_start","vtable_start","readInt32","startVector","elem_size","num_elems","alignment","endVector","createString","codePoint","createLong","bytes_","position_","readInt8","readUint8","readUint16","readUint32","readInt64","readUint64","readFloat32","readFloat64","writeUint8","writeUint16","writeUint32","writeUint64","getBufferIdentifier","result","__offset","bb_pos","vtable_offset","__union","__string","opt_encoding","__indirect","__vector","__vector_len","__has_identifier","ident","__esModule","Guid","guid","EMPTY","isGuid","validator","gen","createEmpty","parse","raw","count","out","random","isEmpty","toJSON","Instance","Module","unsigned","isLong","__isLong__","defineProperty","INT_CACHE","UINT_CACHE","fromInt","cachedObj","cache","fromBits","fromNumber","UZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","MIN_VALUE","MAX_VALUE","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","fromString","radix","radixToPower","parseInt","power","mul","add","fromValue","TWO_PWR_16_DBL","TWO_PWR_24","ONE","UONE","NEG_ONE","LongPrototype","toInt","toNumber","isZero","isNegative","eq","radixLong","div","rem1","sub","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","notEquals","neq","lessThan","comp","lessThanOrEqual","lte","greaterThan","greaterThanOrEqual","gte","compare","thisNeg","otherNeg","negate","not","addend","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","subtract","subtrahend","multiply","multiplier","get_high","b00","divide","divisor","approx","res","div_u","div_s","toUnsigned","shru","shr","shl","log2","delta","approxRes","approxRem","modulo","rem_u","rem_s","and","or","xor","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toSigned","toBytes","toBytesLE","toBytesBE","fromBytes","fromBytesLE","fromBytesBE","valuesById","values","onnx","$protobuf","$Reader","Reader","$Writer","Writer","$util","util","$root","roots","Version","AttributeProto","properties","floats","ints","strings","tensors","graphs","refAttrName","docString","newBuffer","emptyArray","writer","uint32","float","int64","TensorProto","fork","ldelim","GraphProto","encodeDelimited","reader","tag","end2","skipType","decodeDelimited","verify","isString","isInteger","fromObject","object","LongBits","toObject","arrays","defaults","long","longs","enums","json","isFinite","AttributeType","toJSONOptions","ValueInfoProto","TypeProto","NodeProto","input","output","attribute","opType","domain","ModelProto","opsetImport","metadataProps","irVersion","producerName","producerVersion","modelVersion","graph","OperatorSetIdProto","StringStringEntryProto","TensorAnnotation","quantParameterTensorNames","tensorName","initializer","valueInfo","quantizationAnnotation","floatData","int32Data","stringData","int64Data","externalData","doubleData","uint64Data","dataType","segment","rawData","dataLocation","Segment","double","uint64","DataLocation","DataType","begin","TensorShapeProto","Dimension","$oneOfFields","dimValue","dimParam","denotation","oneOfGetter","oneOfSetter","oneofs","tensorType","elemType","shape","protobuf","configure","_configure","BufferWriter","BufferReader","build","rpc","indexOutOfRange","writeLength","create_array","Buffer","isBuffer","readLongVarint","bits","readFixed32_end","readFixed64","_slice","sint32","bool","fixed32","sfixed32","skip","wireType","BufferReader_","merge","sint64","zzDecode","fixed64","sfixed64","utf8Slice","Service","rpcImpl","requestDelimited","responseDelimited","Boolean","rpcCall","method","requestCtor","responseCtor","request","callback","asPromise","endedByRPC","zero","zzEncode","zeroHash","toLong","fromHash","hash","toHash","mask","part0","part1","part2","dst","ifNotSet","newError","CustomError","captureStackTrace","pool","isNode","global","freeze","emptyObject","isObject","isset","isSet","prop","utf8Write","_Buffer_from","_Buffer_allocUnsafe","sizeOrArray","dcodeIO","key2Re","key32Re","key64Re","longToHash","longFromHash","lcFirst","toLowerCase","ProtocolError","fieldNames","fieldMap","encoding","allocUnsafe","Op","next","noop","State","head","tail","states","writeByte","VarintOp","writeVarint64","writeFixed32","_push","writeBytes","reset","BufferWriter_","writeStringBuffer","writeBytesBuffer","copy","pathOrBuffer","session","Session","loadModel","OnnxjsSessionHandler","initializeFlags","initTimeout","simd","proxy","numThreads","numCpuLogicalCores","cpus","wasmBackend","initWasm","promisify","OnnxruntimeWebAssemblySessionHandler","onnxjsBackend","AttributeWithCacheKeyImpl","assign","cacheKey","_cacheKey","sort","createAttributeWithCacheKey","ortFbs","onnxruntime","experimental","fbs","Attribute","_attributes","attr","getValue","getType","delete","getFloat","getInt","getString","getTensor","getFloats","getInts","getStrings","getTensors","valueAndType","FLOAT","INT","STRING","TENSOR","FLOATS","INTS","STRINGS","TENSORS","attrType","GRAPH","GRAPHS","getValueNoCheck","LongUtil","longToNumber","arr","numberValue","maybeLong","fromProto","fromOrtTensor","utf8String","decodeUtf8String","getValueNoCheckFromOnnxFormat","getValueNoCheckFromOrtFormat","floatsArray","intsLength","stringsLength","tensorsLength","backendsCache","tryLoadBackend","backendHint","backendObj","initialize","dispose","WebGLBackend","hint","hints","contextId","matmulMaxBatchSize","textureCacheMode","pack","glContext","createWebGLContext","Logger","setWithEnv","verbose","warning","context","WebGLSessionHandler","CoordsGlslLib","GlslLib","super","getFunctions","offsetToCoords","coordsToOffset","toVec","valueFrom","getCommonUtilFuncs","getInputsSamplingSnippets","getOutputSamplingSnippet","getCustomTypes","GlslLibRoutine","outputLayout","outputTextureLayout","isPacked","getPackedOutputSamplingSnippet","getUnpackedOutputSamplingSnippet","outShape","unpackedShape","outTexShape","funcName","getOutputScalarCoords","getOutputPacked1DCoords","getOutputPacked2DCoords","getOutputPacked3DCoords","getOutputPackedNDCoords","floatTextureSetRGBASource","getGlsl","getOutputUnpacked1DCoords","getOutputUnpacked2DCoords","getOutputUnpacked3DCoords","getOutputUnpacked4DCoords","getOutputUnpacked5DCoords","getOutputUnpacked6DCoords","floatTextureSetRSource","texShape","packedTexShape","source","ArrayUtil","arraysEqual","texelsInLogicalRow","texelsInBatch","texelsInBatchN","batches","coords","rank","strides","coordsToCompute","coordsFromIndexSnippet","stride","glsl","texture2D","programInfo","samplerName","inputLayout","inputTextureLayouts","generateShaderFuncNameFromInputSamplerName","getPackedSamplerFromInput","getUnpackedSamplerFromInput","outCoordFuncName","generateShaderFuncNameFromInputSamplerNameAtOutCoords","getPackedSamplerAtOutputCoords","getUnpackedSamplerAtOutputCoords","inShape","texName","texFuncSnippet","inRank","outRank","broadcastDims","BroadcastUtil","getBroadcastDims","getCoordsDataType","rankDiff","coordsSnippet","fields","getGlChannels","unpackedCoordsSnippet","isInputScalar","ShapeUtil","isOutputScalar","rows","cols","inTexShape","getPackedSamplerScalar","getPackedSampler1D","getPackedSampler2D","getPackedSampler3D","getPackedSamplerND","getUnpackedSamplerScalar","getUnpackedSampler1D","getUnpackedSampler2D","getUnpackedSampler3D","getUnpackedSampler4D","getUnpackedSampler5D","getUnpackedSampler6D","texNumR","texNumC","packedSampler","valuesPerRow","squeezedShape","keptDims","newInputShape","squeezeInputShape","newInputLayout","JSON","stringify","samplerRoutine","routineBody","getSqueezedParams","dependencies","tNumR","tNumC","newShape","squeezeShape","stride0","stride1","routine","revDims","reverse","stride2","stride3","stride4","xScale","yScale","stridesBlock","body","layout","getValueFromSingle","varName","transpose","getPackedValueFrom","FunctionType","ValueBased","Positional","addDependency","nodes","cycleCheck","Set","alreadyTraversed","createOrderedNodes","graphNodes","dfsTraverse","has","EncodingGlslLib","encodeFloat32","decodeFloat32","encodeUint8","endianness","decodeUint8","FragColorGlslLib","setFragColor","getColorAsFloat","INLINE_FUNC_DEF_REGEX","script","inlineDefs","exec","tokens","trim","filter","regexString","regex","variable","declLine","newBody","paramRedecLine","replacement","libs","glslLibRoutineDependencyGraph","GlslContext","glslRegistry","lib","libName","routinesInLib","currentNode","GlslLibRoutineNode","preprocess","shaderSource","hasMain","getDefaultFragShaderMain","replaceInlines","getFragShaderPreamble","getUniforms","variables","getImports","routinesIncluded","selectGlslLibRoutinesToBeIncluded","routines","classAndRoutine","TopologicalSortGlslRoutines","returnOrderedNodes","samplers","uniformLines","sampler","arrayLength","VecGlslLib","ShapeUtilsGlslLib","bcastIndex","bcastMatmulIndex","offsetToIndices","indicesToOffset","incrementIndices","outputRank","dimOffset","block","indexToOffsetSingle","offsetToIndicesSingle","shapeInit","GLSL_ES_2_0","varyingVertex","varyingFrag","outputDeclaration","GLSL_ES_3_0","outputShapeLength","binaryVecFunctions","copyVec","setVecItem","getVecItem","nameOp","fname","assignmentBlock","packedTextureDataCache","unpackedTextureDataCache","calculateTextureWidthAndHeight","textureType","layoutStrategy","executeProgram","program","inputs","inputTypes","inputTextureDatas","getOrCreateTextureData","texture","cacheHint","artifact","programManager","getArtifact","createTextureLayoutFromTextureType","outputTextureData","createTextureData","setArtifact","runProgram","tensor","TextureType","packed","td","getTextureData","dataId","unpack","packedLastDimension","group","channels","adjustedKernelShape","adjustedLayout","numberData","numFeatureMaps","oldRowSize","newRowSize","oldOffset","newOffset","unpackedTextureLayout","createTextureLayoutFromShape","reverseWH","unpackedTextureData","createTextureDataFromLayoutBindTensor","usage","textureManager","createTextureFromLayout","createTextureDataFromTexture","reshapeUnpacked","reshapedDims","inputTD","unpacked","newTextureLayout","computeStrides","reshapePacked","isReshapeCheap","squeezedInputShape","processDims3D","squeezedOutputShape","squeezedInputTensor","squeezedOutputTensor","createPackedReshape3DProgramInfoLoader","cast","tensorId","textureData","_id","readTexture","readTextureAsync","setTextureData","isInitializer","isTextureLayoutCached","clearActiveTextures","releaseTexture","isFloat32DownloadSupported","readUint8TextureAsFloat","encodeAsUint8","createPackProgramInfoLoader","createUnpackProgramInfoLoader","WEBGL_OP_RESOLVE_RULES","unaryOps","acos","binaryOps","asin","atan","averagePool","parseAveragePoolAttributes","batchNormalization","parseBatchNormalizationAttributes","parseCastAttributes","clip","parseClipAttributes","clipV11","concat","parseConcatAttributes","conv","parseConvAttributes","cos","identity","depthToSpace","parseDepthToSpaceAttributes","equal","elu","parseEluAttributes","exp","flatten","parseFlattenAttributes","gather","parseGatherAttributes","gemm","parseGemmAttributesV7","parseGemmAttributesV11","globalAveragePool","parseGlobalAveragePoolAttributes","globalMaxPool","greater","imageScaler","parseImageScalerAttributes","instanceNormalization","parseInstanceNormalizationAttributes","leakyRelu","parseLeakyReluAttributes","less","matMul","parseMatMulAttributes","maxPool","parseMaxPoolAttributes","padV2","parsePadAttributesV2","padV11","parsePadAttributesV11","pRelu","reduceLogSum","parseReduceAttributes","reduceMax","reduceMean","reduceMin","reduceProd","reduceSum","reduceLogSumSquare","relu","resize","parseResizeAttributesV10","parseResizeAttributesV11","sigmoid","sin","sliceV10","parseSliceAttributes","softmax","parseSoftmaxAttributes","softmaxV13","parseSoftmaxAttributesV13","parseSplitAttributes","sqrt","squeeze","parseSqueezeAttributes","squeezeV13","sum","tan","tanh","tile","parseTransposeAttributes","upsample","parseUpsampleAttributesV7","parseUpsampleAttributesV9","unsqueeze","parseUnsqueezeAttributes","unsqueezeV13","batchNormalizationProgramMetadata","inferenceHandler","validateInputs","createBatchNormalizationProgramInfo","epsilon","momentum","spatial","scaleWidth","scaleHeight","scale","mean","var_","glslAdd","glslDiv","glslMul","glslSub","glslEqual","glslGreater","glslLess","glslAnd","glslOr","glslXor","glslPow","glslPRelu","createBinaryProgramInfoLoader","glslFunc","outputTensorType","createBinaryProgramInfo","isBroadcast","areEqual","outputShape","usePackedTexture","calculatedShape","calcShape","aRank","bRank","aBcast","bBcast","to","ProtoUtil","tensorDataTypeFromProto","createPackedConcatProgramInfoLoader","metadata","inputCount","axis","inputShape","dataNShape","axisIndex","getChannels","dtype","unpackChannel","unpackFromChannel","shapes","offsets","channel","lastChannels","allChannels","getValueSnippet","getShiftedChannelsSnippet","lastIndex","channelIdx","idx","createUnpackedConcatProgramInfoLoader","sizeInConcatAxis","previousSum","getTextureIndexWhereDataResidesMethod","getTextureIndexWhereDataResidesLinearSearch","getTextureIndexWhereDataResidesBinarySearch","getFetchDataFromCorrectTextureMethod","getGetSizeInConcatAxisValueFromIndexMethod","numberOfTensors","tensorRank","codeLines","inputType","inputDimensionality","createUnpackedGroupedConvProgramInfoLoader","hasBias","processBias","xShape","wShape","outputChannelsPerGroup","autoPad","dilations","kernelShape","pads","calculateOutputShape","activationFunction","applyActivation","getActicationSnippet","conv2DPackedPointwise","xshape","kshape","reshapedX","reshapedK","matmulInputs","matmulOutput","createPackedMatmulProgramInfoLoader","conv2DPacked","im2colOutput","createPackedIm2ColProgramInfoLoader","kernelReshaped","adjustPads","batchSize","inputSpatialShape","spatialRank","outChannels","dilatedKernelShape","outputSpatialShape","conv2d","adjustedAttributes","getAdjustedConvAttributes","packMode","isPointwise","conv2DUnpackedPointwise","conv2DUnpacked","createMatmulProgramInfoLoader","xIm2Col","createIm2ColProgramInfoLoader","dotProductInputs","createDotProductProgramInfoLoader","PoolConvUtil","adjustPadsBasedOnAutoPad","newAttributes","activationAttributes","parseInternalActivationAttributes","blocksize","blocksizeSqr","transposePerm","mode","firstReshapeShape","firstReshapedTensor","transposeAttributes","perm","transposeOutput","secondReshapeShape","activationCacheKey","im2colShape","calculateIm2ColDims","kWidth","kHeight","im2colStrides","im2colWidth","im2colHeight","initValue","sharedDim","outputDims","flattenShape","func","activation","glslRelu","glslSigmoid","glslClip","clipMin","clipMax","activationName","MIN_CLIP","MAX_CLIP","createGatherProgramInfoLoader","gatherProgramMetadata","indexDataShape","normalizeAxis","indexCopyOps","NUMBER_TYPES","createGemmProgramInfoLoader","parseGemmAttributes","isOptionalC","transA","transB","beta","createGemmProgramInfo","aShape","bShape","GemmUtil","getShapeOfGemmResult","line","wshape","kernelSize","unrolled","row","col","im2colDims","createImageScalerProgramInfoLoader","bias","imageScalerProgramMetadata","createGetBiasMethod","numChannels","meanAndVariance","createMeanAndVarianceProgramInfoLoader","createComputeOutputProgramInfoLoader","meanAndVarianceProgramMetadata","xDims","channelSize","computeOutputProgramMetadata","meanAndVarianceShape","textureWidth","textureHeight","meanAndVarianceWidth","meanAndVarianceHeight","sharedDimIndex","coordsDataType","allGlChannels","getBiasForMatmulSnippet","getBiasForMatmul","getBcastedSamplerForMatmulSnippet","unpackedACoordsSnippet","unpackedBCoordsSnippet","inAShape","inBShape","inARank","inBRank","rankADiff","rankBDiff","broadcastADims","broadcastBDims","coordsASnippet","coordsBSnippet","swapDimSnippet","getSamplerAInLoopSnippet","getSamplerBInLoopSnippet","arank","brank","packProgramMetadata","unpackedReversed","inputRank","setup","reversedInputWH","outOfBoundsCondition","cond","getVecChannels","padProgramMetadata","validateInputsV2","createPadProgramInfo","validateInputsV11","attrubutes","generatePadAttributesFromInputs","integerData","padShape","getPadFunction","getPadConstant","getPadReflect","getPadEdge","createAveragePoolProgramInfo","ceilMode","countIncludePad","isGlobalOperator","getAdjustedPoolAttributesAndOutputShape","op2","generatePoolingCode","createMaxPoolProgramInfo","storageOrder","hasDilations","adjustPoolAttributes","computePoolOutputShape","globalMaxPoolAttributes","globalMaxPoolMetadata","inputDims","op1","kw","sw","pwStart","pwEnd","dimW","codeW","codeH","codeHEnd","kh","sh","phStart","phEnd","dimH","kernelStrides","stridesRank","padsRank","offsetToIndicesFunction","copyInputDims","copyArray","copyPads","copyKernelStrides","copyStrides","padCode","reduce","cur","array","arrayName","reduceOp","reduceProgramMetadata","createReduceProgramInfo","axes","keepDims","iRank","idxCopy","normalizeAxes","ops","reduceOps","idxZero","input3D","outputShape3D","inputShape3D","mainLoop","outputCoords","batch","isCheapReshape","calculateReshapedDims","resizeProgramMetadata","createPackedResizeProgramInfo","parseUpsampleAttributes","scales","prepareInputs","every","coordinateTransformMode","outputHeight","outputWidth","inputHeight","inputWidth","scalesHeight","scalesWidth","getSourceFracIndex","outputSizes","scalesTensor","scalesInputIdx","sizesInputIdx","parseScalesData","isResize","sizesTensor","parseScalesDataFromOutputSize","yDims","scalesValidation","sliceProgramMetadata","createSliceProgramInfo","starts","ends","normalizedAxes","sliceOps","validateInputsV10","generateSliceAttributesFromInputs","some","softmaxComputeMaxProgramMetadata","softmaxComputeScaleProgramMetadata","softmaxProgramMetadata","logicalRowCount","sizeToDimension","featureCount","sizeFromDimension","computeSoftmax","isTransposeRequired","transposedInputShape","transposeAttribute","transposedInputs","computeMaxProgramInfo","createComputeMaxProgramInfo","computeScaleProgramInfo","createComputScaleProgramInfo","softMaxProgramInfo","createSoftMaxProgramInfo","maxElementPerLogicalRow","normalizationPerLogicalRow","splitProgramMetadata","getProgramCount","createSplitProgramInfo","numOutputs","outputs","SplitUtil","splitShape","validateInputsV13","sumProgramMetadata","createSumProgramInfo","tileProgramMetadata","createTileProgramInfo","tileOps","transposeProgramMetadata","createTransposeProgramInfo","getAdjustedPerm","unpackedOutputShape","getOutputShape","getPermFunctionBody","sortBasedOnPerm","reverseFunc","downloadUint8AsFloat","glslAbs","glslBuiltinUnary","glslAcos","glslAsin","glslAtan","glslCeil","glslCos","glslElu","glslExp","glslFloor","glslIdentity","glslLeakyRelu","glslLog","glslNeg","glslNot","glslSin","glslSqrt","glslTan","glslTanh","createElementwiseProgramInfoLoader","generateClipAttributesFromInputs","unpackProgramMetadata","createUnpackProgramInfo","innerDims","sourceCoords","unsqueezeShape","upsampleProgramMetadata","createUpsampleProgramInfo","opset","extrapolationValue","needRoiInput","useExtrapolation","nearestMode","cubicCoefficientA","excludeOutside","useNearest2xOptimization","roiInputIdx","outputPitches","inputPitches","precalculatedPitches","getInputFloatFunction","profiler","textureLayoutStrategy","repo","attributesBound","buildArtifact","event","gl","useProgram","bindOutput","bindAttributes","attribLocations","bindUniforms","uniformLocations","draw","vertexShader","deleteShader","deleteProgram","preprocessor","GlslPreprocessor","fragScript","compile","getUniformLocations","getAttribLocations","fragShaderScript","vertexShaderScript","getVertexShaderSource","compileShader","VERTEX_SHADER","debug","fragShader","FRAGMENT_SHADER","createProgram","attachFramebuffer","positionHandle","textureCoordHandle","textureCoord","setVertexAttributes","textures","texturePosition","find","bindTexture","uniform1fv","uniform1f","uniform1iv","uniform1i","uniformHandle","bindTextureToUniform","getAttribLocation","getUniformLocation","reference","PreferLogicalStrategy","maxTextureSize","ProgramManager","TextureManager","reuseTextures","pack2unpackMap","unpack2packMap","createInferenceHandler","WebGLInferenceHandler","onGraphInitialized","initializers","getValues","addInitializer","opsets","op","resolveOperator","impl","opImpl","opInit","internalFormat","R32F","format","RED","RGBA32F","RGBA","textureSize","dataSize","dest","ALPHA","UNSIGNED_BYTE","_textureSize","isEmptyArray","parseAxisParam","assert","ax","isInt","sizeFromShape","sizeToSquarishShape","computeTextureWH","prefs","breakAxis","wsize","hsize","totalSize","wh","computeTexture","logShape","squeezeResult","dimsToSkip","inferredDims","reversedWH","config","pendingRead","inUseTextures","idleTextures","textureLookup","textureDataType","toEncoderType","encoder","getEncoder","updateTexture","toTextureData","allocateTexture","toTensorData","subscribers","createAndWaitForFence","tensorData","deleteTexture","_dataType","checkFn","delayFn","_counter","maxCounter","tryCount","tryFn","nextBackoff","toUpperCase","createNewWebGLContext","createElement","WebGLContext","webgl2","isContextLost","disable","DEPTH_TEST","STENCIL_TEST","BLEND","DITHER","POLYGON_OFFSET_FILL","SAMPLE_COVERAGE","enable","SCISSOR_TEST","CULL_FACE","cullFace","BACK","linearSearchLastTrue","frameBufferBound","itemsToPoll","getExtensions","vertexbuffer","createVertexbuffer","framebuffer","createFramebuffer","queryVitalParameters","createTexture","TEXTURE_2D","texParameteri","TEXTURE_MIN_FILTER","NEAREST","TEXTURE_MAG_FILTER","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","texImage2D","checkError","texSubImage2D","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","scissor","readPixels","isFramebufferReady","getActiveTexture","ACTIVE_TEXTURE","TEXTURE0","getTextureBinding","TEXTURE_BINDING_2D","getFramebufferBinding","FRAMEBUFFER_BINDING","vertexAttribPointer","enableVertexAttribArray","attachShader","linkProgram","shaderType","shader","createShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","activeTexture","drawArrays","TRIANGLE_STRIP","getError","label","DataEncoders","RedFloat32DataEncoder","isRenderFloat32Supported","RGBAFloatDataEncoder","textureHalfFloatExtension","HALF_FLOAT_OES","Uint8DataEncoder","unit","maxTextureImageUnits","disposed","deleteFramebuffer","bindBuffer","ARRAY_BUFFER","deleteBuffer","ELEMENT_ARRAY_BUFFER","createDefaultGeometry","geometry","bufferData","STATIC_DRAW","isFloatTextureAttachableToFrameBuffer","checkFloatTextureAttachableToFrameBuffer","checkRenderFloat32","checkFloat32Download","isBlendSupported","checkFloat32Blend","MAX_TEXTURE_SIZE","MAX_TEXTURE_IMAGE_UNITS","colorBufferFloatExtension","disjointTimerQueryWebgl2Extension","textureFloatExtension","frameBuffer","isComplete","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","fragmentShader","POINTS","NO_ERROR","beginTimer","gl2","ext","query","createQuery","beginQuery","TIME_ELAPSED_EXT","endTimer","endQuery","isTimerResultAvailable","available","disjoint","getQueryParameter","QUERY_RESULT_AVAILABLE","GPU_DISJOINT_EXT","getTimerResult","timeElapsed","QUERY_RESULT","deleteQuery","repeatedTry","fenceContext","createFence","pollFence","isFencePassed","fenceSync","SYNC_GPU_COMMANDS_COMPLETE","flush","clientWaitSync","ALREADY_SIGNALED","CONDITION_SATISFIED","addItemToPoll","pollItems","isDoneFn","resolveFn","KernelOp","getNodes","_ops","_starter","resolved","_values","getInputIndices","sessionHandler","modelInputs","graphInputs","sequence","graphValues","rear","thisOpIndex","thisOp","inputList","inputTensors","outputList","downstreamNodes","currentDownstreamNodeIndex","currentDownstreamNode","getOutputIndices","outputIndex","outputTensor","getData","Graph","graphProto","GraphImpl","Value","_from","_to","tensorValueTypeFromProto","Node","_nodeProto","tensorAttributesFromORTFormat","executeNode","graphInitializer","buildGraph","transformGraph","checkIsAcyclic","_allInputIndices","getInputNames","_allInputNames","_allOutputIndices","getOutputNames","_allOutputNames","_allData","_nodes","buildGraphFromOnnxFormat","buildGraphFromOrtFormat","dataIndices","nodesIndices","inputValueNames","currentIndex","tensorDimsFromProto","nodeProto","pick","dataIndex","inputsLength","inputName","nodeArgsLength","nodeArgs","valueType","TypeInfoValue","tensor_type","TensorTypeAndShape","dimLength","initializersLength","tensorDimsFromORTFormat","outputsLength","outputName","nodesLength","attributesLength","starters","nodesStack","nodesState","nodeIndex","outgoingEdgeIndex","downstreamNodeIndex","removeAllIdentityNodes","removeAllDropoutNodes","fuseConvActivationNodes","finalizeGraph","ind","deleteNode","inputValueIndex","outputValueIndex","nodesConsumingOutput","delIndex","replaceIndex","isActivation","child","SEVERITY_VALUE","info","fatal","LOGGER_PROVIDER_MAP","_severity","_content","_category","severity","content","category","color","LOGGER_DEFAULT_CONFIG","provider","minimalSeverity","logDateTime","logSourceLocation","LOGGER_CONFIG_MAP","logInternal","toISOString","previousConfig","Event","startTime","endCallback","timer","waitForQueryAndGetTime","EventRecord","endTime","maxNumberEvents","flushBatchSize","flushIntervalInMilliseconds","_started","_flushPointer","_maxNumberEvents","_flushBatchSize","_flushIntervalInMilliseconds","_timingEvents","_flushTime","stop","logOneEvent","isPromise","reason","eventRes","endSync","checkTimer","toFixed","currentTime","previousPointer","started","isOrtFormat","loadFromOnnxFormat","loadFromOrtFormat","modelProto","_opsets","_graph","ortModel","getRootAsInferenceSession","model","opsetImportLength","opsetId","INT_TYPES","FLOAT_TYPES","matchSelector","selector","endsWith","rangeStart","pair","rangeEnd","rules","rule","versionSelector","UNDEFINED","SPARSE_TENSOR","SPARSE_TENSORS","DimensionValueType","UNKNOWN","VALUE","PARAM","TensorDataType","UINT8","INT8","UINT16","INT16","INT32","INT64","BOOL","FLOAT16","DOUBLE","UINT32","UINT64","COMPLEX64","COMPLEX128","BFLOAT16","NodeType","Primitive","Fused","NONE","sequence_type","map_type","Shape","__init","builder","numElems","startShape","addDim","endShape","DimensionValue","optionalEncoding","valueOffset","denotationOffset","startDimension","addValue","addDenotation","endDimension","dimType","dimParamOffset","startDimensionValue","addDimType","addDimValue","addDimParam","endDimensionValue","shapeOffset","startTensorTypeAndShape","addElemType","addShape","endTensorTypeAndShape","MapType","keyType","TypeInfo","valueTypeOffset","startMapType","addKeyType","addValueType","endMapType","SequenceType","elemTypeOffset","startSequenceType","endSequenceType","EdgeEnd","srcArgIndex","dstArgIndex","node_index","src_arg_index","dst_arg_index","NodeEdge","inputEdges","inputEdgesLength","outputEdges","outputEdgesLength","inputEdgesOffset","outputEdgesOffset","startNodeEdge","addNodeIndex","addInputEdges","addOutputEdges","endNodeEdge","sinceVersion","executionProviderType","inputArgCounts","inputArgCountsLength","inputArgCountsArray","implicitInputs","implicitInputsLength","nameOffset","docStringOffset","domainOffset","opTypeOffset","executionProviderTypeOffset","inputsOffset","outputsOffset","attributesOffset","inputArgCountsOffset","implicitInputsOffset","startNode","addName","addDocString","addDomain","addSinceVersion","addIndex","addOpType","addType","addExecutionProviderType","addInputs","addOutputs","addAttributes","addInputArgCounts","addImplicitInputs","endNode","ValueInfo","typeOffset","startValueInfo","endValueInfo","startTypeInfo","endTypeInfo","OperatorSetId","startOperatorSetId","addVersion","endOperatorSetId","dimsLength","rawDataLength","rawDataArray","stringDataLength","dimsOffset","rawDataOffset","stringDataOffset","startTensor","addDims","addDataType","addRawData","addStringData","endTensor","SparseTensor","indices","valuesOffset","indicesOffset","startSparseTensor","addValues","addIndices","endSparseTensor","floatsLength","graphsLength","sOffset","tOffset","gOffset","floatsOffset","intsOffset","stringsOffset","tensorsOffset","graphsOffset","startAttribute","addF","addI","addS","addT","addG","addFloats","addInts","addStrings","addTensors","addGraphs","endAttribute","maxNodeIndex","nodeEdges","nodeEdgesLength","sparseInitializers","sparseInitializersLength","initializersOffset","nodeArgsOffset","nodesOffset","nodeEdgesOffset","sparseInitializersOffset","startGraph","addInitializers","addNodeArgs","addNodes","addMaxNodeIndex","addNodeEdges","addSparseInitializers","endGraph","Model","graphDocString","opsetImportOffset","producerNameOffset","producerVersionOffset","graphOffset","graphDocStringOffset","startModel","addIrVersion","addOpsetImport","addProducerName","addProducerVersion","addModelVersion","addGraph","addGraphDocString","endModel","KernelCreateInfos","nodeIndices","nodeIndicesLength","nodeIndicesArray","kernelDefHashes","kernelDefHashesLength","nodeIndicesOffset","kernelDefHashesOffset","startKernelCreateInfos","addNodeIndices","addKernelDefHashes","endKernelCreateInfos","SubGraphSessionState","graphId","sessionState","SessionState","graphIdOffset","sessionStateOffset","startSubGraphSessionState","addGraphId","addSessionState","endSubGraphSessionState","kernels","subGraphSessionStates","subGraphSessionStatesLength","kernelsOffset","subGraphSessionStatesOffset","startSessionState","addKernels","addSubGraphSessionStates","endSessionState","ortVersion","ortVersionOffset","modelOffset","startInferenceSession","addOrtVersion","addModel","endInferenceSession","_fetches","_options","inputMap","feed","outputMap","_initialized","Profiler","graphInputTypes","graphInputDims","_model","isView","modelProtoBlob","initializeOps","_executionPlan","ExecutionPlan","normalizeAndValidateInputs","outputTensors","execute","createOutput","modelInputNames","sortedInputs","sortedInputsIndex","validateInputTensorDims","modelInputIndices","modelValues","graphInput","validateInputTensorTypes","givenInputs","expectedType","actualType","noneDimSupported","expectedDims","actualDims","compareTensorDims","modelOutputNames","dataProvider","asyncDataProvider","validateDimsAndCalcSize","empty","dataviewConstructor","_strides","tensorProto","dataDest","dataSource","DataView","elementSize","sizeofProto","readProto","element","ortTensor","view","getUint8","getInt8","getUint16","getInt16","getFloat32","getInt32","getUint32","getFloat64","expectedDimensions","expr","msg","n1","n2","MatMulUtil","dimsA","dimsB","adims","bdims","isMatMul","crank","cdims","cShapeMatMul","calcMatMulShape","aLen","bLen","broadcastedIndices","originalShape","originalIndices","fillIndex","inplace","resultType","outputIndices","originalIndicesA","originalIndicesB","rest","valA","valB","isAScalar","isBScalar","finalShape","finalRank","targetIndex","sourceIndex","blockSize","leftShape","transLeft","rightShape","transRight","biasShape","kDim","isValidBroadcast","typeProto","getSizeFromDimensionRange","axisToIncrementOn","originalDims","shapeHints","nDims","unknownDimension","newTensorSize","oldTensorSize","shape1","shape2","total","right","inSqueezeList","inputDimsIterator","determineSplit","numElementsAlongAxis","ReduceUtil","keepdims","calcReduceShape","inputStrides","indicesY","calcReduceByAxis","curAxisInd","step","adjustPadAndReturnShape","computeShapeHelper","filterDims","inSize","dilation","kernel","padHeadIndex","padTailIndex","dkernel","padNeeded","iterateExtraOptions","prefix","seen","entries","isProxy","proxyWorker","initWasmCallbacks","initOrtCallbacks","createSessionCallbacks","releaseSessionCallbacks","runCallbacks","endProfilingCallbacks","ensureWorker","onProxyWorkerMessage","ev","scriptSrc","wasmPaths","in","initializeWebAssembly","initOrt","loggingLevel","core","createSession","releaseSession","sessionId","inputIndices","extractTransferableBuffers","setRunOptions","getInstance","runOptionsHandle","allocs","runOptions","logSeverityLevel","logVerbosityLevel","tagDataOffset","allocWasmString","extra","WeakSet","keyDataOffset","valueDataOffset","ortInit","inputArray","kvp","setSessionOptions","sessionOptionsHandle","sessionOptions","use_ort_model_bytes_directly","graphOptimizationLevel","enableCpuMemArena","enableMemPattern","executionMode","logIdDataOffset","logId","enableProfiling","dataLength","dataOffset","errorCode","activeSessions","modelDataOffset","sessionHandle","outputCount","inputNamesUTF8Encoded","outputNamesUTF8Encoded","tensorDataTypeStringToEnum","tensorDataTypeEnumToString","numericTensorTypeToTypedArray","runOptionsAllocs","inputValues","inputAllocs","dataByteLength","dimIndex","beforeRunStack","inputValuesOffset","inputNamesOffset","outputValuesOffset","outputNamesOffset","inputValuesIndex","inputNamesIndex","outputValuesIndex","outputNamesIndex","beforeGetTensorDataStack","tensorDataOffset","tensorDataIndex","maxBytesToRead","profileFileName","buffers","ortWasmFactoryThreaded","getWasmFileName","useSimd","useThreads","timeout","MessageChannel","port1","validate","wasmPrefixOverride","wasmFileName","wasmOverrideFileName","wasmPathOverride","isTimeout","tasks","fileName","scriptDirectory","Blob","URL","createObjectURL","path","scriptSourceCode","what","race","terminateAllThreads","Worker_fn","workerConstructor","workerOptions","url","globalScope","blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","append","getBlob","webkitURL","objectURL","revokeObjectURL","encodeURIComponent","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","definition","enumerable","globalThis","Function","Symbol","toStringTag","__webpack_exports__","require","delay","naturalWidth","naturalHeight","ImageData","putImageData","toDataURL","coerceAtMost","drawImage","img","getImageData","Uint8ClampedArray","intOut","listOf","parent","props","children","column","return","character","characters","CHARSET","COMMENT","COUNTER_STYLE","DECLARATION","DOCUMENT","FONT_FACE","FONT_FEATURE_VALUES","IMPORT","KEYFRAMES","MEDIA","MOZ","MS","NAMESPACE","PAGE","RULESET","SUPPORTS","VIEWPORT","WEBKIT","caret","char","charat","combine","comment","commenter","dealloc","declaration","delimit","delimiter","identifier","indexof","middleware","namespace","peek","prefixer","ruleset","rulesheet","serialize","sizeof","strlen","token","tokenize","tokenizer","whitespace"],"sourceRoot":""}