viztracer 1.1.0__cp314-cp314t-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of viztracer might be problematic. Click here for more details.
- viztracer/__init__.py +19 -0
- viztracer/__main__.py +8 -0
- viztracer/attach.py +67 -0
- viztracer/attach_process/LICENSE +203 -0
- viztracer/attach_process/__init__.py +0 -0
- viztracer/attach_process/add_code_to_python_process.py +582 -0
- viztracer/attach_process/attach_x86.dll +0 -0
- viztracer/attach_process/inject_dll_amd64.exe +0 -0
- viztracer/attach_process/linux_and_mac/lldb_prepare.py +54 -0
- viztracer/attach_process/run_code_on_dllmain_amd64.dll +0 -0
- viztracer/attach_process/run_code_on_dllmain_x86.dll +0 -0
- viztracer/cellmagic.py +70 -0
- viztracer/code_monkey.py +353 -0
- viztracer/decorator.py +164 -0
- viztracer/event_base.py +81 -0
- viztracer/functree.py +135 -0
- viztracer/html/flamegraph.html +34 -0
- viztracer/html/trace_viewer_embedder.html +203 -0
- viztracer/html/trace_viewer_full.html +10207 -0
- viztracer/main.py +699 -0
- viztracer/modules/eventnode.c +172 -0
- viztracer/modules/eventnode.h +73 -0
- viztracer/modules/pythoncapi_compat.h +1726 -0
- viztracer/modules/quicktime.c +177 -0
- viztracer/modules/quicktime.h +104 -0
- viztracer/modules/snaptrace.c +2205 -0
- viztracer/modules/snaptrace.h +134 -0
- viztracer/modules/snaptrace_member.c +483 -0
- viztracer/modules/util.c +45 -0
- viztracer/modules/util.h +22 -0
- viztracer/modules/vcompressor/vc_dump.c +1131 -0
- viztracer/modules/vcompressor/vc_dump.h +49 -0
- viztracer/modules/vcompressor/vcompressor.c +396 -0
- viztracer/modules/vcompressor/vcompressor.h +15 -0
- viztracer/patch.py +307 -0
- viztracer/report_builder.py +311 -0
- viztracer/snaptrace.cp314t-win_amd64.pyd +0 -0
- viztracer/snaptrace.pyi +77 -0
- viztracer/util.py +196 -0
- viztracer/vcompressor.cp314t-win_amd64.pyd +0 -0
- viztracer/vcompressor.pyi +10 -0
- viztracer/viewer.py +528 -0
- viztracer/vizcounter.py +20 -0
- viztracer/vizevent.py +31 -0
- viztracer/vizlogging.py +20 -0
- viztracer/vizobject.py +28 -0
- viztracer/vizplugin.py +143 -0
- viztracer/viztracer.py +472 -0
- viztracer/web_dist/LICENSE +189 -0
- viztracer/web_dist/index.html +127 -0
- viztracer/web_dist/service_worker.js +279 -0
- viztracer/web_dist/trace_processor +300 -0
- viztracer/web_dist/v52.0-6b9586def/assets/MaterialSymbolsOutlined.woff2 +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/Roboto-100.woff2 +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/Roboto-300.woff2 +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/Roboto-400.woff2 +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/Roboto-500.woff2 +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/RobotoCondensed-Light.woff2 +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/RobotoCondensed-Regular.woff2 +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/RobotoMono-Regular.woff2 +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/brand.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/catapult_trace_viewer.html +3946 -0
- viztracer/web_dist/v52.0-6b9586def/assets/catapult_trace_viewer.js +7539 -0
- viztracer/web_dist/v52.0-6b9586def/assets/favicon.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/logo-128.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/logo-3d.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_atrace.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_battery_counters.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_board_voltage.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_cpu_coarse.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_cpu_fine.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_cpu_freq.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_cpu_voltage.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_frame_timeline.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_ftrace.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_gpu_mem_total.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_java_heap_dump.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_lmk.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_logcat.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_long_trace.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_mem_hifreq.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_meminfo.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_native_heap_profiler.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_one_shot.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_profiling.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_ps_stats.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_ring_buf.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_syscalls.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/rec_vmstat.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/scheduling_latency.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/assets/vscode-icon.png +0 -0
- viztracer/web_dist/v52.0-6b9586def/engine_bundle.js +3 -0
- viztracer/web_dist/v52.0-6b9586def/frontend_bundle.js +5495 -0
- viztracer/web_dist/v52.0-6b9586def/index.html +127 -0
- viztracer/web_dist/v52.0-6b9586def/manifest.json +52 -0
- viztracer/web_dist/v52.0-6b9586def/perfetto.css +5737 -0
- viztracer/web_dist/v52.0-6b9586def/stdlib_docs.json +1 -0
- viztracer/web_dist/v52.0-6b9586def/trace_config_utils.wasm +0 -0
- viztracer/web_dist/v52.0-6b9586def/trace_processor.wasm +0 -0
- viztracer/web_dist/v52.0-6b9586def/trace_processor_memory64.wasm +0 -0
- viztracer/web_dist/v52.0-6b9586def/traceconv.wasm +0 -0
- viztracer/web_dist/v52.0-6b9586def/traceconv_bundle.js +2 -0
- viztracer-1.1.0.dist-info/METADATA +316 -0
- viztracer-1.1.0.dist-info/RECORD +109 -0
- viztracer-1.1.0.dist-info/WHEEL +5 -0
- viztracer-1.1.0.dist-info/entry_points.txt +3 -0
- viztracer-1.1.0.dist-info/licenses/LICENSE +222 -0
- viztracer-1.1.0.dist-info/licenses/NOTICE.txt +27 -0
- viztracer-1.1.0.dist-info/top_level.txt +1 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var traceconv=function(){"use strict";function L(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function x(t){var r,n;return t.__esModule?t:("function"==typeof(r=t.default)?(n=function e(){return this instanceof e?Reflect.construct(r,arguments,this.constructor):r.apply(this,arguments)}).prototype=r.prototype:n={},Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(t).forEach(function(e){var r=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(n,e,r.get?r:{enumerable:!0,get:function(){return t[e]}})}),n)}var t={},n=function(e,r){return(n=Object.setPrototypeOf||({__proto__:[]}instanceof Array?function(e,r){e.__proto__=r}:function(e,r){for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t])}))(e,r)};function e(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function t(){this.constructor=e}n(e,r),e.prototype=null===r?Object.create(r):(t.prototype=r.prototype,new t)}var r=function(){return(r=Object.assign||function(e){for(var r,t=1,n=arguments.length;t<n;t++)for(var o in r=arguments[t])Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o]);return e}).apply(this,arguments)};function o(e,r){var t={};for(o in e)Object.prototype.hasOwnProperty.call(e,o)&&r.indexOf(o)<0&&(t[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var n=0,o=Object.getOwnPropertySymbols(e);n<o.length;n++)r.indexOf(o[n])<0&&Object.prototype.propertyIsEnumerable.call(e,o[n])&&(t[o[n]]=e[o[n]]);return t}function a(e,r,t,n){var o,a=arguments.length,i=a<3?r:null===n?n=Object.getOwnPropertyDescriptor(r,t):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,r,t,n);else for(var s=e.length-1;0<=s;s--)(o=e[s])&&(i=(a<3?o(i):3<a?o(r,t,i):o(r,t))||i);return 3<a&&i&&Object.defineProperty(r,t,i),i}function i(t,n){return function(e,r){n(e,r,t)}}function s(e,r){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,r)}function l(e,i,s,l){return new(s=s||Promise)(function(t,r){function n(e){try{a(l.next(e))}catch(e){r(e)}}function o(e){try{a(l.throw(e))}catch(e){r(e)}}function a(e){var r;e.done?t(e.value):((r=e.value)instanceof s?r:new s(function(e){e(r)})).then(n,o)}a((l=l.apply(e,i||[])).next())})}function c(n,o){var a,i,s,l={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]},c={next:e(0),throw:e(1),return:e(2)};return"function"==typeof Symbol&&(c[Symbol.iterator]=function(){return this}),c;function e(t){return function(e){var r=[t,e];if(a)throw new TypeError("Generator is already executing.");for(;l=c&&r[c=0]?0:l;)try{if(a=1,i&&(s=2&r[0]?i.return:r[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,r[1])).done)return s;switch(i=0,(r=s?[2&r[0],s.value]:r)[0]){case 0:case 1:s=r;break;case 4:return l.label++,{value:r[1],done:!1};case 5:l.label++,i=r[1],r=[0];continue;case 7:r=l.ops.pop(),l.trys.pop();continue;default:if(!(s=0<(s=l.trys).length&&s[s.length-1])&&(6===r[0]||2===r[0])){l=0;continue}if(3===r[0]&&(!s||r[1]>s[0]&&r[1]<s[3]))l.label=r[1];else if(6===r[0]&&l.label<s[1])l.label=s[1],s=r;else{if(!(s&&l.label<s[2])){s[2]&&l.ops.pop(),l.trys.pop();continue}l.label=s[2],l.ops.push(r)}}r=o.call(n,l)}catch(e){r=[6,e],i=0}finally{a=s=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}}}var u=Object.create?function(e,r,t,n){void 0===n&&(n=t);var o=Object.getOwnPropertyDescriptor(r,t);o&&("get"in o?r.__esModule:!o.writable&&!o.configurable)||(o={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,n,o)}:function(e,r,t,n){e[n=void 0===n?t:n]=r[t]};function d(e,r){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(r,t)||u(r,e,t)}function f(e){var r="function"==typeof Symbol&&Symbol.iterator,t=r&&e[r],n=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return{value:(e=e&&n>=e.length?void 0:e)&&e[n++],done:!e}}};throw new TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.")}function m(e,r){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var n,o,a=t.call(e),i=[];try{for(;(void 0===r||0<r--)&&!(n=a.next()).done;)i.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(t=a.return)&&t.call(a)}finally{if(o)throw o.error}}return i}function p(){for(var e=[],r=0;r<arguments.length;r++)e=e.concat(m(arguments[r]));return e}function h(){for(var e=0,r=0,t=arguments.length;r<t;r++)e+=arguments[r].length;for(var n=Array(e),o=0,r=0;r<t;r++)for(var a=arguments[r],i=0,s=a.length;i<s;i++,o++)n[o]=a[i];return n}function _(e,r,t){if(t||2===arguments.length)for(var n,o=0,a=r.length;o<a;o++)!n&&o in r||((n=n||Array.prototype.slice.call(r,0,o))[o]=r[o]);return e.concat(n||Array.prototype.slice.call(r))}function w(e){return this instanceof w?(this.v=e,this):new w(e)}function E(e,r,t){var o,a,i;if(Symbol.asyncIterator)return o=t.apply(e,r||[]),a=[],i={},n("next"),n("throw"),n("return",function(r){return function(e){return Promise.resolve(e).then(r,c)}}),i[Symbol.asyncIterator]=function(){return this},i;throw new TypeError("Symbol.asyncIterator is not defined.");function n(n,e){o[n]&&(i[n]=function(t){return new Promise(function(e,r){1<a.push([n,t,e,r])||s(n,t)})},e)&&(i[n]=e(i[n]))}function s(e,r){try{(t=o[e](r)).value instanceof w?Promise.resolve(t.value.v).then(l,c):u(a[0][2],t)}catch(e){u(a[0][3],e)}var t}function l(e){s("next",e)}function c(e){s("throw",e)}function u(e,r){e(r),a.shift(),a.length&&s(a[0][0],a[0][1])}}function y(n){var o,e={};return r("next"),r("throw",function(e){throw e}),r("return"),e[Symbol.iterator]=function(){return this},e;function r(r,t){e[r]=n[r]?function(e){return(o=!o)?{value:w(n[r](e)),done:!1}:t?t(e):e}:t}}function g(i){var e,r;if(Symbol.asyncIterator)return(e=i[Symbol.asyncIterator])?e.call(i):(i=f(i),r={},t("next"),t("throw"),t("return"),r[Symbol.asyncIterator]=function(){return this},r);throw new TypeError("Symbol.asyncIterator is not defined.");function t(a){r[a]=i[a]&&function(o){return new Promise(function(e,r){var t,n;o=i[a](o),t=e,e=r,n=o.done,r=o.value,Promise.resolve(r).then(function(e){t({value:e,done:n})},e)})}}}function v(e,r){return Object.defineProperty?Object.defineProperty(e,"raw",{value:r}):e.raw=r,e}var j=Object.create?function(e,r){Object.defineProperty(e,"default",{enumerable:!0,value:r})}:function(e,r){e.default=r};function S(e){if(e&&e.__esModule)return e;var r={};if(null!=e)for(var t in e)"default"!==t&&Object.prototype.hasOwnProperty.call(e,t)&&u(r,e,t);return j(r,e),r}function b(e){return e&&e.__esModule?e:{default:e}}function F(e,r,t,n){if("a"===t&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof r?e===r&&n:r.has(e))return"m"===t?n:"a"===t?n.call(e):n?n.value:r.get(e);throw new TypeError("Cannot read private member from an object whose class did not declare it")}function k(e,r,t,n,o){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof r?e===r&&o:r.has(e))return"a"===n?o.call(e,t):o?o.value=t:r.set(e,t),t;throw new TypeError("Cannot write private member to an object whose class did not declare it")}function T(e,r){if(null===r||"object"!=typeof r&&"function"!=typeof r)throw new TypeError("Cannot use 'in' operator on non-object");return"function"==typeof e?r===e:e.has(r)}function O(e,r,t){if(null!=r){if("object"!=typeof r&&"function"!=typeof r)throw new TypeError("Object expected.");var n,o;if(t){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=r[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=r[Symbol.dispose],t&&(o=n)}if("function"!=typeof n)throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:r,dispose:n,async:t})}else t&&e.stack.push({async:!0});return r}var U="function"==typeof SuppressedError?SuppressedError:function(e,r,t){t=new Error(t);return t.name="SuppressedError",t.error=e,t.suppressed=r,t};function A(n){function o(e){n.error=n.hasError?new U(e,n.error,"An error was suppressed during disposal."):e,n.hasError=!0}return function r(){for(;n.stack.length;){var e=n.stack.pop();try{var t=e.dispose&&e.dispose.call(e.value);if(e.async)return Promise.resolve(t).then(r,function(e){return o(e),r()})}catch(e){o(e)}}if(n.hasError)throw n.error}()}var D,z={__extends:e,__assign:r,__rest:o,__decorate:a,__param:i,__metadata:s,__awaiter:l,__generator:c,__createBinding:u,__exportStar:d,__values:f,__read:m,__spread:p,__spreadArrays:h,__spreadArray:_,__await:w,__asyncGenerator:E,__asyncDelegator:y,__asyncValues:g,__makeTemplateObject:v,__importStar:S,__importDefault:b,__classPrivateFieldGet:F,__classPrivateFieldSet:k,__classPrivateFieldIn:T,__addDisposableResource:O,__disposeResources:A},B=x(Object.freeze({__proto__:null,__extends:e,get __assign(){return r},__rest:o,__decorate:a,__param:i,__esDecorate:function(e,r,t,n,o,a){function i(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var s,l=n.kind,c="getter"===l?"get":"setter"===l?"set":"value",e=!r&&e?n.static?e:e.prototype:null,u=r||(e?Object.getOwnPropertyDescriptor(e,n.name):{}),d=!1,f=t.length-1;0<=f;f--){var m,p={};for(m in n)p[m]="access"===m?{}:n[m];for(m in n.access)p.access[m]=n.access[m];p.addInitializer=function(e){if(d)throw new TypeError("Cannot add initializers after decoration has completed");a.push(i(e||null))};var h=(0,t[f])("accessor"===l?{get:u.get,set:u.set}:u[c],p);if("accessor"===l){if(void 0!==h){if(null===h||"object"!=typeof h)throw new TypeError("Object expected");(s=i(h.get))&&(u.get=s),(s=i(h.set))&&(u.set=s),(s=i(h.init))&&o.unshift(s)}}else(s=i(h))&&("field"===l?o.unshift(s):u[c]=s)}e&&Object.defineProperty(e,n.name,u),d=!0},__runInitializers:function(e,r,t){for(var n=2<arguments.length,o=0;o<r.length;o++)t=n?r[o].call(e,t):r[o].call(e);return n?t:void 0},__propKey:function(e){return"symbol"==typeof e?e:"".concat(e)},__setFunctionName:function(e,r,t){return"symbol"==typeof r&&(r=r.description?"[".concat(r.description,"]"):""),Object.defineProperty(e,"name",{configurable:!0,value:t?"".concat(t," ",r):r})},__metadata:s,__awaiter:l,__generator:c,__createBinding:u,__exportStar:d,__values:f,__read:m,__spread:p,__spreadArrays:h,__spreadArray:_,__await:w,__asyncGenerator:E,__asyncDelegator:y,__asyncValues:g,__makeTemplateObject:v,__importStar:S,__importDefault:b,__classPrivateFieldGet:F,__classPrivateFieldSet:k,__classPrivateFieldIn:T,__addDisposableResource:O,__disposeResources:A,default:z})),P={};function G(){return D||(D=1,Object.defineProperty(P,"__esModule",{value:!0}),P.defer=function(){let t=null,n=null;var e=new Promise((e,r)=>[t,n]=[e,r]);return Object.assign(e,{resolve:t,reject:n})}),P}var M,R={},N={};var H,W,I={};function $(){return H||(H=1,Object.defineProperty(I,"__esModule",{value:!0}),I.exists=function(e){return null!=e},I.escapeCSSSelector=function(e){return e.replace(/([!"#$%&'()*+,.\/:;<=>?@[\\\]^`{|}~])/g,"\\$1")},I.getOrCreate=function(e,r,t){var n=e.get(r);return void 0===n&&(n=t(),e.set(r,n)),n},I.createProxy=function(e,o){return new Proxy(e,{get:(e,r,t)=>{var n=o[r];return void 0!==n?"function"==typeof n?n.bind(o):n:"function"==typeof(n=Reflect.get(e,r,t))?n.bind(e):n}})}),I}function V(){if(!W){W=1,Object.defineProperty(R,"__esModule",{value:!0}),R.assertExists=function(e,r){if(null!=e)return e;throw new Error(r??"Value doesn't exist")},R.assertDefined=function(e){if(void 0===e)throw new Error("Value is undefined");return e},R.assertIsInstance=function(e,r,t){return n(e instanceof r,t??"Value is not an instance of "+r.name),e},R.assertTrue=n,R.assertFalse=function(e,r){n(!e,r)},R.assertUnreachable=function(e,r){throw new Error(r??"This code should not be reachable "+e)},R.addErrorHandler=function(e){f.includes(e)||f.push(e)},R.reportError=function(r){let t=void 0,n="",e;var o=[],a=location.protocol+"//"+location.host;r instanceof ErrorEvent?(e="ERROR",t=null===r.error||void 0===r.error?(s=(""+r.message).split("\n"),n=s[0],{stack:s.slice(1).join("\n")}):(n=""+r.error,r.error)):r instanceof PromiseRejectionEvent?(e="PROMISE_REJ",n=""+r.reason,t=r.reason):(e="OTHER",n=""+r);if(n=(n=(n=n.replace(/^Uncaught Error:/,"")).replace(/^Error:/,"")).trim(),void 0!==t&&null!==t){var i,s=t.stack;let e=void 0!==s?""+s:"";for(i of(e=e.replaceAll(/\r/g,"")).split("\n"))if(!n.includes(i)){var l=(i=(i=i.replace(/^\s*at\s*/,"")).replace(/\s*\(([^)]+)\)$/,"@$1")).lastIndexOf("@");let e="",r="";0<=l?(r=i.substring(l+1),e=i.substring(0,l)):r=i,r.includes(a)&&(r=(r=r.replace(a,"")).replace(`/${u.VERSION}/`,"")),o.push({name:e,location:r})}r=o.find(e=>e.name.includes("perfetto::"))?.name;n.includes("RuntimeError")&&(0,d.exists)(r)&&(n+=" @ "+r.trim())}for(const c of f)c({errType:e,message:n,stack:o})};M||(M=1,Object.defineProperty(N,"__esModule",{value:!0}),N.SCM_REVISION=N.VERSION=void 0,N.VERSION="v52.0-6b9586def",N.SCM_REVISION="6b9586defccdef92d77b32e1338db72c8e5d5e7c");const u=N,d=$(),f=[];function n(e,r){if(!e)throw new Error(r??"Failed assertion")}}return R}var Y,K,C={exports:{}};function X(){function e(L={}){var x,j,U,z,i=L,e=(new Promise((e,r)=>{x=e,j=r}),"object"==typeof window),u="undefined"!=typeof WorkerGlobalScope,r="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node&&"renderer"!=process.type,B=!e&&!r&&!u,G=[],H="./this.program",W=(e,r)=>{throw r},$=(u&&(Fr=self.location.href),"");if(B){if("object"==typeof process||"object"==typeof window||"undefined"!=typeof WorkerGlobalScope)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)")}else{if(!e&&!u)throw new Error("environment detection error");try{$=new URL(".",Fr).href}catch{}if("object"!=typeof window&&"undefined"==typeof WorkerGlobalScope)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");u&&(z=e=>{var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),U=async e=>{_(!q(e),"readAsync does not work with file:// URLs");e=await fetch(e,{credentials:"same-origin"});if(e.ok)return e.arrayBuffer();throw new Error(e.status+" : "+e.url)}}var V,Y,K,m,s,p,h,d,a,f=console.log.bind(console),l=console.error.bind(console),c="WORKERFS is no longer included by default; build with -lworkerfs.js",n=(_(!r,"node environment detected but not enabled at build time. Add `node` to `-sENVIRONMENT` to enable."),_(!B,"shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable."),"object"!=typeof WebAssembly&&l("no native wasm support detected"),!1);function _(e,r){e||y("Assertion failed"+(r?": "+r:""))}var X=!1,q=e=>e.startsWith("file://");function o(){var e,r,t;n||(0==(e=hr())&&(e+=4),r=d[e>>>2>>>0],t=d[e+4>>>2>>>0],34821223==r&&2310721022==t||y(`Stack overflow! Stack cookie has been overwritten at ${pe(e)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${pe(t)} `+pe(r)),1668509029!=d[0]&&y("Runtime error: The application has corrupted its heap memory area (address zero)!"))}var e=new Int16Array(1),r=new Int8Array(e.buffer);if(e[0]=25459,115!==r[0]||99!==r[1])throw"Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)";function J(e){Object.getOwnPropertyDescriptor(i,e)||Object.defineProperty(i,e,{configurable:!0,set(){y(`Attempt to set \`Module.${e}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}function Z(t){Object.getOwnPropertyDescriptor(i,t)||Object.defineProperty(i,t,{configurable:!0,get(){var e,r=`'${t}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;"FS_createPath"!==(e=t)&&"FS_createDataFile"!==e&&"FS_createPreloadedFile"!==e&&"FS_unlink"!==e&&"addRunDependency"!==e&&"FS_createLazyFile"!==e&&"FS_createDevice"!==e&&"removeRunDependency"!==e||(r+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),y(r)}})}function Q(){var e=Y.buffer;m=new Int8Array(e),p=new Int16Array(e),i.HEAPU8=s=new Uint8Array(e),h=new Int32Array(e),d=new Uint32Array(e),a=new BigInt64Array(e),new BigUint64Array(e)}_("undefined"!=typeof Int32Array&&"undefined"!=typeof Float64Array&&null!=Int32Array.prototype.subarray&&null!=Int32Array.prototype.set,"JS engine does not provide full typed array support");var ee,w=0,re=null,E={},t=null;function te(e){w++,i.monitorRunDependencies?.(w),e?(_(!E[e]),E[e]=1,null===t&&"undefined"!=typeof setInterval&&(t=setInterval(()=>{if(n)clearInterval(t),t=null;else{var e,r=!1;for(e in E)r||(r=!0,l("still waiting on run dependencies:")),l("dependency: "+e);r&&l("(end of list)")}},1e4))):l("warning: run dependency added without ID")}function ne(e){w--,i.monitorRunDependencies?.(w),e?(_(E[e]),delete E[e]):l("warning: run dependency removed without ID"),0==w&&(null!==t&&(clearInterval(t),t=null),re)&&(e=re,re=null,e())}function y(e){i.onAbort?.(e),l(e="Aborted("+e+")"),n=!0;e=new WebAssembly.RuntimeError(e);throw j(e),e}function oe(t,n){return(...e)=>{_(X,`native function \`${t}\` called before runtime initialization`);var r=C[t];return _(r,`exported native function \`${t}\` not found`),_(e.length<=n,`native function \`${t}\` called with ${e.length} args but expects `+n),r(...e)}}function ae(){return e="traceconv.wasm",i.locateFile?i.locateFile(e,$):$+e;var e}function ie(e,r){e=function(e){if(e==ee&&V)return new Uint8Array(V);if(z)return z(e);throw'sync fetching of the wasm failed: you can preload it to Module["wasmBinary"] manually, or emcc.py will do that for you when generating HTML (but not JS)'}(e),e=new WebAssembly.Module(e);return[new WebAssembly.Instance(e,r),e]}class se{name="ExitStatus";constructor(e){this.message=`Program terminated with exit(${e})`,this.status=e}}var g,v,le=e=>{for(;0<e.length;)e.shift()(i)},ce=[],ue=e=>ce.push(e),de=[],fe=e=>de.push(e),me=!0,pe=e=>(_("number"==typeof e),"0x"+e.toString(16).padStart(8,"0")),he=e=>Er(e),_e=()=>gr(),S=e=>{S.shown||={},S.shown[e]||(S.shown[e]=1,l(e))},b=e=>e<-9007199254740992||9007199254740992<e?NaN:Number(e),we="undefined"!=typeof TextDecoder?new TextDecoder:void 0,F=(e,r=0,t=NaN)=>{for(var n=(r>>>=0)+t,o=r;e[o]&&!(n<=o);)++o;if(16<o-r&&e.buffer&&we)return we.decode(e.subarray(r,o));for(var a="";r<o;){var i,s,l=e[r++];128&l?(s=63&e[r++],192==(224&l)?a+=String.fromCharCode((31&l)<<6|s):(i=63&e[r++],(l=224==(240&l)?(15&l)<<12|s<<6|i:(240!=(248&l)&&S("Invalid UTF-8 leading byte "+pe(l)+" encountered when deserializing a UTF-8 string in wasm memory to a JS string!"),(7&l)<<18|s<<12|i<<6|63&e[r++]))<65536?a+=String.fromCharCode(l):(s=l-65536,a+=String.fromCharCode(55296|s>>10,56320|1023&s)))):a+=String.fromCharCode(l)}return a},k=(e,r)=>(_("number"==typeof e,`UTF8ToString expects a number (got ${typeof e})`),(e>>>=0)?F(s,e,r):""),T={isAbs:e=>"/"===e.charAt(0),splitPath:e=>{return/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1)},normalizeArray:(e,r)=>{for(var t=0,n=e.length-1;0<=n;n--){var o=e[n];"."===o?e.splice(n,1):".."===o?(e.splice(n,1),t++):t&&(e.splice(n,1),t--)}if(r)for(;t;t--)e.unshift("..");return e},normalize:e=>{var r=T.isAbs(e),t="/"===e.slice(-1);return(e=(e=T.normalizeArray(e.split("/").filter(e=>!!e),!r).join("/"))||r?e:".")&&t&&(e+="/"),(r?"/":"")+e},dirname:e=>{var e=T.splitPath(e),r=e[0],e=e[1];return r||e?r+(e=e&&e.slice(0,-1)):"."},basename:e=>e&&e.match(/([^\/]+|\/)\/*$/)[1],join:(...e)=>T.normalize(e.join("/")),join2:(e,r)=>T.normalize(e+"/"+r)},Ee=()=>e=>crypto.getRandomValues(e),ye=e=>{(ye=Ee())(e)},O={resolve:(...e)=>{for(var r="",t=!1,n=e.length-1;-1<=n&&!t;n--){var o=0<=n?e[n]:M.cwd();if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");if(!o)return"";r=o+"/"+r,t=T.isAbs(o)}return(t?"/":"")+(r=T.normalizeArray(r.split("/").filter(e=>!!e),!t).join("/"))||"."},relative:(e,r)=>{function t(e){for(var r=0;r<e.length&&""===e[r];r++);for(var t=e.length-1;0<=t&&""===e[t];t--);return t<r?[]:e.slice(r,t-r+1)}e=O.resolve(e).slice(1),r=O.resolve(r).slice(1);for(var n=t(e.split("/")),o=t(r.split("/")),a=Math.min(n.length,o.length),i=a,s=0;s<a;s++)if(n[s]!==o[s]){i=s;break}for(var l=[],s=i;s<n.length;s++)l.push("..");return(l=l.concat(o.slice(i))).join("/")}},ge=[],A=e=>{for(var r=0,t=0;t<e.length;++t){var n=e.charCodeAt(t);n<=127?r++:n<=2047?r+=2:55296<=n&&n<=57343?(r+=4,++t):r+=3}return r},ve=(e,r,t,n)=>{if(t>>>=0,_("string"==typeof e,`stringToUTF8Array expects a string (got ${typeof e})`),!(0<n))return 0;for(var o=t,a=t+n-1,i=0;i<e.length;++i){var s=e.charCodeAt(i);if((s=55296<=s&&s<=57343?65536+((1023&s)<<10)|1023&e.charCodeAt(++i):s)<=127){if(a<=t)break;r[t++>>>0]=s}else{if(s<=2047){if(a<=t+1)break;r[t++>>>0]=192|s>>6}else{if(s<=65535){if(a<=t+2)break;r[t++>>>0]=224|s>>12}else{if(a<=t+3)break;1114111<s&&S("Invalid Unicode code point "+pe(s)+" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF)."),r[t++>>>0]=240|s>>18,r[t++>>>0]=128|s>>12&63}r[t++>>>0]=128|s>>6&63}r[t++>>>0]=128|63&s}}return r[t>>>0]=0,t-o},Se=(e,r,t)=>{t=0<t?t:A(e)+1,t=new Array(t),e=ve(e,t,0,t.length);return r&&(t.length=e),t},D={ttys:[],init(){},shutdown(){},register(e,r){D.ttys[e]={input:[],output:[],ops:r},M.registerDevice(e,D.stream_ops)},stream_ops:{open(e){var r=D.ttys[e.node.rdev];if(!r)throw new M.ErrnoError(43);e.tty=r,e.seekable=!1},close(e){e.tty.ops.fsync(e.tty)},fsync(e){e.tty.ops.fsync(e.tty)},read(e,r,t,n,o){if(!e.tty||!e.tty.ops.get_char)throw new M.ErrnoError(60);for(var a,i=0,s=0;s<n;s++){try{a=e.tty.ops.get_char(e.tty)}catch(e){throw new M.ErrnoError(29)}if(void 0===a&&0===i)throw new M.ErrnoError(6);if(null==a)break;i++,r[t+s]=a}return i&&(e.node.atime=Date.now()),i},write(e,r,t,n,o){if(!e.tty||!e.tty.ops.put_char)throw new M.ErrnoError(60);try{for(var a=0;a<n;a++)e.tty.ops.put_char(e.tty,r[t+a])}catch(e){throw new M.ErrnoError(29)}return n&&(e.node.mtime=e.node.ctime=Date.now()),a}},default_tty_ops:{get_char(e){if(!ge.length){var r=null;if("undefined"!=typeof window&&"function"==typeof window.prompt&&null!==(r=window.prompt("Input: "))&&(r+="\n"),!r)return null;ge=Se(r,!0)}return ge.shift()},put_char(e,r){null===r||10===r?(f(F(e.output)),e.output=[]):0!=r&&e.output.push(r)},fsync(e){0<e.output?.length&&(f(F(e.output)),e.output=[])},ioctl_tcgets(e){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(e,r,t){return 0},ioctl_tiocgwinsz(e){return[24,80]}},default_tty1_ops:{put_char(e,r){null===r||10===r?(l(F(e.output)),e.output=[]):0!=r&&e.output.push(r)},fsync(e){0<e.output?.length&&(l(F(e.output)),e.output=[])}}},be=(e,r)=>s.fill(0,e,e+r),Fe=(e,r)=>(_(r,"alignment argument is required"),Math.ceil(e/r)*r),ke=e=>{e=Fe(e,65536);var r=_r(65536,e);return r&&be(r,e),r},P={ops_table:null,mount(e){return P.createNode(null,"/",16895,0)},createNode(e,r,t,n){if(M.isBlkdev(t)||M.isFIFO(t))throw new M.ErrnoError(63);P.ops_table||={dir:{node:{getattr:P.node_ops.getattr,setattr:P.node_ops.setattr,lookup:P.node_ops.lookup,mknod:P.node_ops.mknod,rename:P.node_ops.rename,unlink:P.node_ops.unlink,rmdir:P.node_ops.rmdir,readdir:P.node_ops.readdir,symlink:P.node_ops.symlink},stream:{llseek:P.stream_ops.llseek}},file:{node:{getattr:P.node_ops.getattr,setattr:P.node_ops.setattr},stream:{llseek:P.stream_ops.llseek,read:P.stream_ops.read,write:P.stream_ops.write,mmap:P.stream_ops.mmap,msync:P.stream_ops.msync}},link:{node:{getattr:P.node_ops.getattr,setattr:P.node_ops.setattr,readlink:P.node_ops.readlink},stream:{}},chrdev:{node:{getattr:P.node_ops.getattr,setattr:P.node_ops.setattr},stream:M.chrdev_stream_ops}};t=M.createNode(e,r,t,n);return M.isDir(t.mode)?(t.node_ops=P.ops_table.dir.node,t.stream_ops=P.ops_table.dir.stream,t.contents={}):M.isFile(t.mode)?(t.node_ops=P.ops_table.file.node,t.stream_ops=P.ops_table.file.stream,t.usedBytes=0,t.contents=null):M.isLink(t.mode)?(t.node_ops=P.ops_table.link.node,t.stream_ops=P.ops_table.link.stream):M.isChrdev(t.mode)&&(t.node_ops=P.ops_table.chrdev.node,t.stream_ops=P.ops_table.chrdev.stream),t.atime=t.mtime=t.ctime=Date.now(),e&&(e.contents[r]=t,e.atime=e.mtime=e.ctime=t.atime),t},getFileDataAsTypedArray(e){return e.contents?e.contents.subarray?e.contents.subarray(0,e.usedBytes):new Uint8Array(e.contents):new Uint8Array(0)},expandFileStorage(e,r){var t=e.contents?e.contents.length:0;r<=t||(r=Math.max(r,t*(t<1048576?2:1.125)>>>0),0!=t&&(r=Math.max(r,256)),t=e.contents,e.contents=new Uint8Array(r),0<e.usedBytes&&e.contents.set(t.subarray(0,e.usedBytes),0))},resizeFileStorage(e,r){var t;e.usedBytes!=r&&(0==r?(e.contents=null,e.usedBytes=0):(t=e.contents,e.contents=new Uint8Array(r),t&&e.contents.set(t.subarray(0,Math.min(r,e.usedBytes))),e.usedBytes=r))},node_ops:{getattr(e){var r={};return r.dev=M.isChrdev(e.mode)?e.id:1,r.ino=e.id,r.mode=e.mode,r.nlink=1,r.uid=0,r.gid=0,r.rdev=e.rdev,M.isDir(e.mode)?r.size=4096:M.isFile(e.mode)?r.size=e.usedBytes:M.isLink(e.mode)?r.size=e.link.length:r.size=0,r.atime=new Date(e.atime),r.mtime=new Date(e.mtime),r.ctime=new Date(e.ctime),r.blksize=4096,r.blocks=Math.ceil(r.size/r.blksize),r},setattr(e,r){for(const t of["mode","atime","mtime","ctime"])null!=r[t]&&(e[t]=r[t]);void 0!==r.size&&P.resizeFileStorage(e,r.size)},lookup(e,r){throw new M.ErrnoError(44)},mknod(e,r,t,n){return P.createNode(e,r,t,n)},rename(e,r,t){var n;try{n=M.lookupNode(r,t)}catch(e){}if(n){if(M.isDir(e.mode))for(var o in n.contents)throw new M.ErrnoError(55);M.hashRemoveNode(n)}delete e.parent.contents[e.name],(r.contents[t]=e).name=t,r.ctime=r.mtime=e.parent.ctime=e.parent.mtime=Date.now()},unlink(e,r){delete e.contents[r],e.ctime=e.mtime=Date.now()},rmdir(e,r){for(var t in M.lookupNode(e,r).contents)throw new M.ErrnoError(55);delete e.contents[r],e.ctime=e.mtime=Date.now()},readdir(e){return[".","..",...Object.keys(e.contents)]},symlink(e,r,t){e=P.createNode(e,r,41471,0);return e.link=t,e},readlink(e){if(M.isLink(e.mode))return e.link;throw new M.ErrnoError(28)}},stream_ops:{read(e,r,t,n,o){var a=e.node.contents;if(o>=e.node.usedBytes)return 0;var i=Math.min(e.node.usedBytes-o,n);if(_(0<=i),8<i&&a.subarray)r.set(a.subarray(o,o+i),t);else for(var s=0;s<i;s++)r[t+s]=a[o+s];return i},write(e,r,t,n,o,a){if(_(!(r instanceof ArrayBuffer)),r.buffer===m.buffer&&(a=!1),!n)return 0;var i=e.node;if(i.mtime=i.ctime=Date.now(),r.subarray&&(!i.contents||i.contents.subarray)){if(a)return _(0===o,"canOwn must imply no weird position inside the file"),i.contents=r.subarray(t,t+n),i.usedBytes=n;if(0===i.usedBytes&&0===o)return i.contents=r.slice(t,t+n),i.usedBytes=n;if(o+n<=i.usedBytes)return i.contents.set(r.subarray(t,t+n),o),n}if(P.expandFileStorage(i,o+n),i.contents.subarray&&r.subarray)i.contents.set(r.subarray(t,t+n),o);else for(var s=0;s<n;s++)i.contents[o+s]=r[t+s];return i.usedBytes=Math.max(i.usedBytes,o+n),n},llseek(e,r,t){if(1===t?r+=e.position:2===t&&M.isFile(e.node.mode)&&(r+=e.node.usedBytes),r<0)throw new M.ErrnoError(28);return r},mmap(e,r,t,n,o){if(!M.isFile(e.node.mode))throw new M.ErrnoError(43);var a,i,e=e.node.contents;if(2&o||!e||e.buffer!==m.buffer){if(i=!0,!(a=ke(r)))throw new M.ErrnoError(48);e&&((0<t||t+r<e.length)&&(e=e.subarray?e.subarray(t,t+r):Array.prototype.slice.call(e,t,t+r)),m.set(e,a>>>0))}else i=!1,a=e.byteOffset;return{ptr:a,allocated:i}},msync(e,r,t,n,o){return P.stream_ops.write(e,r,0,n,t,!1),0}}},Te=async e=>{var r=await U(e);return _(r,`Loading data file "${e}" failed (no arrayBuffer).`),new Uint8Array(r)},Oe=(...e)=>M.createDataFile(...e),Ae=[],De=(r,t,n,o)=>{"undefined"!=typeof Browser&&Browser.init();var a=!1;return Ae.forEach(e=>{a||e.canHandle(t)&&(e.handle(r,t,n,o),a=!0)}),a},Pe=(e,r)=>{var t=0;return e&&(t|=365),r&&(t|=146),t},c={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount(e){_(u),c.reader??=new FileReaderSync;var a=c.createNode(null,"/",c.DIR_MODE,0),i={};function n(e){for(var r=e.split("/"),t=a,n=0;n<r.length-1;n++){var o=r.slice(0,n+1).join("/");i[o]||=c.createNode(t,r[n],c.DIR_MODE,0),t=i[o]}return t}function o(e){e=e.split("/");return e[e.length-1]}return Array.prototype.forEach.call(e.opts.files||[],function(e){c.createNode(n(e.name),o(e.name),c.FILE_MODE,0,e,e.lastModifiedDate)}),(e.opts.blobs||[]).forEach(e=>{c.createNode(n(e.name),o(e.name),c.FILE_MODE,0,e.data)}),(e.opts.packages||[]).forEach(t=>{t.metadata.files.forEach(e=>{var r=e.filename.slice(1);c.createNode(n(r),o(r),c.FILE_MODE,0,t.blob.slice(e.start,e.end))})}),a},createNode(e,r,t,n,o,a){var i=M.createNode(e,r,t);return i.mode=t,i.node_ops=c.node_ops,i.stream_ops=c.stream_ops,i.atime=i.mtime=i.ctime=(a||new Date).getTime(),_(c.FILE_MODE!==c.DIR_MODE),t===c.FILE_MODE?(i.size=o.size,i.contents=o):(i.size=4096,i.contents={}),e&&(e.contents[r]=i),i},node_ops:{getattr(e){return{dev:1,ino:e.id,mode:e.mode,nlink:1,uid:0,gid:0,rdev:0,size:e.size,atime:new Date(e.atime),mtime:new Date(e.mtime),ctime:new Date(e.ctime),blksize:4096,blocks:Math.ceil(e.size/4096)}},setattr(e,r){for(const t of["mode","atime","mtime","ctime"])null!=r[t]&&(e[t]=r[t])},lookup(e,r){throw new M.ErrnoError(44)},mknod(e,r,t,n){throw new M.ErrnoError(63)},rename(e,r,t){throw new M.ErrnoError(63)},unlink(e,r){throw new M.ErrnoError(63)},rmdir(e,r){throw new M.ErrnoError(63)},readdir(e){var r,t=[".",".."];for(r of Object.keys(e.contents))t.push(r);return t},symlink(e,r,t){throw new M.ErrnoError(63)}},stream_ops:{read(e,r,t,n,o){return o>=e.node.size?0:(e=e.node.contents.slice(o,o+n),o=c.reader.readAsArrayBuffer(e),r.set(new Uint8Array(o),t),e.size)},write(e,r,t,n,o){throw new M.ErrnoError(29)},llseek(e,r,t){if(1===t?r+=e.position:2===t&&M.isFile(e.node.mode)&&(r+=e.node.size),r<0)throw new M.ErrnoError(28);return r}}},Me={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},M={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,readFiles:{},ErrnoError:class extends Error{name="ErrnoError";constructor(e){for(var r in super(X?k(mr(e)):""),this.errno=e,Me)if(Me[r]===e){this.code=r;break}}},FSStream:class{shared={};get object(){return this.node}set object(e){this.node=e}get isRead(){return 1!=(2097155&this.flags)}get isWrite(){return 0!=(2097155&this.flags)}get isAppend(){return 1024&this.flags}get flags(){return this.shared.flags}set flags(e){this.shared.flags=e}get position(){return this.shared.position}set position(e){this.shared.position=e}},FSNode:class{node_ops={};stream_ops={};readMode=365;writeMode=146;mounted=null;constructor(e,r,t,n){this.parent=e=e||this,this.mount=e.mount,this.id=M.nextInode++,this.name=r,this.mode=t,this.rdev=n,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(e){e?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(e){e?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return M.isDir(this.mode)}get isDevice(){return M.isChrdev(this.mode)}},lookupPath(e,r={}){if(!e)throw new M.ErrnoError(44);r.follow_mount??=!0,T.isAbs(e)||(e=M.cwd()+"/"+e);e:for(var t=0;t<40;t++){for(var n=e.split("/").filter(e=>!!e),o=M.root,a="/",i=0;i<n.length;i++){var s=i===n.length-1;if(s&&r.parent)break;if("."!==n[i])if(".."===n[i]){if(a=T.dirname(a),M.isRoot(o)){e=a+"/"+n.slice(i+1).join("/");continue e}o=o.parent}else{a=T.join2(a,n[i]);try{o=M.lookupNode(o,n[i])}catch(e){if(44===e?.errno&&s&&r.noent_okay)return{path:a};throw e}if(!M.isMountpoint(o)||s&&!r.follow_mount||(o=o.mounted.root),M.isLink(o.mode)&&(!s||r.follow)){if(!o.node_ops.readlink)throw new M.ErrnoError(52);s=o.node_ops.readlink(o);e=(s=T.isAbs(s)?s:T.dirname(a)+"/"+s)+"/"+n.slice(i+1).join("/");continue e}}}return{path:a,node:o}}throw new M.ErrnoError(32)},getPath(e){for(var r,t;;){if(M.isRoot(e))return t=e.mount.mountpoint,r?"/"!==t[t.length-1]?t+"/"+r:t+r:t;r=r?e.name+"/"+r:e.name,e=e.parent}},hashName(e,r){for(var t=0,n=0;n<r.length;n++)t=(t<<5)-t+r.charCodeAt(n)|0;return(e+t>>>0)%M.nameTable.length},hashAddNode(e){var r=M.hashName(e.parent.id,e.name);e.name_next=M.nameTable[r],M.nameTable[r]=e},hashRemoveNode(e){var r=M.hashName(e.parent.id,e.name);if(M.nameTable[r]===e)M.nameTable[r]=e.name_next;else for(var t=M.nameTable[r];t;){if(t.name_next===e){t.name_next=e.name_next;break}t=t.name_next}},lookupNode(e,r){var t=M.mayLookup(e);if(t)throw new M.ErrnoError(t);for(var t=M.hashName(e.id,r),n=M.nameTable[t];n;n=n.name_next){var o=n.name;if(n.parent.id===e.id&&o===r)return n}return M.lookup(e,r)},createNode(e,r,t,n){_("object"==typeof e);e=new M.FSNode(e,r,t,n);return M.hashAddNode(e),e},destroyNode(e){M.hashRemoveNode(e)},isRoot(e){return e===e.parent},isMountpoint(e){return!!e.mounted},isFile(e){return 32768==(61440&e)},isDir(e){return 16384==(61440&e)},isLink(e){return 40960==(61440&e)},isChrdev(e){return 8192==(61440&e)},isBlkdev(e){return 24576==(61440&e)},isFIFO(e){return 4096==(61440&e)},isSocket(e){return 49152==(49152&e)},flagsToPermissionString(e){var r=["r","w","rw"][3&e];return 512&e&&(r+="w"),r},nodePermissions(e,r){return M.ignorePermissions||(!r.includes("r")||292&e.mode)&&(!r.includes("w")||146&e.mode)&&(!r.includes("x")||73&e.mode)?0:2},mayLookup(e){return M.isDir(e.mode)?M.nodePermissions(e,"x")||(e.node_ops.lookup?0:2):54},mayCreate(e,r){if(!M.isDir(e.mode))return 54;try{M.lookupNode(e,r);return 20}catch(e){}return M.nodePermissions(e,"wx")},mayDelete(e,r,t){var n;try{n=M.lookupNode(e,r)}catch(e){return e.errno}r=M.nodePermissions(e,"wx");if(r)return r;if(t){if(!M.isDir(n.mode))return 54;if(M.isRoot(n)||M.getPath(n)===M.cwd())return 10}else if(M.isDir(n.mode))return 31;return 0},mayOpen(e,r){return e?M.isLink(e.mode)?32:M.isDir(e.mode)&&("r"!==M.flagsToPermissionString(r)||576&r)?31:M.nodePermissions(e,M.flagsToPermissionString(r)):44},checkOpExists(e,r){if(e)return e;throw new M.ErrnoError(r)},MAX_OPEN_FDS:4096,nextfd(){for(var e=0;e<=M.MAX_OPEN_FDS;e++)if(!M.streams[e])return e;throw new M.ErrnoError(33)},getStreamChecked(e){e=M.getStream(e);if(e)return e;throw new M.ErrnoError(8)},getStream:e=>M.streams[e],createStream(e,r=-1){return _(-1<=r),e=Object.assign(new M.FSStream,e),-1==r&&(r=M.nextfd()),e.fd=r,M.streams[r]=e},closeStream(e){M.streams[e]=null},dupStream(e,r=-1){e=M.createStream(e,r);return e.stream_ops?.dup?.(e),e},doSetAttr(e,r,t){var n=e?.stream_ops.setattr,e=n?e:r;n??=r.node_ops.setattr,M.checkOpExists(n,63),n(e,t)},chrdev_stream_ops:{open(e){var r=M.getDevice(e.node.rdev);e.stream_ops=r.stream_ops,e.stream_ops.open?.(e)},llseek(){throw new M.ErrnoError(70)}},major:e=>e>>8,minor:e=>255&e,makedev:(e,r)=>e<<8|r,registerDevice(e,r){M.devices[e]={stream_ops:r}},getDevice:e=>M.devices[e],getMounts(e){for(var r=[],t=[e];t.length;){var n=t.pop();r.push(n),t.push(...n.mounts)}return r},syncfs(r,t){"function"==typeof r&&(t=r,r=!1),M.syncFSRequests++,1<M.syncFSRequests&&l(`warning: ${M.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var n=M.getMounts(M.root.mount),o=0;function a(e){return _(0<M.syncFSRequests),M.syncFSRequests--,t(e)}function i(e){if(e)return i.errored?void 0:(i.errored=!0,a(e));++o>=n.length&&a(null)}n.forEach(e=>{if(!e.type.syncfs)return i(null);e.type.syncfs(e,r,i)})},mount(e,r,t){if("string"==typeof e)throw e;var n,o="/"===t,a=!t;if(o&&M.root)throw new M.ErrnoError(10);if(!o&&!a){a=M.lookupPath(t,{follow_mount:!1});if(t=a.path,n=a.node,M.isMountpoint(n))throw new M.ErrnoError(10);if(!M.isDir(n.mode))throw new M.ErrnoError(54)}a={type:e,opts:r,mountpoint:t,mounts:[]},r=e.mount(a);return(r.mount=a).root=r,o?M.root=r:n&&(n.mounted=a,n.mount)&&n.mount.mounts.push(a),r},unmount(e){e=M.lookupPath(e,{follow_mount:!1});if(!M.isMountpoint(e.node))throw new M.ErrnoError(28);var e=e.node,r=e.mounted,n=M.getMounts(r),r=(Object.keys(M.nameTable).forEach(e=>{for(var r=M.nameTable[e];r;){var t=r.name_next;n.includes(r.mount)&&M.destroyNode(r),r=t}}),e.mounted=null,e.mount.mounts.indexOf(r));_(-1!==r),e.mount.mounts.splice(r,1)},lookup(e,r){return e.node_ops.lookup(e,r)},mknod(e,r,t){var n=M.lookupPath(e,{parent:!0}).node,e=T.basename(e);if(!e)throw new M.ErrnoError(28);if("."===e||".."===e)throw new M.ErrnoError(20);var o=M.mayCreate(n,e);if(o)throw new M.ErrnoError(o);if(n.node_ops.mknod)return n.node_ops.mknod(n,e,r,t);throw new M.ErrnoError(63)},statfs(e){return M.statfsNode(M.lookupPath(e,{follow:!0}).node)},statfsStream(e){return M.statfsNode(e.node)},statfsNode(e){var r={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:M.nextInode,ffree:M.nextInode-1,fsid:42,flags:2,namelen:255};return e.node_ops.statfs&&Object.assign(r,e.node_ops.statfs(e.mount.opts.root)),r},create(e,r=438){return M.mknod(e,r=r&4095|32768,0)},mkdir(e,r=511){return M.mknod(e,r=r&1023|16384,0)},mkdirTree(e,r){var t,n="";for(t of e.split("/"))if(t){(n||T.isAbs(e))&&(n+="/"),n+=t;try{M.mkdir(n,r)}catch(e){if(20!=e.errno)throw e}}},mkdev(e,r,t){return void 0===t&&(t=r,r=438),M.mknod(e,r|=8192,t)},symlink(e,r){if(!O.resolve(e))throw new M.ErrnoError(44);var t=M.lookupPath(r,{parent:!0}).node;if(!t)throw new M.ErrnoError(44);var r=T.basename(r),n=M.mayCreate(t,r);if(n)throw new M.ErrnoError(n);if(t.node_ops.symlink)return t.node_ops.symlink(t,r,e);throw new M.ErrnoError(63)},rename(e,r){var t=T.dirname(e),n=T.dirname(r),o=T.basename(e),a=T.basename(r),i=M.lookupPath(e,{parent:!0}),i=i.node,s=M.lookupPath(r,{parent:!0}).node;if(!i||!s)throw new M.ErrnoError(44);if(i.mount!==s.mount)throw new M.ErrnoError(75);var l,c=M.lookupNode(i,o),e=O.relative(e,n);if("."!==e.charAt(0))throw new M.ErrnoError(28);if("."!==(e=O.relative(r,t)).charAt(0))throw new M.ErrnoError(55);try{l=M.lookupNode(s,a)}catch(e){}if(c!==l){n=M.isDir(c.mode),r=M.mayDelete(i,o,n);if(r)throw new M.ErrnoError(r);if(r=l?M.mayDelete(s,a,n):M.mayCreate(s,a))throw new M.ErrnoError(r);if(!i.node_ops.rename)throw new M.ErrnoError(63);if(M.isMountpoint(c)||l&&M.isMountpoint(l))throw new M.ErrnoError(10);if(s!==i&&(r=M.nodePermissions(i,"w")))throw new M.ErrnoError(r);M.hashRemoveNode(c);try{i.node_ops.rename(c,s,a),c.parent=s}catch(e){throw e}finally{M.hashAddNode(c)}}},rmdir(e){var r=M.lookupPath(e,{parent:!0}).node,e=T.basename(e),t=M.lookupNode(r,e),n=M.mayDelete(r,e,!0);if(n)throw new M.ErrnoError(n);if(!r.node_ops.rmdir)throw new M.ErrnoError(63);if(M.isMountpoint(t))throw new M.ErrnoError(10);r.node_ops.rmdir(r,e),M.destroyNode(t)},readdir(e){e=M.lookupPath(e,{follow:!0}).node;return M.checkOpExists(e.node_ops.readdir,54)(e)},unlink(e){var r=M.lookupPath(e,{parent:!0}).node;if(!r)throw new M.ErrnoError(44);var e=T.basename(e),t=M.lookupNode(r,e),n=M.mayDelete(r,e,!1);if(n)throw new M.ErrnoError(n);if(!r.node_ops.unlink)throw new M.ErrnoError(63);if(M.isMountpoint(t))throw new M.ErrnoError(10);r.node_ops.unlink(r,e),M.destroyNode(t)},readlink(e){e=M.lookupPath(e).node;if(!e)throw new M.ErrnoError(44);if(e.node_ops.readlink)return e.node_ops.readlink(e);throw new M.ErrnoError(28)},stat(e,r){e=M.lookupPath(e,{follow:!r}).node;return M.checkOpExists(e.node_ops.getattr,63)(e)},fstat(e){var e=M.getStreamChecked(e),r=e.node,t=e.stream_ops.getattr,e=t?e:r;return t??=r.node_ops.getattr,M.checkOpExists(t,63),t(e)},lstat(e){return M.stat(e,!0)},doChmod(e,r,t,n){M.doSetAttr(e,r,{mode:4095&t|-4096&r.mode,ctime:Date.now(),dontFollow:n})},chmod(e,r,t){e="string"==typeof e?M.lookupPath(e,{follow:!t}).node:e,M.doChmod(null,e,r,t)},lchmod(e,r){M.chmod(e,r,!0)},fchmod(e,r){e=M.getStreamChecked(e);M.doChmod(e,e.node,r,!1)},doChown(e,r,t){M.doSetAttr(e,r,{timestamp:Date.now(),dontFollow:t})},chown(e,r,t,n){e="string"==typeof e?M.lookupPath(e,{follow:!n}).node:e,M.doChown(null,e,n)},lchown(e,r,t){M.chown(e,r,t,!0)},fchown(e,r,t){e=M.getStreamChecked(e);M.doChown(e,e.node,!1)},doTruncate(e,r,t){if(M.isDir(r.mode))throw new M.ErrnoError(31);if(!M.isFile(r.mode))throw new M.ErrnoError(28);var n=M.nodePermissions(r,"w");if(n)throw new M.ErrnoError(n);M.doSetAttr(e,r,{size:t,timestamp:Date.now()})},truncate(e,r){if(r<0)throw new M.ErrnoError(28);e="string"==typeof e?M.lookupPath(e,{follow:!0}).node:e,M.doTruncate(null,e,r)},ftruncate(e,r){e=M.getStreamChecked(e);if(r<0||0==(2097155&e.flags))throw new M.ErrnoError(28);M.doTruncate(e,e.node,r)},utime(e,r,t){e=M.lookupPath(e,{follow:!0}).node;M.checkOpExists(e.node_ops.setattr,63)(e,{atime:r,mtime:t})},open(e,r,t=438){if(""===e)throw new M.ErrnoError(44);t=64&(r="string"==typeof r?(e=>{var r={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[e];if(void 0===r)throw new Error("Unknown file open mode: "+e);return r})(r):r)?4095&t|32768:0,"object"==typeof e?n=e:(a=e.endsWith("/"),n=(o=M.lookupPath(e,{follow:!(131072&r),noent_okay:!0})).node,e=o.path);var n,o=!1;if(64&r)if(n){if(128&r)throw new M.ErrnoError(20)}else{if(a)throw new M.ErrnoError(31);n=M.mknod(e,511|t,0),o=!0}if(!n)throw new M.ErrnoError(44);if(M.isChrdev(n.mode)&&(r&=-513),65536&r&&!M.isDir(n.mode))throw new M.ErrnoError(54);if(!o){var a=M.mayOpen(n,r);if(a)throw new M.ErrnoError(a)}512&r&&!o&&M.truncate(n,0),r&=-131713;a=M.createStream({node:n,path:M.getPath(n),flags:r,seekable:!0,position:0,stream_ops:n.stream_ops,ungotten:[],error:!1});return a.stream_ops.open&&a.stream_ops.open(a),o&&M.chmod(n,511&t),!i.logReadFiles||1&r||e in M.readFiles||(M.readFiles[e]=1),a},close(e){if(M.isClosed(e))throw new M.ErrnoError(8);e.getdents&&(e.getdents=null);try{e.stream_ops.close&&e.stream_ops.close(e)}catch(e){throw e}finally{M.closeStream(e.fd)}e.fd=null},isClosed(e){return null===e.fd},llseek(e,r,t){if(M.isClosed(e))throw new M.ErrnoError(8);if(!e.seekable||!e.stream_ops.llseek)throw new M.ErrnoError(70);if(0!=t&&1!=t&&2!=t)throw new M.ErrnoError(28);return e.position=e.stream_ops.llseek(e,r,t),e.ungotten=[],e.position},read(e,r,t,n,o){if(_(0<=t),n<0||o<0)throw new M.ErrnoError(28);if(M.isClosed(e))throw new M.ErrnoError(8);if(1==(2097155&e.flags))throw new M.ErrnoError(8);if(M.isDir(e.node.mode))throw new M.ErrnoError(31);if(!e.stream_ops.read)throw new M.ErrnoError(28);var a=void 0!==o;if(a){if(!e.seekable)throw new M.ErrnoError(70)}else o=e.position;r=e.stream_ops.read(e,r,t,n,o);return a||(e.position+=r),r},write(e,r,t,n,o,a){if(_(0<=t),n<0||o<0)throw new M.ErrnoError(28);if(M.isClosed(e))throw new M.ErrnoError(8);if(0==(2097155&e.flags))throw new M.ErrnoError(8);if(M.isDir(e.node.mode))throw new M.ErrnoError(31);if(!e.stream_ops.write)throw new M.ErrnoError(28);e.seekable&&1024&e.flags&&M.llseek(e,0,2);var i=void 0!==o;if(i){if(!e.seekable)throw new M.ErrnoError(70)}else o=e.position;r=e.stream_ops.write(e,r,t,n,o,a);return i||(e.position+=r),r},mmap(e,r,t,n,o){if(0!=(2&n)&&0==(2&o)&&2!=(2097155&e.flags))throw new M.ErrnoError(2);if(1==(2097155&e.flags))throw new M.ErrnoError(2);if(!e.stream_ops.mmap)throw new M.ErrnoError(43);if(r)return e.stream_ops.mmap(e,r,t,n,o);throw new M.ErrnoError(28)},msync(e,r,t,n,o){return _(0<=t),e.stream_ops.msync?e.stream_ops.msync(e,r,t,n,o):0},ioctl(e,r,t){if(e.stream_ops.ioctl)return e.stream_ops.ioctl(e,r,t);throw new M.ErrnoError(59)},readFile(e,r={}){if(r.flags=r.flags||0,r.encoding=r.encoding||"binary","utf8"!==r.encoding&&"binary"!==r.encoding)throw new Error(`Invalid encoding type "${r.encoding}"`);var t,n=M.open(e,r.flags),e=M.stat(e).size,o=new Uint8Array(e);return M.read(n,o,0,e,0),"utf8"===r.encoding?t=F(o):"binary"===r.encoding&&(t=o),M.close(n),t},writeFile(e,r,t={}){t.flags=t.flags||577;e=M.open(e,t.flags,t.mode);if("string"==typeof r){var n=new Uint8Array(A(r)+1),o=ve(r,n,0,n.length);M.write(e,n,0,o,void 0,t.canOwn)}else{if(!ArrayBuffer.isView(r))throw new Error("Unsupported data type");M.write(e,r,0,r.byteLength,void 0,t.canOwn)}M.close(e)},cwd:()=>M.currentPath,chdir(e){e=M.lookupPath(e,{follow:!0});if(null===e.node)throw new M.ErrnoError(44);if(!M.isDir(e.node.mode))throw new M.ErrnoError(54);var r=M.nodePermissions(e.node,"x");if(r)throw new M.ErrnoError(r);M.currentPath=e.path},createDefaultDirectories(){M.mkdir("/tmp"),M.mkdir("/home"),M.mkdir("/home/web_user")},createDefaultDevices(){M.mkdir("/dev"),M.registerDevice(M.makedev(1,3),{read:()=>0,write:(e,r,t,n,o)=>n,llseek:()=>0}),M.mkdev("/dev/null",M.makedev(1,3)),D.register(M.makedev(5,0),D.default_tty_ops),D.register(M.makedev(6,0),D.default_tty1_ops),M.mkdev("/dev/tty",M.makedev(5,0)),M.mkdev("/dev/tty1",M.makedev(6,0));var e=new Uint8Array(1024),r=0,t=()=>(0===r&&(ye(e),r=e.byteLength),e[--r]);M.createDevice("/dev","random",t),M.createDevice("/dev","urandom",t),M.mkdir("/dev/shm"),M.mkdir("/dev/shm/tmp")},createSpecialDirectories(){M.mkdir("/proc");var r=M.mkdir("/proc/self");M.mkdir("/proc/self/fd"),M.mount({mount(){var e=M.createNode(r,"fd",16895,73);return e.stream_ops={llseek:P.stream_ops.llseek},e.node_ops={lookup(e,r){var r=+r,t=M.getStreamChecked(r),r={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>t.path},id:1+r};return r.parent=r},readdir(){return Array.from(M.streams.entries()).filter(([,e])=>e).map(([e])=>e.toString())}},e}},{},"/proc/self/fd")},createStandardStreams(e,r,t){e?M.createDevice("/dev","stdin",e):M.symlink("/dev/tty","/dev/stdin"),r?M.createDevice("/dev","stdout",null,r):M.symlink("/dev/tty","/dev/stdout"),t?M.createDevice("/dev","stderr",null,t):M.symlink("/dev/tty1","/dev/stderr");e=M.open("/dev/stdin",0),r=M.open("/dev/stdout",1),t=M.open("/dev/stderr",1);_(0===e.fd,`invalid handle for stdin (${e.fd})`),_(1===r.fd,`invalid handle for stdout (${r.fd})`),_(2===t.fd,`invalid handle for stderr (${t.fd})`)},staticInit(){M.nameTable=new Array(4096),M.mount(P,{},"/"),M.createDefaultDirectories(),M.createDefaultDevices(),M.createSpecialDirectories(),M.filesystems={MEMFS:P,WORKERFS:c}},init(e,r,t){_(!M.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)"),M.initialized=!0,e??=i.stdin,r??=i.stdout,t??=i.stderr,M.createStandardStreams(e,r,t)},quit(){M.initialized=!1,pr(0);for(var e of M.streams)e&&M.close(e)},findObject(e,r){e=M.analyzePath(e,r);return e.exists?e.object:null},analyzePath(e,r){try{e=(n=M.lookupPath(e,{follow:!r})).path}catch(e){}var t={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var n=M.lookupPath(e,{parent:!0});t.parentExists=!0,t.parentPath=n.path,t.parentObject=n.node,t.name=T.basename(e),n=M.lookupPath(e,{follow:!r}),t.exists=!0,t.path=n.path,t.object=n.node,t.name=n.node.name,t.isRoot="/"===n.path}catch(e){t.error=e.errno}return t},createPath(e,r,t,n){e="string"==typeof e?e:M.getPath(e);for(var o=r.split("/").reverse();o.length;){var a=o.pop();if(a){var i=T.join2(e,a);try{M.mkdir(i)}catch(e){if(20!=e.errno)throw e}e=i}}return i},createFile(e,r,t,n,o){e=T.join2("string"==typeof e?e:M.getPath(e),r),r=Pe(n,o);return M.create(e,r)},createDataFile(e,r,t,n,o,a){var i=r,r=(e&&(e="string"==typeof e?e:M.getPath(e),i=r?T.join2(e,r):e),Pe(n,o)),e=M.create(i,r);if(t){if("string"==typeof t){for(var s=new Array(t.length),l=0,c=t.length;l<c;++l)s[l]=t.charCodeAt(l);t=s}M.chmod(e,146|r);n=M.open(e,577);M.write(n,t,0,t.length,0,a),M.close(n),M.chmod(e,r)}},createDevice(e,r,l,i){var e=T.join2("string"==typeof e?e:M.getPath(e),r),r=Pe(!!l,!!i),t=(M.createDevice.major??=64,M.makedev(M.createDevice.major++,0));return M.registerDevice(t,{open(e){e.seekable=!1},close(e){i?.buffer?.length&&i(10)},read(e,r,t,n,o){for(var a,i=0,s=0;s<n;s++){try{a=l()}catch(e){throw new M.ErrnoError(29)}if(void 0===a&&0===i)throw new M.ErrnoError(6);if(null==a)break;i++,r[t+s]=a}return i&&(e.node.atime=Date.now()),i},write(e,r,t,n,o){for(var a=0;a<n;a++)try{i(r[t+a])}catch(e){throw new M.ErrnoError(29)}return n&&(e.node.mtime=e.node.ctime=Date.now()),a}}),M.mkdev(e,r,t)},forceLoadFile(e){if(e.isDevice||e.isFolder||e.link||e.contents)return!0;if("undefined"!=typeof XMLHttpRequest)throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");try{e.contents=z(e.url),e.usedBytes=e.contents.length}catch(e){throw new M.ErrnoError(29)}},createLazyFile(e,r,i,t,n){class o{lengthKnown=!1;chunks=[];get(e){var r;if(!(e>this.length-1||e<0))return r=e%this.chunkSize,e=e/this.chunkSize|0,this.getter(e)[r]}setDataGetter(e){this.getter=e}cacheLength(){var e=new XMLHttpRequest;if(e.open("HEAD",i,!1),e.send(null),!(200<=e.status&&e.status<300||304===e.status))throw new Error("Couldn't load "+i+". Status: "+e.status);var r,n=Number(e.getResponseHeader("Content-length")),t=(r=e.getResponseHeader("Accept-Ranges"))&&"bytes"===r,e=(r=e.getResponseHeader("Content-Encoding"))&&"gzip"===r,o=1048576,a=(t||(o=n),this);a.setDataGetter(e=>{var r=e*o,t=(e+1)*o-1,t=Math.min(t,n-1);if(void 0===a.chunks[e]&&(a.chunks[e]=((e,r)=>{if(r<e)throw new Error("invalid range ("+e+", "+r+") or no bytes requested!");if(n-1<r)throw new Error("only "+n+" bytes available! programmer error!");var t=new XMLHttpRequest;if(t.open("GET",i,!1),n!==o&&t.setRequestHeader("Range","bytes="+e+"-"+r),t.responseType="arraybuffer",t.overrideMimeType&&t.overrideMimeType("text/plain; charset=x-user-defined"),t.send(null),200<=t.status&&t.status<300||304===t.status)return void 0!==t.response?new Uint8Array(t.response||[]):Se(t.responseText||"",!0);throw new Error("Couldn't load "+i+". Status: "+t.status)})(r,t)),void 0===a.chunks[e])throw new Error("doXHR failed!");return a.chunks[e]}),!e&&n||(o=n=1,n=this.getter(0).length,o=n,f("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=n,this._chunkSize=o,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if("undefined"!=typeof XMLHttpRequest){if(!u)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var a={isDevice:!1,contents:new o}}else a={isDevice:!1,url:i};var s=M.createFile(e,r,a,t,n),l=(a.contents?s.contents=a.contents:a.url&&(s.contents=null,s.url=a.url),Object.defineProperties(s,{usedBytes:{get:function(){return this.contents.length}}}),{});function c(e,r,t,n,o){var a=e.node.contents;if(o>=a.length)return 0;var i=Math.min(a.length-o,n);if(_(0<=i),a.slice)for(var s=0;s<i;s++)r[t+s]=a[o+s];else for(s=0;s<i;s++)r[t+s]=a.get(o+s);return i}return Object.keys(s.stream_ops).forEach(e=>{var r=s.stream_ops[e];l[e]=(...e)=>(M.forceLoadFile(s),r(...e))}),l.read=(e,r,t,n,o)=>(M.forceLoadFile(s),c(e,r,t,n,o)),l.mmap=(e,r,t,n,o)=>{M.forceLoadFile(s);var a=ke(r);if(a)return c(e,m,a,r,t),{ptr:a,allocated:!0};throw new M.ErrnoError(48)},s.stream_ops=l,s},absolutePath(){y("FS.absolutePath has been removed; use PATH_FS.resolve instead")},createFolder(){y("FS.createFolder has been removed; use FS.mkdir instead")},createLink(){y("FS.createLink has been removed; use FS.symlink instead")},joinPath(){y("FS.joinPath has been removed; use PATH.join instead")},mmapAlloc(){y("FS.mmapAlloc has been replaced by the top level function mmapAlloc")},standardizePath(){y("FS.standardizePath has been removed; use PATH.normalize instead")}},R={DEFAULT_POLLMASK:5,calculateAt(e,r,t){if(T.isAbs(r))return r;if(e=-100===e?M.cwd():R.getStreamFromFD(e).path,0!=r.length)return e+"/"+r;if(t)return e;throw new M.ErrnoError(44)},writeStat(e,r){h[e>>>2>>>0]=r.dev,h[e+4>>>2>>>0]=r.mode,d[e+8>>>2>>>0]=r.nlink,h[e+12>>>2>>>0]=r.uid,h[e+16>>>2>>>0]=r.gid,h[e+20>>>2>>>0]=r.rdev,a[e+24>>>3]=BigInt(r.size),h[e+32>>>2>>>0]=4096,h[e+36>>>2>>>0]=r.blocks;var t=r.atime.getTime(),n=r.mtime.getTime(),o=r.ctime.getTime();return a[e+40>>>3]=BigInt(Math.floor(t/1e3)),d[e+48>>>2>>>0]=t%1e3*1e3*1e3,a[e+56>>>3]=BigInt(Math.floor(n/1e3)),d[e+64>>>2>>>0]=n%1e3*1e3*1e3,a[e+72>>>3]=BigInt(Math.floor(o/1e3)),d[e+80>>>2>>>0]=o%1e3*1e3*1e3,a[e+88>>>3]=BigInt(r.ino),0},writeStatFs(e,r){h[e+4>>>2>>>0]=r.bsize,h[e+40>>>2>>>0]=r.bsize,h[e+8>>>2>>>0]=r.blocks,h[e+12>>>2>>>0]=r.bfree,h[e+16>>>2>>>0]=r.bavail,h[e+20>>>2>>>0]=r.files,h[e+24>>>2>>>0]=r.ffree,h[e+28>>>2>>>0]=r.fsid,h[e+44>>>2>>>0]=r.flags,h[e+36>>>2>>>0]=r.namelen},doMsync(e,r,t,n,o){if(!M.isFile(r.node.mode))throw new M.ErrnoError(43);if(2&n)return 0;e=s.slice(e,e+t);M.msync(r,e,o,t,n)},getStreamFromFD(e){return M.getStreamChecked(e)},varargs:void 0,getStr(e){return k(e)}},Re=()=>{_(null!=R.varargs);var e=h[+R.varargs>>>2>>>0];return R.varargs+=4,e},N=Re,I=(e,r,t)=>(_("number"==typeof t,"stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"),ve(e,s,r,t)),Ne=e=>d[e>>>2>>>0]+4294967296*h[e+4>>>2>>>0],Ie=[0,31,60,91,121,152,182,213,244,274,305,335],Ce=[0,31,59,90,120,151,181,212,243,273,304,334],Le=e=>{var r;return((r=e.getFullYear())%4==0&&(r%100!=0||r%400==0)?Ie:Ce)[e.getMonth()]+e.getDate()-1},xe=()=>performance.now(),je=()=>Date.now(),Ue=e=>0<=e&&e<=3,ze=()=>4294901760,Be=r=>{var t=Y.buffer,e=(r-t.byteLength+65535)/65536|0;try{return Y.grow(e),Q(),1}catch(e){l(`growMemory: Attempted to grow heap from ${t.byteLength} bytes to ${r} bytes, but got error: `+e)}},Ge={},He=()=>{if(!He.strings){var e={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",_:H||"./this.program"};for(r in Ge)void 0===Ge[r]?delete e[r]:e[r]=Ge[r];var r,t=[];for(r in e)t.push(r+"="+e[r]);He.strings=t}return He.strings},We=0,$e=()=>me||0<We,Ve=e=>{K=e,$e()||(i.onExit?.(e),n=!0),W(0,new se(e))},Ye=(e,r)=>{K=e;var t=f,n=l,o=!1;f=l=e=>{o=!0};try{pr(0),["stdout","stderr"].forEach(e=>{var e=M.analyzePath("/dev/"+e);e&&(e=e.object.rdev,D.ttys[e]?.output?.length)&&(o=!0)})}catch(e){}f=t,l=n,o&&S("stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc."),$e()&&!r&&(j(t=`program exited (with status: ${e}), but keepRuntimeAlive() is set (counter=${We}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`),l(t)),Ve(e)},B=Ye,Ke=(e,r,t,n)=>{for(var o=0,a=0;a<t;a++){var i=d[r>>>2>>>0],s=d[r+4>>>2>>>0],i=(r+=8,M.read(e,m,i,s,n));if(i<0)return-1;if(o+=i,i<s)break;void 0!==n&&(n+=i)}return o},Xe=(e,r,t,n)=>{for(var o=0,a=0;a<t;a++){var i=d[r>>>2>>>0],s=d[r+4>>>2>>>0],i=(r+=8,M.write(e,m,i,s,n));if(i<0)return-1;if(o+=i,i<s)break;void 0!==n&&(n+=i)}return o},qe=e=>{if(e instanceof se||"unwind"==e)return K;o(),e instanceof WebAssembly.RuntimeError&&gr()<=0&&l("Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)"),W(0,e)},Je=e=>yr(e),Ze=e=>{var r=A(e)+1,t=Je(r);return I(e,t,r),t},Qe=e=>{var r=i["_"+e];return _(r,"Cannot call unknown function "+e+", make sure it is exported"),r},er=(e,r)=>{_(0<=e.length,"writeArrayToMemory array must have a length (should be an array or typed array)"),m.set(e,r>>>0)},rr=(e,r)=>{_(e<16384),e<128?r.push(e):r.push(e%128|128,e>>7)},tr=(e,r)=>{if("function"==typeof WebAssembly.Function)return new WebAssembly.Function((e=>{for(var r={i:"i32",j:"i64",f:"f32",d:"f64",e:"externref",p:"i32"},t={parameters:[],results:"v"==e[0]?[]:[r[e[0]]]},n=1;n<e.length;++n)_(e[n]in r,"invalid signature char: "+e[n]),t.parameters.push(r[e[n]]);return t})(r),e);var t,n=[1],o=n,a=(r=r).slice(0,1),r=r.slice(1),i={i:127,p:127,j:126,f:125,d:124,e:111};o.push(96),rr(r.length,o);for(t of r)_(t in i,"invalid signature char: "+t),o.push(i[t]);"v"==a?o.push(0):o.push(1,i[a]);r=[0,97,115,109,1,0,0,0,1],rr(n.length,r),r.push(...n),r.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),a=new WebAssembly.Module(new Uint8Array(r));return new WebAssembly.Instance(a,{e:{f:e}}).exports.f},nr=[],or=(e,r)=>{if(v)for(var t=e;t<e+r;t++){o=void 0,(o=nr[n=t])||(nr[n]=o=g.get(n)),_(g.get(n)==o,"JavaScript-side Wasm function table mirror is out of date!");n=o;n&&v.set(n,t)}var n,o},ar=e=>(v||(v=new WeakMap,or(0,g.length)),v.get(e)||0),ir=[],sr=()=>{if(ir.length)return ir.pop();try{g.grow(1)}catch(e){if(e instanceof RangeError)throw"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.";throw e}return g.length-1},lr=(e,r)=>{g.set(e,r),nr[e]=g.get(e)},e=(M.createPreloadedFile=(t,n,e,o,a,i,s,l,c,u)=>{var d=n?O.resolve(T.join2(t,n)):t,f=function(e){for(var r=e;;){if(!E[e])return e;e=r+Math.random()}}("cp "+d);function r(e){function r(e){u?.(),l||Oe(t,n,e,o,a,c),i?.(),ne(f)}De(e,d,r,()=>{s?.(),ne(f)})||r(e)}te(f),"string"==typeof e?Te(e).then(r,s):r(e)},M.staticInit(),i.noExitRuntime&&(me=i.noExitRuntime),i.preloadPlugins&&(Ae=i.preloadPlugins),i.print&&(f=i.print),i.printErr&&(l=i.printErr),i.wasmBinary&&(V=i.wasmBinary),"fetchSettings");Object.getOwnPropertyDescriptor(i,e)&&y(`\`Module.${e}\` was supplied but \`${e}\` not included in INCOMING_MODULE_JS_API`),i.arguments&&(G=i.arguments),i.thisProgram&&(H=i.thisProgram),_(void 0===i.memoryInitializerPrefixURL,"Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),_(void 0===i.pthreadMainPrefixURL,"Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),_(void 0===i.cdInitializerPrefixURL,"Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),_(void 0===i.filePackagePrefixURL,"Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),_(void 0===i.read,"Module.read option was removed"),_(void 0===i.readAsync,"Module.readAsync option was removed (modify readAsync in JS)"),_(void 0===i.readBinary,"Module.readBinary option was removed (modify readBinary in JS)"),_(void 0===i.setWindowTitle,"Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)"),_(void 0===i.TOTAL_MEMORY,"Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),_(void 0===i.ENVIRONMENT,"Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)"),_(void 0===i.STACK_SIZE,"STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time"),_(void 0===i.wasmMemory,"Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally"),_(void 0===i.INITIAL_MEMORY,"Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically"),i.callMain=vr,i.ccall=(e,r,t,n,o)=>{var a={string:e=>{var r=0;return r=null!=e&&0!==e?Ze(e):r},array:e=>{var r=Je(e.length);return er(e,r),r}};var e=Qe(e),i=[],s=0;if(_("array"!==r,'Return type should not be "array".'),n)for(var l=0;l<n.length;l++){var c=a[t[l]];c?(0===s&&(s=_e()),i[l]=c(n[l])):i[l]=n[l]}e=e(...i);return e=e,0!==s&&he(s),e=e,"string"===r?k(e):"boolean"===r?Boolean(e):e},i.addFunction=(r,t)=>{_(void 0!==r);var n=ar(r);if(n)return n;n=sr();try{lr(n,r)}catch(e){if(!(e instanceof TypeError))throw e;_(void 0!==t,"Missing signature argument to addFunction: "+r);t=tr(r,t);lr(n,t)}return v.set(r,n),n},i.FS=M,["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","getTempRet0","setTempRet0","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","emscriptenLog","readEmAsmArgs","jstoi_q","listenOnce","autoResumeAudioContext","getDynCaller","dynCall","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","asmjsMangle","HandleAllocator","getNativeTypeSize","addOnInit","addOnPostCtor","addOnPreMain","addOnExit","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","cwrap","removeFunction","reallyNegative","unSign","strLen","reSign","formatString","intArrayToString","AsciiToString","stringToAscii","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","stringToNewUTF8","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","battery","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","jsStackTrace","getCallstack","convertPCtoSourceLocation","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","safeSetTimeout","setImmediateWrapped","safeRequestAnimationFrame","clearImmediateWrapped","registerPostMainLoop","registerPreMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","ExceptionInfo","findMatchingCatch","Browser_asyncPrepareDataCounter","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","demangle","stackTrace"].forEach(function(e){Z(e)}),["run","addRunDependency","removeRunDependency","out","err","abort","wasmMemory","wasmExports","HEAPF32","HEAPF64","HEAP8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAP64","HEAPU64","writeStackCookie","checkStackCookie","readI53FromI64","INT53_MAX","INT53_MIN","bigintToI53Checked","stackSave","stackRestore","stackAlloc","ptrToString","zeroMemory","exitJS","getHeapMax","growMemory","ENV","ERRNO_CODES","strError","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","getExecutableName","handleException","keepRuntimeAlive","asyncLoad","alignMemory","mmapAlloc","wasmTable","noExitRuntime","addOnPreRun","addOnPostRun","getCFunc","uleb128Encode","sigToWasmTypes","generateFuncType","convertJsFunctionToWasm","freeTableIndexes","functionsInTableMap","getEmptyTableSlot","updateTableMap","getFunctionAddress","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","intArrayFromString","UTF16Decoder","stringToUTF8OnStack","writeArrayToMemory","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","UNWIND_CACHE","ExitStatus","getEnvStrings","checkWasiClock","doReadv","doWritev","initRandomFill","randomFill","emSetImmediate","emClearImmediate_deps","emClearImmediate","promiseMap","uncaughtExceptionCount","exceptionLast","exceptionCaught","Browser","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","isLeapYear","ydayFromDate","SYSCALLS","preloadPlugins","FS_createPreloadedFile","FS_modeStringToFlags","FS_getMode","FS_stdin_getChar_buffer","FS_stdin_getChar","FS_unlink","FS_createPath","FS_createDevice","FS_readFile","FS_root","FS_mounts","FS_devices","FS_streams","FS_nextInode","FS_nameTable","FS_currentPath","FS_initialized","FS_ignorePermissions","FS_filesystems","FS_syncFSRequests","FS_readFiles","FS_lookupPath","FS_getPath","FS_hashName","FS_hashAddNode","FS_hashRemoveNode","FS_lookupNode","FS_createNode","FS_destroyNode","FS_isRoot","FS_isMountpoint","FS_isFile","FS_isDir","FS_isLink","FS_isChrdev","FS_isBlkdev","FS_isFIFO","FS_isSocket","FS_flagsToPermissionString","FS_nodePermissions","FS_mayLookup","FS_mayCreate","FS_mayDelete","FS_mayOpen","FS_checkOpExists","FS_nextfd","FS_getStreamChecked","FS_getStream","FS_createStream","FS_closeStream","FS_dupStream","FS_doSetAttr","FS_chrdev_stream_ops","FS_major","FS_minor","FS_makedev","FS_registerDevice","FS_getDevice","FS_getMounts","FS_syncfs","FS_mount","FS_unmount","FS_lookup","FS_mknod","FS_statfs","FS_statfsStream","FS_statfsNode","FS_create","FS_mkdir","FS_mkdev","FS_symlink","FS_rename","FS_rmdir","FS_readdir","FS_readlink","FS_stat","FS_fstat","FS_lstat","FS_doChmod","FS_chmod","FS_lchmod","FS_fchmod","FS_doChown","FS_chown","FS_lchown","FS_fchown","FS_doTruncate","FS_truncate","FS_ftruncate","FS_utime","FS_open","FS_close","FS_isClosed","FS_llseek","FS_read","FS_write","FS_mmap","FS_msync","FS_ioctl","FS_writeFile","FS_cwd","FS_chdir","FS_createDefaultDirectories","FS_createDefaultDevices","FS_createSpecialDirectories","FS_createStandardStreams","FS_staticInit","FS_init","FS_quit","FS_findObject","FS_analyzePath","FS_createFile","FS_createDataFile","FS_forceLoadFile","FS_createLazyFile","FS_absolutePath","FS_createFolder","FS_createLink","FS_joinPath","FS_mmapAlloc","FS_standardizePath","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","SDL","SDL_gfx","allocateUTF8","allocateUTF8OnStack","print","printErr","jstoi_s","WORKERFS"].forEach(Z);var cr,r={__assert_fail:function(e,r,t,n){return r>>>=0,n>>>=0,y(`Assertion failed: ${k(e>>>=0)}, at: `+[r?k(r):"unknown filename",t,n?k(n):"unknown function"])},__syscall_chmod:function(e,r){e>>>=0;try{return e=R.getStr(e),M.chmod(e,r),0}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},__syscall_faccessat:function(e,r,t,n){r>>>=0;try{var o,a;return(r=R.getStr(r),_(0===n||512==n),r=R.calculateAt(e,r),-8&t)?-28:(o=M.lookupPath(r,{follow:!0}).node)?(a="",4&t&&(a+="r"),2&t&&(a+="w"),1&t&&(a+="x"),a&&M.nodePermissions(o,a)?-2:0):-44}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},__syscall_fchmod:function(e,r){try{return M.fchmod(e,r),0}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},__syscall_fchown32:function(e,r,t){try{return M.fchown(e,r,t),0}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},__syscall_fcntl64:function(e,r,t){R.varargs=t>>>=0;try{var n=R.getStreamFromFD(e);switch(r){case 0:if((o=Re())<0)return-28;for(;M.streams[o];)o++;return M.dupStream(n,o).fd;case 1:case 2:return 0;case 3:return n.flags;case 4:var o=Re();return n.flags|=o,0;case 12:o=N();return p[o+0>>>1>>>0]=2,0;case 13:case 14:return 0}return-28}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},__syscall_fstat64:function(e,r){r>>>=0;try{return R.writeStat(r,M.fstat(e))}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},__syscall_ftruncate64:function(e,r){r=b(r);try{return isNaN(r)?61:(M.ftruncate(e,r),0)}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},__syscall_getcwd:function(e,r){e>>>=0,r>>>=0;try{var t,n;return 0===r?-28:(t=M.cwd(),r<(n=A(t)+1)?-68:(I(t,e,r),n))}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},__syscall_ioctl:function(e,r,t){R.varargs=t>>>=0;try{var n,o=R.getStreamFromFD(e);switch(r){case 21509:return o.tty?0:-59;case 21505:if(!o.tty)return-59;if(o.tty.ops.ioctl_tcgets){var a=o.tty.ops.ioctl_tcgets(o),i=N();h[i>>>2>>>0]=a.c_iflag||0,h[i+4>>>2>>>0]=a.c_oflag||0,h[i+8>>>2>>>0]=a.c_cflag||0,h[i+12>>>2>>>0]=a.c_lflag||0;for(var s=0;s<32;s++)m[i+s+17>>>0]=a.c_cc[s]||0}return 0;case 21510:case 21511:case 21512:return o.tty?0:-59;case 21506:case 21507:case 21508:if(!o.tty)return-59;if(o.tty.ops.ioctl_tcsets){for(var i=N(),l=h[i>>>2>>>0],c=h[i+4>>>2>>>0],u=h[i+8>>>2>>>0],d=h[i+12>>>2>>>0],f=[],s=0;s<32;s++)f.push(m[i+s+17>>>0]);return o.tty.ops.ioctl_tcsets(o.tty,r,{c_iflag:l,c_oflag:c,c_cflag:u,c_lflag:d,c_cc:f})}return 0;case 21519:return o.tty?(i=N(),h[i>>>2>>>0]=0):-59;case 21520:return o.tty?-28:-59;case 21531:i=N();return M.ioctl(o,r,i);case 21523:return o.tty?(o.tty.ops.ioctl_tiocgwinsz&&(n=o.tty.ops.ioctl_tiocgwinsz(o.tty),i=N(),p[i>>>1>>>0]=n[0],p[i+2>>>1>>>0]=n[1]),0):-59;case 21524:case 21515:return o.tty?0:-59;default:return-28}}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},__syscall_lstat64:function(e,r){e>>>=0,r>>>=0;try{return e=R.getStr(e),R.writeStat(r,M.lstat(e))}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},__syscall_mkdirat:function(e,r,t){r>>>=0;try{return r=R.getStr(r),r=R.calculateAt(e,r),M.mkdir(r,t,0),0}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},__syscall_newfstatat:function(e,r,t,n){r>>>=0,t>>>=0;try{r=R.getStr(r);var o=256&n,a=4096&n;return _(!(n&=-6401),"unknown flags in __syscall_newfstatat: "+n),r=R.calculateAt(e,r,a),R.writeStat(t,o?M.lstat(r):M.stat(r))}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},__syscall_openat:function(e,r,t,n){r>>>=0,R.varargs=n>>>=0;try{r=R.getStr(r),r=R.calculateAt(e,r);var o=n?Re():0;return M.open(r,t,o).fd}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},__syscall_readlinkat:function(e,r,t,n){r>>>=0,t>>>=0,n>>>=0;try{var o,a,i;return(r=R.getStr(r),r=R.calculateAt(e,r),n<=0)?-28:(o=M.readlink(r),a=Math.min(n,A(o)),i=m[t+a>>>0],I(o,t,n+1),m[t+a>>>0]=i,a)}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},__syscall_rmdir:function(e){e>>>=0;try{return e=R.getStr(e),M.rmdir(e),0}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},__syscall_stat64:function(e,r){e>>>=0,r>>>=0;try{return e=R.getStr(e),R.writeStat(r,M.stat(e))}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},__syscall_unlinkat:function(e,r,t){r>>>=0;try{return r=R.getStr(r),r=R.calculateAt(e,r),0===t?M.unlink(r):512===t?M.rmdir(r):y("Invalid flags passed to unlinkat"),0}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},__syscall_utimensat:function(e,r,t,n){r>>>=0,t>>>=0;try{r=R.getStr(r),_(0===n),r=R.calculateAt(e,r,!0);var o,a,i,s,l=Date.now();return null!==((s=t?(i=Ne(t),a=1073741823==(o=h[t+8>>>2>>>0])?l:1073741822==o?null:1e3*i+o/1e6,i=Ne(t+=16),1073741823==(o=h[t+8>>>2>>>0])?l:1073741822==o?null:1e3*i+o/1e6):a=l)??a)&&M.utime(r,a,s),0}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},_abort_js:()=>y("native code called abort()"),_gmtime_js:function(e,r){e=b(e),r>>>=0;var e=new Date(1e3*e),t=(h[r>>>2>>>0]=e.getUTCSeconds(),h[r+4>>>2>>>0]=e.getUTCMinutes(),h[r+8>>>2>>>0]=e.getUTCHours(),h[r+12>>>2>>>0]=e.getUTCDate(),h[r+16>>>2>>>0]=e.getUTCMonth(),h[r+20>>>2>>>0]=e.getUTCFullYear()-1900,h[r+24>>>2>>>0]=e.getUTCDay(),Date.UTC(e.getUTCFullYear(),0,1,0,0,0,0)),e=(e.getTime()-t)/864e5|0;h[r+28>>>2>>>0]=e},_localtime_js:function(e,r){e=b(e),r>>>=0;var e=new Date(1e3*e),t=(h[r>>>2>>>0]=e.getSeconds(),h[r+4>>>2>>>0]=e.getMinutes(),h[r+8>>>2>>>0]=e.getHours(),h[r+12>>>2>>>0]=e.getDate(),h[r+16>>>2>>>0]=e.getMonth(),h[r+20>>>2>>>0]=e.getFullYear()-1900,h[r+24>>>2>>>0]=e.getDay(),0|Le(e)),t=(h[r+28>>>2>>>0]=t,h[r+36>>>2>>>0]=-60*e.getTimezoneOffset(),new Date(e.getFullYear(),0,1)),n=new Date(e.getFullYear(),6,1).getTimezoneOffset(),t=t.getTimezoneOffset(),e=0|(n!=t&&e.getTimezoneOffset()==Math.min(t,n));h[r+32>>>2>>>0]=e},_mmap_js:function(e,r,t,n,o,a,i){e>>>=0,o=b(o),a>>>=0,i>>>=0;try{var s,l,c;return isNaN(o)?61:(s=R.getStreamFromFD(n),c=(l=M.mmap(s,e,o,r,t)).ptr,h[a>>>2>>>0]=l.allocated,d[i>>>2>>>0]=c,0)}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},_munmap_js:function(e,r,t,n,o,a){e>>>=0,r>>>=0,a=b(a);try{var i=R.getStreamFromFD(o);2&t&&R.doMsync(e,i,r,n,a)}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return-e.errno}},_timegm_js:function(e){e>>>=0;r=Date.UTC(h[e+20>>>2>>>0]+1900,h[e+16>>>2>>>0],h[e+12>>>2>>>0],h[e+8>>>2>>>0],h[e+4>>>2>>>0],h[e>>>2>>>0],0),r=new Date(r),h[e+24>>>2>>>0]=r.getUTCDay(),t=Date.UTC(r.getUTCFullYear(),0,1,0,0,0,0),t=(r.getTime()-t)/864e5|0,h[e+28>>>2>>>0]=t;var r,t,e=r.getTime()/1e3;return BigInt(e)},_tzset_js:function(e,r,t,n){e>>>=0,r>>>=0,t>>>=0,n>>>=0;var o=(new Date).getFullYear(),a=new Date(o,0,1),o=new Date(o,6,1),a=a.getTimezoneOffset(),o=o.getTimezoneOffset(),i=Math.max(a,o),e=(d[e>>>2>>>0]=60*i,h[r>>>2>>>0]=Number(a!=o),e=>{var r=0<=e?"-":"+",e=Math.abs(e);return"UTC"+r+String(Math.floor(e/60)).padStart(2,"0")+String(e%60).padStart(2,"0")}),i=e(a),r=e(o);_(i),_(r),_(A(i)<=16,`timezone name truncated to fit in TZNAME_MAX (${i})`),_(A(r)<=16,`timezone name truncated to fit in TZNAME_MAX (${r})`),o<a?(I(i,t,17),I(r,n,17)):(I(i,n,17),I(r,t,17))},clock_time_get:function(e,r,t){return t>>>=0,Ue(e)?(e=(0===e?je:xe)(),e=Math.round(1e3*e*1e3),a[t>>>3]=BigInt(e),0):28},emscripten_date_now:je,emscripten_err:function(e){return l(k(e>>>=0))},emscripten_get_heap_max:function(){return ze()},emscripten_get_now:xe,emscripten_resize_heap:function(e){var r=s.length,t=(_(r<(e>>>=0)),ze());if(t<e)l(`Cannot enlarge memory, requested ${e} bytes, but the limit is ${t} bytes!`);else{for(var n=1;n<=4;n*=2){var o=r*(1+.2/n),o=Math.min(o,e+100663296),a=Math.min(t,Fe(Math.max(e,o),65536));if(Be(a))return!0}l(`Failed to grow the heap from ${r} bytes to ${a} bytes, not enough memory!`)}return!1},environ_get:function(e,r){e>>>=0,r>>>=0;var t,n=0,o=0;for(t of He()){var a=r+n;d[e+o>>>2>>>0]=a,n+=I(t,a,1/0)+1,o+=4}return 0},environ_sizes_get:function(e,r){e>>>=0,r>>>=0;var t,n=He(),o=(d[e>>>2>>>0]=n.length,0);for(t of n)o+=A(t)+1;return d[r>>>2>>>0]=o,0},exit:B,fd_close:function(e){try{var r=R.getStreamFromFD(e);return M.close(r),0}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return e.errno}},fd_fdstat_get:function(e,r){r>>>=0;try{var t=R.getStreamFromFD(e),n=t.tty?2:M.isDir(t.mode)?3:M.isLink(t.mode)?7:4;return m[r>>>0]=n,p[r+2>>>1>>>0]=0,a[r+8>>>3]=BigInt(0),a[r+16>>>3]=BigInt(0),0}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return e.errno}},fd_read:function(e,r,t,n){r>>>=0,t>>>=0,n>>>=0;try{var o=R.getStreamFromFD(e),a=Ke(o,r,t);return d[n>>>2>>>0]=a,0}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return e.errno}},fd_seek:function(e,r,t,n){r=b(r),n>>>=0;try{var o;return isNaN(r)?61:(o=R.getStreamFromFD(e),M.llseek(o,r,t),a[n>>>3]=BigInt(o.position),o.getdents&&0===r&&0===t&&(o.getdents=null),0)}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return e.errno}},fd_sync:function(e){try{var r=R.getStreamFromFD(e);return r.stream_ops?.fsync?r.stream_ops.fsync(r):0}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return e.errno}},fd_write:function(e,r,t,n){r>>>=0,t>>>=0,n>>>=0;try{var o=R.getStreamFromFD(e),a=Xe(o,r,t);return d[n>>>2>>>0]=a,0}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return e.errno}},random_get:function(e,r){e>>>=0,r>>>=0;try{return ye(s.subarray(e>>>0,e+r>>>0)),0}catch(e){if(void 0===M||"ErrnoError"!==e.name)throw e;return e.errno}}},C=(te("wasm-instantiate"),cr={env:r,wasi_snapshot_preview1:r},i.instantiateWasm?new Promise((t,r)=>{try{i.instantiateWasm(cr,(e,r)=>{t(ur(e))})}catch(e){l("Module.instantiateWasm callback failed with error: "+e),r(e)}}):ur(ie(ee??=ae(),cr)[0]));function ur(e){var r;return C=e.exports,e=C,e=Object.assign({},e),r=e=>()=>e()>>>0,e.strerror=(r=>e=>r(e)>>>0)(e.strerror),e.emscripten_stack_get_end=r(e.emscripten_stack_get_end),e.emscripten_stack_get_base=r(e.emscripten_stack_get_base),e.emscripten_builtin_memalign=(t=>(e,r)=>t(e,r)>>>0)(e.emscripten_builtin_memalign),e._emscripten_stack_alloc=(r=>e=>r(e)>>>0)(e._emscripten_stack_alloc),e.emscripten_stack_get_current=r(e.emscripten_stack_get_current),_(Y=(C=e).memory,"memory not found in wasm exports"),Q(),_(g=C.__indirect_function_table,"table not found in wasm exports"),ne("wasm-instantiate"),C}var dr,fr=i._main=oe("__main_argc_argv",2),mr=oe("strerror",1),pr=oe("fflush",1),hr=C.emscripten_stack_get_end,_r=(C.emscripten_stack_get_base,oe("emscripten_builtin_memalign",2)),wr=C.emscripten_stack_init,Er=(C.emscripten_stack_get_free,C._emscripten_stack_restore),yr=C._emscripten_stack_alloc,gr=C.emscripten_stack_get_current;function vr(e=[]){_(0==w,'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'),_(void 0===de||0==de.length,"cannot call main when preRun functions remain to be called");var r=fr,t=(e.unshift(H),e.length),n=Je(4*(t+1)),o=n;e.forEach(e=>{d[o>>>2>>>0]=Ze(e),o+=4}),d[o>>>2>>>0]=0;try{var a=r(t,n);return Ye(a,!0),a}catch(e){return qe(e)}}function Sr(){var e;wr(),_(0==(3&(e=hr()))),0==e&&(e+=4),d[e>>>2>>>0]=34821223,d[e+4>>>2>>>0]=2310721022,d[0]=1668509029}if(i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);0<i.preInit.length;)i.preInit.shift()();J("preInit"),function e(r=G){if(0<w)re=e;else{if(Sr(),i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)fe(i.preRun.shift());J("preRun"),le(de),0<w?re=e:(i.setStatus?(i.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>i.setStatus(""),1),t()},1)):t(),o())}function t(){if(_(!dr),dr=!0,i.calledRun=!0,!n){if(_(!X),X=!0,o(),i.noFSInit||M.initialized||M.init(),C.__wasm_call_ctors(),M.ignorePermissions=!1,o(),x(i),i.onRuntimeInitialized?.(),J("onRuntimeInitialized"),i.noInitialRun||vr(r),o(),i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)ue(i.postRun.shift());J("postRun"),le(ce)}}}(),e=i;for(const br of Object.keys(i))br in L||Object.defineProperty(L,br,{configurable:!0,get(){y(`Access to module property ('${br}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}});return e}var r,Fr;return Y||(Y=1,(r=C).exports,Fr="undefined"!=typeof document?document.currentScript?.src:void 0,r.exports=e,r.exports.default=e),C.exports}return C.exports,L(function(){if(!K){K=1,Object.defineProperty(t,"__esModule",{value:!0});var e=B;const a=G(),i=V(),s=e.__importDefault(X()),p=self;function o(e){p.postMessage({kind:"updateStatus",status:e})}function u(){p.postMessage({kind:"jobCompleted"})}function d(e,r){p.postMessage({kind:"downloadFile",buffer:e,name:r},[e.buffer])}function f(e){var r=(0,i.assertExists)(e.usedBytes);return new Uint8Array(e.contents.buffer,0,r)}async function m(e,r){const t=(0,a.defer)();var n=(0,s.default)({noInitialRun:!0,locateFile:e=>e,print:o,printErr:o,onRuntimeInitialized:()=>t.resolve()});return await t,n.FS.mkdir("/fs"),n.FS.mount((0,i.assertExists)(n.FS.filesystems.WORKERFS),{blobs:[{name:"trace.proto",data:e}]},"/fs"),o("Converting trace"),n.callMain(r),o("Trace conversion completed"),n}async function r(e,r){var t,n="/trace.json",o=["json"];void 0!==r&&o.push("--truncate",r),o.push("/fs/trace.proto",n);try{var a=await m(e,o),i=a.FS.lookupPath(n).node,s=i.contents.buffer,l=i.usedBytes,c=new Uint8Array(s,0,l);t=c,p.postMessage({kind:"openTraceInLegacy",buffer:t}),a.FS.unlink(n)}finally{u()}}p.onmessage=e=>{self.addEventListener("error",e=>(0,i.reportError)(e)),self.addEventListener("unhandledrejection",e=>(0,i.reportError)(e)),(0,i.addErrorHandler)(e=>{e=e,p.postMessage({kind:"error",error:e})});e=e.data;if(function(e){if("ConvertTraceAndDownload"===e.kind){if(void 0===e.trace)throw new Error("ConvertTraceAndDownloadArgs missing trace");if("json"!==e.format&&"systrace"!==e.format)throw new Error("ConvertTraceAndDownloadArgs has bad format");return 1}}(e))!async function(e,r,t){var n="/trace.json",o=[r];void 0!==t&&o.push("--truncate",t),o.push("/fs/trace.proto",n);try{var a=await m(e,o);d(f(a.FS.lookupPath(n).node),"trace."+r),a.FS.unlink(n)}finally{u()}}(e.trace,e.format,e.truncate);else if("ConvertTraceAndOpenInLegacy"===e.kind)r(e.trace,e.truncate);else{if("ConvertTraceToPprof"!==e.kind)throw new Error("Unknown method call "+JSON.stringify(e));!async function(e,r,t){t=["profile","--pid",""+r,"--timestamps",""+t,"/fs/trace.proto"];try{var n=await m(e,t),o=Object.keys(n.FS.lookupPath("/tmp/").node.contents)[0],a=n.FS.lookupPath("/tmp/"+o).node.contents,i=Object.keys(a);for(let e=0;e<i.length;++e){var s=i[e],l=n.FS.lookupPath(`/tmp/${o}/`+s).node,c=`/heap_dump.${e}.${r}.pb`;d(f(l),c)}}finally{u()}}(e.trace,e.pid,e.ts)}}}return t}())}();
|
|
2
|
+
//# sourceMappingURL=traceconv_bundle.js.map
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: viztracer
|
|
3
|
+
Version: 1.1.0
|
|
4
|
+
Summary: A debugging and profiling tool that can trace and visualize python code execution
|
|
5
|
+
Author-email: Tian Gao <gaogaotiantian@hotmail.com>
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/gaogaotiantian/viztracer
|
|
8
|
+
Project-URL: Documentation, https://viztracer.readthedocs.io
|
|
9
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
15
|
+
Classifier: Programming Language :: Python :: Free Threading
|
|
16
|
+
Classifier: Programming Language :: Python :: Free Threading :: 3 - Stable
|
|
17
|
+
Classifier: Intended Audience :: Developers
|
|
18
|
+
Classifier: Operating System :: MacOS
|
|
19
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
20
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
21
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
22
|
+
Classifier: Topic :: Software Development :: Bug Tracking
|
|
23
|
+
Classifier: Topic :: System :: Logging
|
|
24
|
+
Requires-Python: >=3.10
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
License-File: LICENSE
|
|
27
|
+
License-File: NOTICE.txt
|
|
28
|
+
Requires-Dist: objprint>=0.3.0
|
|
29
|
+
Provides-Extra: full
|
|
30
|
+
Requires-Dist: orjson; extra == "full"
|
|
31
|
+
Dynamic: license-file
|
|
32
|
+
|
|
33
|
+
# VizTracer
|
|
34
|
+
|
|
35
|
+
[](https://github.com/gaogaotiantian/viztracer/actions?query=workflow%3Abuild) [](https://github.com/gaogaotiantian/viztracer/actions?query=workflow%3ALint) [](https://viztracer.readthedocs.io/en/stable/) [](https://codecov.io/gh/gaogaotiantian/viztracer) [](https://pypi.org/project/viztracer/) [](https://marketplace.visualstudio.com/items?itemName=gaogaotiantian.viztracer-vscode) [](https://img.shields.io/pypi/pyversions/viztracer) [](https://github.com/gaogaotiantian/viztracer/blob/master/LICENSE) [](https://github.com/gaogaotiantian/viztracer/commits/master) [](https://github.com/sponsors/gaogaotiantian)
|
|
36
|
+
|
|
37
|
+
VizTracer is a low-overhead logging/debugging/profiling tool that can trace and visualize your python code execution.
|
|
38
|
+
|
|
39
|
+
The front-end UI is powered by [Perfetto](https://perfetto.dev/). **Use "AWSD" to zoom/navigate**.
|
|
40
|
+
More help can be found in "Support - Controls".
|
|
41
|
+
|
|
42
|
+
[](https://github.com/gaogaotiantian/viztracer/blob/master/img/example.png)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
## Highlights
|
|
46
|
+
|
|
47
|
+
* Detailed function entry/exit information on timeline with source code
|
|
48
|
+
* Super easy to use, no source code change for most features, no package dependency
|
|
49
|
+
* Low overhead, probably the fastest tracer in the market
|
|
50
|
+
* Supports threading, multiprocessing, subprocess, async and PyTorch
|
|
51
|
+
* Powerful front-end, able to render GB-level trace smoothly
|
|
52
|
+
* Works on Linux/MacOS/Windows
|
|
53
|
+
|
|
54
|
+
## Install
|
|
55
|
+
|
|
56
|
+
The preferred way to install VizTracer is via pip
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
pip install viztracer
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Basic Usage
|
|
63
|
+
|
|
64
|
+
### Command Line
|
|
65
|
+
|
|
66
|
+
```sh
|
|
67
|
+
# Instead of "python3 my_script.py arg1 arg2"
|
|
68
|
+
viztracer my_script.py arg1 arg2
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
<details>
|
|
72
|
+
|
|
73
|
+
<summary>
|
|
74
|
+
A <code>result.json</code> file will be generated, which you can open with <code>vizviewer</code>
|
|
75
|
+
</summary>
|
|
76
|
+
|
|
77
|
+
```sh
|
|
78
|
+
# You can display all the files in a directory and open them in browser too
|
|
79
|
+
vizviewer ./
|
|
80
|
+
# For very large trace files, try external trace processor
|
|
81
|
+
vizviewer --use_external_processor result.json
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
vizviewer will host an HTTP server on ``http://localhost:9001``. You can also open your browser and use that address.
|
|
85
|
+
|
|
86
|
+
If you do not want vizviewer to open the webbrowser automatically, you can use
|
|
87
|
+
|
|
88
|
+
```sh
|
|
89
|
+
vizviewer --server_only result.json
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
If you just need to bring up the trace report once, and do not want the persistent server, use
|
|
93
|
+
|
|
94
|
+
```sh
|
|
95
|
+
vizviewer --once result.json
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
</details>
|
|
99
|
+
|
|
100
|
+
```sh
|
|
101
|
+
vizviewer result.json
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
A [VS Code Extension](https://marketplace.visualstudio.com/items?itemName=gaogaotiantian.viztracer-vscode)
|
|
105
|
+
is available to make your life even easier.
|
|
106
|
+
|
|
107
|
+
<p align="center">
|
|
108
|
+
<img src="https://github.com/gaogaotiantian/viztracer-vscode/raw/master/assets/demo.gif" />
|
|
109
|
+
</p>
|
|
110
|
+
|
|
111
|
+
<details>
|
|
112
|
+
|
|
113
|
+
<summary>
|
|
114
|
+
Add <code>--open</code> to open the reports right after tracing
|
|
115
|
+
</summary>
|
|
116
|
+
|
|
117
|
+
```sh
|
|
118
|
+
viztracer --open my_script.py arg1 arg2
|
|
119
|
+
viztracer -o result.html --open my_script.py arg1 arg2
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
</details>
|
|
123
|
+
|
|
124
|
+
<details>
|
|
125
|
+
|
|
126
|
+
<summary>
|
|
127
|
+
modules and console scripts(like <code>flask</code>) are supported as well
|
|
128
|
+
</summary>
|
|
129
|
+
|
|
130
|
+
```sh
|
|
131
|
+
viztracer -m your_module
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
```sh
|
|
135
|
+
viztracer flask run
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
</details>
|
|
139
|
+
|
|
140
|
+
### Inline
|
|
141
|
+
|
|
142
|
+
You can also manually start/stop VizTracer in your script as well.
|
|
143
|
+
|
|
144
|
+
```python
|
|
145
|
+
from viztracer import VizTracer
|
|
146
|
+
|
|
147
|
+
tracer = VizTracer()
|
|
148
|
+
tracer.start()
|
|
149
|
+
# Something happens here
|
|
150
|
+
tracer.stop()
|
|
151
|
+
tracer.save() # also takes output_file as an optional argument
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Or, you can do it with ```with``` statement
|
|
155
|
+
|
|
156
|
+
```python
|
|
157
|
+
with VizTracer(output_file="optional.json") as tracer:
|
|
158
|
+
# Something happens here
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Jupyter
|
|
162
|
+
|
|
163
|
+
If you are using Jupyter, you can use viztracer cell magics.
|
|
164
|
+
|
|
165
|
+
```python
|
|
166
|
+
# You need to load the extension first
|
|
167
|
+
%load_ext viztracer
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
```python
|
|
171
|
+
%%viztracer
|
|
172
|
+
# Your code after
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
A ``VizTracer Report`` button will appear after the cell and you can click it to view the results
|
|
176
|
+
|
|
177
|
+
### PyTorch
|
|
178
|
+
|
|
179
|
+
VizTracer can log native calls and GPU events of PyTorch (based on `torch.profiler`) with
|
|
180
|
+
``--log_torch``.
|
|
181
|
+
|
|
182
|
+
```python
|
|
183
|
+
with VizTracer(log_torch=True) as tracer:
|
|
184
|
+
# Your torch code
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
```sh
|
|
188
|
+
viztracer --log_torch your_model.py
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Advanced Usage
|
|
192
|
+
|
|
193
|
+
### Trace Filter
|
|
194
|
+
|
|
195
|
+
VizTracer can filter out the data you don't want to reduce overhead and keep info of a longer time period before you dump the log.
|
|
196
|
+
|
|
197
|
+
* [Min Duration](https://viztracer.readthedocs.io/en/stable/filter.html#min-duration)
|
|
198
|
+
* [Max Stack Depth](https://viztracer.readthedocs.io/en/stable/filter.html#max-stack-depth)
|
|
199
|
+
* [Include Files](https://viztracer.readthedocs.io/en/stable/filter.html#include-files)
|
|
200
|
+
* [Exclude Files](https://viztracer.readthedocs.io/en/stable/filter.html#exclude-files)
|
|
201
|
+
* [Ignore C Function](https://viztracer.readthedocs.io/en/stable/filter.html#ignore-c-function)
|
|
202
|
+
* [Sparse Log](https://viztracer.readthedocs.io/en/stable/filter.html#log-sparse)
|
|
203
|
+
|
|
204
|
+
### Extra Logs without Code Change
|
|
205
|
+
|
|
206
|
+
VizTracer can log extra information without changing your source code
|
|
207
|
+
|
|
208
|
+
* [Any Variable/Attribute with RegEx](https://viztracer.readthedocs.io/en/stable/extra_log.html#log-variable)
|
|
209
|
+
* [Function Entry](https://viztracer.readthedocs.io/en/stable/extra_log.html#log-function-entry)
|
|
210
|
+
* [Variables in Specified Function](https://viztracer.readthedocs.io/en/stable/extra_log.html#log-function-execution)
|
|
211
|
+
* [Garbage Collector Operation](https://viztracer.readthedocs.io/en/stable/extra_log.html#log-garbage-collector)
|
|
212
|
+
* [Function Input Arguments](https://viztracer.readthedocs.io/en/stable/extra_log.html#log-function-arguments)
|
|
213
|
+
* [Function Return Value](https://viztracer.readthedocs.io/en/stable/extra_log.html#log-function-return-value)
|
|
214
|
+
* [Audit Events](https://viztracer.readthedocs.io/en/stable/extra_log.html#log-audit)
|
|
215
|
+
* [Raised Exceptions](https://viztracer.readthedocs.io/en/stable/extra_log.html#log-exception)
|
|
216
|
+
|
|
217
|
+
### Add Custom Event
|
|
218
|
+
|
|
219
|
+
VizTracer supports inserting custom events while the program is running. This works like a print debug, but you can know when this print happens while looking at trace data.
|
|
220
|
+
|
|
221
|
+
* [Instant Event](https://viztracer.readthedocs.io/en/stable/custom_event_intro.html#instant-event)
|
|
222
|
+
* [Variable Event](https://viztracer.readthedocs.io/en/stable/custom_event_intro.html#variable-event)
|
|
223
|
+
* [Duration Event](https://viztracer.readthedocs.io/en/stable/custom_event_intro.html#duration-event)
|
|
224
|
+
|
|
225
|
+
## Misc
|
|
226
|
+
|
|
227
|
+
### Multi Thread Support
|
|
228
|
+
|
|
229
|
+
For Python3.12+, VizTracer supports Python-level multi-thread tracing without the need to do any modification to your code.
|
|
230
|
+
|
|
231
|
+
For versions before 3.12, VizTracer supports python native ```threading``` module. Just start ```VizTracer``` before you create threads and it will just work.
|
|
232
|
+
|
|
233
|
+
For other multi-thread scenarios, you can use ``enable_thread_tracing()`` to notice VizTracer about the thread to trace it.
|
|
234
|
+
|
|
235
|
+
[](https://github.com/gaogaotiantian/viztracer/blob/master/img/multithread_example.png)
|
|
236
|
+
|
|
237
|
+
Refer to [multi thread docs](https://viztracer.readthedocs.io/en/stable/concurrency.html) for details
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
### Multi Process Support
|
|
241
|
+
|
|
242
|
+
VizTracer supports ```subprocess```, ```multiprocessing```, ```os.fork()```, ```concurrent.futures```, and ```loky``` out of the box.
|
|
243
|
+
|
|
244
|
+
For more general multi-process cases, VizTracer can support with some extra steps.
|
|
245
|
+
|
|
246
|
+
[](https://github.com/gaogaotiantian/viztracer/blob/master/img/multiprocess_example.png)
|
|
247
|
+
|
|
248
|
+
Refer to [multi process docs](https://viztracer.readthedocs.io/en/stable/concurrency.html) for details
|
|
249
|
+
|
|
250
|
+
### Async Support
|
|
251
|
+
|
|
252
|
+
VizTracer supports ```asyncio``` natively, but could enhance the report by using ```--log_async```.
|
|
253
|
+
|
|
254
|
+
[](https://github.com/gaogaotiantian/viztracer/blob/master/img/async_example.png)
|
|
255
|
+
|
|
256
|
+
Refer to [async docs](https://viztracer.readthedocs.io/en/stable/concurrency.html) for details
|
|
257
|
+
|
|
258
|
+
### Flamegraph
|
|
259
|
+
|
|
260
|
+
Perfetto supports native flamegraph, just select slices on the UI and choose "Slice Flamegraph".
|
|
261
|
+
|
|
262
|
+
[](https://github.com/gaogaotiantian/viztracer/blob/master/img/flamegraph.png)
|
|
263
|
+
|
|
264
|
+
### Remote attach
|
|
265
|
+
|
|
266
|
+
VizTracer supports remote attach to an arbitrary Python process to trace it, as long as viztracer is importable
|
|
267
|
+
|
|
268
|
+
Refer to [remote attach docs](https://viztracer.readthedocs.io/en/stable/remote_attach.html)
|
|
269
|
+
|
|
270
|
+
### JSON alternative
|
|
271
|
+
|
|
272
|
+
VizTracer needs to dump the internal data to json format. It is recommended for the users to install ```orjson```, which is much faster than the builtin ```json``` library. VizTracer will try to import ```orjson``` and fall back to the builtin ```json``` library if ```orjson``` does not exist.
|
|
273
|
+
|
|
274
|
+
## Performance
|
|
275
|
+
|
|
276
|
+
VizTracer puts in a lot of effort to achieve low overhead. The actual performance impact largely depends on your application.
|
|
277
|
+
For typical codebases, the overhead is expected to be below 1x. If your code has infrequent function calls,
|
|
278
|
+
the overhead could be minimal.
|
|
279
|
+
|
|
280
|
+
<details>
|
|
281
|
+
|
|
282
|
+
<summary>
|
|
283
|
+
Detailed explanation
|
|
284
|
+
</summary>
|
|
285
|
+
|
|
286
|
+
The overhead introduced by VizTracer is basically a fixed amount of time during function entry and exit, so the more time spent on
|
|
287
|
+
function entries and exits, the more overhead will be observed. A pure recursive ```fib``` function could suffer 3x-4x overhead
|
|
288
|
+
on Python3.11+ (when the Python call is optimized, before that Python call was slower so the overhead ratio would be less).
|
|
289
|
+
|
|
290
|
+
In the real life scenario, your code should not spend too much time on function calls (they don't really do anything useful), so
|
|
291
|
+
the overhead would be much smaller.
|
|
292
|
+
|
|
293
|
+
Many techniques are applied to minimize the overall overhead during code execution to reduce the inevitable skew introduced by
|
|
294
|
+
VizTracer (the report saving part is not as critical). For example, VizTracer tries to use the CPU timestamp counter instead of
|
|
295
|
+
a syscall to get the time when available. On Python 3.12+, VizTracer uses ```sys.monitoring``` which has less overhead than
|
|
296
|
+
```sys.setprofile```. All of the efforts made it observably faster than ```cProfile```, the Python stdlib profiler.
|
|
297
|
+
|
|
298
|
+
However, VizTracer is a tracer, which means it has to record every single function entry and exit, so it can't be as fast as
|
|
299
|
+
the sampling profilers - they are not the same thing. With the extra overhead, VizTracer provides a lot more information than
|
|
300
|
+
normal sampling profilers.
|
|
301
|
+
|
|
302
|
+
</details>
|
|
303
|
+
|
|
304
|
+
## Documentation
|
|
305
|
+
|
|
306
|
+
For full documentation, please see [https://viztracer.readthedocs.io/en/stable](https://viztracer.readthedocs.io/en/stable)
|
|
307
|
+
|
|
308
|
+
## Bugs/Requests
|
|
309
|
+
|
|
310
|
+
Please send bug reports and feature requests through [github issue tracker](https://github.com/gaogaotiantian/viztracer/issues). VizTracer is currently under development now and it's open to any constructive suggestions.
|
|
311
|
+
|
|
312
|
+
## License
|
|
313
|
+
|
|
314
|
+
Copyright 2020-2025 Tian Gao.
|
|
315
|
+
|
|
316
|
+
Distributed under the terms of the [Apache 2.0 license](https://github.com/gaogaotiantian/viztracer/blob/master/LICENSE).
|