From 4645c9b8b9dcddf649cca5369217a6dd81b1187b Mon Sep 17 00:00:00 2001 From: Rafat Hussain Date: Mon, 21 Sep 2015 17:49:35 +0530 Subject: [PATCH] First pages commit --- data/ecg.txt | 5400 +++++ data/heavisine.txt | 512 + data/noisybumps.txt | 2048 ++ data/noisyheavisine.txt | 512 + data/piecepoly.txt | 1024 + data/pieceregular.txt | 256 + data/pieceregular2048.txt | 2048 ++ data/wavedb.json | 73 + display.html | 48 + favicon.ico | Bin 0 -> 40510 bytes front.html | 56 + img/3dgausswave.png | Bin 0 -> 42240 bytes index.html | 65 + js/app.js | 28 + js/dygraph-combined-dev.js | 12127 +++++++++++ js/ie-emulation-modes-warning.js | 51 + js/ie10-viewport-bug-workaround.js | 22 + js/index_user_scripts.js | 95 + js/ngfile.js | 430 + js/wavebak.js | 30708 ++++++++++++++++++++++++++ js/wavelet.js | 31106 +++++++++++++++++++++++++++ js/wavewrapper.js | 296 + stylesheets/free.css | 116 + 23 files changed, 87021 insertions(+) create mode 100644 data/ecg.txt create mode 100644 data/heavisine.txt create mode 100644 data/noisybumps.txt create mode 100644 data/noisyheavisine.txt create mode 100644 data/piecepoly.txt create mode 100644 data/pieceregular.txt create mode 100644 data/pieceregular2048.txt create mode 100644 data/wavedb.json create mode 100644 display.html create mode 100644 favicon.ico create mode 100644 front.html create mode 100644 img/3dgausswave.png create mode 100644 index.html create mode 100644 js/app.js create mode 100644 js/dygraph-combined-dev.js create mode 100644 js/ie-emulation-modes-warning.js create mode 100644 js/ie10-viewport-bug-workaround.js create mode 100644 js/index_user_scripts.js create mode 100644 js/ngfile.js create mode 100644 js/wavebak.js create mode 100644 js/wavelet.js create mode 100644 js/wavewrapper.js create mode 100644 stylesheets/free.css diff --git a/data/ecg.txt b/data/ecg.txt new file mode 100644 index 0000000..b5a7d90 --- /dev/null +++ b/data/ecg.txt @@ -0,0 +1,5400 @@ +-0.078 +-0.081 +-0.088 +-0.115 +-0.159 +-0.206 +-0.206 +-0.169 +-0.122 +-0.098 +-0.098 +-0.105 +-0.095 +-0.071 +-0.054 +-0.061 +-0.081 +-0.098 +-0.108 +-0.111 +-0.095 +-0.074 +-0.057 +-0.068 +-0.088 +-0.118 +-0.132 +-0.122 +-0.091 +-0.074 +-0.078 +-0.088 +-0.071 +-0.057 +-0.081 +-0.115 +-0.122 +-0.122 +-0.122 +-0.122 +-0.135 +-0.149 +-0.155 +-0.145 +-0.135 +-0.125 +-0.101 +-0.071 +-0.057 +-0.061 +-0.071 +-0.084 +-0.088 +-0.084 +-0.068 +-0.051 +-0.061 +-0.091 +-0.108 +-0.101 +-0.084 +-0.095 +-0.139 +-0.166 +-0.152 +-0.125 +-0.105 +-0.105 +-0.098 +-0.095 +-0.098 +-0.108 +-0.115 +-0.128 +-0.132 +-0.115 +-0.088 +-0.081 +-0.084 +-0.088 +-0.101 +-0.122 +-0.142 +-0.159 +-0.142 +-0.118 +-0.095 +-0.088 +-0.084 +-0.105 +-0.125 +-0.118 +-0.084 +-0.068 +-0.064 +-0.068 +-0.074 +-0.078 +-0.098 +-0.118 +-0.122 +-0.122 +-0.128 +-0.139 +-0.152 +-0.149 +-0.128 +-0.108 +-0.088 +-0.088 +-0.098 +-0.115 +-0.091 +-0.071 +-0.057 +-0.057 +-0.064 +-0.095 +-0.122 +-0.128 +-0.111 +-0.095 +-0.091 +-0.108 +-0.122 +-0.118 +-0.111 +-0.111 +-0.111 +-0.108 +-0.084 +-0.074 +-0.084 +-0.105 +-0.122 +-0.149 +-0.176 +-0.162 +-0.125 +-0.108 +-0.122 +-0.125 +-0.125 +-0.118 +-0.101 +-0.081 +-0.071 +-0.068 +-0.071 +-0.088 +-0.098 +-0.108 +-0.108 +-0.105 +-0.084 +-0.064 +-0.061 +-0.081 +-0.101 +-0.111 +-0.111 +-0.115 +-0.125 +-0.122 +-0.101 +-0.088 +-0.081 +-0.088 +-0.081 +-0.091 +-0.108 +-0.125 +-0.142 +-0.142 +-0.128 +-0.108 +-0.105 +-0.125 +-0.132 +-0.132 +-0.111 +-0.081 +-0.057 +-0.071 +-0.115 +-0.132 +-0.118 +-0.108 +-0.108 +-0.115 +-0.091 +-0.064 +-0.061 +-0.088 +-0.111 +-0.122 +-0.125 +-0.132 +-0.125 +-0.108 +-0.088 +-0.071 +-0.061 +-0.071 +-0.081 +-0.068 +-0.047 +-0.057 +-0.078 +-0.081 +-0.061 +-0.027 +-0.014 +-0.024 +-0.044 +-0.071 +-0.068 +-0.014 +0.034 +0.041 +0.01 +-0.007 +0 +0.024 +0.034 +0.017 +-0.01 +-0.03 +-0.03 +-0.03 +-0.027 +-0.027 +-0.037 +-0.054 +-0.064 +-0.061 +-0.041 +-0.047 +-0.078 +-0.105 +-0.125 +-0.122 +-0.108 +-0.118 +-0.125 +-0.139 +-0.149 +-0.149 +-0.118 +-0.105 +-0.125 +-0.145 +-0.152 +-0.149 +-0.149 +-0.152 +-0.152 +-0.135 +-0.081 +0.01 +0.142 +0.277 +0.409 +0.527 +0.655 +0.733 +0.709 +0.618 +0.527 +0.436 +0.331 +0.179 +-0.02 +-0.253 +-0.493 +-0.682 +-0.764 +-0.767 +-0.753 +-0.76 +-0.794 +-0.845 +-0.865 +-0.858 +-0.865 +-0.892 +-0.912 +-0.922 +-0.912 +-0.905 +-0.922 +-0.936 +-0.936 +-0.902 +-0.861 +-0.831 +-0.794 +-0.747 +-0.682 +-0.611 +-0.534 +-0.446 +-0.365 +-0.284 +-0.216 +-0.179 +-0.166 +-0.166 +-0.169 +-0.182 +-0.172 +-0.125 +-0.098 +-0.142 +-0.172 +-0.118 +-0.014 +0.051 +0.057 +0.02 +-0.02 +-0.051 +-0.054 +-0.074 +-0.091 +-0.081 +-0.034 +0.007 +0.024 +0.007 +-0.027 +-0.054 +-0.051 +-0.03 +-0.003 +0 +0.03 +0.074 +0.084 +0.064 +0.03 +0 +0.017 +0.064 +0.108 +0.145 +0.182 +0.189 +0.176 +0.145 +0.128 +0.152 +0.206 +0.257 +0.294 +0.324 +0.348 +0.348 +0.355 +0.382 +0.419 +0.446 +0.456 +0.476 +0.52 +0.551 +0.571 +0.595 +0.611 +0.625 +0.639 +0.618 +0.568 +0.547 +0.537 +0.527 +0.527 +0.503 +0.422 +0.351 +0.345 +0.372 +0.372 +0.307 +0.247 +0.236 +0.257 +0.26 +0.236 +0.189 +0.152 +0.108 +0.057 +0.02 +0 +-0.02 +-0.03 +-0.027 +0 +0.024 +0.02 +-0.02 +-0.068 +-0.078 +-0.047 +-0.02 +-0.027 +-0.054 +-0.061 +-0.064 +-0.078 +-0.095 +-0.125 +-0.142 +-0.115 +-0.068 +-0.051 +-0.057 +-0.064 +-0.078 +-0.091 +-0.105 +-0.108 +-0.105 +-0.078 +-0.051 +-0.041 +-0.084 +-0.128 +-0.132 +-0.078 +-0.02 +0.003 +-0.027 +-0.098 +-0.139 +-0.115 +-0.081 +-0.081 +-0.091 +-0.081 +-0.064 +-0.047 +-0.057 +-0.084 +-0.101 +-0.081 +-0.054 +-0.061 +-0.084 +-0.108 +-0.098 +-0.071 +-0.057 +-0.051 +-0.044 +-0.034 +-0.054 +-0.101 +-0.139 +-0.132 +-0.105 +-0.061 +-0.041 +-0.041 +-0.054 +-0.061 +-0.084 +-0.105 +-0.115 +-0.115 +-0.118 +-0.108 +-0.095 +-0.078 +-0.064 +-0.054 +-0.054 +-0.054 +-0.078 +-0.098 +-0.105 +-0.095 +-0.078 +-0.081 +-0.095 +-0.091 +-0.095 +-0.095 +-0.098 +-0.095 +-0.101 +-0.108 +-0.122 +-0.125 +-0.111 +-0.095 +-0.101 +-0.101 +-0.101 +-0.095 +-0.115 +-0.125 +-0.122 +-0.118 +-0.101 +-0.068 +-0.041 +-0.047 +-0.061 +-0.071 +-0.095 +-0.111 +-0.108 +-0.088 +-0.084 +-0.098 +-0.105 +-0.088 +-0.064 +-0.061 +-0.088 +-0.118 +-0.108 +-0.081 +-0.064 +-0.074 +-0.088 +-0.071 +-0.051 +-0.051 +-0.071 +-0.101 +-0.128 +-0.128 +-0.108 +-0.081 +-0.054 +-0.044 +-0.068 +-0.101 +-0.118 +-0.118 +-0.108 +-0.101 +-0.111 +-0.111 +-0.095 +-0.081 +-0.091 +-0.095 +-0.078 +-0.081 +-0.108 +-0.101 +-0.061 +-0.027 +-0.054 +-0.095 +-0.108 +-0.101 +-0.122 +-0.145 +-0.132 +-0.091 +-0.054 +-0.054 +-0.074 +-0.074 +-0.084 +-0.108 +-0.122 +-0.111 +-0.101 +-0.088 +-0.061 +-0.027 +-0.03 +-0.068 +-0.108 +-0.135 +-0.132 +-0.095 +-0.064 +-0.078 +-0.108 +-0.145 +-0.166 +-0.145 +-0.108 +-0.084 +-0.095 +-0.098 +-0.084 +-0.068 +-0.044 +-0.037 +-0.057 +-0.095 +-0.142 +-0.155 +-0.115 +-0.061 +-0.037 +-0.037 +-0.061 +-0.071 +-0.054 +-0.027 +-0.027 +-0.047 +-0.081 +-0.088 +-0.051 +0.007 +0.041 +0.03 +-0.003 +-0.041 +-0.074 +-0.078 +-0.054 +-0.014 +0.007 +0.007 +0.003 +0.03 +0.057 +0.054 +0.003 +-0.037 +-0.054 +-0.057 +-0.061 +-0.047 +-0.03 +-0.02 +-0.034 +-0.057 +-0.095 +-0.139 +-0.172 +-0.179 +-0.162 +-0.128 +-0.105 +-0.084 +-0.074 +-0.054 +-0.074 +-0.125 +-0.179 +-0.172 +-0.111 +-0.054 +-0.047 +-0.081 +-0.125 +-0.139 +-0.101 +-0.034 +0 +0.017 +0.068 +0.162 +0.274 +0.405 +0.554 +0.713 +0.77 +0.709 +0.598 +0.486 +0.361 +0.199 +-0.007 +-0.226 +-0.449 +-0.642 +-0.76 +-0.821 +-0.878 +-0.865 +-0.818 +-0.791 +-0.828 +-0.902 +-0.956 +-0.98 +-0.986 +-0.997 +-1.003 +-1.007 +-1.003 +-0.997 +-0.966 +-0.939 +-0.899 +-0.828 +-0.753 +-0.703 +-0.659 +-0.588 +-0.5 +-0.426 +-0.341 +-0.264 +-0.223 +-0.189 +-0.172 +-0.149 +-0.125 +-0.098 +-0.095 +-0.098 +-0.118 +-0.108 +-0.088 +-0.061 +-0.041 +-0.02 +0.003 +0.02 +0 +-0.054 +-0.108 +-0.101 +-0.044 +0.024 +0.041 +0.02 +-0.003 +0.003 +0.014 +0.017 +0.007 +0.02 +0.034 +0.047 +0.054 +0.071 +0.071 +0.064 +0.078 +0.105 +0.128 +0.155 +0.166 +0.162 +0.152 +0.152 +0.162 +0.182 +0.193 +0.193 +0.186 +0.206 +0.267 +0.345 +0.392 +0.416 +0.409 +0.422 +0.459 +0.48 +0.473 +0.503 +0.571 +0.639 +0.659 +0.652 +0.632 +0.632 +0.659 +0.696 +0.699 +0.655 +0.584 +0.527 +0.507 +0.493 +0.48 +0.473 +0.446 +0.409 +0.375 +0.338 +0.301 +0.284 +0.274 +0.274 +0.26 +0.223 +0.169 +0.101 +0.037 +0.007 +0.03 +0.078 +0.081 +0.041 +0 +-0.01 +-0.01 +-0.01 +-0.017 +-0.034 +-0.051 +-0.068 +-0.081 +-0.088 +-0.088 +-0.078 +-0.071 +-0.074 +-0.071 +-0.054 +-0.037 +-0.02 +-0.02 +-0.034 +-0.057 +-0.071 +-0.054 +-0.024 +-0.017 +-0.037 +-0.037 +-0.041 +-0.071 +-0.095 +-0.105 +-0.098 +-0.098 +-0.105 +-0.098 +-0.061 +-0.027 +-0.007 +-0.027 +-0.054 +-0.071 +-0.081 +-0.084 +-0.091 +-0.101 +-0.101 +-0.088 +-0.068 +-0.061 +-0.051 +-0.041 +-0.034 +-0.034 +-0.051 +-0.071 +-0.078 +-0.084 +-0.095 +-0.088 +-0.061 +-0.047 +-0.068 +-0.088 +-0.081 +-0.074 +-0.078 +-0.064 +-0.041 +-0.03 +-0.044 +-0.091 +-0.139 +-0.125 +-0.061 +-0.003 +-0.003 +-0.041 +-0.071 +-0.081 +-0.074 +-0.064 +-0.044 +-0.03 +-0.03 +-0.057 +-0.088 +-0.108 +-0.098 +-0.071 +-0.061 +-0.064 +-0.078 +-0.101 +-0.108 +-0.098 +-0.101 +-0.098 +-0.088 +-0.074 +-0.047 +-0.02 +-0.017 +-0.047 +-0.081 +-0.105 +-0.091 +-0.074 +-0.061 +-0.068 +-0.054 +-0.024 +-0.007 +-0.01 +-0.003 +0 +-0.014 +-0.054 +-0.088 +-0.081 +-0.064 +-0.064 +-0.084 +-0.101 +-0.111 +-0.125 +-0.135 +-0.139 +-0.128 +-0.111 +-0.098 +-0.098 +-0.098 +-0.091 +-0.081 +-0.071 +-0.074 +-0.078 +-0.071 +-0.064 +-0.047 +-0.01 +0.014 +-0.01 +-0.061 +-0.111 +-0.135 +-0.135 +-0.108 +-0.084 +-0.068 +-0.071 +-0.095 +-0.135 +-0.155 +-0.132 +-0.081 +-0.057 +-0.057 +-0.068 +-0.074 +-0.064 +-0.047 +-0.061 +-0.074 +-0.071 +-0.047 +-0.044 +-0.084 +-0.122 +-0.125 +-0.105 +-0.074 +-0.054 +-0.037 +-0.051 +-0.081 +-0.105 +-0.108 +-0.095 +-0.078 +-0.084 +-0.095 +-0.088 +-0.074 +-0.071 +-0.078 +-0.095 +-0.108 +-0.095 +-0.081 +-0.064 +-0.03 +-0.01 +-0.044 +-0.098 +-0.125 +-0.115 +-0.095 +-0.115 +-0.145 +-0.128 +-0.064 +-0.007 +0.01 +-0.017 +-0.044 +-0.054 +-0.051 +-0.051 +-0.047 +-0.041 +-0.037 +-0.037 +-0.03 +-0.037 +-0.024 +-0.007 +-0.017 +-0.034 +-0.017 +0.017 +0.034 +0.03 +0.02 +0.02 +0.024 +0.034 +0.027 +-0.007 +-0.057 +-0.088 +-0.081 +-0.068 +-0.057 +-0.054 +-0.054 +-0.064 +-0.071 +-0.081 +-0.098 +-0.132 +-0.162 +-0.149 +-0.105 +-0.095 +-0.132 +-0.155 +-0.155 +-0.149 +-0.172 +-0.193 +-0.169 +-0.132 +-0.111 +-0.122 +-0.142 +-0.145 +-0.118 +-0.051 +0.051 +0.159 +0.257 +0.355 +0.493 +0.639 +0.686 +0.611 +0.493 +0.382 +0.287 +0.162 +-0.02 +-0.25 +-0.493 +-0.723 +-0.858 +-0.899 +-0.912 +-0.922 +-0.916 +-0.885 +-0.858 +-0.872 +-0.956 +-1.037 +-1.051 +-1.007 +-0.956 +-0.943 +-0.949 +-0.936 +-0.916 +-0.889 +-0.872 +-0.861 +-0.848 +-0.807 +-0.72 +-0.601 +-0.497 +-0.419 +-0.348 +-0.287 +-0.226 +-0.179 +-0.152 +-0.152 +-0.186 +-0.223 +-0.206 +-0.159 +-0.118 +-0.115 +-0.135 +-0.145 +-0.125 +-0.088 +-0.068 +-0.061 +-0.051 +-0.027 +0 +0.01 +0 +0 +-0.01 +-0.034 +-0.057 +-0.054 +-0.03 +0 +0.02 +0.024 +0.01 +-0.014 +-0.041 +-0.044 +-0.01 +0.017 +0.01 +0 +0.02 +0.034 +0.014 +-0.034 +-0.02 +0.081 +0.193 +0.247 +0.236 +0.176 +0.139 +0.149 +0.199 +0.257 +0.314 +0.348 +0.358 +0.378 +0.416 +0.429 +0.436 +0.456 +0.483 +0.507 +0.52 +0.534 +0.541 +0.534 +0.534 +0.534 +0.537 +0.537 +0.527 +0.49 +0.453 +0.419 +0.355 +0.294 +0.294 +0.348 +0.378 +0.351 +0.311 +0.257 +0.23 +0.23 +0.233 +0.203 +0.135 +0.047 +-0.017 +-0.051 +-0.047 +-0.024 +0 +0 +-0.01 +-0.044 +-0.074 +-0.081 +-0.078 +-0.071 +-0.074 +-0.081 +-0.078 +-0.084 +-0.115 +-0.142 +-0.115 +-0.051 +-0.01 +-0.03 +-0.081 +-0.115 +-0.125 +-0.135 +-0.132 +-0.111 +-0.074 +-0.044 +-0.044 +-0.074 +-0.111 +-0.132 +-0.139 +-0.145 +-0.145 +-0.152 +-0.155 +-0.179 +-0.186 +-0.169 +-0.135 +-0.105 +-0.105 +-0.122 +-0.142 +-0.132 +-0.118 +-0.139 +-0.142 +-0.105 +-0.068 +-0.074 +-0.098 +-0.118 +-0.122 +-0.098 +-0.081 +-0.084 +-0.105 +-0.122 +-0.101 +-0.071 +-0.057 +-0.064 +-0.081 +-0.108 +-0.139 +-0.149 +-0.135 +-0.108 +-0.098 +-0.128 +-0.159 +-0.142 +-0.111 +-0.135 +-0.172 +-0.169 +-0.122 +-0.071 +-0.061 +-0.091 +-0.128 +-0.122 +-0.084 +-0.081 +-0.115 +-0.139 +-0.118 +-0.091 +-0.068 +-0.061 +-0.057 +-0.064 +-0.071 +-0.084 +-0.098 +-0.108 +-0.111 +-0.122 +-0.125 +-0.118 +-0.101 +-0.098 +-0.122 +-0.149 +-0.166 +-0.176 +-0.216 +-0.216 +-0.166 +-0.101 +-0.084 +-0.115 +-0.142 +-0.139 +-0.128 +-0.132 +-0.128 +-0.108 +-0.101 +-0.091 +-0.078 +-0.071 +-0.084 +-0.118 +-0.155 +-0.182 +-0.179 +-0.159 +-0.142 +-0.139 +-0.132 +-0.122 +-0.101 +-0.081 +-0.088 +-0.098 +-0.108 +-0.111 +-0.095 +-0.081 +-0.095 +-0.125 +-0.152 +-0.169 +-0.159 +-0.135 +-0.135 +-0.162 +-0.199 +-0.196 +-0.142 +-0.101 +-0.101 +-0.135 +-0.145 +-0.125 +-0.108 +-0.122 +-0.135 +-0.135 +-0.122 +-0.118 +-0.118 +-0.135 +-0.149 +-0.142 +-0.135 +-0.135 +-0.139 +-0.149 +-0.139 +-0.125 +-0.122 +-0.108 +-0.108 +-0.118 +-0.125 +-0.132 +-0.142 +-0.142 +-0.152 +-0.159 +-0.155 +-0.155 +-0.159 +-0.162 +-0.166 +-0.172 +-0.199 +-0.25 +-0.247 +-0.139 +-0.03 +0.003 +-0.034 +-0.095 +-0.145 +-0.166 +-0.145 +-0.091 +-0.047 +-0.034 +-0.037 +-0.037 +-0.051 +-0.068 +-0.061 +-0.044 +-0.044 +-0.044 +-0.037 +-0.047 +-0.061 +-0.064 +-0.071 +-0.084 +-0.098 +-0.111 +-0.105 +-0.101 +-0.122 +-0.172 +-0.189 +-0.145 +-0.095 +-0.108 +-0.169 +-0.199 +-0.182 +-0.159 +-0.162 +-0.159 +-0.149 +-0.155 +-0.166 +-0.169 +-0.162 +-0.169 +-0.199 +-0.236 +-0.243 +-0.236 +-0.223 +-0.193 +-0.132 +-0.054 +0.034 +0.135 +0.267 +0.402 +0.537 +0.635 +0.649 +0.541 +0.365 +0.213 +0.135 +0.054 +-0.098 +-0.324 +-0.547 +-0.733 +-0.834 +-0.872 +-0.912 +-0.936 +-0.912 +-0.865 +-0.838 +-0.831 +-0.865 +-0.899 +-0.909 +-0.909 +-0.922 +-0.916 +-0.912 +-0.919 +-0.939 +-0.936 +-0.916 +-0.889 +-0.855 +-0.821 +-0.77 +-0.716 +-0.662 +-0.598 +-0.507 +-0.422 +-0.341 +-0.267 +-0.226 +-0.203 +-0.176 +-0.169 +-0.189 +-0.206 +-0.189 +-0.152 +-0.118 +-0.091 +-0.068 +-0.051 +-0.054 +-0.061 +-0.081 +-0.132 +-0.206 +-0.223 +-0.159 +-0.088 +-0.047 +-0.054 +-0.078 +-0.095 +-0.078 +-0.054 +-0.051 +-0.057 +-0.044 +-0.02 +-0.007 +-0.007 +-0.003 +0 +0 +0.007 +0.003 +0.003 +0.024 +0.061 +0.091 +0.105 +0.125 +0.149 +0.182 +0.206 +0.209 +0.199 +0.196 +0.209 +0.236 +0.28 +0.351 +0.402 +0.392 +0.361 +0.372 +0.422 +0.463 +0.47 +0.473 +0.48 +0.493 +0.507 +0.514 +0.517 +0.514 +0.5 +0.493 +0.476 +0.443 +0.402 +0.378 +0.378 +0.395 +0.392 +0.338 +0.247 +0.179 +0.166 +0.142 +0.091 +0.081 +0.105 +0.095 +0.064 +0.03 +0 +-0.02 +-0.037 +-0.027 +-0.014 +-0.007 +-0.027 +-0.037 +-0.014 +0.017 +0.02 +0 +-0.041 +-0.071 +-0.081 +-0.088 +-0.081 +-0.068 +-0.064 +-0.074 +-0.095 +-0.108 +-0.135 +-0.155 +-0.149 +-0.101 +-0.064 +-0.054 +-0.071 +-0.084 +-0.105 +-0.135 +-0.139 +-0.108 +-0.091 +-0.095 +-0.098 +-0.081 +-0.068 +-0.095 +-0.155 +-0.196 +-0.176 +-0.122 +-0.078 +-0.061 +-0.051 +-0.037 +-0.027 +-0.041 +-0.071 +-0.108 +-0.115 +-0.101 +-0.088 +-0.081 +-0.074 +-0.064 +-0.044 +-0.027 +-0.03 +-0.061 +-0.074 +-0.078 +-0.118 +-0.139 +-0.105 +-0.034 +0.037 +0.068 +0.014 +-0.057 +-0.068 +-0.03 +0 +-0.003 +-0.024 +-0.034 +-0.027 +-0.024 +-0.047 +-0.084 +-0.108 +-0.115 +-0.098 +-0.071 +-0.054 +-0.037 +-0.034 +-0.054 +-0.081 +-0.091 +-0.088 +-0.084 +-0.095 +-0.108 +-0.118 +-0.118 +-0.095 +-0.061 +-0.051 +-0.051 +-0.088 +-0.132 +-0.111 +-0.051 +0 +0.014 +0 +-0.027 +-0.051 +-0.041 +-0.007 +0.003 +-0.03 +-0.071 +-0.101 +-0.125 +-0.125 +-0.115 +-0.091 +-0.068 +-0.068 +-0.081 +-0.068 +-0.037 +-0.03 +-0.027 +-0.03 +-0.054 +-0.088 +-0.091 +-0.081 +-0.088 +-0.108 +-0.115 +-0.095 +-0.061 +-0.051 +-0.044 +-0.01 +0.01 +0.01 +-0.003 +-0.02 +-0.044 +-0.061 +-0.078 +-0.064 +-0.027 +-0.017 +-0.027 +-0.047 +-0.105 +-0.179 +-0.186 +-0.135 +-0.057 +-0.02 +-0.027 +-0.044 +-0.044 +-0.084 +-0.166 +-0.199 +-0.166 +-0.101 +-0.037 +0.014 +0.024 +-0.007 +-0.041 +-0.047 +-0.041 +-0.054 +-0.091 +-0.108 +-0.091 +-0.078 +-0.074 +-0.064 +-0.037 +-0.01 +-0.007 +-0.03 +-0.054 +-0.084 +-0.098 +-0.074 +-0.037 +-0.007 +0.017 +-0.014 +-0.074 +-0.084 +-0.047 +-0.027 +-0.02 +-0.024 +-0.027 +-0.041 +-0.061 +-0.061 +-0.027 +0.003 +0.007 +-0.007 +-0.024 +-0.041 +-0.044 +-0.014 +0.02 +0.024 +-0.003 +-0.027 +-0.014 +0.014 +0.037 +0.027 +-0.01 +-0.034 +-0.03 +-0.034 +-0.054 +-0.051 +-0.024 +0.02 +0.041 +0.02 +0.003 +-0.017 +-0.051 +-0.081 +-0.098 +-0.095 +-0.091 +-0.095 +-0.091 +-0.105 +-0.101 +-0.071 +-0.051 +-0.047 +-0.044 +-0.037 +-0.034 +-0.027 +-0.027 +-0.037 +-0.081 +-0.139 +-0.139 +-0.095 +-0.047 +0.003 +0.105 +0.247 +0.436 +0.635 +0.791 +0.845 +0.78 +0.672 +0.581 +0.51 +0.402 +0.223 +0.01 +-0.213 +-0.436 +-0.611 +-0.689 +-0.743 +-0.814 +-0.868 +-0.882 +-0.855 +-0.838 +-0.865 +-0.926 +-0.932 +-0.885 +-0.861 +-0.889 +-0.936 +-0.966 +-0.953 +-0.919 +-0.889 +-0.855 +-0.807 +-0.74 +-0.652 +-0.568 +-0.497 +-0.422 +-0.361 +-0.318 +-0.27 +-0.216 +-0.159 +-0.105 +-0.095 +-0.111 +-0.125 +-0.118 +-0.081 +-0.024 +0.02 +0.044 +0.044 +0.03 +0.007 +0 +-0.007 +-0.014 +-0.017 +-0.014 +0.007 +0.054 +0.078 +0.057 +0.024 +0.01 +0.017 +0.034 +0.044 +0.054 +0.064 +0.064 +0.064 +0.071 +0.074 +0.068 +0.074 +0.084 +0.084 +0.054 +0.027 +0.054 +0.122 +0.186 +0.213 +0.226 +0.233 +0.25 +0.28 +0.304 +0.297 +0.267 +0.253 +0.307 +0.395 +0.473 +0.51 +0.51 +0.493 +0.486 +0.514 +0.568 +0.615 +0.669 +0.662 +0.595 +0.568 +0.601 +0.635 +0.635 +0.595 +0.564 +0.561 +0.551 +0.524 +0.493 +0.466 +0.419 +0.378 +0.348 +0.314 +0.284 +0.247 +0.226 +0.223 +0.196 +0.152 +0.105 +0.078 +0.057 +0.041 +0.034 +0.037 +0.037 +0.027 +0.03 +0.034 +0.014 +0.007 +0.03 +0.047 +0.03 +-0.01 +-0.034 +-0.054 +-0.084 +-0.098 +-0.095 +-0.074 +-0.034 +-0.01 +-0.02 +-0.044 +-0.081 +-0.101 +-0.081 +-0.047 +-0.034 +-0.041 +-0.051 +-0.061 +-0.068 +-0.057 +-0.024 +-0.003 +-0.01 +-0.034 +-0.047 +-0.068 +-0.098 +-0.115 +-0.095 +-0.054 +-0.034 +-0.027 +-0.024 +-0.024 +-0.027 +-0.047 +-0.081 +-0.115 +-0.145 +-0.162 +-0.155 +-0.101 +-0.041 +-0.01 +0 +0.003 +-0.01 +-0.041 +-0.064 +-0.091 +-0.118 +-0.125 +-0.105 +-0.068 +-0.037 +-0.027 +-0.03 +-0.074 +-0.125 +-0.128 +-0.081 +-0.051 +-0.054 +-0.074 +-0.081 +-0.068 +-0.057 +-0.064 +-0.057 +-0.037 +-0.034 +-0.047 +-0.068 +-0.091 +-0.108 +-0.098 +-0.064 +-0.037 +-0.044 +-0.057 +-0.071 +-0.091 +-0.111 +-0.101 +-0.071 +-0.047 +-0.074 +-0.142 +-0.182 +-0.155 +-0.122 +-0.111 +-0.095 +-0.057 +-0.034 +-0.034 +-0.047 +-0.061 +-0.074 +-0.064 +-0.047 +-0.034 +-0.027 +-0.02 +-0.02 +-0.044 +-0.071 +-0.071 +-0.047 +-0.037 +-0.061 +-0.088 +-0.095 +-0.091 +-0.081 +-0.068 +-0.064 +-0.064 +-0.061 +-0.064 +-0.078 +-0.091 +-0.071 +-0.051 +-0.071 +-0.101 +-0.108 +-0.115 +-0.128 +-0.122 +-0.108 +-0.084 +-0.064 +-0.068 +-0.078 +-0.098 +-0.125 +-0.122 +-0.105 +-0.101 +-0.101 +-0.101 +-0.108 +-0.108 +-0.101 +-0.098 +-0.101 +-0.105 +-0.115 +-0.118 +-0.101 +-0.084 +-0.074 +-0.057 +-0.037 +-0.027 +-0.047 +-0.101 +-0.139 +-0.128 +-0.098 +-0.091 +-0.078 +-0.051 +-0.037 +-0.044 +-0.051 +-0.051 +-0.061 +-0.084 +-0.101 +-0.108 +-0.108 +-0.105 +-0.108 +-0.125 +-0.128 +-0.118 +-0.101 +-0.088 +-0.078 +-0.061 +-0.041 +-0.047 +-0.084 +-0.101 +-0.108 +-0.108 +-0.101 +-0.118 +-0.139 +-0.125 +-0.078 +-0.034 +-0.02 +-0.027 +-0.037 +-0.041 +-0.037 +-0.047 +-0.057 +-0.044 +-0.03 +-0.027 +-0.003 +0.02 +0.02 +0.02 +0.017 +0 +-0.034 +-0.03 +-0.007 +0 +-0.014 +-0.027 +-0.041 +-0.057 +-0.064 +-0.047 +-0.03 +-0.037 +-0.054 +-0.044 +-0.017 +0.003 +0.003 +-0.014 +-0.054 +-0.098 +-0.149 +-0.213 +-0.236 +-0.196 +-0.135 +-0.098 +-0.081 +-0.091 +-0.111 +-0.118 +-0.108 +-0.098 +-0.108 +-0.135 +-0.155 +-0.155 +-0.132 +-0.111 +-0.091 +-0.054 +-0.017 +0.047 +0.145 +0.267 +0.419 +0.591 +0.743 +0.76 +0.642 +0.541 +0.493 +0.416 +0.253 +0.03 +-0.189 +-0.385 +-0.591 +-0.76 +-0.831 +-0.821 +-0.807 +-0.824 +-0.872 +-0.905 +-0.912 +-0.892 +-0.895 +-0.932 +-0.966 +-0.959 +-0.939 +-0.926 +-0.946 +-0.983 +-1.007 +-0.98 +-0.929 +-0.848 +-0.753 +-0.662 +-0.588 +-0.507 +-0.432 +-0.361 +-0.284 +-0.223 +-0.182 +-0.132 +-0.095 +-0.088 +-0.081 +-0.074 +-0.064 +-0.051 +-0.078 +-0.122 +-0.145 +-0.118 +-0.071 +-0.03 +-0.037 +-0.054 +-0.081 +-0.115 +-0.145 +-0.145 +-0.098 +-0.037 +0 +0.003 +-0.01 +-0.02 +-0.037 +-0.047 +-0.02 +0.007 +0.017 +0.014 +-0.014 +-0.074 +-0.074 +0.03 +0.155 +0.226 +0.213 +0.145 +0.084 +0.057 +0.084 +0.149 +0.216 +0.253 +0.247 +0.22 +0.213 +0.226 +0.236 +0.267 +0.324 +0.372 +0.412 +0.436 +0.453 +0.473 +0.503 +0.527 +0.544 +0.554 +0.557 +0.557 +0.551 +0.534 +0.52 +0.503 +0.486 +0.517 +0.581 +0.618 +0.588 +0.51 +0.449 +0.432 +0.422 +0.399 +0.365 +0.314 +0.26 +0.287 +0.348 +0.334 +0.257 +0.169 +0.088 +0.047 +0.034 +0.034 +0.027 +0.027 +0.034 +0.03 +0.024 +0.024 +0.034 +0.02 +-0.03 +-0.081 +-0.108 +-0.115 +-0.115 +-0.108 +-0.098 +-0.068 +-0.037 +-0.041 +-0.061 +-0.074 +-0.081 +-0.071 +-0.044 +-0.034 +-0.047 +-0.054 +-0.051 +-0.074 +-0.135 +-0.162 +-0.128 +-0.081 +-0.051 +-0.047 +-0.068 +-0.098 +-0.111 +-0.098 +-0.081 +-0.064 +-0.034 +-0.01 +-0.007 +-0.03 +-0.061 +-0.081 +-0.098 +-0.105 +-0.098 +-0.095 +-0.095 +-0.088 +-0.071 +-0.081 +-0.098 +-0.074 +-0.051 +-0.047 +-0.071 +-0.108 +-0.128 +-0.132 +-0.132 +-0.132 +-0.118 +-0.101 +-0.095 +-0.105 +-0.128 +-0.142 +-0.122 +-0.081 +-0.071 +-0.081 +-0.091 +-0.095 +-0.078 +-0.064 +-0.051 +-0.054 +-0.081 +-0.095 +-0.095 +-0.091 +-0.091 +-0.078 +-0.071 +-0.068 +-0.068 +-0.064 +-0.068 +-0.074 +-0.084 +-0.088 +-0.091 +-0.091 +-0.091 +-0.091 +-0.088 +-0.088 +-0.084 +-0.084 +-0.091 +-0.095 +-0.095 +-0.091 +-0.088 +-0.084 +-0.081 +-0.084 +-0.088 +-0.091 +-0.105 +-0.122 +-0.118 +-0.091 +-0.074 +-0.074 +-0.071 +-0.068 +-0.064 +-0.057 +-0.057 +-0.057 +-0.064 +-0.088 +-0.111 +-0.128 +-0.118 +-0.081 +-0.061 +-0.095 +-0.125 +-0.115 +-0.088 +-0.057 +-0.037 +-0.027 +-0.024 +-0.02 +-0.017 +-0.01 +-0.017 +-0.047 +-0.078 +-0.084 +-0.054 +-0.02 +0 +-0.01 +-0.01 +0 +0 +0 +-0.007 +-0.014 +-0.017 +-0.017 +-0.017 +-0.017 +-0.017 +-0.03 +-0.061 +-0.108 +-0.135 +-0.142 +-0.152 +-0.193 +-0.209 +-0.176 +-0.125 +-0.108 +-0.118 +-0.135 +-0.142 +-0.139 +-0.122 +-0.101 +-0.098 +-0.115 +-0.135 +-0.172 +-0.186 +-0.139 +-0.051 +0.037 +0.105 +0.169 +0.253 +0.365 +0.497 +0.625 +0.659 +0.568 +0.422 +0.284 +0.145 +0.007 +-0.132 +-0.348 +-0.608 +-0.818 +-0.919 +-0.943 +-0.932 +-0.902 +-0.882 +-0.892 +-0.909 +-0.909 +-0.902 +-0.909 +-0.905 +-0.872 +-0.851 +-0.865 +-0.916 +-0.97 +-1.01 +-1.017 +-0.986 +-0.912 +-0.804 +-0.686 +-0.618 +-0.581 +-0.537 +-0.49 +-0.456 +-0.402 +-0.297 +-0.209 +-0.193 +-0.193 +-0.166 +-0.125 +-0.098 +-0.091 +-0.098 +-0.095 +-0.088 +-0.098 +-0.101 +-0.101 +-0.108 +-0.108 +-0.101 +-0.095 +-0.088 +-0.074 +-0.051 +-0.054 +-0.061 +-0.054 +-0.041 +-0.03 +-0.003 +0.014 +0.03 +0.047 +0.064 +0.064 +0.047 +0 +-0.061 +-0.061 +-0.003 +0.037 +0.054 +0.057 +0.034 +0.017 +0.03 +0.068 +0.115 +0.155 +0.169 +0.172 +0.193 +0.233 +0.25 +0.24 +0.226 +0.24 +0.267 +0.291 +0.318 +0.328 +0.351 +0.405 +0.493 +0.554 +0.578 +0.591 +0.628 +0.669 +0.689 +0.655 +0.584 +0.5 +0.453 +0.449 +0.473 +0.5 +0.49 +0.463 +0.429 +0.365 +0.264 +0.182 +0.152 +0.142 +0.139 +0.118 +0.091 +0.071 +0.074 +0.068 +0.047 +0.003 +-0.027 +-0.02 +-0.027 +-0.061 +-0.111 +-0.159 +-0.172 +-0.152 +-0.118 +-0.091 +-0.074 +-0.081 +-0.101 +-0.125 +-0.132 +-0.128 +-0.128 +-0.108 +-0.071 +-0.057 +-0.071 +-0.101 +-0.145 +-0.213 +-0.264 +-0.27 +-0.243 +-0.199 +-0.162 +-0.142 +-0.132 +-0.135 +-0.125 +-0.091 +-0.061 +-0.071 +-0.142 +-0.223 +-0.267 +-0.267 +-0.233 +-0.216 +-0.223 +-0.23 +-0.24 +-0.28 +-0.304 +-0.277 +-0.196 +-0.128 +-0.108 +-0.115 +-0.122 +-0.128 +-0.135 +-0.159 +-0.182 +-0.189 +-0.152 +-0.108 +-0.071 +-0.02 +0.01 +-0.034 +-0.125 +-0.189 +-0.206 +-0.203 +-0.213 +-0.216 +-0.213 +-0.209 +-0.199 +-0.172 +-0.152 +-0.159 +-0.172 +-0.182 +-0.176 +-0.179 +-0.189 +-0.176 +-0.159 +-0.172 +-0.182 +-0.172 +-0.149 +-0.139 +-0.152 +-0.169 +-0.179 +-0.189 +-0.189 +-0.179 +-0.176 +-0.189 +-0.193 +-0.172 +-0.179 +-0.209 +-0.22 +-0.199 +-0.169 +-0.152 +-0.152 +-0.155 +-0.152 +-0.155 +-0.166 +-0.179 +-0.193 +-0.189 +-0.189 +-0.189 +-0.172 +-0.149 +-0.132 +-0.135 +-0.155 +-0.176 +-0.193 +-0.209 +-0.243 +-0.243 +-0.186 +-0.108 +-0.095 +-0.142 +-0.199 +-0.226 +-0.206 +-0.159 +-0.128 +-0.132 +-0.169 +-0.223 +-0.257 +-0.27 +-0.257 +-0.23 +-0.199 +-0.176 +-0.179 +-0.189 +-0.193 +-0.179 +-0.166 +-0.155 +-0.145 +-0.142 +-0.149 +-0.155 +-0.149 +-0.142 +-0.152 +-0.176 +-0.209 +-0.233 +-0.236 +-0.236 +-0.203 +-0.159 +-0.128 +-0.135 +-0.162 +-0.182 +-0.179 +-0.169 +-0.186 +-0.226 +-0.233 +-0.196 +-0.166 +-0.172 +-0.213 +-0.247 +-0.25 +-0.24 +-0.216 +-0.189 +-0.169 +-0.169 +-0.189 +-0.206 +-0.206 +-0.189 +-0.169 +-0.159 +-0.166 +-0.176 +-0.169 +-0.169 +-0.176 +-0.179 +-0.169 +-0.162 +-0.172 +-0.189 +-0.199 +-0.193 +-0.182 +-0.172 +-0.172 +-0.179 +-0.193 +-0.189 +-0.162 +-0.132 +-0.128 +-0.145 +-0.169 +-0.169 +-0.152 +-0.155 +-0.179 +-0.216 +-0.243 +-0.236 +-0.209 +-0.193 +-0.189 +-0.203 +-0.203 +-0.193 +-0.179 +-0.162 +-0.142 +-0.125 +-0.135 +-0.172 +-0.213 +-0.233 +-0.209 +-0.152 +-0.115 +-0.132 +-0.162 +-0.172 +-0.186 +-0.216 +-0.236 +-0.24 +-0.243 +-0.23 +-0.186 +-0.125 +-0.088 +-0.091 +-0.115 +-0.108 +-0.091 +-0.068 +-0.044 +-0.057 +-0.101 +-0.132 +-0.122 +-0.081 +-0.044 +-0.027 +-0.024 +-0.034 +-0.03 +-0.014 +0 +-0.014 +-0.051 +-0.101 +-0.135 +-0.145 +-0.155 +-0.155 +-0.149 +-0.139 +-0.135 +-0.149 +-0.169 +-0.196 +-0.22 +-0.253 +-0.27 +-0.236 +-0.172 +-0.135 +-0.135 +-0.145 +-0.159 +-0.176 +-0.182 +-0.186 +-0.193 +-0.213 +-0.213 +-0.189 +-0.182 +-0.182 +-0.166 +-0.125 +-0.02 +0.101 +0.233 +0.358 +0.5 +0.639 +0.686 +0.615 +0.514 +0.422 +0.331 +0.199 +0.014 +-0.213 +-0.439 +-0.662 +-0.811 +-0.868 +-0.878 +-0.858 +-0.838 +-0.848 +-0.895 +-0.946 +-0.966 +-0.973 +-0.986 +-0.99 +-0.993 +-1.02 +-1.054 +-1.034 +-0.966 +-0.905 +-0.892 +-0.892 +-0.875 +-0.811 +-0.716 +-0.611 +-0.517 +-0.453 +-0.426 +-0.405 +-0.392 +-0.368 +-0.321 +-0.27 +-0.23 +-0.196 +-0.169 +-0.149 +-0.139 +-0.142 +-0.149 +-0.159 +-0.145 +-0.132 +-0.145 +-0.155 +-0.135 +-0.088 +-0.051 +-0.03 +-0.034 +-0.051 +-0.084 +-0.128 +-0.145 +-0.152 +-0.142 +-0.098 +-0.047 +-0.024 +0 +0 +-0.024 +-0.047 +-0.057 +-0.047 +-0.017 +0.017 +0.037 +0.03 +0.02 +0.03 +0.047 +0.068 +0.088 +0.108 +0.128 +0.155 +0.182 +0.203 +0.233 +0.257 +0.27 +0.284 +0.301 +0.307 +0.328 +0.358 +0.399 +0.436 +0.466 +0.486 +0.507 +0.517 +0.537 +0.534 +0.524 +0.52 +0.52 +0.517 +0.507 +0.483 +0.459 +0.436 +0.419 +0.405 +0.372 +0.311 +0.267 +0.24 +0.226 +0.213 +0.186 +0.145 +0.098 +0.061 +0.054 +0.071 +0.081 +0.088 +0.084 +0.071 +0.034 +-0.007 +-0.03 +-0.047 +-0.071 +-0.098 +-0.108 +-0.101 +-0.091 +-0.098 +-0.101 +-0.088 +-0.078 +-0.078 +-0.088 +-0.118 +-0.149 +-0.196 +-0.216 +-0.186 +-0.139 +-0.115 +-0.105 +-0.091 +-0.064 +-0.047 +-0.054 +-0.074 +-0.101 +-0.115 +-0.115 +-0.118 +-0.115 +-0.122 +-0.111 +-0.091 +-0.091 +-0.105 +-0.101 +-0.088 +-0.068 +-0.081 +-0.115 +-0.135 +-0.128 +-0.122 +-0.108 +-0.095 +-0.088 +-0.088 +-0.095 +-0.091 +-0.078 +-0.074 +-0.095 +-0.115 +-0.125 +-0.128 +-0.122 +-0.108 +-0.105 +-0.115 +-0.098 +-0.064 +-0.041 +-0.034 +-0.037 +-0.051 +-0.074 +-0.098 +-0.111 +-0.125 +-0.145 +-0.145 +-0.135 +-0.125 +-0.122 +-0.122 +-0.128 +-0.132 +-0.108 +-0.061 +-0.037 +-0.068 +-0.118 +-0.125 +-0.084 +-0.037 +-0.01 +-0.017 +-0.044 +-0.074 +-0.084 +-0.088 +-0.111 +-0.145 +-0.166 +-0.162 +-0.139 +-0.118 +-0.108 +-0.108 +-0.115 +-0.101 +-0.095 +-0.118 +-0.135 +-0.125 +-0.088 +-0.047 +-0.037 +-0.071 +-0.105 +-0.122 +-0.118 +-0.115 +-0.105 +-0.091 +-0.084 +-0.081 +-0.081 +-0.101 +-0.122 +-0.128 +-0.088 +-0.041 +-0.02 +-0.027 +-0.054 +-0.078 +-0.081 +-0.081 +-0.095 +-0.118 +-0.142 +-0.155 +-0.155 +-0.152 +-0.142 +-0.139 +-0.122 +-0.118 +-0.125 +-0.115 +-0.098 +-0.091 +-0.095 +-0.101 +-0.108 +-0.122 +-0.149 +-0.149 +-0.122 +-0.095 +-0.095 +-0.108 +-0.122 +-0.128 +-0.122 +-0.115 +-0.098 +-0.081 +-0.068 +-0.057 +-0.064 +-0.081 +-0.095 +-0.105 +-0.108 +-0.095 +-0.095 +-0.095 +-0.095 +-0.098 +-0.108 +-0.122 +-0.122 +-0.118 +-0.111 +-0.108 +-0.098 +-0.088 +-0.081 +-0.088 +-0.091 +-0.098 +-0.095 +-0.071 +-0.061 +-0.068 +-0.078 +-0.095 +-0.108 +-0.118 +-0.132 +-0.149 +-0.166 +-0.139 +-0.101 +-0.068 +-0.044 +-0.051 +-0.071 +-0.078 +-0.054 +-0.027 +-0.03 +-0.044 +-0.061 +-0.078 +-0.088 +-0.091 +-0.074 +-0.034 +0 +0.024 +0.027 +0.003 +-0.014 +-0.017 +-0.01 +-0.007 +-0.01 +-0.014 +-0.003 +0 +0 +0 +-0.017 +-0.044 +-0.071 +-0.095 +-0.108 +-0.091 +-0.047 +-0.027 +-0.037 +-0.068 +-0.105 +-0.135 +-0.145 +-0.149 +-0.142 +-0.128 +-0.118 +-0.125 +-0.128 +-0.122 +-0.118 +-0.128 +-0.132 +-0.122 +-0.101 +-0.088 +-0.068 +-0.037 +-0.024 +0.007 +0.118 +0.277 +0.419 +0.524 +0.635 +0.703 +0.682 +0.605 +0.51 +0.402 +0.25 +0.044 +-0.179 +-0.389 +-0.581 +-0.747 +-0.828 +-0.845 +-0.834 +-0.841 +-0.868 +-0.902 +-0.939 +-0.973 +-0.986 +-0.966 +-0.939 +-0.946 +-0.976 +-0.99 +-0.99 +-0.98 +-0.98 +-0.973 +-0.936 +-0.865 +-0.757 +-0.652 +-0.571 +-0.493 +-0.419 +-0.341 +-0.277 +-0.243 +-0.223 +-0.182 +-0.135 +-0.108 +-0.111 +-0.118 +-0.105 +-0.071 +-0.037 +-0.044 +-0.095 +-0.128 +-0.101 +-0.071 +-0.051 +-0.047 +-0.044 +-0.027 +-0.007 +-0.003 +0 +0.007 +0.01 +0.017 +0.03 +0.034 +0.02 +-0.014 +-0.044 +-0.024 +0.03 +0.078 +0.068 +0.017 +-0.02 +-0.02 +0.01 +0.041 +0.057 +0.064 +0.078 +0.101 +0.118 +0.118 +0.105 +0.078 +0.122 +0.22 +0.324 +0.365 +0.358 +0.368 +0.426 +0.459 +0.466 +0.449 +0.449 +0.49 +0.53 +0.551 +0.561 +0.581 +0.608 +0.605 +0.591 +0.598 +0.615 +0.598 +0.561 +0.534 +0.527 +0.517 +0.507 +0.483 +0.449 +0.422 +0.402 +0.365 +0.328 +0.297 +0.28 +0.26 +0.247 +0.233 +0.196 +0.132 +0.074 +0.041 +0.037 +0.051 +0.057 +0.041 +0.024 +0.027 +0.024 +-0.003 +-0.037 +-0.054 +-0.068 +-0.084 +-0.088 +-0.098 +-0.091 +-0.061 +-0.024 +0.01 +0.041 +0.034 +-0.003 +-0.047 +-0.081 +-0.105 +-0.101 +-0.064 +-0.044 +-0.078 +-0.115 +-0.115 +-0.095 +-0.078 +-0.064 +-0.051 +-0.047 +-0.044 +-0.027 +-0.024 +-0.03 +-0.047 +-0.078 +-0.101 +-0.105 +-0.091 +-0.064 +-0.054 +-0.068 +-0.084 +-0.095 +-0.091 +-0.071 +-0.057 +-0.037 +-0.014 +-0.014 +-0.034 +-0.057 +-0.091 +-0.128 +-0.169 +-0.179 +-0.159 +-0.132 +-0.128 +-0.142 +-0.122 +-0.051 +0.014 +0.02 +-0.014 +-0.054 +-0.074 +-0.084 +-0.088 +-0.081 +-0.074 +-0.071 +-0.068 +-0.068 +-0.068 +-0.068 +-0.081 +-0.091 +-0.098 +-0.108 +-0.105 +-0.081 +-0.061 +-0.041 +-0.02 +-0.017 +-0.027 +-0.041 +-0.057 +-0.061 +-0.061 +-0.064 +-0.071 +-0.074 +-0.071 +-0.068 +-0.068 +-0.078 +-0.101 +-0.125 +-0.142 +-0.142 +-0.128 +-0.108 +-0.084 +-0.074 +-0.078 +-0.088 +-0.098 +-0.111 +-0.125 +-0.108 +-0.081 +-0.074 +-0.088 +-0.108 +-0.115 +-0.088 +-0.054 +-0.041 +-0.071 +-0.122 +-0.149 +-0.128 +-0.084 +-0.068 +-0.091 +-0.128 +-0.135 +-0.108 +-0.078 +-0.068 +-0.071 +-0.091 +-0.115 +-0.101 +-0.064 +-0.037 +-0.027 +-0.034 +-0.051 +-0.064 +-0.084 +-0.101 +-0.098 +-0.081 +-0.081 +-0.105 +-0.118 +-0.115 +-0.088 +-0.064 +-0.057 +-0.071 +-0.091 +-0.101 +-0.105 +-0.101 +-0.101 +-0.101 +-0.122 +-0.135 +-0.125 +-0.091 +-0.084 +-0.101 +-0.135 +-0.155 +-0.155 +-0.142 +-0.139 +-0.128 +-0.101 +-0.061 +-0.041 +-0.037 +-0.057 +-0.081 +-0.088 +-0.081 +-0.068 +-0.044 +-0.034 +-0.017 +-0.014 +-0.051 +-0.108 +-0.142 +-0.132 +-0.091 +-0.091 +-0.115 +-0.135 +-0.145 +-0.149 +-0.135 +-0.118 +-0.115 +-0.125 +-0.128 +-0.122 +-0.118 +-0.139 +-0.166 +-0.176 +-0.186 +-0.193 +-0.155 +-0.098 +-0.084 +-0.125 +-0.155 +-0.132 +-0.081 +-0.064 +-0.081 +-0.108 +-0.115 +-0.091 +-0.078 +-0.088 +-0.118 +-0.132 +-0.091 +-0.044 +-0.024 +-0.027 +-0.037 +-0.041 +-0.047 +-0.051 +-0.054 +-0.064 +-0.078 +-0.095 +-0.084 +-0.068 +-0.051 +-0.03 +-0.017 +-0.027 +-0.051 +-0.074 +-0.071 +-0.054 +-0.054 +-0.074 +-0.101 +-0.098 +-0.051 +-0.01 +0 +-0.017 +-0.044 +-0.081 +-0.125 +-0.162 +-0.189 +-0.206 +-0.203 +-0.172 +-0.145 +-0.135 +-0.135 +-0.128 +-0.128 +-0.166 +-0.193 +-0.182 +-0.162 +-0.159 +-0.166 +-0.169 +-0.149 +-0.115 +-0.088 +-0.071 +-0.051 +0.017 +0.145 +0.284 +0.405 +0.52 +0.622 +0.649 +0.581 +0.453 +0.321 +0.209 +0.078 +-0.128 +-0.389 +-0.625 +-0.804 +-0.902 +-0.946 +-0.983 +-1 +-1 +-0.997 +-0.98 +-0.946 +-0.926 +-0.912 +-0.905 +-0.912 +-0.922 +-0.946 +-0.976 +-0.99 +-0.997 +-0.976 +-0.936 +-0.889 +-0.824 +-0.726 +-0.632 +-0.568 +-0.497 +-0.395 +-0.307 +-0.264 +-0.26 +-0.27 +-0.27 +-0.267 +-0.264 +-0.233 +-0.179 +-0.142 +-0.142 +-0.145 +-0.145 +-0.159 +-0.162 +-0.139 +-0.101 +-0.081 +-0.081 +-0.095 +-0.108 +-0.115 +-0.081 +-0.024 +-0.003 +-0.02 +-0.047 +-0.074 +-0.084 +-0.071 +-0.061 +-0.047 +-0.034 +-0.017 +0.007 +0.014 +0 +-0.017 +-0.024 +-0.02 +0 +0.02 +0.034 +0.057 +0.084 +0.098 +0.084 +0.064 +0.064 +0.105 +0.166 +0.223 +0.257 +0.257 +0.226 +0.223 +0.27 +0.328 +0.365 +0.389 +0.412 +0.436 +0.439 +0.432 +0.439 +0.473 +0.483 +0.483 +0.493 +0.503 +0.503 +0.514 +0.524 +0.53 +0.5 +0.446 +0.412 +0.402 +0.378 +0.361 +0.321 +0.267 +0.22 +0.189 +0.162 +0.132 +0.118 +0.142 +0.182 +0.169 +0.101 +0.024 +-0.03 +-0.051 +-0.057 +-0.047 +-0.034 +-0.024 +-0.027 +-0.037 +-0.054 +-0.078 +-0.098 +-0.101 +-0.108 +-0.132 +-0.122 +-0.098 +-0.081 +-0.098 +-0.142 +-0.169 +-0.176 +-0.159 +-0.139 +-0.132 +-0.128 +-0.111 +-0.108 +-0.108 +-0.122 +-0.145 +-0.162 +-0.155 +-0.142 +-0.152 +-0.176 +-0.179 +-0.169 +-0.142 +-0.115 +-0.091 +-0.095 +-0.108 +-0.111 +-0.115 +-0.125 +-0.139 +-0.139 +-0.132 +-0.122 +-0.101 +-0.084 +-0.098 +-0.115 +-0.111 +-0.108 +-0.118 +-0.135 +-0.142 +-0.128 +-0.095 +-0.074 +-0.074 +-0.091 +-0.105 +-0.118 +-0.132 +-0.142 +-0.149 +-0.145 +-0.125 +-0.098 +-0.074 +-0.068 +-0.081 +-0.111 +-0.149 +-0.172 +-0.182 +-0.196 +-0.196 +-0.186 +-0.166 +-0.139 +-0.115 +-0.108 +-0.108 +-0.101 +-0.105 +-0.135 +-0.166 +-0.166 +-0.152 +-0.145 +-0.132 +-0.101 +-0.071 +-0.041 +-0.041 +-0.101 +-0.176 +-0.199 +-0.169 +-0.132 +-0.122 +-0.142 +-0.159 +-0.162 +-0.145 +-0.118 +-0.091 +-0.088 +-0.115 +-0.142 +-0.145 +-0.125 +-0.108 +-0.101 +-0.105 +-0.122 +-0.132 +-0.135 +-0.139 +-0.145 +-0.155 +-0.176 +-0.179 +-0.166 +-0.162 +-0.155 +-0.159 +-0.159 +-0.155 +-0.145 +-0.132 +-0.111 +-0.105 +-0.132 +-0.145 +-0.135 +-0.115 +-0.125 +-0.145 +-0.159 +-0.149 +-0.125 +-0.118 +-0.132 +-0.135 +-0.132 +-0.115 +-0.108 +-0.128 +-0.159 +-0.182 +-0.179 +-0.159 +-0.142 +-0.149 +-0.162 +-0.166 +-0.179 +-0.189 +-0.209 +-0.186 +-0.118 +-0.071 +-0.061 +-0.068 +-0.101 +-0.152 +-0.182 +-0.162 +-0.101 +-0.071 +-0.071 +-0.054 +-0.037 +-0.041 +-0.054 +-0.047 +-0.034 +-0.037 +-0.054 +-0.057 +-0.057 +-0.054 +-0.047 +-0.051 +-0.057 +-0.068 +-0.081 +-0.098 +-0.105 +-0.098 +-0.084 +-0.084 +-0.095 +-0.108 +-0.118 +-0.135 +-0.145 +-0.152 +-0.162 +-0.159 +-0.162 +-0.169 +-0.186 +-0.199 +-0.189 +-0.162 +-0.142 +-0.139 +-0.166 +-0.193 +-0.203 +-0.182 +-0.155 +-0.149 +-0.172 +-0.182 +-0.125 +-0.003 +0.132 +0.26 +0.372 +0.476 +0.568 +0.595 +0.537 +0.416 +0.25 +0.095 +-0.034 +-0.155 +-0.324 +-0.534 +-0.747 +-0.875 +-0.909 +-0.905 +-0.899 +-0.912 +-0.939 +-0.953 +-0.936 +-0.909 +-0.895 +-0.902 +-0.905 +-0.905 +-0.909 +-0.916 +-0.932 +-0.959 +-0.97 +-0.939 +-0.889 +-0.848 +-0.804 +-0.743 +-0.662 +-0.578 +-0.514 +-0.459 +-0.412 +-0.392 +-0.351 +-0.291 +-0.216 +-0.166 +-0.159 +-0.182 +-0.206 +-0.196 +-0.155 +-0.115 +-0.091 +-0.108 +-0.135 +-0.135 +-0.122 +-0.108 +-0.105 +-0.091 +-0.071 +-0.064 +-0.074 +-0.081 +-0.071 +-0.051 +-0.041 +-0.047 +-0.047 +-0.03 +-0.003 +0 +-0.024 +-0.037 +-0.014 +0.03 +0.044 +0.024 +0 +0.003 +0.037 +0.095 +0.125 +0.125 +0.108 +0.098 +0.108 +0.135 +0.162 +0.193 +0.206 +0.213 +0.223 +0.24 +0.267 +0.304 +0.341 +0.375 +0.399 +0.436 +0.453 +0.446 +0.443 +0.473 +0.52 +0.551 +0.541 +0.527 +0.517 +0.51 +0.493 +0.486 +0.486 +0.49 +0.48 +0.463 +0.426 +0.382 +0.338 +0.304 +0.27 +0.243 +0.233 +0.226 +0.216 +0.179 +0.118 +0.064 +0.027 +0.01 +0 +-0.02 +-0.044 +-0.061 +-0.074 +-0.078 +-0.081 +-0.088 +-0.095 +-0.105 +-0.125 +-0.125 +-0.091 +-0.061 +-0.054 +-0.061 +-0.088 +-0.098 +-0.088 +-0.098 +-0.132 +-0.145 +-0.128 +-0.108 +-0.105 +-0.108 +-0.108 +-0.101 +-0.098 +-0.098 +-0.091 +-0.074 +-0.064 +-0.051 +-0.054 +-0.088 +-0.125 +-0.135 +-0.128 +-0.115 +-0.108 +-0.095 +-0.081 +-0.084 +-0.115 +-0.145 +-0.159 +-0.152 +-0.142 +-0.125 +-0.118 +-0.108 +-0.091 +-0.078 +-0.074 +-0.088 +-0.108 +-0.118 +-0.115 +-0.108 +-0.118 +-0.128 +-0.132 +-0.115 +-0.088 +-0.064 +-0.061 +-0.057 +-0.044 +-0.047 +-0.078 +-0.091 +-0.091 +-0.091 +-0.095 +-0.095 +-0.098 +-0.105 +-0.108 +-0.118 +-0.132 +-0.142 +-0.145 +-0.142 +-0.132 +-0.122 +-0.105 +-0.088 +-0.074 +-0.078 +-0.101 +-0.122 +-0.125 +-0.115 +-0.108 +-0.101 +-0.108 +-0.115 +-0.118 +-0.135 +-0.128 +-0.081 +-0.017 +0.007 +-0.041 +-0.108 +-0.135 +-0.118 +-0.105 +-0.105 +-0.128 +-0.162 +-0.189 +-0.166 +-0.115 +-0.071 +-0.064 +-0.081 +-0.095 +-0.084 +-0.084 +-0.098 +-0.108 +-0.118 +-0.125 +-0.125 +-0.132 +-0.139 +-0.139 +-0.122 +-0.088 +-0.061 +-0.061 +-0.057 +-0.054 +-0.064 +-0.101 +-0.128 +-0.142 +-0.169 +-0.176 +-0.152 +-0.115 +-0.081 +-0.074 +-0.088 +-0.101 +-0.115 +-0.125 +-0.149 +-0.186 +-0.209 +-0.189 +-0.135 +-0.091 +-0.068 +-0.061 +-0.084 +-0.128 +-0.152 +-0.152 +-0.128 +-0.105 +-0.098 +-0.111 +-0.128 +-0.132 +-0.125 +-0.122 +-0.115 +-0.105 +-0.098 +-0.098 +-0.084 +-0.081 +-0.091 +-0.095 +-0.091 +-0.105 +-0.115 +-0.118 +-0.122 +-0.135 +-0.139 +-0.135 +-0.128 +-0.132 +-0.145 +-0.162 +-0.169 +-0.176 +-0.176 +-0.169 +-0.152 +-0.135 +-0.122 +-0.128 +-0.135 +-0.125 +-0.111 +-0.132 +-0.169 +-0.166 +-0.118 +-0.084 +-0.091 +-0.125 +-0.152 +-0.166 +-0.142 +-0.095 +-0.061 +-0.054 +-0.054 +-0.078 +-0.105 +-0.135 +-0.155 +-0.166 +-0.162 +-0.139 +-0.091 +-0.068 +-0.081 +-0.084 +-0.071 +-0.057 +-0.047 +-0.051 +-0.064 +-0.081 +-0.074 +-0.054 +-0.034 +-0.014 +0 +-0.007 +-0.01 +-0.017 +-0.037 +-0.054 +-0.054 +-0.061 +-0.071 +-0.078 +-0.078 +-0.071 +-0.068 +-0.064 +-0.061 +-0.074 +-0.091 +-0.115 +-0.142 +-0.159 +-0.166 +-0.176 +-0.179 +-0.169 +-0.166 +-0.189 +-0.199 +-0.179 +-0.139 +-0.125 +-0.139 +-0.162 +-0.179 +-0.172 +-0.149 +-0.128 +-0.108 +-0.081 +-0.051 +-0.01 +0.061 +0.182 +0.328 +0.48 +0.622 +0.689 +0.655 +0.53 +0.392 +0.294 +0.203 +0.044 +-0.149 +-0.341 +-0.534 +-0.716 +-0.818 +-0.838 +-0.818 +-0.821 +-0.878 +-0.943 +-0.963 +-0.959 +-0.97 +-0.963 +-0.963 +-0.976 +-0.993 +-1.003 +-1.007 +-1.003 +-1.003 +-0.976 +-0.916 +-0.831 +-0.73 +-0.652 +-0.618 +-0.588 +-0.537 +-0.446 +-0.334 +-0.25 +-0.216 +-0.209 +-0.209 +-0.206 +-0.182 +-0.152 +-0.125 +-0.122 +-0.128 +-0.128 +-0.128 +-0.145 +-0.142 +-0.128 +-0.108 +-0.101 +-0.101 +-0.098 +-0.074 +-0.051 +-0.051 +-0.078 +-0.084 +-0.068 +-0.027 +-0.007 +-0.007 +-0.014 +-0.03 +-0.037 +-0.027 +-0.01 +0.007 +0.007 +0 +-0.014 +-0.017 +-0.007 +0.014 +0.047 +0.084 +0.115 +0.139 +0.152 +0.155 +0.159 +0.162 +0.152 +0.149 +0.182 +0.236 +0.28 +0.331 +0.368 +0.372 +0.355 +0.375 +0.439 +0.483 +0.483 +0.483 +0.49 +0.5 +0.5 +0.524 +0.537 +0.544 +0.527 +0.49 +0.47 +0.497 +0.537 +0.544 +0.514 +0.463 +0.416 +0.385 +0.365 +0.348 +0.304 +0.257 +0.22 +0.199 +0.169 +0.128 +0.081 +0.051 +0.041 +0.037 +0.024 +0.01 +-0.01 +-0.041 +-0.064 +-0.061 +-0.047 +-0.03 +-0.027 +-0.03 +-0.041 +-0.054 +-0.088 +-0.098 +-0.095 +-0.084 +-0.088 +-0.091 +-0.091 +-0.088 +-0.081 +-0.088 +-0.101 +-0.095 +-0.078 +-0.057 +-0.047 +-0.057 +-0.088 +-0.108 +-0.115 +-0.108 +-0.122 +-0.145 +-0.162 +-0.172 +-0.176 +-0.159 +-0.135 +-0.111 +-0.108 +-0.128 +-0.152 +-0.159 +-0.128 +-0.084 +-0.061 +-0.041 +-0.03 +-0.034 +-0.051 +-0.071 +-0.101 +-0.115 +-0.115 +-0.108 +-0.108 +-0.088 +-0.091 +-0.118 +-0.152 +-0.152 +-0.118 +-0.078 +-0.068 +-0.071 +-0.074 +-0.074 +-0.105 +-0.142 +-0.169 +-0.152 +-0.108 +-0.074 +-0.095 +-0.128 +-0.149 +-0.142 +-0.125 +-0.098 +-0.081 +-0.074 +-0.078 +-0.081 +-0.098 +-0.118 +-0.142 +-0.159 +-0.179 +-0.172 +-0.145 +-0.115 +-0.115 +-0.135 +-0.132 +-0.101 +-0.088 +-0.084 +-0.091 +-0.084 +-0.078 +-0.074 +-0.088 +-0.118 +-0.166 +-0.172 +-0.139 +-0.105 +-0.091 +-0.091 +-0.105 +-0.115 +-0.115 +-0.108 +-0.115 +-0.108 +-0.105 +-0.128 +-0.152 +-0.159 +-0.145 +-0.132 +-0.125 +-0.115 +-0.111 +-0.125 +-0.135 +-0.132 +-0.145 +-0.145 +-0.108 +-0.064 +-0.051 +-0.068 +-0.111 +-0.155 +-0.176 +-0.162 +-0.139 +-0.128 +-0.142 +-0.152 +-0.139 +-0.118 +-0.118 +-0.139 +-0.155 +-0.152 +-0.135 +-0.108 +-0.088 +-0.095 +-0.149 +-0.186 +-0.172 +-0.139 +-0.122 +-0.118 +-0.125 +-0.128 +-0.132 +-0.122 +-0.115 +-0.108 +-0.108 +-0.108 +-0.115 +-0.115 +-0.128 +-0.135 +-0.152 +-0.162 +-0.159 +-0.145 +-0.125 +-0.098 +-0.084 +-0.091 +-0.122 +-0.135 +-0.128 +-0.122 +-0.139 +-0.166 +-0.182 +-0.176 +-0.152 +-0.118 +-0.115 +-0.128 +-0.142 +-0.149 +-0.128 +-0.095 +-0.098 +-0.118 +-0.135 +-0.128 +-0.108 +-0.101 +-0.105 +-0.108 +-0.111 +-0.105 +-0.111 +-0.132 +-0.155 +-0.172 +-0.166 +-0.142 +-0.118 +-0.101 +-0.095 +-0.088 +-0.091 +-0.108 +-0.135 +-0.145 +-0.142 +-0.122 +-0.115 +-0.132 +-0.132 +-0.105 +-0.084 +-0.081 +-0.091 +-0.098 +-0.105 +-0.111 +-0.125 +-0.128 +-0.128 +-0.118 +-0.098 +-0.074 +-0.051 +-0.037 +-0.03 +-0.014 +-0.007 +-0.024 +-0.064 +-0.091 +-0.098 +-0.081 +-0.071 +-0.061 +-0.054 +-0.057 +-0.078 +-0.095 +-0.101 +-0.105 +-0.105 +-0.095 +-0.084 +-0.084 +-0.098 +-0.111 +-0.125 +-0.135 +-0.159 +-0.193 +-0.213 +-0.213 +-0.196 +-0.162 +-0.132 +-0.095 +-0.054 +-0.037 +-0.057 +-0.105 +-0.149 +-0.169 +-0.166 +-0.155 +-0.145 +-0.132 +-0.118 +-0.074 +0 +0.128 +0.284 +0.453 +0.615 +0.726 +0.696 +0.564 +0.419 +0.297 +0.176 +0.007 +-0.193 +-0.392 +-0.598 +-0.764 +-0.851 +-0.878 +-0.892 +-0.912 +-0.926 +-0.926 +-0.922 +-0.929 +-0.953 +-0.983 +-1 +-1.01 +-1.014 +-1.017 +-1.01 +-0.99 +-0.963 +-0.956 +-0.946 +-0.905 +-0.834 +-0.743 +-0.649 +-0.554 +-0.473 +-0.399 +-0.328 +-0.284 +-0.243 +-0.199 +-0.189 +-0.199 +-0.206 +-0.203 +-0.189 +-0.172 +-0.162 +-0.132 +-0.101 +-0.078 +-0.084 +-0.108 +-0.125 +-0.108 +-0.091 +-0.084 +-0.081 +-0.054 +-0.047 +-0.071 +-0.108 +-0.118 +-0.095 +-0.061 +-0.034 +-0.027 +-0.037 +-0.037 +-0.024 +0 +-0.007 +-0.017 +-0.014 +0 +-0.007 +-0.024 +-0.014 +0.03 +0.041 +0 +-0.007 +0.071 +0.172 +0.223 +0.233 +0.23 +0.22 +0.226 +0.25 +0.274 +0.291 +0.307 +0.328 +0.345 +0.355 +0.382 +0.426 +0.466 +0.473 +0.47 +0.476 +0.497 +0.51 +0.514 +0.514 +0.524 +0.554 +0.595 +0.581 +0.534 +0.476 +0.432 +0.402 +0.392 +0.382 +0.358 +0.301 +0.24 +0.206 +0.196 +0.176 +0.152 +0.125 +0.098 +0.068 +0.064 +0.071 +0.051 +0.024 +-0.003 +-0.03 +-0.051 +-0.061 +-0.061 +-0.064 +-0.064 +-0.074 +-0.091 +-0.108 +-0.101 +-0.081 +-0.074 +-0.084 +-0.081 +-0.061 +-0.051 +-0.071 +-0.098 +-0.132 +-0.145 +-0.118 +-0.088 +-0.091 +-0.101 +-0.139 +-0.179 +-0.189 +-0.155 +-0.135 +-0.142 +-0.159 +-0.145 +-0.135 +-0.122 +-0.111 +-0.128 +-0.155 +-0.179 +-0.172 +-0.139 +-0.108 +-0.095 +-0.098 +-0.108 +-0.118 +-0.122 +-0.132 +-0.142 +-0.155 +-0.142 +-0.108 +-0.081 +-0.061 +-0.061 +-0.078 +-0.095 +-0.108 +-0.122 +-0.149 +-0.162 +-0.149 +-0.101 +-0.074 +-0.091 +-0.142 +-0.186 +-0.199 +-0.186 +-0.169 +-0.169 +-0.186 +-0.179 +-0.155 +-0.122 +-0.108 +-0.135 +-0.193 +-0.206 +-0.152 +-0.084 +-0.057 +-0.081 +-0.122 +-0.135 +-0.132 +-0.145 +-0.169 +-0.162 +-0.142 +-0.135 +-0.142 +-0.149 +-0.142 +-0.132 +-0.142 +-0.142 +-0.122 +-0.115 +-0.132 +-0.152 +-0.159 +-0.145 +-0.135 +-0.125 +-0.128 +-0.139 +-0.152 +-0.155 +-0.142 +-0.135 +-0.159 +-0.186 +-0.196 +-0.166 +-0.132 +-0.118 +-0.125 +-0.142 +-0.172 +-0.176 +-0.166 +-0.162 +-0.162 +-0.155 +-0.145 +-0.135 +-0.149 +-0.166 +-0.169 +-0.159 +-0.155 +-0.149 +-0.145 +-0.135 +-0.135 +-0.142 +-0.155 +-0.169 +-0.179 +-0.176 +-0.169 +-0.159 +-0.152 +-0.135 +-0.128 +-0.132 +-0.128 +-0.122 +-0.145 +-0.142 +-0.115 +-0.108 +-0.132 +-0.162 +-0.189 +-0.193 +-0.189 +-0.169 +-0.155 +-0.159 +-0.172 +-0.169 +-0.162 +-0.162 +-0.172 +-0.179 +-0.182 +-0.169 +-0.139 +-0.122 +-0.128 +-0.149 +-0.182 +-0.216 +-0.213 +-0.159 +-0.108 +-0.095 +-0.118 +-0.142 +-0.159 +-0.162 +-0.162 +-0.159 +-0.145 +-0.135 +-0.128 +-0.101 +-0.091 +-0.122 +-0.176 +-0.213 +-0.22 +-0.199 +-0.159 +-0.122 +-0.111 +-0.118 +-0.135 +-0.128 +-0.108 +-0.095 +-0.088 +-0.078 +-0.074 +-0.091 +-0.115 +-0.095 +-0.047 +-0.034 +-0.068 +-0.105 +-0.105 +-0.074 +-0.064 +-0.074 +-0.105 +-0.142 +-0.162 +-0.145 +-0.128 +-0.115 +-0.118 +-0.128 +-0.142 +-0.166 +-0.196 +-0.193 +-0.155 +-0.115 +-0.122 +-0.155 +-0.186 +-0.182 +-0.162 +-0.159 +-0.162 +-0.166 +-0.172 +-0.172 +-0.145 +-0.125 +-0.155 +-0.213 +-0.25 +-0.233 +-0.209 +-0.169 +-0.128 +-0.095 +-0.054 +0.037 +0.186 +0.348 +0.486 +0.588 +0.601 +0.524 +0.402 +0.264 +0.142 +0.044 +-0.088 +-0.277 +-0.51 +-0.73 +-0.868 +-0.919 +-0.939 +-0.946 +-0.953 +-0.956 +-0.953 +-0.939 +-0.922 +-0.919 +-0.912 +-0.895 +-0.889 +-0.905 +-0.939 +-0.97 +-0.973 +-0.949 +-0.905 +-0.861 +-0.848 +-0.855 +-0.838 +-0.764 +-0.662 +-0.571 +-0.493 +-0.412 +-0.341 +-0.304 +-0.287 \ No newline at end of file diff --git a/data/heavisine.txt b/data/heavisine.txt new file mode 100644 index 0000000..ca8178c --- /dev/null +++ b/data/heavisine.txt @@ -0,0 +1,512 @@ +0.0982 + 0.1963 + 0.2943 + 0.3921 + 0.4896 + 0.5869 + 0.6838 + 0.7804 + 0.8764 + 0.9719 + 1.0669 + 1.1611 + 1.2547 + 1.3476 + 1.4396 + 1.5307 + 1.6210 + 1.7102 + 1.7984 + 1.8856 + 1.9716 + 2.0564 + 2.1400 + 2.2223 + 2.3032 + 2.3828 + 2.4609 + 2.5376 + 2.6127 + 2.6862 + 2.7582 + 2.8284 + 2.8970 + 2.9638 + 3.0288 + 3.0920 + 3.1534 + 3.2128 + 3.2703 + 3.3259 + 3.3794 + 3.4309 + 3.4803 + 3.5277 + 3.5729 + 3.6160 + 3.6568 + 3.6955 + 3.7320 + 3.7662 + 3.7981 + 3.8278 + 3.8551 + 3.8801 + 3.9028 + 3.9231 + 3.9411 + 3.9567 + 3.9699 + 3.9807 + 3.9892 + 3.9952 + 3.9988 + 4.0000 + 3.9988 + 3.9952 + 3.9892 + 3.9807 + 3.9699 + 3.9567 + 3.9411 + 3.9231 + 3.9028 + 3.8801 + 3.8551 + 3.8278 + 3.7981 + 3.7662 + 3.7320 + 3.6955 + 3.6568 + 3.6160 + 3.5729 + 3.5277 + 3.4803 + 3.4309 + 3.3794 + 3.3259 + 3.2703 + 3.2128 + 3.1534 + 3.0920 + 3.0288 + 2.9638 + 2.8970 + 2.8284 + 2.7582 + 2.6862 + 2.6127 + 2.5376 + 2.4609 + 2.3828 + 2.3032 + 2.2223 + 2.1400 + 2.0564 + 1.9716 + 1.8856 + 1.7984 + 1.7102 + 1.6210 + 1.5307 + 1.4396 + 1.3476 + 1.2547 + 1.1611 + 1.0669 + 0.9719 + 0.8764 + 0.7804 + 0.6838 + 0.5869 + 0.4896 + 0.3921 + 0.2943 + 0.1963 + 0.0982 + 0.0000 + -0.0982 + -0.1963 + -0.2943 + -0.3921 + -0.4896 + -0.5869 + -0.6838 + -0.7804 + -0.8764 + -0.9719 + -1.0669 + -1.1611 + -1.2547 + -1.3476 + -1.4396 + -1.5307 + -1.6210 + -1.7102 + -1.7984 + -1.8856 + -1.9716 + -2.0564 + -2.1400 + -2.2223 + -2.3032 + -4.3828 + -4.4609 + -4.5376 + -4.6127 + -4.6862 + -4.7582 + -4.8284 + -4.8970 + -4.9638 + -5.0288 + -5.0920 + -5.1534 + -5.2128 + -5.2703 + -5.3259 + -5.3794 + -5.4309 + -5.4803 + -5.5277 + -5.5729 + -5.6160 + -5.6568 + -5.6955 + -5.7320 + -5.7662 + -5.7981 + -5.8278 + -5.8551 + -5.8801 + -5.9028 + -5.9231 + -5.9411 + -5.9567 + -5.9699 + -5.9807 + -5.9892 + -5.9952 + -5.9988 + -6.0000 + -5.9988 + -5.9952 + -5.9892 + -5.9807 + -5.9699 + -5.9567 + -5.9411 + -5.9231 + -5.9028 + -5.8801 + -5.8551 + -5.8278 + -5.7981 + -5.7662 + -5.7320 + -5.6955 + -5.6568 + -5.6160 + -5.5729 + -5.5277 + -5.4803 + -5.4309 + -5.3794 + -5.3259 + -5.2703 + -5.2128 + -5.1534 + -5.0920 + -5.0288 + -4.9638 + -4.8970 + -4.8284 + -4.7582 + -4.6862 + -4.6127 + -4.5376 + -4.4609 + -4.3828 + -4.3032 + -4.2223 + -4.1400 + -4.0564 + -3.9716 + -3.8856 + -3.7984 + -3.7102 + -3.6210 + -3.5307 + -3.4396 + -3.3476 + -3.2547 + -3.1611 + -3.0669 + -2.9719 + -2.8764 + -2.7804 + -2.6838 + -2.5869 + -2.4896 + -2.3921 + -2.2943 + -2.1963 + -2.0982 + -2.0000 + -1.9018 + -1.8037 + -1.7057 + -1.6079 + -1.5104 + -1.4131 + -1.3162 + -1.2196 + -1.1236 + -1.0281 + -0.9331 + -0.8389 + -0.7453 + -0.6524 + -0.5604 + -0.4693 + -0.3790 + -0.2898 + -0.2016 + -0.1144 + -0.0284 + 0.0564 + 0.1400 + 0.2223 + 0.3032 + 0.3828 + 0.4609 + 0.5376 + 0.6127 + 0.6862 + 0.7582 + 0.8284 + 0.8970 + 0.9638 + 1.0288 + 1.0920 + 1.1534 + 1.2128 + 1.2703 + 1.3259 + 1.3794 + 1.4309 + 1.4803 + 1.5277 + 1.5729 + 1.6160 + 1.6568 + 1.6955 + 1.7320 + 1.7662 + 1.7981 + 1.8278 + 1.8551 + 1.8801 + 1.9028 + 1.9231 + 1.9411 + 1.9567 + 1.9699 + 1.9807 + 1.9892 + 1.9952 + 1.9988 + 2.0000 + 1.9988 + 1.9952 + 1.9892 + 1.9807 + 1.9699 + 1.9567 + 1.9411 + 1.9231 + 1.9028 + 1.8801 + 1.8551 + 1.8278 + 1.7981 + 1.7662 + 1.7320 + 1.6955 + 1.6568 + 1.6160 + 1.5729 + 1.5277 + 1.4803 + 1.4309 + 1.3794 + 1.3259 + 1.2703 + 1.2128 + 1.1534 + 1.0920 + 1.0288 + 0.9638 + 0.8970 + 0.8284 + 0.7582 + 0.6862 + 0.6127 + 0.5376 + 0.4609 + 0.3828 + 0.3032 + 0.2223 + 0.1400 + 0.0564 + -0.0284 + -0.1144 + -0.2016 + -0.2898 + -0.3790 + -0.4693 + 1.4396 + 1.3476 + 1.2547 + 1.1611 + 1.0669 + 0.9719 + 0.8764 + 0.7804 + 0.6838 + 0.5869 + 0.4896 + 0.3921 + 0.2943 + 0.1963 + 0.0982 + 0.0000 + -0.0982 + -0.1963 + -0.2943 + -0.3921 + -0.4896 + -0.5869 + -0.6838 + -0.7804 + -0.8764 + -0.9719 + -1.0669 + -1.1611 + -1.2547 + -1.3476 + -1.4396 + -1.5307 + -1.6210 + -1.7102 + -1.7984 + -1.8856 + -1.9716 + -2.0564 + -2.1400 + -2.2223 + -2.3032 + -2.3828 + -2.4609 + -2.5376 + -2.6127 + -2.6862 + -2.7582 + -2.8284 + -2.8970 + -2.9638 + -3.0288 + -3.0920 + -3.1534 + -3.2128 + -3.2703 + -3.3259 + -3.3794 + -3.4309 + -3.4803 + -3.5277 + -3.5729 + -3.6160 + -3.6568 + -3.6955 + -3.7320 + -3.7662 + -3.7981 + -3.8278 + -3.8551 + -3.8801 + -3.9028 + -3.9231 + -3.9411 + -3.9567 + -3.9699 + -3.9807 + -3.9892 + -3.9952 + -3.9988 + -4.0000 + -3.9988 + -3.9952 + -3.9892 + -3.9807 + -3.9699 + -3.9567 + -3.9411 + -3.9231 + -3.9028 + -3.8801 + -3.8551 + -3.8278 + -3.7981 + -3.7662 + -3.7320 + -3.6955 + -3.6568 + -3.6160 + -3.5729 + -3.5277 + -3.4803 + -3.4309 + -3.3794 + -3.3259 + -3.2703 + -3.2128 + -3.1534 + -3.0920 + -3.0288 + -2.9638 + -2.8970 + -2.8284 + -2.7582 + -2.6862 + -2.6127 + -2.5376 + -2.4609 + -2.3828 + -2.3032 + -2.2223 + -2.1400 + -2.0564 + -1.9716 + -1.8856 + -1.7984 + -1.7102 + -1.6210 + -1.5307 + -1.4396 + -1.3476 + -1.2547 + -1.1611 + -1.0669 + -0.9719 + -0.8764 + -0.7804 + -0.6838 + -0.5869 + -0.4896 + -0.3921 + -0.2943 + -0.1963 + -0.0982 + -0.0000 \ No newline at end of file diff --git a/data/noisybumps.txt b/data/noisybumps.txt new file mode 100644 index 0000000..295b7e5 --- /dev/null +++ b/data/noisybumps.txt @@ -0,0 +1,2048 @@ +-0.1675 + 0.0723 + 0.0673 + 0.0034 + 0.0865 + -0.0467 + 0.0194 + 0.0493 + 0.0269 + -0.0878 + -0.0734 + -0.0386 + -0.0698 + -0.1569 + 0.0757 + 0.0531 + -0.0596 + 0.1484 + -0.0056 + 0.1298 + 0.1071 + -0.0338 + -0.0525 + 0.1059 + 0.0584 + -0.0731 + -0.0782 + 0.1096 + -0.0496 + -0.0656 + -0.0033 + 0.0765 + -0.0258 + 0.0877 + -0.0305 + -0.0462 + -0.0439 + -0.1979 + 0.0998 + -0.0094 + -0.0117 + -0.0910 + -0.0026 + 0.0355 + 0.2817 + 0.1303 + 0.0513 + -0.0331 + -0.2166 + 0.1847 + -0.1151 + 0.0493 + 0.0768 + -0.1265 + -0.2006 + 0.1043 + -0.0140 + 0.1022 + -0.0833 + 0.0346 + -0.0272 + 0.0064 + 0.0789 + 0.0125 + -0.1392 + -0.0631 + 0.1847 + -0.0145 + -0.0184 + 0.0159 + 0.1857 + -0.2276 + -0.0663 + -0.1771 + 0.0061 + -0.0465 + 0.0914 + -0.0477 + 0.0292 + -0.0296 + -0.0634 + 0.0420 + 0.2272 + 0.0436 + -0.2457 + -0.1351 + -0.1600 + 0.1650 + 0.0176 + 0.0781 + -0.0943 + -0.0070 + -0.0438 + -0.1120 + -0.1600 + -0.0561 + 0.0271 + 0.0798 + -0.0598 + -0.1781 + -0.0539 + 0.1186 + 0.0946 + -0.1150 + -0.0086 + -0.0849 + 0.0623 + -0.0239 + 0.0127 + -0.0248 + 0.0839 + -0.0435 + -0.0057 + -0.1009 + -0.0213 + -0.0220 + -0.1295 + 0.1740 + -0.1975 + -0.1153 + 0.0812 + -0.0934 + 0.0949 + -0.0231 + -0.1248 + -0.1573 + 0.1102 + 0.0631 + 0.0461 + 0.0189 + -0.1344 + 0.1207 + 0.0642 + -0.1115 + -0.0640 + -0.0346 + -0.0554 + -0.1635 + -0.2370 + -0.0369 + -0.1756 + -0.0254 + 0.2125 + -0.0504 + 0.1091 + 0.0560 + -0.0555 + 0.0975 + 0.0388 + 0.0023 + 0.1308 + 0.0624 + 0.3022 + -0.0322 + -0.0208 + 0.0831 + -0.0964 + 0.0586 + 0.0962 + -0.0332 + 0.1263 + 0.2036 + -0.1256 + 0.0571 + 0.0627 + 0.0176 + -0.0881 + 0.1799 + 0.1251 + 0.0978 + 0.1387 + 0.1768 + -0.1347 + -0.0498 + -0.0499 + -0.0570 + -0.0844 + -0.0101 + -0.0380 + 0.1618 + 0.0452 + 0.1082 + 0.2564 + -0.0551 + 0.1027 + 0.0081 + 0.1589 + -0.0714 + 0.1518 + 0.0248 + 0.1064 + 0.2025 + 0.3469 + 0.2087 + 0.3187 + 0.4012 + 0.2538 + 0.2741 + 0.5792 + 0.9288 + 1.1137 + 1.6877 + 2.0176 + 2.9290 + 3.8342 + 2.6550 + 1.7869 + 1.3002 + 1.0484 + 0.7752 + 0.5399 + 0.3631 + 0.2955 + 0.1729 + 0.2976 + 0.0766 + 0.0608 + 0.3076 + 0.3452 + 0.3412 + 0.0328 + -0.0555 + 0.2069 + -0.0770 + 0.0804 + 0.1678 + 0.0962 + -0.0848 + 0.0166 + 0.1512 + 0.0724 + 0.0516 + 0.0001 + 0.0571 + 0.1808 + 0.0415 + 0.1927 + 0.1063 + 0.0937 + -0.0070 + -0.0375 + 0.0259 + 0.0538 + 0.1547 + 0.2086 + 0.0446 + -0.0628 + -0.0121 + 0.3026 + 0.0504 + -0.0125 + 0.1410 + 0.1941 + 0.2149 + 0.0320 + 0.2148 + 0.3726 + 0.2723 + 0.7525 + 0.6156 + 0.9025 + 1.1886 + 1.7727 + 2.3321 + 3.1650 + 4.5212 + 3.7730 + 2.7960 + 1.9734 + 1.3908 + 1.2136 + 0.8117 + 0.6256 + 0.5418 + 0.7043 + 0.6278 + 0.3179 + 0.3535 + 0.2265 + 0.1975 + 0.1441 + 0.0174 + -0.0304 + 0.0227 + 0.1876 + 0.2836 + 0.1796 + -0.0509 + 0.0972 + -0.0259 + 0.2837 + 0.1245 + 0.0538 + 0.2641 + 0.2260 + 0.3589 + 0.3522 + 0.2670 + 0.3511 + 0.3800 + 0.6959 + 0.8850 + 0.8359 + 1.1941 + 1.4760 + 1.9470 + 2.7709 + 2.4647 + 1.9637 + 1.4337 + 0.9897 + 0.7547 + 0.6504 + 0.4776 + 0.5440 + 0.2643 + 0.3566 + 0.0469 + 0.1783 + 0.3396 + 0.1061 + 0.1112 + 0.0745 + -0.0385 + 0.1599 + 0.0622 + 0.0251 + 0.2392 + -0.1215 + 0.1501 + 0.2120 + 0.0243 + -0.0511 + 0.2034 + -0.0650 + 0.0527 + -0.0720 + 0.2071 + 0.0406 + 0.0792 + -0.0105 + 0.1885 + 0.0608 + 0.0201 + 0.0269 + -0.0387 + 0.0401 + -0.0201 + 0.0268 + 0.3450 + -0.0414 + -0.0638 + 0.1010 + -0.0407 + -0.0264 + -0.2422 + 0.0734 + -0.1231 + 0.0520 + 0.0681 + 0.0838 + -0.0154 + -0.0854 + 0.0552 + 0.1216 + -0.1149 + -0.1718 + -0.1028 + -0.0662 + 0.1704 + -0.2785 + -0.0148 + -0.0242 + -0.0494 + -0.0670 + -0.0922 + 0.1364 + 0.0528 + -0.0733 + -0.0597 + -0.0599 + 0.0814 + 0.0021 + 0.0330 + -0.0541 + -0.0855 + 0.1257 + -0.0112 + 0.1128 + 0.0552 + -0.0677 + 0.1424 + 0.0285 + 0.0868 + -0.0753 + -0.0011 + 0.0459 + 0.0326 + 0.0055 + -0.0789 + 0.0959 + -0.0505 + -0.0492 + -0.0197 + 0.1058 + 0.0923 + -0.0349 + 0.0353 + -0.0280 + -0.0856 + -0.0089 + 0.1120 + 0.0463 + 0.0288 + 0.2073 + -0.1053 + -0.0278 + -0.0529 + -0.1070 + 0.1600 + 0.1789 + -0.0050 + -0.1413 + 0.1865 + -0.0342 + 0.1556 + 0.1623 + 0.0518 + -0.1254 + 0.0660 + 0.1147 + 0.2503 + 0.0432 + 0.0697 + 0.1657 + 0.0870 + 0.1603 + 0.2515 + 0.1132 + 0.2284 + 0.1563 + 0.1152 + 0.1974 + 0.1053 + 0.2607 + 0.1666 + 0.2479 + 0.0059 + 0.3197 + 0.1594 + 0.1908 + 0.3398 + 0.4688 + 0.4968 + 0.4168 + 0.5905 + 0.7484 + 0.5188 + 0.6418 + 0.6318 + 0.7975 + 0.8789 + 1.0028 + 1.4287 + 1.5727 + 1.6063 + 1.9887 + 2.4952 + 2.8258 + 3.4767 + 3.8709 + 3.4376 + 2.9060 + 2.3319 + 2.2133 + 1.8182 + 1.3150 + 1.2024 + 1.3092 + 1.0583 + 1.0685 + 0.8480 + 0.8295 + 0.5850 + 0.6212 + 0.6039 + 0.7206 + 0.5390 + 0.5827 + 0.5650 + 0.4980 + 0.6839 + 0.7224 + 0.6311 + 0.6866 + 0.7368 + 0.5820 + 0.8892 + 0.6324 + 0.8104 + 0.9490 + 1.1621 + 1.2937 + 1.3678 + 1.4931 + 1.9229 + 2.0951 + 2.5779 + 3.0092 + 3.6288 + 4.0785 + 4.9753 + 4.2180 + 3.3794 + 2.8713 + 2.4826 + 2.0974 + 1.9028 + 1.5077 + 1.4217 + 1.1371 + 0.9532 + 1.0910 + 0.8088 + 0.7106 + 0.5859 + 0.5389 + 0.6254 + 0.3962 + 0.3331 + 0.3423 + 0.1889 + 0.3477 + 0.2222 + 0.4881 + 0.3238 + 0.1196 + 0.4054 + 0.1911 + 0.1105 + 0.0863 + 0.1631 + 0.1323 + 0.2190 + 0.1291 + 0.1272 + -0.0176 + 0.0179 + 0.0483 + 0.2512 + -0.0950 + -0.0265 + 0.0323 + 0.0436 + 0.0287 + -0.0747 + 0.3085 + 0.1590 + -0.1448 + 0.0391 + 0.2286 + 0.0975 + 0.0798 + 0.0961 + 0.0283 + -0.0578 + 0.1140 + 0.2692 + -0.1098 + 0.0634 + 0.0902 + 0.1313 + 0.0407 + 0.0983 + 0.2390 + 0.0414 + -0.1133 + -0.1468 + -0.0546 + 0.0893 + 0.0884 + 0.1014 + -0.0167 + -0.1408 + 0.1254 + 0.0428 + -0.0279 + 0.1119 + 0.0839 + -0.0371 + 0.0766 + 0.0460 + 0.0180 + -0.1956 + -0.0838 + -0.0419 + 0.1300 + 0.0276 + 0.0386 + -0.0574 + -0.1105 + 0.0765 + 0.0824 + -0.0501 + -0.0629 + -0.0608 + -0.0086 + 0.1127 + 0.0401 + -0.1204 + 0.0235 + 0.1246 + 0.0461 + 0.0730 + 0.1348 + -0.0219 + -0.0001 + -0.0010 + 0.0181 + 0.0049 + 0.0255 + 0.1354 + -0.1072 + -0.0608 + -0.0398 + -0.0204 + -0.0656 + -0.1261 + 0.0008 + -0.0329 + 0.0211 + -0.0261 + 0.0485 + -0.0676 + -0.1018 + 0.0183 + 0.1391 + -0.0776 + 0.0125 + 0.1003 + -0.0114 + 0.1075 + 0.0037 + 0.1616 + -0.1992 + -0.1123 + -0.0069 + 0.0712 + 0.1206 + 0.1267 + 0.1502 + 0.1592 + 0.1064 + 0.0569 + -0.0552 + 0.0973 + 0.0968 + -0.1395 + 0.0209 + 0.0612 + 0.0706 + -0.0800 + -0.0180 + 0.0866 + 0.0576 + 0.0030 + 0.0175 + 0.0309 + -0.1512 + 0.0673 + 0.1649 + -0.1729 + 0.0431 + 0.0332 + 0.1103 + -0.0217 + 0.0096 + 0.0777 + 0.0316 + 0.1490 + 0.1726 + -0.0003 + 0.0887 + -0.0088 + 0.1668 + -0.1403 + -0.0255 + 0.3489 + 0.1049 + 0.1277 + 0.1383 + 0.0218 + 0.0118 + 0.0755 + 0.0845 + 0.0410 + -0.1395 + 0.1505 + -0.0017 + 0.1523 + 0.0550 + 0.0579 + 0.0041 + -0.0969 + 0.0225 + 0.1578 + -0.1148 + 0.1489 + 0.0862 + 0.0205 + 0.1319 + 0.0018 + -0.0145 + 0.0567 + 0.1272 + 0.1020 + 0.1237 + 0.2598 + 0.2045 + 0.2821 + 0.3562 + -0.0714 + 0.0277 + 0.0975 + 0.2518 + 0.1867 + 0.2669 + 0.1645 + 0.0404 + 0.0802 + 0.0970 + 0.0700 + 0.0963 + 0.1264 + 0.0296 + 0.2427 + 0.1793 + 0.1167 + 0.1136 + 0.1302 + 0.1775 + 0.2325 + 0.1627 + 0.1371 + 0.1138 + 0.1315 + 0.2419 + 0.3057 + 0.3228 + 0.1406 + 0.0655 + 0.3508 + 0.2298 + 0.3553 + 0.3119 + 0.3575 + 0.2860 + 0.2048 + -0.0834 + 0.2188 + 0.2836 + 0.1652 + 0.2552 + 0.2697 + 0.3802 + 0.3393 + 0.5813 + 0.4550 + 0.3235 + 0.3329 + 0.4728 + 0.4364 + 0.5208 + 0.5347 + 0.3964 + 0.5420 + 0.5798 + 0.4230 + 0.5539 + 0.5752 + 0.3118 + 0.5758 + 0.7541 + 0.5141 + 0.7130 + 0.7172 + 0.7254 + 0.6525 + 0.8720 + 0.9502 + 1.0351 + 0.9353 + 1.0980 + 1.1138 + 1.0898 + 1.2548 + 1.2890 + 1.2675 + 1.1124 + 1.5807 + 1.5832 + 1.6379 + 1.6010 + 1.6913 + 1.9334 + 2.0749 + 2.0501 + 2.2503 + 2.4264 + 2.5062 + 2.6290 + 2.5373 + 2.9997 + 2.9676 + 3.2388 + 3.3961 + 3.6433 + 3.7217 + 4.0556 + 3.9833 + 3.8236 + 3.6380 + 3.2228 + 3.1290 + 3.0379 + 2.7547 + 2.6780 + 2.3633 + 2.2735 + 2.3199 + 1.8908 + 1.9358 + 1.8800 + 1.5791 + 1.7877 + 1.6267 + 1.6139 + 1.4262 + 1.4750 + 1.3180 + 1.1517 + 1.1088 + 1.2312 + 1.1573 + 1.0548 + 0.9969 + 0.9370 + 0.8518 + 1.0161 + 0.9093 + 0.6691 + 0.6171 + 0.8373 + 0.7215 + 0.6515 + 0.7155 + 0.4503 + 0.5938 + 0.6563 + 0.3656 + 0.5672 + 0.5215 + 0.3851 + 0.3757 + 0.6683 + 0.3683 + 0.5299 + 0.5226 + 0.5937 + 0.3430 + 0.3373 + 0.2156 + 0.2779 + 0.3498 + 0.4335 + 0.4462 + 0.3318 + 0.3342 + 0.2524 + 0.4711 + 0.4658 + 0.4255 + 0.5179 + 0.4377 + 0.6427 + 0.4879 + 0.6252 + 0.6207 + 0.8188 + 0.3089 + 0.5088 + 0.8239 + 0.9012 + 0.7860 + 0.5711 + 0.9870 + 1.3072 + 1.3250 + 1.7337 + 1.9615 + 2.1050 + 1.7553 + 1.7070 + 1.4818 + 1.1409 + 0.8279 + 0.9349 + 0.8470 + 0.6562 + 0.5500 + 0.4208 + 0.7897 + 0.6009 + 0.4083 + 0.3615 + 0.1991 + 0.2536 + 0.1825 + 0.1260 + 0.3165 + 0.2918 + 0.1790 + 0.1426 + 0.1409 + 0.1069 + 0.1831 + 0.2458 + 0.1287 + 0.1582 + 0.1052 + 0.1346 + 0.1090 + 0.2647 + 0.0812 + 0.0970 + 0.1030 + 0.0380 + -0.0301 + -0.1090 + -0.0308 + 0.1010 + 0.1183 + 0.0205 + 0.0598 + 0.3360 + 0.1511 + -0.0891 + 0.2320 + 0.2780 + -0.0531 + 0.0583 + 0.0179 + -0.1405 + -0.0007 + 0.0828 + -0.0027 + 0.0057 + 0.0694 + 0.0639 + -0.0544 + 0.1188 + 0.1761 + 0.1089 + 0.0220 + 0.0739 + -0.0977 + 0.2271 + -0.0197 + 0.0316 + -0.0955 + 0.1637 + 0.0919 + -0.0429 + 0.2753 + -0.0676 + 0.2137 + 0.0583 + 0.1508 + 0.1147 + -0.0137 + 0.0755 + 0.0590 + -0.0658 + -0.1223 + 0.0635 + -0.0552 + 0.0832 + -0.0229 + -0.0002 + 0.0616 + 0.1209 + -0.1429 + -0.0372 + 0.0536 + 0.1952 + 0.1415 + 0.0394 + 0.0394 + 0.0131 + 0.0954 + 0.0129 + -0.0817 + -0.0359 + 0.0083 + -0.2503 + -0.1189 + -0.0341 + 0.0331 + -0.1148 + -0.1297 + 0.1739 + -0.0454 + -0.1805 + 0.1703 + 0.0215 + 0.0607 + 0.0234 + 0.0102 + 0.0636 + -0.0728 + 0.1195 + -0.0404 + -0.1021 + 0.0289 + -0.0041 + 0.1286 + -0.1212 + -0.0535 + 0.0683 + 0.0649 + 0.0595 + -0.0468 + -0.0427 + 0.1091 + 0.1235 + 0.1825 + 0.0776 + -0.1047 + -0.0213 + 0.0296 + 0.1014 + -0.0468 + 0.0348 + -0.0652 + 0.0076 + -0.0319 + 0.0424 + -0.1484 + -0.0581 + 0.0612 + 0.0207 + -0.0731 + 0.0314 + 0.0297 + 0.0303 + 0.0367 + 0.0987 + -0.0169 + -0.0185 + -0.1003 + 0.0710 + -0.1229 + -0.1242 + 0.1714 + 0.0042 + 0.0095 + -0.0683 + 0.0133 + 0.0503 + 0.1446 + 0.0681 + 0.0198 + 0.0059 + 0.1247 + 0.0558 + 0.0598 + -0.0430 + -0.0701 + -0.0330 + 0.0016 + -0.3048 + 0.1033 + 0.1967 + -0.0223 + 0.0692 + -0.0136 + 0.0964 + 0.1070 + 0.0529 + 0.0461 + 0.1504 + -0.1206 + -0.0339 + 0.0343 + 0.1741 + 0.0451 + 0.1127 + 0.1608 + -0.0139 + -0.1069 + 0.0015 + 0.2107 + 0.0952 + 0.0659 + 0.1709 + 0.1640 + 0.1068 + -0.0038 + 0.1457 + 0.0209 + -0.0388 + -0.3757 + -0.0658 + -0.0316 + -0.2581 + 0.0206 + -0.0672 + 0.0668 + 0.1648 + 0.0759 + -0.0155 + -0.1701 + -0.1231 + -0.1061 + 0.1723 + -0.0791 + -0.0104 + -0.0202 + 0.0928 + 0.0358 + -0.1457 + 0.1349 + -0.1659 + 0.1096 + -0.0282 + -0.0322 + -0.0428 + 0.1640 + 0.1213 + -0.0478 + -0.0187 + -0.1512 + -0.0481 + 0.0881 + 0.0332 + -0.0770 + 0.0539 + -0.1449 + 0.0341 + -0.0250 + -0.1650 + -0.1106 + 0.0391 + -0.0355 + 0.0385 + 0.0865 + 0.0907 + 0.0576 + 0.0096 + 0.1085 + -0.1220 + -0.1399 + 0.1031 + 0.0327 + -0.1050 + -0.0026 + 0.1319 + -0.0669 + 0.0355 + -0.1272 + 0.0030 + -0.0544 + -0.0772 + -0.0539 + -0.0275 + -0.0968 + -0.0264 + -0.0566 + -0.0825 + -0.2374 + 0.0799 + -0.1494 + -0.0818 + 0.0418 + -0.0461 + 0.0238 + -0.0781 + -0.0668 + -0.1632 + 0.0750 + 0.1338 + -0.1227 + 0.0335 + -0.0160 + 0.1086 + 0.1309 + -0.0767 + 0.0886 + -0.0800 + 0.0959 + -0.0662 + 0.0219 + -0.1196 + -0.1537 + -0.2396 + -0.1134 + 0.0220 + 0.0129 + 0.1451 + 0.0454 + 0.1072 + 0.0398 + -0.1560 + -0.0036 + -0.1507 + -0.1081 + 0.0853 + 0.0544 + 0.0967 + 0.0060 + -0.0500 + 0.0444 + 0.0399 + -0.1628 + -0.0037 + 0.0781 + 0.1579 + 0.1313 + 0.2041 + 0.0271 + -0.1267 + 0.0231 + -0.1228 + -0.1458 + 0.0018 + 0.0037 + -0.0044 + 0.0626 + 0.0608 + 0.0193 + -0.1168 + 0.1709 + 0.1005 + -0.1082 + 0.2692 + 0.2447 + 0.0130 + -0.0512 + -0.0904 + -0.1298 + -0.0003 + -0.0674 + -0.0784 + -0.0375 + -0.0280 + -0.1531 + -0.0739 + 0.2185 + 0.1973 + 0.0042 + -0.2388 + -0.2061 + 0.0657 + -0.0715 + -0.0167 + 0.1753 + 0.0816 + 0.0837 + -0.0599 + 0.1236 + 0.0414 + 0.0768 + -0.0321 + 0.0792 + 0.1140 + 0.0081 + 0.0921 + -0.0595 + 0.1440 + 0.0365 + -0.0205 + -0.0657 + 0.0613 + 0.0418 + 0.0853 + -0.0043 + 0.0805 + 0.1713 + 0.1595 + -0.0792 + 0.1073 + 0.1817 + -0.0194 + 0.0695 + 0.0990 + 0.0052 + 0.0677 + 0.1534 + 0.0843 + 0.0787 + -0.0860 + 0.1044 + 0.1434 + 0.1673 + 0.1964 + 0.1702 + 0.1820 + 0.1179 + 0.0093 + 0.0377 + 0.2880 + 0.2085 + 0.3637 + 0.2689 + 0.5362 + 0.4547 + 0.4185 + 0.4493 + 0.6192 + 0.6663 + 0.9109 + 1.0274 + 1.0281 + 1.4833 + 1.3023 + 1.6870 + 1.8802 + 2.6770 + 2.6648 + 3.3042 + 4.0377 + 3.7392 + 3.1359 + 2.7886 + 2.1949 + 1.9302 + 1.5250 + 1.3088 + 1.0121 + 1.0836 + 0.9780 + 0.6457 + 0.7249 + 0.6327 + 0.3749 + 0.5099 + 0.4851 + 0.2254 + 0.3927 + 0.2660 + 0.1956 + 0.3481 + 0.1989 + 0.1109 + 0.0940 + 0.4171 + 0.0265 + 0.4138 + 0.1896 + 0.0304 + 0.1858 + 0.1922 + 0.0022 + 0.1588 + 0.0863 + 0.1222 + 0.0950 + 0.0088 + -0.1107 + 0.0975 + 0.0708 + -0.0335 + 0.0457 + 0.0070 + -0.0285 + 0.1493 + 0.0438 + 0.0682 + 0.0670 + 0.1936 + 0.0636 + 0.1715 + 0.2107 + 0.0238 + 0.1782 + 0.0847 + 0.0446 + -0.0738 + 0.2018 + 0.0995 + 0.0505 + 0.1397 + 0.0836 + -0.0654 + 0.0746 + 0.0493 + 0.0628 + 0.0555 + -0.0453 + 0.1236 + 0.1318 + -0.1281 + 0.0301 + 0.0852 + 0.1782 + 0.0828 + -0.1993 + 0.1096 + 0.0441 + 0.1384 + 0.0046 + -0.0282 + -0.0922 + -0.0583 + -0.1227 + -0.1291 + -0.0701 + -0.0032 + -0.0556 + 0.0761 + 0.1124 + -0.0663 + -0.1223 + -0.0949 + -0.0053 + 0.1419 + -0.0085 + -0.0473 + 0.0605 + -0.1332 + 0.1701 + 0.0215 + 0.0814 + -0.0215 + 0.3673 + -0.1003 + 0.0474 + -0.2930 + 0.1988 + -0.1512 + -0.0274 + -0.0577 + 0.0388 + -0.0776 + 0.0395 + -0.0450 + -0.0681 + -0.1712 + -0.0191 + 0.2043 + 0.0953 + 0.0123 + 0.0120 + 0.0419 + 0.0406 + -0.1903 + -0.0812 + 0.3514 + -0.0598 + 0.0704 + -0.1281 + 0.0191 + 0.1203 + -0.0497 + -0.0876 + 0.0334 + -0.0911 + -0.1176 + -0.0351 + -0.0619 + 0.0785 + -0.0851 + 0.1448 + -0.1804 + 0.0037 + 0.1023 + -0.0263 + -0.0591 + -0.1475 + -0.0556 + 0.2101 + -0.0621 + 0.0486 + -0.0721 + 0.1393 + -0.0363 + -0.0060 + 0.0634 + -0.0350 + -0.1358 + 0.0875 + -0.0668 + 0.0588 + 0.1719 + 0.0087 + 0.0432 + 0.0481 + -0.0355 + -0.0490 + -0.1310 + -0.0034 + -0.0223 + 0.0518 + -0.0512 + 0.0173 + -0.2125 + -0.0216 + 0.0001 + -0.0529 + 0.0431 + -0.1308 + -0.1001 + -0.0984 + -0.0592 + 0.1243 + 0.0543 + 0.1286 + -0.1619 + 0.0237 + 0.1928 + 0.0596 + 0.1156 + -0.1461 + 0.0575 + 0.1436 + 0.1323 + 0.0279 + -0.0004 + 0.0771 + 0.0406 + 0.2030 + 0.0436 + -0.0675 + 0.0005 + 0.0215 + 0.1220 + 0.0593 + 0.1057 + 0.3290 + 0.1919 + 0.1695 + 0.2456 + 0.2822 + 0.2101 + 0.0918 + 0.1333 + 0.2866 + 0.3819 + 0.3201 + 0.4293 + 0.6068 + 0.7279 + 0.9137 + 1.3308 + 1.6389 + 2.8320 + 2.5336 + 1.9254 + 1.2113 + 0.9679 + 0.8460 + 0.5057 + 0.4729 + 0.4025 + 0.3691 + 0.2714 + 0.2237 + 0.1863 + 0.2049 + 0.1519 + 0.0086 + 0.2998 + 0.2459 + 0.3328 + 0.1901 + 0.2689 + 0.1252 + 0.1729 + 0.2437 + 0.3948 + 0.2792 + 0.3594 + 0.4983 + 0.5890 + 0.5615 + 0.6086 + 0.7158 + 0.7872 + 0.8791 + 1.2316 + 1.0720 + 1.6353 + 2.0419 + 2.3557 + 2.8364 + 3.6179 + 4.6275 + 4.5950 + 3.5358 + 2.8977 + 2.4874 + 1.9051 + 1.5006 + 1.2690 + 1.2245 + 0.8421 + 0.8821 + 0.5392 + 0.6877 + 0.5298 + 0.4326 + 0.3057 + 0.3625 + 0.1769 + 0.3031 + 0.1739 + 0.0635 + 0.2967 + 0.3181 + 0.0334 + 0.1910 + 0.1043 + -0.0317 + -0.0102 + 0.1812 + 0.3303 + 0.0232 + 0.0013 + 0.1292 + 0.3641 + 0.0786 + -0.0510 + 0.1295 + -0.1901 + 0.1563 + -0.1183 + 0.0319 + 0.0313 + 0.0828 + 0.2268 + 0.2504 + -0.0252 + -0.0078 + 0.1064 + 0.0061 + 0.1873 + 0.0010 + 0.2074 + 0.3350 + 0.1934 + 0.4670 + 0.5672 + 0.6024 + 0.8081 + 1.1995 + 1.5046 + 2.1732 + 2.9781 + 3.9393 + 2.6524 + 2.1656 + 1.4639 + 1.1700 + 0.7835 + 0.7230 + 0.5502 + 0.4693 + 0.2587 + 0.3783 + 0.2171 + 0.1347 + 0.0551 + 0.1893 + 0.0998 + -0.0016 + 0.1339 + 0.1462 + -0.0632 + 0.1651 + -0.0417 + 0.0408 + 0.0921 + 0.0228 + -0.1055 + 0.1097 + 0.0975 + 0.0924 + -0.0622 + 0.0367 + -0.0414 + -0.0165 + -0.0033 + 0.2055 + 0.0407 + 0.1122 + 0.1070 + 0.0869 + 0.0263 + -0.1385 + -0.0120 + 0.0846 + -0.0252 + -0.0294 + -0.1877 + 0.1146 + 0.0861 + -0.0072 + -0.1095 + 0.0829 + -0.0717 + 0.1426 + 0.0891 + -0.1715 + -0.1938 + 0.3720 + -0.0301 + 0.0419 + 0.0423 + -0.0498 + -0.0145 + 0.1603 + 0.0648 + 0.0725 + 0.0952 + 0.1233 + -0.0381 + -0.0648 + -0.0305 + -0.0454 + -0.0213 + 0.0692 + -0.0604 + -0.1110 + 0.0310 + 0.0633 + 0.1729 + 0.2794 + 0.0645 + -0.0683 + -0.0363 + 0.1922 + 0.0760 + -0.0433 + 0.1000 + 0.1241 + 0.1168 + -0.0208 + -0.0569 + -0.0519 + 0.0692 + -0.0040 + -0.0668 + 0.2262 + 0.0199 + 0.0186 + 0.1798 + 0.3398 + 0.1030 + -0.0612 + -0.0833 + 0.1041 + -0.0849 + -0.0128 + 0.0924 + -0.1359 + -0.1109 + 0.0820 + -0.1684 + 0.0440 + 0.0230 + 0.0625 + -0.0774 + -0.0247 + 0.0136 + 0.2184 + 0.0262 + 0.0650 + -0.0064 + 0.1243 + 0.0162 + -0.0936 + -0.0314 + 0.0276 + -0.0164 + 0.0521 + 0.0176 + 0.0711 + -0.0224 + 0.0406 + 0.0973 + 0.0282 + -0.1371 + -0.0084 + 0.0145 + 0.0106 + 0.0796 + -0.0862 + 0.0574 + -0.0524 + -0.0351 + 0.0661 + -0.0680 + -0.0780 + 0.0498 + -0.0526 + -0.1841 + -0.1444 + 0.1136 + 0.0879 + 0.0730 + 0.0861 + 0.0233 + -0.2128 + -0.1274 + -0.0548 + 0.0963 + 0.1566 + -0.0680 + 0.0209 + -0.0534 + 0.0237 + -0.0130 + -0.3151 + -0.0575 + 0.1281 + 0.0160 + 0.1092 + -0.0049 + 0.1884 + 0.0283 + -0.1309 + -0.1119 + 0.1274 + -0.0512 + 0.0174 + 0.0805 + -0.0621 + 0.1962 + -0.0275 + 0.0402 + 0.0866 + 0.0094 + 0.0591 + 0.0166 + 0.1337 + 0.0814 + -0.1062 + 0.1541 + 0.0135 + -0.1073 + 0.0399 + 0.0401 + -0.0712 + -0.1300 + -0.0194 + -0.1294 + 0.1560 + -0.1002 + -0.0582 + -0.1270 + -0.1024 + 0.1305 + -0.0690 + 0.0835 + 0.1794 + 0.0586 + -0.0565 + -0.0106 + -0.0969 + 0.2208 + -0.0473 + 0.0334 + -0.2381 + 0.0252 + -0.0007 + -0.0317 + 0.0326 + 0.0184 + -0.0758 + -0.0721 + 0.0018 + -0.0734 + -0.0471 + -0.0493 + -0.0570 + -0.1786 + -0.1364 + -0.0639 + 0.1340 + 0.0323 + 0.0044 + 0.1487 + 0.0335 + 0.0543 + -0.0579 + 0.0639 + -0.0983 + 0.0548 + -0.1129 + 0.1038 + -0.1177 + -0.1109 + -0.0459 + 0.0318 + 0.0512 + -0.0846 + 0.0874 + 0.0211 + 0.1891 + -0.1314 + -0.0963 + -0.1068 + 0.0061 + 0.0987 + 0.2398 + 0.0240 + 0.0078 + -0.1022 + 0.0221 + -0.0393 + 0.0310 + 0.0406 + 0.1458 + -0.0227 + -0.0239 + -0.1092 + -0.0671 + -0.0108 + 0.1053 + 0.0473 + 0.2030 + 0.1003 + -0.0552 + 0.0803 + 0.0816 + -0.0530 + -0.0088 + -0.0331 + -0.0342 + -0.1758 + -0.1346 + -0.1217 + -0.0989 + 0.0441 + 0.1046 + -0.1174 + -0.1122 + -0.1294 + -0.1692 + -0.0701 + 0.0387 + 0.0279 + 0.0619 + -0.0827 + -0.1520 + 0.0356 + 0.0249 + 0.0127 + -0.1066 + -0.1684 + 0.1285 + -0.0762 + -0.1174 + 0.0367 + 0.0390 + -0.0295 + 0.0001 + -0.0649 + -0.1773 + -0.0285 + 0.0861 + -0.0549 + -0.0808 + 0.0904 + -0.0888 + -0.0958 + -0.0711 + -0.1751 + -0.0323 + 0.2276 + -0.0007 + 0.0646 + 0.0214 + 0.1951 + 0.1364 + -0.0275 + -0.0336 + 0.0481 + -0.0453 + -0.0455 + 0.0843 + -0.1193 + 0.0930 + -0.0735 + -0.0966 + -0.1079 +-0.1216 + 0.0493 + -0.0197 + 0.0853 + -0.0016 + -0.1227 + -0.0301 + 0.1376 + -0.0164 + -0.0603 + 0.0684 + 0.0581 + 0.1661 + -0.0270 + -0.0053 + -0.0533 + -0.1908 + 0.1137 + 0.1747 + 0.0638 + -0.0015 + -0.0975 + -0.0583 + 0.0200 + -0.0399 + -0.0583 + -0.0029 + 0.1674 + 0.1115 + 0.1732 + 0.0088 + -0.0056 + 0.1697 + 0.0813 + -0.1027 + 0.1518 + -0.0038 + 0.0275 + 0.1154 + -0.2529 + -0.0582 + -0.1914 + 0.0298 + -0.0650 + -0.0886 + -0.0660 + -0.0753 + -0.0925 + 0.1376 + 0.2160 + -0.0022 + 0.0730 \ No newline at end of file diff --git a/data/noisyheavisine.txt b/data/noisyheavisine.txt new file mode 100644 index 0000000..23b358f --- /dev/null +++ b/data/noisyheavisine.txt @@ -0,0 +1,512 @@ +1.0657 + 1.0006 + 0.6117 + 0.4044 + 0.7049 + 0.8592 + 0.4489 + 0.6764 + 1.4804 + 1.3729 + 1.1876 + 0.8359 + 1.0592 + 1.6929 + 1.5832 + 1.4987 + 1.9193 + 0.9968 + 2.2814 + 1.8615 + 1.8153 + 2.2991 + 2.3962 + 2.6282 + 2.6752 + 2.8719 + 2.3616 + 2.2559 + 2.3763 + 2.5818 + 3.2529 + 2.2118 + 2.7430 + 3.0733 + 3.3577 + 2.7022 + 3.1119 + 3.2637 + 3.2952 + 3.4738 + 3.3380 + 3.1535 + 3.3264 + 3.5341 + 4.1180 + 3.7819 + 3.6842 + 3.8126 + 3.9201 + 4.4759 + 3.9019 + 4.4292 + 3.9813 + 4.2000 + 4.1341 + 4.6312 + 3.5677 + 3.5918 + 4.1196 + 4.3429 + 4.0506 + 3.9147 + 4.5915 + 3.7525 + 4.3211 + 4.7630 + 4.1468 + 3.6378 + 4.9381 + 3.6221 + 4.0528 + 4.2498 + 4.3916 + 3.8548 + 4.1120 + 3.1226 + 3.8218 + 3.4635 + 3.0588 + 4.1349 + 4.2391 + 3.7100 + 3.1359 + 4.4892 + 3.3203 + 3.7948 + 3.3253 + 3.8491 + 3.3987 + 3.0231 + 3.1837 + 3.0502 + 3.5930 + 3.2456 + 3.0435 + 2.5884 + 2.4189 + 2.9470 + 3.1980 + 2.2149 + 1.9529 + 3.0684 + 2.3438 + 1.9030 + 1.6420 + 2.5492 + 2.5800 + 2.5930 + 2.0497 + 1.7434 + 2.4729 + 2.0337 + 0.7426 + 1.3418 + 2.2373 + 0.8947 + 1.1703 + 0.8237 + 1.4013 + 0.5204 + 0.7086 + 0.2940 + 0.4183 + 0.8239 + 0.3488 + 0.1901 + -0.2755 + -0.5884 + 0.0459 + -0.0061 + -0.1662 + -1.1395 + -0.2187 + -0.4940 + -0.1904 + -0.7303 + -0.8049 + -1.2128 + -1.4796 + -1.2787 + -0.6750 + -0.6300 + -1.9705 + -1.3766 + -1.6300 + -1.6662 + -1.4749 + -2.2873 + -2.3715 + -1.9438 + -2.0246 + -2.3207 + -2.3904 + -4.0250 + -4.7166 + -4.6094 + -4.3269 + -4.5663 + -4.1415 + -4.8460 + -4.9088 + -5.1159 + -5.2494 + -4.7209 + -5.6772 + -5.3329 + -6.3053 + -5.0153 + -5.1394 + -5.0556 + -5.8880 + -5.5547 + -5.5403 + -6.3194 + -6.3660 + -5.9584 + -5.1940 + -4.9157 + -5.7317 + -6.5066 + -5.7450 + -5.7231 + -5.9420 + -5.8529 + -6.6728 + -6.5548 + -5.6438 + -6.0741 + -6.6387 + -6.1218 + -6.3158 + -5.7250 + -6.0155 + -5.8662 + -5.7875 + -6.3902 + -5.9303 + -6.0030 + -5.6667 + -5.1734 + -5.7733 + -5.9180 + -5.8427 + -6.0721 + -6.4873 + -5.5756 + -5.9103 + -5.5415 + -5.6358 + -5.8095 + -5.4756 + -5.2417 + -5.4192 + -5.3777 + -5.7800 + -4.8058 + -4.7930 + -6.2389 + -5.9839 + -4.9383 + -5.3716 + -5.4538 + -3.8454 + -5.1885 + -5.2452 + -4.5655 + -4.9033 + -4.9928 + -5.0235 + -4.6184 + -4.0967 + -4.8166 + -4.1745 + -4.0614 + -4.1093 + -3.4929 + -3.5424 + -2.5478 + -4.1180 + -3.4682 + -3.1256 + -3.5773 + -3.0447 + -2.4956 + -2.7483 + -2.6201 + -2.9657 + -2.6621 + -2.8913 + -2.6488 + -2.5289 + -1.9951 + -2.1213 + -2.2065 + -2.2494 + -2.0965 + -2.3657 + -1.5025 + -1.2423 + -2.0154 + -0.8329 + -1.6098 + -1.2474 + -1.0787 + -1.2216 + -1.0861 + -1.3985 + -0.8476 + -0.4991 + 0.0904 + -0.5278 + 0.1709 + -0.5306 + -0.8072 + -0.4898 + -0.3393 + 0.2191 + -0.4752 + 0.0910 + -0.2168 + -0.7928 + 0.4831 + 0.1193 + 0.9896 + 0.4941 + 1.1458 + 1.1746 + 1.6752 + 0.6359 + 0.5090 + 1.4067 + 0.9310 + 1.0004 + 1.4047 + 1.4470 + 1.4776 + 1.8183 + 1.7719 + 1.0112 + 1.6877 + 1.3403 + 1.2260 + 1.7027 + 1.7228 + 1.5210 + 1.9816 + 2.0695 + 2.0422 + 1.6521 + 1.3538 + 1.6597 + 1.6981 + 1.9754 + 2.2320 + 2.8194 + 1.9796 + 1.9535 + 1.8937 + 1.6508 + 2.1684 + 1.9457 + 2.2100 + 2.3376 + 1.4828 + 2.3156 + 1.6363 + 1.6415 + 1.6262 + 1.7795 + 1.2742 + 2.1842 + 1.5837 + 2.1802 + 2.5516 + 1.8494 + 1.5392 + 1.8861 + 1.1615 + 1.5972 + 1.5326 + 1.4134 + 1.1573 + 0.9850 + 1.3061 + 1.5567 + 1.1001 + 0.5861 + 1.2758 + 1.4634 + 0.5481 + -0.2347 + 1.2253 + 0.7886 + -0.0569 + 0.3684 + 1.0031 + 0.2320 + 0.2774 + 0.3051 + 0.2066 + -0.0612 + -0.4045 + 0.2544 + 0.1755 + 0.1436 + 0.6782 + -0.3352 + -0.4587 + 1.8259 + 1.3455 + 1.8159 + 1.8610 + 1.4192 + 1.4261 + 1.0369 + 0.8564 + 0.4077 + 0.5913 + 0.0495 + 1.1516 + 0.2284 + -0.0953 + -0.2963 + 0.3560 + 0.0803 + 0.1577 + 0.1330 + -0.4338 + 0.1264 + -0.5193 + -0.3638 + -1.4667 + -0.8071 + -1.1646 + -1.3581 + -2.0099 + -1.9754 + -1.3684 + -1.4739 + -2.0044 + -1.9212 + -1.3331 + -1.8712 + -1.9120 + -1.6113 + -1.4759 + -2.5851 + -1.5004 + -2.2432 + -2.4955 + -1.8040 + -2.2723 + -2.7506 + -2.7914 + -3.0147 + -3.1889 + -2.6117 + -2.9667 + -4.1494 + -3.1516 + -2.9235 + -2.9130 + -3.3368 + -3.5575 + -3.2338 + -3.6494 + -3.2499 + -4.3063 + -3.3651 + -2.9785 + -3.3652 + -3.4743 + -4.0558 + -3.9807 + -3.2774 + -4.0199 + -4.5528 + -4.2490 + -3.5356 + -3.9068 + -3.7764 + -3.7189 + -3.2039 + -3.6964 + -4.9097 + -3.4455 + -3.4451 + -4.1807 + -4.2489 + -3.5878 + -4.1839 + -4.1409 + -3.4127 + -3.8450 + -3.1923 + -4.2415 + -4.1260 + -3.1998 + -4.1118 + -4.3941 + -4.0991 + -3.7035 + -3.5813 + -3.6244 + -3.8968 + -4.0114 + -3.0996 + -2.5770 + -2.5784 + -2.5148 + -3.4869 + -3.1257 + -3.3178 + -3.2136 + -3.3256 + -3.1696 + -2.6366 + -2.7773 + -3.4404 + -2.7195 + -1.7045 + -2.7076 + -2.4246 + -3.3656 + -2.7804 + -2.5646 + -2.2261 + -1.8682 + -2.7736 + -2.1846 + -2.2518 + -2.1819 + -1.6506 + -1.1380 + -1.4379 + -1.2677 + -0.9920 + -0.9576 + -1.7788 + -1.1704 + -1.0133 + -0.0132 + -0.5174 + -0.7500 + -0.5398 + -1.4065 + -1.4180 + -0.5397 + 0.2176 + 0.0255 + -0.1699 + -0.0142 \ No newline at end of file diff --git a/data/piecepoly.txt b/data/piecepoly.txt new file mode 100644 index 0000000..ec70b78 --- /dev/null +++ b/data/piecepoly.txt @@ -0,0 +1,1024 @@ +5.6940 + 5.6955 + 5.6979 + 5.7013 + 5.7058 + 5.7113 + 5.7179 + 5.7255 + 5.7342 + 5.7439 + 5.7548 + 5.7668 + 5.7799 + 5.7942 + 5.8096 + 5.8262 + 5.8440 + 5.8630 + 5.8832 + 5.9046 + 5.9273 + 5.9512 + 5.9764 + 6.0029 + 6.0307 + 6.0598 + 6.0902 + 6.1220 + 6.1551 + 6.1896 + 6.2255 + 6.2628 + 6.3015 + 6.3417 + 6.3832 + 6.4263 + 6.4708 + 6.5167 + 6.5642 + 6.6132 + 6.6637 + 6.7158 + 6.7694 + 6.8246 + 6.8814 + 6.9397 + 6.9997 + 7.0613 + 7.1246 + 7.1894 + 7.2560 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + -64.3065 + 25.6951 + 26.0123 + 26.3326 + 26.6562 + 26.9829 + 27.3127 + 27.6459 + 27.9822 + 28.3217 + 28.6646 + 29.0106 + 29.3600 + 29.7126 + 30.0686 + 30.4279 + 30.7905 + 31.1565 + 31.5258 + 31.8985 + 32.2746 + 32.6541 + 33.0371 + 33.4234 + 33.8132 + 34.2065 + 34.6033 + 35.0035 + 35.4073 + 35.8145 + 36.2253 + 36.6397 + 37.0576 + 37.4791 + 37.9042 + 38.3328 + 38.7651 + 39.2011 + 39.6407 + 40.0839 + 40.5308 + 40.9814 + 41.4357 + 41.8938 + 42.3555 + 42.8210 + 43.2903 + 43.7633 + 44.2402 + 44.7208 + 45.2052 + 45.6935 + -19.3065 + -19.4528 + -19.5977 + -19.7412 + -19.8833 + -20.0239 + -20.1631 + -20.3010 + -20.4374 + -20.5725 + -20.7062 + -20.8385 + -20.9694 + -21.0990 + -21.2273 + -21.3542 + -21.4797 + -21.6039 + -21.7269 + -21.8485 + -21.9687 + -22.0877 + -22.2054 + -22.3218 + -22.4370 + -22.5508 + -22.6634 + -22.7747 + -22.8848 + -22.9937 + -23.1013 + -23.2076 + -23.3128 + -23.4167 + -23.5195 + -23.6210 + -23.7213 + -23.8205 + -23.9184 + -24.0152 + -24.1108 + -24.2053 + -24.2986 + -24.3908 + -24.4818 + -24.5717 + -24.6605 + -24.7481 + -24.8347 + -24.9201 + -25.0045 + -25.0877 + -25.1699 + -25.2510 + -25.3311 + -25.4100 + -25.4880 + -25.5649 + -25.6407 + -25.7155 + -25.7893 + -25.8621 + -25.9338 + -26.0046 + -26.0743 + -26.1431 + -26.2109 + -26.2777 + -26.3435 + -26.4084 + -26.4723 + -26.5353 + -26.5974 + -26.6585 + -26.7186 + -26.7779 + -26.8362 + -26.8937 + -26.9502 + -27.0059 + -27.0607 + -27.1146 + -27.1676 + -27.2198 + -27.2711 + -27.3215 + -27.3712 + -27.4199 + -27.4679 + -27.5150 + -27.5614 + -27.6069 + -27.6516 + -27.6956 + -27.7387 + -27.7811 + -27.8227 + -27.8635 + -27.9036 + -27.9429 + -27.9815 + -28.0194 + -28.0565 + -28.0929 + -28.1286 + -28.1636 + -28.1979 + -28.2314 + -28.2644 + -28.2966 + -28.3281 + -28.3590 + -28.3893 + -28.4189 + -28.4478 + -28.4761 + -28.5038 + -28.5308 + -28.5573 + -28.5831 + -28.6083 + -28.6330 + -28.6570 + -28.6805 + -28.7034 + -28.7257 + -28.7475 + -28.7687 + -28.7894 + -28.8096 + -28.8292 + -28.8483 + -28.8668 + -28.8849 + -28.9025 + -28.9195 + -28.9361 + -28.9522 + -28.9678 + -28.9830 + -28.9977 + -29.0120 + -29.0258 + -29.0391 + -29.0521 + -29.0646 + -29.0767 + -29.0884 + -29.0996 + -29.1105 + -29.1210 + -29.1311 + -29.1409 + -29.1502 + -29.1593 + -29.1679 + -29.1762 + -29.1842 + -29.1918 + -29.1992 + -29.2062 + -29.2128 + -29.2192 + -29.2253 + -29.2311 + -29.2366 + -29.2419 + -29.2468 + -29.2515 + -29.2560 + -29.2602 + -29.2642 + -29.2679 + -29.2714 + -29.2747 + -29.2778 + -29.2806 + -29.2833 + -29.2858 + -29.2881 + -29.2902 + -29.2922 + -29.2939 + -29.2956 + -29.2971 + -29.2984 + -29.2996 + -29.3007 + -29.3017 + -29.3025 + -29.3033 + -29.3039 + -29.3045 + -29.3049 + -29.3053 + -29.3056 + -29.3059 + -29.3061 + -29.3062 + -29.3063 + -29.3064 + -29.3065 + -29.3065 + -29.3065 + 25.8896 + 26.0857 + 26.2820 + 26.4784 + 26.6751 + 26.8720 + 27.0693 + 27.2670 + 27.4651 + 27.6637 + 27.8629 + 28.0627 + 28.2632 + 28.4645 + 28.6665 + 28.8694 + 29.0731 + 29.2779 + 29.4836 + 29.6905 + 29.8984 + 30.1076 + 30.3180 + 30.5297 + 30.7427 + 30.9572 + 31.1731 + 31.3906 + 31.6096 + 31.8303 + 32.0527 + 32.2768 + 32.5027 + 32.7305 + 32.9603 + 33.1920 + 33.4257 + 33.6616 + 33.8995 + 34.1397 + 34.3822 + 34.6270 + 34.8741 + 35.1237 + 35.3757 + 35.6303 + 35.8875 + 36.1474 + 36.4100 + 36.6753 + 36.9435 + 37.2146 + 37.4886 + 37.7656 + 38.0456 + 38.3288 + 38.6151 + 38.9046 + 39.1975 + 39.4936 + 39.7932 + 40.0962 + 40.4027 + 40.7128 + 41.0265 + 41.3438 + 41.6649 + 41.9898 + 42.3185 + 42.6512 + 42.9878 + 43.3284 + 43.6730 + 44.0218 + 44.3748 + 44.7320 + 45.0936 + 45.4594 + 45.8297 + 46.2045 + 46.5837 + 46.9676 + 47.3561 + 47.7493 + 48.1472 + 48.5500 + 48.9576 + 49.3701 + 49.7876 + 50.2101 + 50.6377 + 51.0705 + 51.5084 + 51.9517 + 52.4002 + 52.8541 + 53.3134 + 53.7783 + 54.2486 + 54.7246 + 55.2062 + 55.6935 + 56.1866 + 56.6855 + 57.1903 + 57.7010 + 58.2178 + 58.7405 + 59.2694 + 59.8044 + 60.3457 + 60.8932 + 61.4471 + 62.0074 + 62.5741 + 63.1473 + 63.7270 + 64.3134 + 64.9065 + 65.5063 + 66.1128 + 66.7262 + 67.3465 + 67.9738 + 68.6080 + 69.2494 + 69.8978 + 70.5535 + 71.2164 + 71.8865 + 72.5640 + 73.2490 + 73.9414 + 74.6413 + 75.3488 + 76.0639 + 76.7867 + 77.5172 + 78.2556 + 79.0018 + 79.7559 + 80.5180 + 81.2882 + 82.0664 + 82.8528 + 83.6473 + 84.4501 + 85.2612 + 86.0807 + 86.9087 + 87.7450 + 88.5900 + 89.4435 + 90.3057 + 91.1766 + 92.0562 + 92.9447 + 93.8420 + 94.7483 + 95.6636 + 96.5879 + 97.5213 + 98.4639 + 99.4157 + 100.3767 + 101.3471 + 102.3269 + 103.3161 + 104.3149 + 105.3231 + 106.3410 + 107.3686 + 108.4059 + 109.4529 + 110.5098 + 111.5766 + 112.6534 + 113.7401 + 114.8369 + 115.9439 + 117.0610 + 118.1883 + 119.3260 + 120.4739 + 121.6323 + 122.8012 + 123.9805 + 125.1705 + 126.3710 + 127.5823 + 128.8043 + 130.0371 + 131.2807 + 132.5353 + 133.8008 + 135.0774 + 136.3650 + 137.6638 + 138.9738 + 140.2950 + 141.6275 + 142.9714 + 144.3267 + 145.6935 + -58.2669 + -58.2265 + -58.1854 + -58.1435 + -58.1008 + -58.0574 + -58.0131 + -57.9682 + -57.9224 + -57.8759 + -57.8286 + -57.7805 + -57.7317 + -57.6821 + -57.6317 + -57.5806 + -57.5287 + -57.4760 + -57.4226 + -57.3684 + -57.3134 + -57.2577 + -57.2011 + -57.1439 + -57.0858 + -57.0270 + -56.9674 + -56.9070 + -56.8459 + -56.7840 + -56.7213 + -56.6579 + -56.5937 + -56.5287 + -56.4630 + -56.3965 + -56.3292 + -56.2611 + -56.1923 + -56.1227 + -56.0524 + -55.9812 + -55.9093 + -55.8367 + -55.7632 + -55.6890 + -55.6141 + -55.5383 + -55.4618 + -55.3845 + -55.3065 + -55.2277 + -55.1481 + -55.0677 + -54.9866 + -54.9047 + -54.8221 + -54.7386 + -54.6544 + -54.5695 + -54.4837 + -54.3972 + -54.3100 + -54.2219 + -54.1331 + -54.0435 + -53.9532 + -53.8620 + -53.7702 + -53.6775 + -53.5841 + -53.4899 + -53.3949 + -53.2992 + -53.2027 + -53.1054 + -53.0074 + -52.9086 + -52.8090 + -52.7086 + -52.6075 + -52.5056 + -52.4030 + -52.2996 + -52.1954 + -52.0904 + -51.9847 + -51.8782 + -51.7709 + -51.6629 + -51.5541 + -51.4445 + -51.3342 + -51.2231 + -51.1112 + -50.9985 + -50.8851 + -50.7709 + -50.6560 + -50.5402 + -50.4238 + -50.3065 + -50.1885 + -50.0697 + -49.9501 + -49.8298 + -49.7086 + -49.5868 + -49.4641 + -49.3407 + -49.2165 + -49.0916 + -48.9659 + -48.8394 + -48.7121 + -48.5841 + -48.4553 + -48.3257 + -48.1954 + -48.0643 + -47.9324 + -47.7998 + -47.6664 + -47.5322 + -47.3972 + -47.2615 + -47.1250 + -46.9878 + -46.8497 + -46.7110 + -46.5714 + -46.4311 + -46.2900 + -46.1481 + -46.0055 + -45.8620 + -45.7179 + -45.5729 + -45.4272 + -45.2807 + -45.1335 + -44.9855 + -44.8367 + -44.6871 + -44.5368 + -44.3857 + -44.2338 + -44.0812 + -43.9278 + -43.7736 + -43.6187 + -43.4630 + -43.3065 + -43.1492 + -42.9912 + -42.8324 + -42.6729 + -42.5126 + -42.3515 + -42.1896 + -42.0270 + -41.8636 + -41.6994 + -41.5345 + -41.3688 + -41.2023 + -41.0351 + -40.8670 + -40.6983 + -40.5287 + -40.3584 + -40.1873 + -40.0154 + -39.8428 + -39.6694 + -39.4953 + -39.3203 + -39.1446 + -38.9682 + -38.7909 + -38.6129 + -38.4341 + -38.2546 + -38.0743 + -37.8932 + -37.7113 + -37.5287 + -37.3453 + -37.1612 + -36.9762 + -36.7905 + -36.6041 + -36.4168 + -36.2288 + -36.0401 + -35.8505 + -35.6602 + -35.4691 + -35.2773 + -35.0847 + -34.8913 + -34.6971 + -34.5022 + -34.3065 + 25.6935 + 25.5955 + 25.4974 + 25.3994 + 25.3014 + 25.2033 + 25.1053 + 25.0072 + 24.9092 + 24.8112 + 24.7131 + 24.6151 + 24.5170 + 24.4190 + 24.3210 + 24.2229 + 24.1249 + 24.0268 + 23.9288 + 23.8308 + 23.7327 + 23.6347 + 23.5366 + 23.4386 + 23.3406 + 23.2425 + 23.1445 + 23.0465 + 22.9484 + 22.8504 + 22.7523 + 22.6543 + 22.5563 + 22.4582 + 22.3602 + 22.2621 + 22.1641 + 22.0661 + 21.9680 + 21.8700 + 21.7719 + 21.6739 + 21.5759 + 21.4778 + 21.3798 + 21.2817 + 21.1837 + 21.0857 + 20.9876 + 20.8896 + 20.7915 + 20.6935 + 20.5955 + 20.4974 + 20.3994 + 20.3014 + 20.2033 + 20.1053 + 20.0072 + 19.9092 + 19.8112 + 19.7131 + 19.6151 + 19.5170 + 19.4190 + 19.3210 + 19.2229 + 19.1249 + 19.0268 + 18.9288 + 18.8308 + 18.7327 + 18.6347 + 18.5366 + 18.4386 + 18.3406 + 18.2425 + 18.1445 + 18.0465 + 17.9484 + 17.8504 + 17.7523 + 17.6543 + 17.5563 + 17.4582 + 17.3602 + 17.2621 + 17.1641 + 17.0661 + 16.9680 + 16.8700 + 16.7719 + 16.6739 + 16.5759 + 16.4778 + 16.3798 + 16.2817 + 16.1837 + 16.0857 + 15.9876 + 15.8896 + 15.7915 + 15.6935 + 15.5955 + 15.4974 + 15.3994 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 75.6935 + 10.3014 + 10.2033 + 10.1053 + 10.0072 + 9.9092 + 9.8112 + 9.7131 + 9.6151 + 9.5170 + 9.4190 + 9.3210 + 9.2229 + 9.1249 + 9.0268 + 8.9288 + 8.8308 + 8.7327 + 8.6347 + 8.5366 + 8.4386 + 8.3406 + 8.2425 + 8.1445 + 8.0465 + 7.9484 + 7.8504 + 7.7523 + 7.6543 + 7.5563 + 7.4582 + 7.3602 + 7.2621 + 7.1641 + 7.0661 + 6.9680 + 6.8700 + 6.7719 + 6.6739 + 6.5759 + 6.4778 + 6.3798 + 6.2817 + 6.1837 + 6.0857 + 5.9876 + 5.8896 + 5.7915 + 5.7013 + 5.6979 + 5.6955 + 5.6940 \ No newline at end of file diff --git a/data/pieceregular.txt b/data/pieceregular.txt new file mode 100644 index 0000000..020a20f --- /dev/null +++ b/data/pieceregular.txt @@ -0,0 +1,256 @@ +-18.3237 + -18.2232 + -18.0974 + -17.9410 + -17.7480 + -17.5113 + -17.2230 + -16.8744 + -16.4558 + -15.9565 + -15.3653 + -14.6701 + -13.8586 + -12.9182 + -11.8363 + -10.6008 + -9.2006 + -7.6257 + -5.8680 + -3.9217 + -1.7839 + 0.5452 + 3.0614 + 5.7562 + 8.6167 + 11.6252 + 14.7591 + 17.9909 + 21.2884 + 24.6155 + 27.9319 + 31.1947 + 34.3587 + 37.3775 + 40.2049 + 42.7957 + 13.2164 + 14.2125 + 15.0317 + 15.6595 + 16.0845 + 16.2990 + 16.2990 + 16.0845 + 15.6595 + 15.0317 + 14.2125 + 13.2164 + 12.0608 + 10.7654 + 9.3517 + 34.3587 + 31.1947 + 27.9319 + 24.6155 + 21.2884 + 17.9909 + 14.7591 + 11.6252 + 8.6167 + 5.7562 + 3.0614 + 0.5452 + -1.7839 + -3.9217 + -5.8680 + -7.6257 + -9.2006 + -10.6008 + -11.8363 + -12.9182 + -13.8586 + -14.6701 + -15.3653 + -15.9565 + -16.4558 + -16.8744 + -17.2230 + -17.5113 + -17.7480 + -17.9410 + -18.0974 + -18.2232 + -18.3237 + -18.4035 + -18.0080 + -17.8889 + -17.7403 + -17.5533 + -17.3156 + -17.0102 + -16.6129 + -16.0884 + -15.3848 + -14.4239 + -13.0840 + -11.1708 + -8.3634 + -4.1098 + 2.5833 + 13.6048 + 32.7934 + 28.0187 + 10.9660 + 1.0776 + -4.9459 + -8.7354 + -11.1225 + -12.4865 + -12.8019 + -11.2050 + -3.3124 + 1.8995 + -11.3573 + -15.0684 + -16.5028 + -17.1937 + -17.5831 + -17.8288 + -17.9968 + -18.1185 + -18.2103 + -18.2818 + -18.3388 + -18.3849 + -18.4229 + -18.4545 + -18.4810 + -17.4642 + -17.2104 + -16.9033 + -16.5317 + -16.0822 + -15.5384 + -14.8804 + -14.0844 + -13.1214 + -11.9563 + -10.5467 + -8.8414 + -6.7782 + -4.2822 + -1.2624 + 2.3911 + 6.8111 + 12.1585 + 18.6280 + 26.4549 + 35.9241 + 35.9241 + 26.4549 + 18.6280 + 12.1585 + 6.8111 + 2.3911 + -1.2624 + -4.2822 + -6.7782 + -8.8414 + -10.5467 + -11.9563 + -13.1214 + -14.0844 + -14.8804 + -15.5384 + -16.0822 + -16.5317 + -16.9033 + -17.2104 + -17.4642 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 6.3259 + 34.8066 + 34.6752 + 34.5285 + 34.3645 + 34.1812 + 33.9763 + 33.7474 + 33.4917 + 33.2058 + 32.8863 + 32.5294 + 32.1304 + 31.6846 + 31.1864 + 30.6296 + 30.0074 + 29.3121 + 28.5350 + 27.6667 + 26.6963 + 25.6118 + 24.3999 + 23.0456 + 21.5322 + 19.8408 + 17.9507 + 15.8385 + 13.4781 + 10.8403 + 7.8925 + 4.5982 + 0.9168 + -3.1972 + -7.7947 + -12.9325 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.6741 + -18.3237 \ No newline at end of file diff --git a/data/pieceregular2048.txt b/data/pieceregular2048.txt new file mode 100644 index 0000000..030883b --- /dev/null +++ b/data/pieceregular2048.txt @@ -0,0 +1,2048 @@ +-18.6361 + -18.6269 + -18.6174 + -18.6077 + -18.5976 + -18.5872 + -18.5766 + -18.5656 + -18.5543 + -18.5426 + -18.5307 + -18.5184 + -18.5057 + -18.4927 + -18.4792 + -18.4655 + -18.4513 + -18.4367 + -18.4217 + -18.4063 + -18.3905 + -18.3742 + -18.3574 + -18.3402 + -18.3226 + -18.3044 + -18.2858 + -18.2666 + -18.2469 + -18.2267 + -18.2060 + -18.1847 + -18.1628 + -18.1404 + -18.1173 + -18.0937 + -18.0694 + -18.0445 + -18.0189 + -17.9927 + -17.9658 + -17.9383 + -17.9100 + -17.8810 + -17.8513 + -17.8208 + -17.7895 + -17.7575 + -17.7247 + -17.6910 + -17.6565 + -17.6212 + -17.5850 + -17.5480 + -17.5100 + -17.4711 + -17.4313 + -17.3906 + -17.3488 + -17.3061 + -17.2624 + -17.2177 + -17.1719 + -17.1250 + -17.0771 + -17.0280 + -16.9778 + -16.9265 + -16.8741 + -16.8204 + -16.7655 + -16.7094 + -16.6521 + -16.5935 + -16.5336 + -16.4724 + -16.4099 + -16.3460 + -16.2807 + -16.2140 + -16.1459 + -16.0764 + -16.0054 + -15.9329 + -15.8589 + -15.7833 + -15.7062 + -15.6275 + -15.5472 + -15.4653 + -15.3817 + -15.2964 + -15.2095 + -15.1208 + -15.0303 + -14.9381 + -14.8441 + -14.7482 + -14.6505 + -14.5510 + -14.4495 + -14.3461 + -14.2408 + -14.1335 + -14.0242 + -13.9128 + -13.7995 + -13.6840 + -13.5665 + -13.4469 + -13.3251 + -13.2011 + -13.0750 + -12.9466 + -12.8160 + -12.6832 + -12.5480 + -12.4106 + -12.2708 + -12.1286 + -11.9841 + -11.8372 + -11.6879 + -11.5361 + -11.3818 + -11.2251 + -11.0658 + -10.9040 + -10.7397 + -10.5728 + -10.4033 + -10.2311 + -10.0564 + -9.8790 + -9.6989 + -9.5161 + -9.3306 + -9.1424 + -8.9515 + -8.7578 + -8.5613 + -8.3620 + -8.1599 + -7.9550 + -7.7472 + -7.5366 + -7.3232 + -7.1068 + -6.8876 + -6.6655 + -6.4405 + -6.2125 + -5.9816 + -5.7478 + -5.5110 + -5.2713 + -5.0286 + -4.7830 + -4.5344 + -4.2828 + -4.0282 + -3.7707 + -3.5101 + -3.2466 + -2.9801 + -2.7106 + -2.4382 + -2.1627 + -1.8843 + -1.6029 + -1.3185 + -1.0312 + -0.7409 + -0.4476 + -0.1515 + 0.1476 + 0.4496 + 0.7546 + 1.0624 + 1.3731 + 1.6866 + 2.0030 + 2.3223 + 2.6443 + 2.9691 + 3.2967 + 3.6271 + 3.9602 + 4.2960 + 4.6344 + 4.9756 + 5.3193 + 5.6656 + 6.0146 + 6.3660 + 6.7199 + 7.0764 + 7.4352 + 7.7965 + 8.1601 + 8.5261 + 8.8943 + 9.2648 + 9.6375 + 10.0124 + 10.3893 + 10.7684 + 11.1495 + 11.5326 + 11.9176 + 12.3045 + 12.6932 + 13.0837 + 13.4759 + 13.8698 + 14.2654 + 14.6625 + 15.0611 + 15.4611 + 15.8625 + 16.2653 + 16.6693 + 17.0746 + 17.4809 + 17.8883 + 18.2968 + 18.7062 + 19.1164 + 19.5274 + 19.9392 + 20.3517 + 20.7647 + 21.1782 + 21.5922 + 22.0065 + 22.4211 + 22.8360 + 23.2509 + 23.6659 + 24.0809 + 24.4958 + 24.9105 + 25.3250 + 25.7391 + 26.1527 + 26.5659 + 26.9784 + 27.3903 + 27.8014 + 28.2117 + 28.6210 + 29.0293 + 29.4364 + 29.8424 + 30.2471 + 30.6504 + 31.0522 + 31.4525 + 31.8511 + 32.2480 + 32.6431 + 33.0362 + 33.4274 + 33.8164 + 34.2033 + 34.5879 + 34.9702 + 35.3500 + 35.7272 + 36.1018 + 36.4737 + 36.8427 + 37.2089 + 37.5721 + 37.9322 + 38.2891 + 38.6427 + 38.9930 + 39.3399 + 39.6833 + 40.0230 + 40.3590 + 40.6913 + 41.0197 + 41.3442 + 41.6646 + 41.9809 + 42.2930 + 42.6008 + 42.9043 + 43.2033 + 43.4979 + 12.4360 + 12.5787 + 12.7189 + 12.8567 + 12.9921 + 13.1250 + 13.2554 + 13.3832 + 13.5085 + 13.6311 + 13.7511 + 13.8683 + 13.9829 + 14.0946 + 14.2036 + 14.3098 + 14.4132 + 14.5136 + 14.6112 + 14.7059 + 14.7975 + 14.8862 + 14.9719 + 15.0546 + 15.1342 + 15.2108 + 15.2842 + 15.3546 + 15.4218 + 15.4858 + 15.5467 + 15.6043 + 15.6588 + 15.7101 + 15.7581 + 15.8028 + 15.8443 + 15.8825 + 15.9175 + 15.9491 + 15.9774 + 16.0024 + 16.0241 + 16.0425 + 16.0575 + 16.0692 + 16.0776 + 16.0826 + 16.0843 + 16.0826 + 16.0776 + 16.0692 + 16.0575 + 16.0425 + 16.0241 + 16.0024 + 15.9774 + 15.9491 + 15.9175 + 15.8825 + 15.8443 + 15.8028 + 15.7581 + 15.7101 + 15.6588 + 15.6043 + 15.5467 + 15.4858 + 15.4218 + 15.3546 + 15.2842 + 15.2108 + 15.1342 + 15.0546 + 14.9719 + 14.8862 + 14.7975 + 14.7059 + 14.6112 + 14.5136 + 14.4132 + 14.3098 + 14.2036 + 14.0946 + 13.9829 + 13.8683 + 13.7511 + 13.6311 + 13.5085 + 13.3832 + 13.2554 + 13.1250 + 12.9921 + 12.8567 + 12.7189 + 12.5787 + 12.4360 + 12.2911 + 12.1438 + 11.9943 + 11.8426 + 11.6886 + 11.5326 + 11.3744 + 11.2142 + 11.0520 + 10.8878 + 10.7217 + 10.5536 + 10.3838 + 10.2121 + 10.0387 + 9.8635 + 9.6867 + 9.5082 + 9.3282 + 9.1466 + 36.8427 + 36.4737 + 36.1018 + 35.7272 + 35.3500 + 34.9702 + 34.5879 + 34.2033 + 33.8164 + 33.4274 + 33.0362 + 32.6431 + 32.2480 + 31.8511 + 31.4525 + 31.0522 + 30.6504 + 30.2471 + 29.8424 + 29.4364 + 29.0293 + 28.6210 + 28.2117 + 27.8014 + 27.3903 + 26.9784 + 26.5659 + 26.1527 + 25.7391 + 25.3250 + 24.9105 + 24.4958 + 24.0809 + 23.6659 + 23.2509 + 22.8360 + 22.4211 + 22.0065 + 21.5922 + 21.1782 + 20.7647 + 20.3517 + 19.9392 + 19.5274 + 19.1164 + 18.7062 + 18.2968 + 17.8883 + 17.4809 + 17.0746 + 16.6693 + 16.2653 + 15.8625 + 15.4611 + 15.0611 + 14.6625 + 14.2654 + 13.8698 + 13.4759 + 13.0837 + 12.6932 + 12.3045 + 11.9176 + 11.5326 + 11.1495 + 10.7684 + 10.3893 + 10.0124 + 9.6375 + 9.2648 + 8.8943 + 8.5261 + 8.1601 + 7.7965 + 7.4352 + 7.0764 + 6.7199 + 6.3660 + 6.0146 + 5.6656 + 5.3193 + 4.9756 + 4.6344 + 4.2960 + 3.9602 + 3.6271 + 3.2967 + 2.9691 + 2.6443 + 2.3223 + 2.0030 + 1.6866 + 1.3731 + 1.0624 + 0.7546 + 0.4496 + 0.1476 + -0.1515 + -0.4476 + -0.7409 + -1.0312 + -1.3185 + -1.6029 + -1.8843 + -2.1627 + -2.4382 + -2.7106 + -2.9801 + -3.2466 + -3.5101 + -3.7707 + -4.0282 + -4.2828 + -4.5344 + -4.7830 + -5.0286 + -5.2713 + -5.5110 + -5.7478 + -5.9816 + -6.2125 + -6.4405 + -6.6655 + -6.8876 + -7.1068 + -7.3232 + -7.5366 + -7.7472 + -7.9550 + -8.1599 + -8.3620 + -8.5613 + -8.7578 + -8.9515 + -9.1424 + -9.3306 + -9.5161 + -9.6989 + -9.8790 + -10.0564 + -10.2311 + -10.4033 + -10.5728 + -10.7397 + -10.9040 + -11.0658 + -11.2251 + -11.3818 + -11.5361 + -11.6879 + -11.8372 + -11.9841 + -12.1286 + -12.2708 + -12.4106 + -12.5480 + -12.6832 + -12.8160 + -12.9466 + -13.0750 + -13.2011 + -13.3251 + -13.4469 + -13.5665 + -13.6840 + -13.7995 + -13.9128 + -14.0242 + -14.1335 + -14.2408 + -14.3461 + -14.4495 + -14.5510 + -14.6505 + -14.7482 + -14.8441 + -14.9381 + -15.0303 + -15.1208 + -15.2095 + -15.2964 + -15.3817 + -15.4653 + -15.5472 + -15.6275 + -15.7062 + -15.7833 + -15.8589 + -15.9329 + -16.0054 + -16.0764 + -16.1459 + -16.2140 + -16.2807 + -16.3460 + -16.4099 + -16.4724 + -16.5336 + -16.5935 + -16.6521 + -16.7094 + -16.7655 + -16.8204 + -16.8741 + -16.9265 + -16.9778 + -17.0280 + -17.0771 + -17.1250 + -17.1719 + -17.2177 + -17.2624 + -17.3061 + -17.3488 + -17.3906 + -17.4313 + -17.4711 + -17.5100 + -17.5480 + -17.5850 + -17.6212 + -17.6565 + -17.6910 + -17.7247 + -17.7575 + -17.7895 + -17.8208 + -17.8513 + -17.8810 + -17.9100 + -17.9383 + -17.9658 + -17.9927 + -18.0189 + -18.0445 + -18.0694 + -18.0937 + -18.1173 + -18.1404 + -18.1628 + -18.1847 + -18.2060 + -18.2267 + -18.2469 + -18.2666 + -18.2858 + -18.3044 + -18.3226 + -18.3402 + -18.3574 + -18.3742 + -18.3905 + -18.4063 + -18.4217 + -18.4367 + -18.4513 + -18.4655 + -18.4792 + -18.4927 + -18.5057 + -18.5184 + -18.5307 + -18.5426 + -18.5543 + -18.5656 + -18.5766 + -18.5872 + -18.5976 + -18.6077 + -18.6174 + -18.6269 + -18.6361 + -18.6451 + -18.3121 + -18.3002 + -18.2881 + -18.2756 + -18.2628 + -18.2497 + -18.2362 + -18.2223 + -18.2080 + -18.1934 + -18.1783 + -18.1628 + -18.1469 + -18.1306 + -18.1138 + -18.0965 + -18.0787 + -18.0604 + -18.0416 + -18.0223 + -18.0024 + -17.9819 + -17.9609 + -17.9392 + -17.9169 + -17.8939 + -17.8702 + -17.8459 + -17.8208 + -17.7949 + -17.7683 + -17.7408 + -17.7125 + -17.6833 + -17.6533 + -17.6222 + -17.5902 + -17.5572 + -17.5232 + -17.4881 + -17.4518 + -17.4143 + -17.3757 + -17.3357 + -17.2945 + -17.2519 + -17.2078 + -17.1623 + -17.1152 + -17.0666 + -17.0162 + -16.9642 + -16.9103 + -16.8545 + -16.7968 + -16.7370 + -16.6750 + -16.6109 + -16.5444 + -16.4755 + -16.4041 + -16.3300 + -16.2531 + -16.1734 + -16.0907 + -16.0047 + -15.9155 + -15.8229 + -15.7266 + -15.6265 + -15.5224 + -15.4142 + -15.3017 + -15.1845 + -15.0626 + -14.9356 + -14.8034 + -14.6656 + -14.5219 + -14.3722 + -14.2159 + -14.0529 + -13.8828 + -13.7051 + -13.5196 + -13.3256 + -13.1229 + -12.9109 + -12.6891 + -12.4569 + -12.2138 + -11.9592 + -11.6923 + -11.4125 + -11.1190 + -10.8109 + -10.4876 + -10.1479 + -9.7909 + -9.4155 + -9.0206 + -8.6050 + -8.1673 + -7.7062 + -7.2200 + -6.7071 + -6.1658 + -5.5942 + -4.9901 + -4.3514 + -3.6757 + -2.9603 + -2.2023 + -1.3989 + -0.5465 + 0.3584 + 1.3196 + 2.3416 + 3.4290 + 4.5868 + 5.8206 + 7.1365 + 8.5410 + 10.0415 + 11.6460 + 13.3632 + 15.2027 + 17.1752 + 19.2924 + 21.5671 + 24.0137 + 26.6480 + 29.4875 + 32.5518 + 35.8624 + 39.4437 + 43.3225 + 40.9610 + 37.2680 + 33.8561 + 30.7000 + 27.7770 + 25.0669 + 22.5514 + 20.2139 + 18.0396 + 16.0152 + 14.1283 + 12.3680 + 10.7244 + 9.1883 + 7.7514 + 6.4063 + 5.1460 + 3.9643 + 2.8555 + 1.8143 + 0.8360 + -0.0839 + -0.9494 + -1.7642 + -2.5317 + -3.2550 + -3.9370 + -4.5804 + -5.1876 + -5.7608 + -6.3021 + -6.8134 + -7.2965 + -7.7530 + -8.1844 + -8.5919 + -8.9770 + -9.3407 + -9.6841 + -10.0080 + -10.3135 + -10.6012 + -10.8718 + -11.1260 + -11.3642 + -11.5868 + -11.7943 + -11.9869 + -12.1647 + -12.3278 + -12.4762 + -12.6097 + -12.7281 + -12.8310 + -12.9178 + -12.9878 + -13.0400 + -13.0732 + -13.0862 + -13.0770 + -13.0436 + -12.9834 + -12.8932 + -12.7694 + -12.6073 + -12.4015 + -12.1452 + -11.8302 + -11.4467 + -10.9822 + -10.4215 + -9.7458 + -8.9313 + -7.9484 + -6.7591 + -5.3152 + -3.5541 + -1.3946 + 1.2704 + 4.5833 + 8.7359 + 13.9902 + 9.7804 + 5.2716 + 1.6578 + -1.2677 + -3.6579 + -5.6275 + -7.2634 + -8.6323 + -9.7858 + -10.7641 + -11.5989 + -12.3154 + -12.9339 + -13.4704 + -13.9382 + -14.3480 + -14.7086 + -15.0273 + -15.3101 + -15.5620 + -15.7873 + -15.9895 + -16.1716 + -16.3361 + -16.4852 + -16.6208 + -16.7444 + -16.8575 + -16.9612 + -17.0565 + -17.1444 + -17.2255 + -17.3007 + -17.3704 + -17.4353 + -17.4958 + -17.5522 + -17.6050 + -17.6545 + -17.7010 + -17.7447 + -17.7859 + -17.8247 + -17.8614 + -17.8961 + -17.9290 + -17.9602 + -17.9898 + -18.0180 + -18.0448 + -18.0704 + -18.0948 + -18.1181 + -18.1404 + -18.1617 + -18.1821 + -18.2016 + -18.2204 + -18.2384 + -18.2557 + -18.2724 + -18.2884 + -18.3038 + -18.3186 + -18.3330 + -18.3468 + -18.3601 + -18.3730 + -18.3854 + -18.3974 + -18.4091 + -18.4203 + -18.4312 + -18.4417 + -18.4520 + -18.4619 + -18.4715 + -18.4808 + -18.4898 + -18.4986 + -18.5071 + -18.5154 + -18.5235 + -18.5313 + -18.5389 + -18.5463 + -18.5535 + -18.5605 + -18.5673 + -18.5740 + -18.5804 + -18.5867 + -18.5929 + -18.5988 + -18.6047 + -18.6104 + -18.6159 + -18.6213 + -18.6266 + -18.6317 + -18.6368 + -18.6417 + -18.6465 + -18.6511 + -18.6557 + -18.6602 + -18.6645 + -18.6688 + -18.6730 + -18.6771 + -18.6810 + -18.6849 + -18.6887 + -18.6925 + -18.6961 + -18.6997 + -18.7032 + -18.7066 + -18.7099 + -18.7132 + -18.7164 + -18.7195 + -18.7226 + -17.8919 + -17.8675 + -17.8426 + -17.8170 + -17.7909 + -17.7641 + -17.7367 + -17.7086 + -17.6799 + -17.6504 + -17.6203 + -17.5895 + -17.5579 + -17.5256 + -17.4925 + -17.4586 + -17.4239 + -17.3884 + -17.3520 + -17.3148 + -17.2767 + -17.2376 + -17.1977 + -17.1568 + -17.1149 + -17.0720 + -17.0281 + -16.9832 + -16.9372 + -16.8901 + -16.8419 + -16.7925 + -16.7419 + -16.6902 + -16.6372 + -16.5829 + -16.5274 + -16.4705 + -16.4123 + -16.3527 + -16.2917 + -16.2292 + -16.1653 + -16.0998 + -16.0327 + -15.9641 + -15.8938 + -15.8219 + -15.7482 + -15.6728 + -15.5956 + -15.5165 + -15.4356 + -15.3528 + -15.2679 + -15.1811 + -15.0922 + -15.0011 + -14.9079 + -14.8125 + -14.7148 + -14.6148 + -14.5124 + -14.4076 + -14.3003 + -14.1904 + -14.0779 + -13.9627 + -13.8448 + -13.7240 + -13.6004 + -13.4739 + -13.3443 + -13.2117 + -13.0759 + -12.9368 + -12.7945 + -12.6487 + -12.4995 + -12.3468 + -12.1904 + -12.0303 + -11.8663 + -11.6985 + -11.5267 + -11.3507 + -11.1706 + -10.9862 + -10.7974 + -10.6042 + -10.4063 + -10.2037 + -9.9963 + -9.7839 + -9.5665 + -9.3439 + -9.1160 + -8.8827 + -8.6438 + -8.3993 + -8.1489 + -7.8925 + -7.6301 + -7.3614 + -7.0863 + -6.8047 + -6.5163 + -6.2211 + -5.9189 + -5.6094 + -5.2926 + -4.9683 + -4.6362 + -4.2963 + -3.9482 + -3.5918 + -3.2270 + -2.8535 + -2.4711 + -2.0795 + -1.6787 + -1.2683 + -0.8482 + -0.4180 + 0.0224 + 0.4733 + 0.9349 + 1.4075 + 1.8914 + 2.3868 + 2.8939 + 3.4132 + 3.9448 + 4.4891 + 5.0463 + 5.6168 + 6.2009 + 6.7989 + 7.4111 + 8.0379 + 8.6796 + 9.3366 + 10.0093 + 10.6979 + 11.4030 + 12.1248 + 12.8639 + 13.6205 + 14.3951 + 15.1882 + 16.0001 + 16.8314 + 17.6825 + 18.5539 + 19.4460 + 20.3593 + 21.2944 + 22.2517 + 23.2318 + 24.2353 + 25.2627 + 26.3145 + 27.3913 + 28.4938 + 29.6226 + 30.7782 + 31.9613 + 33.1726 + 34.4128 + 35.6824 + 35.6824 + 34.4128 + 33.1726 + 31.9613 + 30.7782 + 29.6226 + 28.4938 + 27.3913 + 26.3145 + 25.2627 + 24.2353 + 23.2318 + 22.2517 + 21.2944 + 20.3593 + 19.4460 + 18.5539 + 17.6825 + 16.8314 + 16.0001 + 15.1882 + 14.3951 + 13.6205 + 12.8639 + 12.1248 + 11.4030 + 10.6979 + 10.0093 + 9.3366 + 8.6796 + 8.0379 + 7.4111 + 6.7989 + 6.2009 + 5.6168 + 5.0463 + 4.4891 + 3.9448 + 3.4132 + 2.8939 + 2.3868 + 1.8914 + 1.4075 + 0.9349 + 0.4733 + 0.0224 + -0.4180 + -0.8482 + -1.2683 + -1.6787 + -2.0795 + -2.4711 + -2.8535 + -3.2270 + -3.5918 + -3.9482 + -4.2963 + -4.6362 + -4.9683 + -5.2926 + -5.6094 + -5.9189 + -6.2211 + -6.5163 + -6.8047 + -7.0863 + -7.3614 + -7.6301 + -7.8925 + -8.1489 + -8.3993 + -8.6438 + -8.8827 + -9.1160 + -9.3439 + -9.5665 + -9.7839 + -9.9963 + -10.2037 + -10.4063 + -10.6042 + -10.7974 + -10.9862 + -11.1706 + -11.3507 + -11.5267 + -11.6985 + -11.8663 + -12.0303 + -12.1904 + -12.3468 + -12.4995 + -12.6487 + -12.7945 + -12.9368 + -13.0759 + -13.2117 + -13.3443 + -13.4739 + -13.6004 + -13.7240 + -13.8448 + -13.9627 + -14.0779 + -14.1904 + -14.3003 + -14.4076 + -14.5124 + -14.6148 + -14.7148 + -14.8125 + -14.9079 + -15.0011 + -15.0922 + -15.1811 + -15.2679 + -15.3528 + -15.4356 + -15.5165 + -15.5956 + -15.6728 + -15.7482 + -15.8219 + -15.8938 + -15.9641 + -16.0327 + -16.0998 + -16.1653 + -16.2292 + -16.2917 + -16.3527 + -16.4123 + -16.4705 + -16.5274 + -16.5829 + -16.6372 + -16.6902 + -16.7419 + -16.7925 + -16.8419 + -16.8901 + -16.9372 + -16.9832 + -17.0281 + -17.0720 + -17.1149 + -17.1568 + -17.1977 + -17.2376 + -17.2767 + -17.3148 + -17.3520 + -17.3884 + -17.4239 + -17.4586 + -17.4925 + -17.5256 + -17.5579 + -17.5895 + -17.6203 + -17.6504 + -17.6799 + -17.7086 + -17.7367 + -17.7641 + -17.7909 + -17.8170 + -17.8426 + -17.8675 + -17.8919 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 6.0843 + 34.6686 + 34.6547 + 34.6405 + 34.6261 + 34.6115 + 34.5968 + 34.5818 + 34.5666 + 34.5512 + 34.5356 + 34.5198 + 34.5038 + 34.4875 + 34.4710 + 34.4543 + 34.4374 + 34.4202 + 34.4028 + 34.3852 + 34.3673 + 34.3491 + 34.3307 + 34.3121 + 34.2932 + 34.2740 + 34.2546 + 34.2349 + 34.2149 + 34.1947 + 34.1742 + 34.1534 + 34.1323 + 34.1109 + 34.0892 + 34.0672 + 34.0450 + 34.0224 + 33.9995 + 33.9763 + 33.9527 + 33.9289 + 33.9047 + 33.8802 + 33.8553 + 33.8301 + 33.8046 + 33.7787 + 33.7524 + 33.7258 + 33.6988 + 33.6714 + 33.6437 + 33.6156 + 33.5871 + 33.5582 + 33.5289 + 33.4992 + 33.4691 + 33.4385 + 33.4076 + 33.3762 + 33.3444 + 33.3121 + 33.2795 + 33.2463 + 33.2127 + 33.1786 + 33.1441 + 33.1091 + 33.0736 + 33.0376 + 33.0011 + 32.9642 + 32.9267 + 32.8887 + 32.8501 + 32.8111 + 32.7714 + 32.7313 + 32.6906 + 32.6493 + 32.6075 + 32.5651 + 32.5221 + 32.4785 + 32.4343 + 32.3895 + 32.3441 + 32.2980 + 32.2514 + 32.2040 + 32.1561 + 32.1074 + 32.0581 + 32.0081 + 31.9574 + 31.9061 + 31.8540 + 31.8012 + 31.7476 + 31.6934 + 31.6383 + 31.5826 + 31.5260 + 31.4687 + 31.4106 + 31.3516 + 31.2919 + 31.2313 + 31.1699 + 31.1077 + 31.0446 + 30.9806 + 30.9158 + 30.8500 + 30.7834 + 30.7158 + 30.6473 + 30.5779 + 30.5075 + 30.4361 + 30.3637 + 30.2904 + 30.2160 + 30.1406 + 30.0641 + 29.9867 + 29.9081 + 29.8284 + 29.7477 + 29.6658 + 29.5829 + 29.4987 + 29.4134 + 29.3270 + 29.2393 + 29.1504 + 29.0603 + 28.9690 + 28.8764 + 28.7825 + 28.6874 + 28.5909 + 28.4931 + 28.3939 + 28.2934 + 28.1915 + 28.0881 + 27.9834 + 27.8772 + 27.7695 + 27.6604 + 27.5498 + 27.4376 + 27.3239 + 27.2086 + 27.0917 + 26.9732 + 26.8531 + 26.7313 + 26.6078 + 26.4827 + 26.3558 + 26.2271 + 26.0967 + 25.9645 + 25.8305 + 25.6946 + 25.5568 + 25.4172 + 25.2756 + 25.1320 + 24.9865 + 24.8390 + 24.6894 + 24.5378 + 24.3841 + 24.2282 + 24.0703 + 23.9101 + 23.7477 + 23.5831 + 23.4162 + 23.2470 + 23.0755 + 22.9016 + 22.7253 + 22.5466 + 22.3654 + 22.1818 + 21.9955 + 21.8068 + 21.6154 + 21.4214 + 21.2247 + 21.0252 + 20.8231 + 20.6181 + 20.4103 + 20.1997 + 19.9861 + 19.7696 + 19.5502 + 19.3277 + 19.1021 + 18.8734 + 18.6415 + 18.4065 + 18.1682 + 17.9266 + 17.6817 + 17.4335 + 17.1817 + 16.9266 + 16.6679 + 16.4056 + 16.1397 + 15.8702 + 15.5969 + 15.3199 + 15.0390 + 14.7543 + 14.4656 + 14.1730 + 13.8763 + 13.5755 + 13.2706 + 12.9615 + 12.6481 + 12.3304 + 12.0083 + 11.6818 + 11.3507 + 11.0151 + 10.6749 + 10.3300 + 9.9803 + 9.6258 + 9.2664 + 8.9020 + 8.5326 + 8.1582 + 7.7785 + 7.3936 + 7.0035 + 6.6079 + 6.2069 + 5.8003 + 5.3882 + 4.9703 + 4.5467 + 4.1173 + 3.6819 + 3.2405 + 2.7930 + 2.3394 + 1.8795 + 1.4133 + 0.9406 + 0.4614 + -0.0244 + -0.5169 + -1.0162 + -1.5224 + -2.0355 + -2.5558 + -3.0832 + -3.6179 + -4.1600 + -4.7095 + -5.2666 + -5.8314 + -6.4040 + -6.9845 + -7.5730 + -8.1696 + -8.7745 + -9.3877 + -10.0093 + -10.6395 + -11.2784 + -11.9262 + -12.5828 + -13.2486 + -13.9235 + -14.6077 + -15.3013 + -16.0045 + -16.7174 + -17.4402 + -18.1729 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.9157 + -18.6174 + -18.6269 + -18.6361 \ No newline at end of file diff --git a/data/wavedb.json b/data/wavedb.json new file mode 100644 index 0000000..ef47289 --- /dev/null +++ b/data/wavedb.json @@ -0,0 +1,73 @@ +{ + "id" : "0", + "family" : "haar", + "wavelets" : [ + { "haar" } + ] + },{ + "id" : "1", + "family" : "daubechies", + "wavelets" : [ + { "db1" }, + { "db2" }, + { "db3" }, + { "db4" }, + { "db5" }, + { "db6" }, + { "db7" }, + { "db8" }, + { "db9" }, + { "db10" }, + { "db11" }, + { "db12" }, + { "db13" }, + { "db14" }, + { "db15" } + ] + },{ + "id" : "2", + "family" : "biorthogonal", + "wavelets" : [ + { "bior1.1" }, + { "bior1.3" }, + { "bior1.5" }, + { "bior2.2" }, + { "bior2.4" }, + { "bior2.6" }, + { "bior2.8" }, + { "bior3.1" }, + { "bior3.3" }, + { "bior3.5" }, + { "bior3.7" }, + { "bior3.9" }, + { "bior4.4" }, + { "bior5.5" }, + { "bior6.8" } + ] + },{ + "id" : "3", + "family" : "coiflets", + "wavelets" : [ + { "coif1" }, + { "coif2" }, + { "coif3" }, + { "coif4" }, + { "coif5" } + ] + },{ + "id" : "4", + "family" : "symmlets", + "wavelets" : [ + { "sym2" }, + { "sym3" }, + { "sym4" }, + { "sym5" }, + { "sym6" }, + { "sym7" }, + { "sym8" }, + { "sym9" }, + { "sym10" } + ] + } + +} \ No newline at end of file diff --git a/display.html b/display.html new file mode 100644 index 0000000..26206f7 --- /dev/null +++ b/display.html @@ -0,0 +1,48 @@ +
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..74a1326a571d6e0409b0cfc1db56922d43efb07a GIT binary patch literal 40510 zcmeHw2YgjU_WyBpchPlMQCBRx!ur!ywjt`zwS#pntAbLbBTYJl8c-nA1OkNKArM9B zAt5257(%Zhy}g&0_fkkBA-xmM|9j@%n|Biun#!{O&u`#l?tORW-Z^K^oS8XuW)9J9 zbSJfFaWCRKDC-wQ%ZTXSd$s$gZzGy~JJB=G5S}-oO}``h?hZnF{k{p&$M;Km?S9}d ziOL=&YTH)sThP;Q67~F(k-r6PdXi{XUn4*6k?$X~jr=WWAl@CflIUra0iPhe2JgX- z2yQ5w5s=Lk-0%>$Zf;tHzqkarQD|r=9dSTzIKFFFc>^>8+=g2=^W<5NmIdd-n;h+P!+Eq}TEr zKYGsgsFS`@%dZ!}c)v#ldsKL#r26|&SmaXgcbD&>^in2y?jDSLluQt;aAWQLxK_yv z*gaU%OHK)H?5^^&#|o9r4eytf749D6nhJfQH1NqZnI*p5=&&NknM^{`=h@mbMqUrOAG1TL$Sn4_{mU>K%rQVaG=?la?-QuX%j0E~( zY8>^O8cPFa#?hb|u{6{@p8C4s_n8SaU{(SRoNl2(GcEYtLj7ka(qODc&UxXt-$rlWSS(f)=pooanR(o4hjqmq`g5wv}aE+?ccYLLVoyxLJx${!O#Qb zw#-H|S6gZ7N*m2sZKs)QlF4J8jpnVlk#BGe`R$D*|NXHP5E4gIS2$?uItS7?kj6pN zHl)xjz-*rsnztd9W^YWTdEcjz*VZ(ezd4;2f0stfx1`a+t?9IA`#D+)Sh?jKt=WNi zX9juuog?p{Z1UNaNn7`2()N8Bw81}zz7Nc$&G>!mzHHk3LpE&*&L!V{dE^(8O}h@{ zQ2=0fXgnZ+_8dx}y+;!1hogzK`(PgJIhsRzkLS_;V;5-mp#nN|FqDoTJxoWA9HCPu zj?t-8rzq^yNeVl2iq3|GQPimu6n*9d#e|)rn6qanA|jk(BF@sm6BashI*G!fk|`=O zl47EwC?+O~Vq;?|F)oHI32|hxBvO*aLP<$hve|6pNVZXm!%i8gcFF>Tp3I>`XL9IR z#05GTnMVm$2Svo?QDj0s9S$p`W8uXVWhtcSq(X|d6;X6z3B_5r=BMs^kDT&Sen{0h2ISWSh61yov8NM$8O zR9ak4Wu>K5QCvWkC53dcw1_IpO6X#F2~|~;(M3REQ3aJ%)KFz*C0(qlpqh(SR8@76 zE>_o2^~Fnc>Cz>7lv>f>sU5YUk@P7opuV(|#!)zVPywxM%Jf}prhxWLhg_J#7cwRJ zF`bW;K3VIJn;`%1kpK6{|0weR3Hkqw{C`9K*PAkZ-kQm!J=0tlylWxT0Y4^7q%*%s zDj1g-3TWY92)NSWUl{BxS+ZpDlEvEpMN9B+@uI2kEM2l>>EgwU<{@}`dd`_Md(LbX z-dwW>t;!kJsj$fX2MPO)un(E!jugn-=I`vc;w-`;)uukO6@Lv4pk;x;REU;z}K3z>Hc3ed*)Y7?rs-lMFzD{ofBRT!auk-qs|EndD0<%xhGQ5jTv^`Emr)~-zynZHmjcgvAbHlcGvHkwU_h~tiiK_ zR0s?T3fvtO7_>VOe*$+0?q2gwK(b>?i{Cx@+CBF?@@ZU>L(336bM?xVD^{#tqr&Pn z_$U8YtXTGTpu@5KAI+cb(){5k$D#as`dI;smM>Xyz=~1{{&AK#gqXd7tKSK5IJP{| z^eNEuu}>`y{r!8~cduBzYUSR8MmU6v0|)j5u6Y;fcRY1}s}A=!YcVd)At5O#d5>QH zpj9hZ;=le!F5HmbxAhaRc76Pbr(N-W?F)O{HGEgS<>od`{a20u-8ZIDpd;V+>HAxC zHof1GB<~lhtekch%`_%DDmn^%z~K;gqJaE-zgEp!f8OljC&#Pz%Qp_VySqh*r_vle7yCr zmfru>mTh{reEQi5wdo!9(GULV&yU^r&mCPK*{E1bk@c*ezD=vPeOf*D%0!#-`h5GB z4|e@(?3l?XdOhN!^B|%qJ^k}fyxRSVmaScD-=A;q{n(Ukqg-5uz4-9gHsG)2iNHh` z_3Qu2Qz%cX=bh!rw|9E{`zfEj_~MKI^WbQ^su0O^Mo-`Nxz2r`d;Zml&i5yFeEj

=z>eTP>%5A4%tYB>DbT20fp9rE{AO zJ-nRhwIb+$9pM21K|uj47rF;1`s{kO<#VsJZ1u_nC;jWBx37BRt+(HK>#eD4(A$EZ zyE;GjN}K0idEG>xy6KnCJ+pVsvgJY2IU{|dzn`DKubGj|U zY&g9G=_B^6(UKG7!2D_r+N+2Cdsj8|euu?!X6}rDy~e=86bCer-eI$Z z?R8(=P;$B~J$TF#5&lEa!a&nootL#mGm5CLBw`*J$dDd8o`myL}x)-7yF4JtYov&v-TO{Bn9c^_zj~>Dqj=Kjxc*0K?o9 zFxRxuV9Yaz0tU~u(lE?72V<@|%qxjTVy-y~^USec37C80H_SCh%Up92=8=n%Xq3z+ zmtj7Mxu)v^8%@AG(RGELzFq~u{LgK8!Vp|A^dB0QH)N1vm!arqRJc!3U|DWDS(#S|7>K&PTgFxM+2 zi=%{+Go16gbLnYnewUtpo>J3uDLXq`&F^y6{4P(;?__RQig{gHMhTtATrTHA73Oc4 zyA|v6w-U_LFlVbMD^+v0%8GI|XDceMq@t3GR9b#f&D&}!^?6&hHeVb0E20H=677UO zCH!up0_b?T#eKxDw^+;x6nMbPv5?M`u6G5vrn&HJ$v@((SxRsb{RE#q|2z02%|>!8aZ?3%ozwW>Ku#E zclN4P-m5SmpEqwV!mvf_*4O^qfUBXiy(hl&-rMhdId;rwgnsf|e&3)c8$R3n{a@UE z+b{mUc-1PrW~|CD3D)D!hIQ-k{DV90x&Oguml@CT)S zykN{y^-w0ml6yV!uWxt9!*~AjAIrTZ!Kg)AR#gDGME-Wa{^M_d-D)YGdwY*sq_g?SqJsSCqASGBge2&j&cm2;jcR#ay{dznfHD_tvFl3HT$0mRJ zZIf0j@qGRI5yM?vT&9h|ztLmHjGpE)@(WL&4);EN|Gll3ulK?8kt2tXa9O&1`KskA z%%0wNj!&n%pSC=PuJ{PMvi(nXZnz#g9rB?p=hyU#fo_&@Vv`I|9t!*Ex(WV z@}-`$W-S&{NOjCt&zt_`q2E8N<@Z_r`D>5;xy|^MDuwpE>+fHF`KA9|=ZoOu@Ad$Bz4*5Z{XAAeqd{?+gP z_SB1C{c#Ftf#*x)dDll?e!PXA-?zh4U$<}n(E}5F6uFjZ`Co2niH9|)IRrl_u&u!_2C;2c2=cb=c#}HuYc9b@4MmO&6+*ftXVVleBDwH_58_~ zUU~IXt$e;~7OJq;XOV};OqU^~%Kt=*C-m~mYgO7{-qYmy)Gl4Sc6HVB8_zck zS+r=H2l`%5?HA9w&wbVnoHIinlgH9U5@yzYzJ5`E7xh?@NboQ}_t~)2W8h5ff$`T< zdyjhABF{N9XXp=Zt#t=&oYK}bHZhM=x?>#D595vj7stwa_bjTWQV)JI(#pMqZojv~Y`^X01sfH;fBB*E?w5w<)yX8wV}K z_+Y`NG+MgNL5ndiSSDiy=#19_yaUr{m47C!3CyDPJ2RmdcF+dDEb={Y9%BH&p-kEt zdY*#N*IUp>CnUs^Eis-jfuy9w1j6i-Y)MJvu-lccR{H4U;hE^8vnVn)6Z+X)inr#{ z+4v&pVM{2%UP7rU4o&9@eQQoe8uYE_=zLZN<>-B~=v;GibEzmlpNe!{t0TRbQZmXY z6}r~!oD#~+t)PPZLiEqjs}>a~{c2HB2^E)=Qi-l(ttu;~snH2~kan6Iv77+7qX{5a%o;F7P8Ri>&RZTRnjMk0bvx$p1R>e}w#a zSHU3UpU{+ePHW<|?TLL|hz~BrJN<~yMLP3iUeFF>=>Hq1{0H>uZ@l%!8*jAvTkF=( z{G(N?zyI~UmtOd1+qP|A#~7tYkM7;y`s8=F-Tkl5o!;rutC#$L_mkiK;_micJHL&m zy?XTQ@ou{ZZ*THh&n|EE>VZ4lf7a}dyF2#k`WiF_5}xhw$S;4}tyj<1&$f}zy#BY( z{_v}Ny7lh$+H=o5|K^)-K2IGU`*qW9y?b}~-zQ%DyldC@asQh~yN?+0;e*W|`lx5u z_SE4|cixBlS04VKKYq}w*QdDu&HcE4`HxRN@al-(pHYX$f8PT4|9+}v%a1#J@)~vg z%b%Xcy@Vdm{-X_b=+>=W5AD9=Gw*7`xtl_++dE)+a?|B?gOSL~#sEB9fcfOpNYWPI z1`vA)72edMM*fO0z9|5m(qCSC?X@wlzWVAo#AAO9;2kbE0%c|aYfyq1 zP+r2-Wd;=Ex|lDPA}%ee3njQODdZ{z1&B>hT)>rpD!|^rU0hXF^&bbpKO!OmxR=#| ziQVP}&F$K!<(1Z?XEXEC>E((CMM`1=io4?ZLzc zH!3@%{ohLbe-XHwp^sY}e>gls0raH&#gsVyU|0mdHzb_@1?V|BmOmI8&NnJM_6P62 zCGbZdsM^07ce(Bb{NDWXEW?(G-xzR~drZ>q+w=|N*8yEzqxtPYXZc2D$E}7x^pfCz zCqVDb@1UMx$EEO;`hFX<5Sp~@7sg#D#_&4^{wBF0GUQrh$Nu1;TdMwRDl37%69oUa z2LXT3Kp|JUDl-s<>&IV+y~OpRmM+cE6$c$M!tUcW1Y z*X_*UwSWz{_V&xTasJ>fQv{H`wqcf`^`C~a*n5EJXyki z+cw`?@~^rI_3wm%?g`v(Oq2o{2W;G(rDWbmF5rKF(5Kz#NS*(k{f4s-sXLaEK0)Rf z#+<@``z?n5Mc{6NK^_U*7dQ$?T?_t$AQO9`Uy!kZ;NN#zoQ}V<-%x!>l|c_P4Zsr> zTAPrur2qCUw^sd|a2GlZ0Ina7h~$4m*1bCJKlYA&)FhRjLi_Gs?{A_tWG$CzK*gtU7l|It5a_&fWJ+CD^ZHq*tRfzAiFTK!+D zsR8~@7>c_8bX>F=<4HT%7@W;rzK-Qj#-L5$zW)r<_^+Pqtfhe&e=|=&J_`QW6QRQy zh7AmdoiW2{+yhPvIQ4{K&=U$c^@VaRI>UwldPLDBHV9gJWBzN#U9N|ETDbkV7=`~w zkaG(EuVR%v5VCzRvrc#2#74)x<8vod0822uz&;}?g`ld9#Q;X zPj(pNh)duL0gWF_v_M<%-{HjH-~++m-~*w9xjkOGi1w+V8nFqgacvs6IeE|ct`TeB zuS=^GZVdksz_l~#Tj102F}xY_4|Z_;8LmHbje%@T;La0c8^#~>kTN=XL9XkTqapl- z9~Ay*3mX1Ldo;;F` zwFi+4!Uvr|2dV!$^`y(u8pJgytHBGZUQ9Ib_jT5P-F6^t;tFj++Cy!dxV&9ppHic3 zMewcPjvB)s`{20i z;8(vL+gQr_p9TYeto5@Q#w|(ak!S-WMGnlf@b-`#9=F7Xae4yoxSb{~Y}O`Q&)+fI8m-`PX}T0(Zo9 zhY2w}6l0+-xV{qpPMHc?)RPH*zT2<4?qS%3akGq{w0X6fL)6YCF{dmSsJA8|YZGcc zLR*)BZKhhEk#(7n10k>$rbht3m9656_inp>OJC7kP2vL+)maIQ}sIB?)H{89NL zIcs6eVjJ*}=kA#2X!xJ!FEHkB2!FHOlW9E%HFgO0y;N}t#F#VTW06pGZGbapPIni51i*O=UBiG@!SLbfD3T% z4Sr~-?Vz#O<$-$qP=n`YUNFWAM(pe>>(RiNOPbaxYV~YF1K|ZjE|_FOwTTym9)}Md zzB>M>_nwes=+ zc*B-j#Qq_fJY|`cJB^Fr-jkzv$@j?|aw3}x3sKL)6ACWpgW7hW^lTa(>dOR!7Y-k} z2K-U~y?}qOnF&e`ZV%P*2hJiFv3J4Q|JRe9&VJM+2MoDTj~B9X%6Q3U2M?JAIfJ=o zr?HXTQ2_XN9AiK@evja>bK?~)oOA#^^nO9ptLXATZx4dMrgPN$2AvPEKmDrp@4DR1 zecThd&#Xl7djjt~l#8)I5)VKd7%A%lHto5q-l&1#*vT&|>MvOyD1`ctOcW*lyI$uN4nC`M}&3L@p@M zX(00P`0?Xc#eV|&x<2j}RrftH?(qfw!VkS>CUP&(MEb?PkcW-qFXL&TDkKm}m}tN? z@=W80&A}P9_zUj#lnQp4oveQQ0{k#%?KwpY;R7WT&>k|gN;Do2yp2B6h(*6tt7|m+ zNz}j6y$TK(J z;^fJbSH*wIItPCR8SvFA2aks=3^5WBZA4B)Cqh05{stIzZ^TA>F!6!NMq{jiy=Pa&UvTe-`tJ{U z-y8M6^KdQ?nU|#X38?pRpn>!Q*NVU514RUl4^(>qE!V%ctr7r)*ennpLjL-hkb_%cfns|px{5$ zOYpZS8jOd0xNiJw8-tSuIDdybkB{Mz9?2LBUE*VBN+IiVH25yN_ImNR*|q(I$P7(> zILA@iyaM;SuAy!WJ)G#s6b-8Q4D_nkgg@GQ|2ft=_=`*s8c3TMfM?fL{|5eozFb2N zbVA=J_%HiDN41No%g%A9@sV0xgV&wc(JHOT2!+3lC6yeJSd*o-u{={C^pR_wPM}R` zaS`x8b5;DOtWV*=sP7>%<^dgcq5X?Yka`#R8tr4^b+ms2_4+Z+fC63y{>;(w<$N@( zl#iUoI9)-hx|iPuPM5Y4&Dg)9XlL{(LdR=?va(VxDK1ue_N&#uo3}3ifT!Rafbq}h zrO7-PdO-n^f7si5WA(2Sp}6#-!oAb@XkNb~Pu1rov;k=c0>-uADc~~40e*;v%t)?J z#;e}Tp>$|@3rgB zfxu6oA7r3E_+RkvFERn(3jBo*KL-DpBoqERj#9sh4ie)xg|qstE*-8Fe>3g{1qF<~ zQ;hSCu3G<7!2ij6&k`p)jx36@YV1aSs=V1eS(Y+hk_mr<*iT4pZi|ckiPrwJI=_+ zQ25#Hb{0NAbNYl0+rPQq1@|J%XK*eM2w`XHP~#yGd=ski_H$Ul|Pqp_!BeC${}G@c848 zKR9O0nBI#PESM*-pcdxi8Zh60dAQbLp69#;3g&qtzAAWm&Ys=v^UvGkT)j~^xq zFPUIFuCD^y@w^dOyLRm&e_!92_}G|gfw&lfXh2kTTy$i0Y*a*bY$PBeyc#F*0>Y|e z!p~IW{P*gZu+xB3)zN1JPU>(1ab1W!dA!_x+O&mMtHqI%kL3%1@ znjtNPGYx?4aAvAQ2RmX7aCSV$M@4Wr>`g_UIw2R=0L-6o-jD_uSLW414z8V$o0G#h z557^z&djLB5n7AwNl6Z|Rl9s&oYQ{Iu+gZ0u7Gi-K;82c@)>8}bCMT^8 zPFrlZq5N1sRdz>+%Q5~cFDc~;KsoeGWzfTv7Zr1v^v$4&!JNRB&Yc1^yg%r0-%c8T^89d+a5WeWveYzi9`o z@!z`Tmo?N%j!MYK9!4AI`RYsq z_+{ZQV9zxP>+n(^U18taZ+aXD{1AsW4gS&XN3{K$x?Pdj*p+KMlykHBN7nSQ&M)Qf zhW$9QAF&tqXTo<2t~Flj>>9;8_r#+7MM_pV?O`uj%3rM7ieca7#6z>`k@9Dz**PKZ=Ext_ ze#OQDb{Ems0v-U{K(PUry;8C!*#$NnvPZtp)L0Hw`~y23w3SBp#6lKJAANJnFLoo< zD1RaM)c3GTJD#vON$u-zhy9LSzlvr*p?@jLuWSYk`w78C+P?wioCW?#h>N{B{9}jw z6q^^=e!!0n_krALk3D!&4__~{sq4?iM&oQ2@XvmfAM(A9jhNt~>cd?A)c;8N;e$u* zpXw#Hq}WR_W33(a5v$rVd^_>(1CT%F@|$gYRGkP8LjRjte!D|>N9-wLZN+L2q?`fq zrO+p$xQ4Fvy+E=b z=n9bHuvdG{pT8Ju0Vuy_6C&mBk8*d!o?h9@G2DX^)>mA$&_UHnGu|F>;G+rye*hwi{DQz!a{rz|{hd2xR zr$UDu6CDkGLL$}*V-(~=zf=ugQ-F3;jdouP&^uRSEK{YRLXVC6a;`+(XUqB{-V0o7 z=`Xwk2I4q-F@Gt0$RIz5z`nq3wVmMujl1An4Xyu;=L)P{OL`3qJdFC#_(_%j%qg{B z4qj;}4-U^{AE2z?YB&jA23Qr2g6Czwfe(cjwP#kW2P70?n(VIlU+keSUE&0+-HQ$X z0MvmiWak{L?|lioJ}LXKxrrQnFhQrkQGU&iO0^%60eZWDKd?s1ukCG;&iN6%f5sj zsE+{+(!VYqmxQk%3vj-!D!(CfM3-g;q2XcZSIc2HRt0&Cb91>;0DG${v8PA@#)*}f zYY4!9nFdARvD|Dva3JL12OoSOx|(0A@`HDP04JoBs&b1BHO@2Und?)y2W+c*qc0wW z@dSL%G0xCeye9m1xow+PAHv7s;GgibVG2$`7QxSe4o4aO=&)bj}Ug9G564Kny6%$GjTjSn2aj;|^myZrHY~xgGE@^arx% zt0X^9_^!e7C#00|hy~cg1Nk``_B`%BsSN*$+z0mEf&={hq5N=H30@OW^p|>2?WcZy z$X>^4jDe~dKI%B$R>*sgWixyXGJNuJa%v&$4$C1gjd6$8cWdKWqaI{#;ha|p9`K{b zM-CmjV)>=aqcL`K_es&pKPy4)O$f58wiyh+K*KmbM~L`%l$JUHVJ;qb)@YUzqA#y1tMBVplsAw#63uC`S8DtP_ey%|OWM#`c7T@&vHdWdA_CtR#+{?m2kpB&p zU&yb5&R4RRp}P7a2Oq)yNc7!ncceo%P|WbX$+Nv3s_cTxG}z7!oDs{mlp?+;w68Os zMIF@IstX=kU6i5yW3NJk<+r4jDZA9cu+RDmV~2U0(s?k(Lqh>$&>r?4PHeFJ&bn~c z!^P?v-iduEy;1)DkiWyR=b;bw{r37gj$I+k5>bBm9OeGgVi^83QGU}nupTct_ZyT$ zZWZ#$E0kaMSd73vLa{Z1-%?y-ZzW`rD|8Y2j$Ez$f{BJhHOdeFrr0kR$MZL&ap1u` zhTl?#|5C+E@WaXQkBYV&%kT}V_S0x%THqn$b2Tp4V*?-5hv*NmSD;b)3*U%+yerzR zC*;5E4;qL*zy*7UgAZLx`86D>P=5GsW%#k>phFiJen}ZVSg|)GR{?yqGJMbC49*zH z)f~lds{fWgT=nDHc*Gc2sdFcQlk_JzC#2Ex!-uW1?VbRcGk;4u4}onLd=v3l=&-KN zKRPF&3M#8=pi70l;B*Tg4l8E(f`#mH@Fd6w4eXFj*hhe~1pE(Vqx>?4(Pfy?rxvU)cmFDm$D=*XTw~{%m`~5dm|R^$F2lz$ z_dt7IX4Ds)hcS2czs_=MLXY$_DgGh96{%AF=^CdTdwdzWMgtOsLkBK8eJcUj+; zvWqQGa&oeg|83f|c?jdr+wC&`7hXdU`il*w*kg~w{)FimzrhDJyLqReF4C}nBI%mT zuNURIA}NR1V8|N0fXv@y4k7jkvL=tUM%iaj4cmmx@R=lb3AfcRzu3@=eW}<}j=>m0 zY)gfI#;t(-xhDC4T}7^wSnLL6Znk^(ZZ$uH%V1?23>U+^XHT$<8){JY{pf#NA){I= zHOd^v{%7g{!++18AHTl9+rTyXrj6<)2>tTo7M5N@{jO3{M0JDY~dxb z(-%8t*z#4|l9TsK*->c2M&YvZUx`feKAFQdG=95MzH5CZ@0YoS*p!RyjmR4*yWMWD zL7Uxw4IlBZXIl=f(C)Y}z4zs=+r6@{GCskV}6+9kjR_fDTW=rZDuU zEWglRY`Bd5DDWY#XpcImL3#G$Oo9e^#$5huy~g{RKn?^oIR8aCuEcu{Ju~R8_K#tW zU+g4A)L*hyn(Mufv*)L-B1`aY-!JT;k8C1)wd!@aN-pFK+6EfPjGJaQgPN zmzP(|>jB8@4|Z(ZwjnUUe`|ohfZx^tKVJp@zB{)1@7SgwV8^yC0Xw#C@!w{^W?Tzw z-QwlxITlXmk0enAlC7)xb9_nm<@ zCTGE&!`hAl=;F@_z)y|<{Ha|AK>@pbbF$9a4IM(QPD@7k7b4r<9c=tn!Zc)*W%wv)~bFq{pI`6>%dPj z%X;Q0%u(gMYO!xwwMFnZ*(I3P1mH0Ir}=(Pw!NmNnse z`mwAb*RCViTT4cpm33v&gv_JVi>PLa- z{{%pfWNRYUoUIIh(`p@9*0hBd6&T;cud@bX^N9Kr8md^X0b&m-YrR3ccl(|P{-WOs zJesT4w8rE61JM3^LASaV-#4%88taLok4y&rVPnH-m`}_2U)DZlFN@6U?1G~JbOH+O zcIP#I6Ixj7^C1NnRo@mDgYUqeCKm4%fM0O7!Oxp>?asVLVXSw_T30US@B2J46lj9EFuuas#x zH#F8sPzLm^B?WmL60*O}_k&MdQ0Irq`k<^0_J>}5gP-~PG8V79mIHs`4FBo8Y*Pxu zUp&JnJi})@!>>8`53*9N6X9hL z8GOj|=y{1)2Z24Lk`?lO9dy|(YaK_9)cyXx)A`sV4%_1OsaWevR_Et@+YtWR*QEd) z1exWEGQ(%RTEFlQfnG53Le=GySuTUlrpKVpK_?-A=R~E0{o}qN}dmzv1 zhf63+722lk1#9U0a#n?We-e05^rbrw)aQTa8%3}DE&O~8!5UzF7>c$Vj5AQoL46xz zPC0)-&Ktl!v^w~Qgy-{U@SUtrNEzmBPUn3mQW~YdkhQ4fBJ}xH4MJ%->K=&<-L~v~ z6Iq=M84X=jHO}?=3i9s`L;mdt{fB~wWuLmlvVZ-%;Ku21#;vhy(L0LXNX}3@jkD>G z9)*p?@e|e11#E%7SL{5<_uK zVn)YBMa_tbif}^2*%=YxVKYx0JGw14Cgv2zK&N6OBTvOdh9izR85?mH5O(rtXz2RF z3wd_sp;pq!`1$Ov~SHA70uS{V0R9E(0 zV#6i-nXWVsgS8tnZnSSz(~iP-jF94wqorL_C^@XUPONkKlWF9;^?76?Iiy)tmn%3a_Ke) zmz9gXjn+4(WR$6M($->Ke8D#k&KA2Fef(NlR8Vo^=uwq_rGKWfIr7?M*Yj(VG9G7h zEkvKSerF~xN5ADr#~4_jCzX{HRh&4Xf3^C2ASQGZenaeu`aQ1L!ZiSkUN%*_7>MVu;X literal 0 HcmV?d00001 diff --git a/front.html b/front.html new file mode 100644 index 0000000..ae41e0a --- /dev/null +++ b/front.html @@ -0,0 +1,56 @@ +

+

Wavelib : Wavelet Transform Online Demo

+
+ + +
+
+
+
+

File Input

+
+
+ + Browse + + +
+
+
+
+
+
+

Data Input

+
+
+ + + +
+
+
+ +
+
+
+

Test Signals

+
+
+ + +
+
+
+
diff --git a/img/3dgausswave.png b/img/3dgausswave.png new file mode 100644 index 0000000000000000000000000000000000000000..4178b850938a914fbcd93073c7d0748afc463dd7 GIT binary patch literal 42240 zcmeFYXIN9)7B-rMs&v619YIApg7hk&hzdwYdJ$<-lnxR?u>zu^pman)I!Kce0*WFi zz1M)$5ITWCLXvL<_daLu``z>J{=7eQ-_=|GAP{pK_j0z7if7zHME)ZfIxyEecelDA?d4A81G3X z0&Xjgg|xw0<~VyC`qzIiflo8vEm%K93!aoPx%A?Av>EFMi15kf&`T@^TW3~uw>F86 z_fXHT;nYqZ6pWpG9G=r2?3v?e2}4r$WX41^wf@&YYQuV3*`zw z%?bxoKIjO7s3_M*S|D1=l`#r*w8E+Xe*w_{w=&?!d)*KQ1w>4nm+#RK#!rzpNQv*H zBjx%py=0#+14Fq1_1MOG{iUUB$p5Vsj&BR)+QNV?pCqKtP=?$RndW1+mKpXP*y)9Zvw(kiNN`8a;R%QyaEET&4#hg9RKUN_ZoyR zegR<)gsg!B9K+iIzp#a`msf+}+aHfM4`0<|=sg(?)d~fEasF8h0@${o5JevUU891N z+X=q=fQ@oy>J>8qc!8S$wX$GxdmbmSBInF;D{D}M3sX5e#R`B! z-njv6>^&0t#5~NHg(CVPR4a@MP+Tm0@H)flF$6E`Phk*M0ve__MuhC$t3W-yvJ5+t zl>4~x8++y_3w;;(0C7WX1+Fq=OO{kd99fPZxch?#xIudm1+g8N5TLAVPHt@mQC8L( z(q>3kfBdhNha)Sb;eW6E(V~NogRX6R`3Ex~P;i;Z2b!BK!{6^68O&#p+e9_U?sS0(wG!dhH3+T^)O0 zOCk}(crl;A=Za$({XKi&cTpR6r1_RRrH}1xFgqwAm3E53!o4{DpUTsPG4xs}9Y5MK ztJKl5nqY|%z&!sl%mjJx z*}v??Pb5jX+N%GpzLG374A{?TV3z(lw<%V(?Sz={MkfuUIA1~d>O(7 z`pZ#SUp6-&eQc65tsQv)8(@P+eGfq9uEM~|qYMc$El1X;((t5)?fDk#-On+^gdsEW!V#(Igw#$xZ?Z!@rEmF^AGh765T<$T-VFPLDb_PY3R)zbk z``ruCKU6*h)&_A3mh?mZ9S)Ss2wsh< z=Ka2nD7(i0S4pehi|`fLU+>Hv0f*^0aD%kil^pvZUVY9ju)CL!c6=Y=jmoLp$kWOA zm!Ly%Blj8FF`b zl7d21ycN(sNUVLf8pN;X#&U+wuj^i9d!Dz_Y9H<$fh>Jv-ckmfM+cK$W&EMBD#bBD2Iyi{^K>-1_v$XJ#AseicIPEG`$!39b$7UNI(?4 z;+v{kD5R#Ubi$Ducs~5%CnF7W8%eEY8oUGDEgl$%_`HWr!U^P@^8YS=u13xU*<|Y~W&_InR{WJsl0G zq~L0KnGd)OP4itBRK|_e^U;b6e1u5{W1mqC*GS&fA^1<`(A?w)e-7%rzuN>#D3nvH zl4M8#|J<Qr>$8|Np|m4;=Q73FlPY&{HU1BKFOc%mNkAjOF&A9{o-3DT?Zlop<-pM`^(5m z&Lwy7-S3?-;}wRr4}HBPgzshvO9=N~{34fK>9bS^@_tD9OPo~iGLx!s_Wj8-jJ-;Z zc{bU*>s`vD4mCp%;gTd_05obDd-JUteX3{UZs_J}q0OaK-ym6}y;Mxuk zUWPilYI%<;5Uv2$qx2l|*|z45o0;o86|~RNg-}{Rv;0(s`6!k3w34(hYC{x{>6Fu- z(ioo|hkkU*xSeJD-(9>I;LBk%wCUj~QV2%o=@g%K1l5iYcW^H{U8Huz<`a^N)`MSD z9A~Ixi8E-Z>;p~N5C$x+>4+VNd^GUR;T#bHFLWReNTj-Px)&nz(#7cyoVMon5~v*;sIBw@leP9wgzr`L=*(gu)0~MdDmQSl?BJ> z1bL&vLno}^@^s+q-p@fKx#wK>}Vh-B)N%A)E@1f!rZ<64vmdMxQ7) zF~mo@f28}Dm0vS8SeK#Md^b=0C*Awae{H%X9B`y}IM^7y+s6zfr@pjxqoO~#4_=Wu z01=XH0ei7Y%0RTGJ#_$GkJdr{1o`D%5%^*6gcn2hoqr;=2qJYwY5xQu{;%LlHHb{_ z+dm?s3(sMrwd&#QgJ`*pR{H8RzM%xA2F=2iBe(?l5@yKo!!AH5Pa|>vm3Nsm!L~eMUhd%dKZXO~O)yAzz99>= zQi$CarvG1=_TkV`aykFMpH;;c1{MGV>LN4$QP)g-7HIr9;*dTX@HYT5Q^W+M-tJ=` zcL9iG;~!4@zfv!A8|{$P(H{YoC4&FBsg_lb2bhg(243?7I+|Nr)~%%uxG_^Z=@gVIk|5E6X&Uf*_pHt<|Vvk`H}5<6n=Aoxake(05UO@%u1hlw?+zfci}QUK2@G zQ5i^|0CIF(1v$AyoKJ*q=yfMPNxAD1yW|px()c@1(tbV8G8j`@>FpKXeX))_#hU3l zXs8Q<*Io?1slofF>Tuy&xvH}Oq)OYfOHI-KEPqmEz|ZNdGGgOVzARCuJM>QuEmGY((?U;?E7x5V|DX>8 zYgkke#ZMNW>zw`S-&g=xP1Yi_)nl(>nr?aoZ;A)_b$j3vr_JO${>HimLn@ii`lIIV z`hZ?9MrWMt{;p!dF9|#AmVi@)e`5=R30a$cO$qUIEOP=!RaF8W_Yo>C(yQ2@Wtl+S zpq;|y6*`qF)fDetG?Q^!UE>a>DEMP0bSBl_k(Uy4<}4n5?&bnL;H@b0j^fsq zZkGUL08}||(blH#8V`guzZ*YmM%eF9&~p_L#fE&^`_{3F_Yvt3D}Z zDXT{1&Pi9YW1am5-b#9q4t00U-~|J@`h!EZ96E+5IJ9`}4waUXHRGw$UrV8QpQ!Y} zSAZH~i{oe%8QH^#2GL8PT!M5Zfu^K=d`Wp{i1*3&4>W%C7H5D|{R#F!$A!x&jn|1Q z>L*)f6me9lwg$BJ=qO7bgTsM!y#84>s`LIAAM#3F5WwU*z$in;^wwR4-z@vw#}bj1uuZ zHDtAf&1^zx#ahFPUlLb5qKb$0Yaed!_qj?O{u+*2N4BkVvcBNM9Q-ac5kC^u*{!@> zg_0zf_Yfdzk#($b;VYC|-eBrKwS5oGI(%}xxa%$&2+h}%%kp>uV8m0l@r`V!PSw&n zngU*as$sdaQ~E?L?g2+=Fkva&>+qNQY~B zkRg4YKH)|CYtd-*$o_dDp$(thcc&f%F|cPk2|M1^vB?;Ll$Io|qB?UKE&@SaH9ioi zj+SDt{IKeIW3rLdhdY2q)FcY^2=&xOHX{SmrG5G-X^Z32cXn*wl&EEuj{Aztjuu(RNy5jg zP0*LsM>pah3NwKQZ*anDbn$_mNR27sagNxr9bX+w@6wTlBCvO3DUG}0>LnUVp<5w& zQTyuV9m}3pn&h_~iG;DxKG;Gj35rBll zLooG8FqgiOeWC4dVW3w!1rF+|`aj9$wc)p~r|c_!s@i_=1LbN~WB6Ws^}HW#gBE~R z#KG0yZo>m+EyEig+SCt)oGsU@o|KhQ?FdWXvRggYvoOLmd_|$dG5Brk1htzB6AuG{ zW9I(dN7}+xtH<9?*(vvt58@Oz`#M`Tn%F$o>6t*XdzYN%U6IF6{>Px3Q>54vW=fXg zA~FYVh+1iHjW(b9oGIjYwhBBWhL|4oEPa_m6tktGWX4OzM;rj_i;1u@oaF&p(TX(G z+~)8~Oq%x2^%RxnCtiJ!+)CuVAjoH+Dn~d)9?w2jX-d{5FYzY+%pH6c)e01Tr<|_e zcs$Jpz@gKBr zb0T<6)%&uW3zuis>jE4v2KY`tsulZpRz1;Jm_f|qR1TbB2!4Cy3IIy!RneBVZnMko zqA!9; zuADmgCM}Gk&!F5#;6uA;IYE-oov#Ni`49Ag>+b+DJaH1uyMeDEXr?iDRARl}uCCmk zY0pzk?Q^!VJWv<0X`qA^U53H!8n*QA9wSU{Ih!~Q-8;kXI7y8~9K`nHBgysgvTph6mYUJ6 zfAS~cXxW5e`k*B@woulW@@SmYD?0YKSQ!x0ln>hP_OVD{4zrc@mMzUUz@$a zeMvM=&U+RESv2T&4(eRZ6!FO2UkF$MNPyYqBc7Kcs@CAZ54IAhWxzot3qJfGfFDar{QQ8>y_?7p)hQ38z zu0FWof^;b{{KY0CN6YYOgkrQ5*+*)c|7^sDIFi1EtW4ZWg*|L^0=p(0__w^h?u{Y9 ztwbPxzOTRaAkx?}F?|sPAmZ_^=3%bLWMolEKNLd**O8e>A}7|0c^g6d-mzJ-#Iq}I zdnIuXPA_S)v^A^a{adJmBMoEKzi&_{Xu`d33O`rh`baZoa0@+~F4VDGMo}7JIPe zbz`m?j`$EGA$wC&ti@Y3chu$$)9l!>uM;F%IMcL>rifS7qRNETdPK%JZsev4QFI{d zR$b}#0!P#u7Q+!0sN{wVc}03Y?zKAwQGR2uAa#VCCWgJ%)pa|3CbTq$dAYLLZnzH3 z>Y;QGMsnmfE13$)shNji;JX#I;c^9j)mk{Zw&Otg22U;bUq7m5?pLH3@|-R>Y_!@n zkjtC-mZ0kZI>eXd3015+dq-Z2IX+ zf%<06x8FOvc`Q}ck*};2sw9m4bgK{G z-2nbIesfaD+63=SodL^WfY;gG_F9L(!GD(LQZlB_B-yXiFvX)+uld?&g43g*%e!zZ zIf$R~9(&k8?zic0P>8aR-YxICwe=By<~>;x;q-{OLPy$KX^`O$X>w)`5aQO}hs#}a z<`Yi@**+nDc<+(wOh=mWBP59Q++hLAyCNrfC3zVU1=eiCaw9>Uil%fv>d;0@WPT(n z7#fwhMq~H2Z1w&sX5}u}!Z6#HdgfXDj?%tq-=mZ7ixp^Z7dY(hR;W56486S;YQHo( zCB#!%s7v|{RmQkLCEVm^!X^_;R-xQN#+crTnMH)giQj}9H zR}fkaQXK;BubG25Dgn6GaK+`8QOKgB^pt$`z(KtqJ|g3>u!?rdAhC=wu;?@v@)-)? zS7l4)ufq}Ifsrj`x4{_3o{t9m-)lAG7L%TgF#E0x8u7Uo*P*6W8eU zO^3-!r2H~KVx_gwUgVatT;r?lLu3R8E{0xxc&|mJoW}atsnwo#k0^`b4mJuU@DbYz zd*SJSwyH8Ia%ahL`BFgsH+Wy?gUo^r=#N_>V;MjQ z2cAIv03fcWq-QGW2v-_CgG0aP4)`7vN7lWYj>B_sX9kOx5F1ea##iEUI3sKt4L?l- zKakS6#|F0@zP>OM^m8?dQ+~YR1AxtzJS|LG;osmVod!oJ#RLQ~_QK;{?OsR*-9mCxd zoA+8eeWUEDu4EAEUX6Q4*^hLv9ioQhKp>YK#mDOt?|GbbLTbZ%B}fqp5#Y@zbe*9J zOIkx^*rJcs`PS*=@G0-T2HS&i&nUTJ{qEzPxe%bAFon7%cZ5A}>j|5gcuymfQ%zPv zpNm0?%cGD#xSUCsRRHtps|I2 zRE?s~KTPW|3l1Do#0UpO?0Z#nr+ZWi2Q+X7%<3lG^P@WLJ?}blR4#N3vpkV}PdPoo z;cTNr3xMoQ8xv$O3>lWBp?bw&{7%`o@|5wia@vih0_Vo1Dk84dyB6@y=9l7#kETqR zGZWfCG4cm_ABCv*f%%7xZ($i}BEIA{8~Ko(i9j}`Ah2IG{UOT6a;>dRvHPSA9z-W` ztEecU7xIw_!9pR5f$Bmj4OKXbq_Pkq`ZUK3VjYwUrH~iqp7+}1hsL$9Y4jXeBls(} zsjg7)-P-#bK)vjAgt5}suT~{wzwVSE7nRFKsJZexbA>GNRiq1507e)2vJdL@Wkfym zIH%CRs*V5BbHfi#N#$=`QIaNlPOP*{cy)&&vMs&qfx>P}JhWC$!TqeGBQL<|mHu)w zI^r&uRQ`}67du}^4n#cdF+`3(VoXnR*}dqpfU4`uq>3!B3B9hlG1g5&xp{5D1MjxD zSJK=}3zGVh1^R0i0IDNhcA0W+99YQ)NW|~31QiyH+$PpF+}`f(HeP7+tY@)8-Tf97 zX~*h*$WmcsvGPPMz&Sb}wFtkVpI;oMM{k!mQw@`_jeCn$X&X;ZW;iYf^(rH>!_7a9 z+fH1$)N($ic4`=+USs1uK>~o>-_0j=zFI}EYBuLYwpTaTED@?R;H$o-;m;@Ec)HSd zi$VaDjC}5=E4`dki-msm&*c$S8O9jKc$ZSRivbL&Z~2d=uO9%wr$_4<3>%5@0VCc< z4Vf+rKW{z>wP|Qe!xU}Wl0f6c(>$tu>|i%R3Um_y^IpeAK7SLLxE9+qrkx*=jJ{rY z>r$;8vsL&P{{yP?kMF`Do0Ph@3LqIMl;($pD>r+pR2}nt-`e(Ly)RqNTd`TG|HMlA z9^bO>U4zvF?Oe4fi11_ky?6h>(R!-Ybn=7rVGkLTBLnf~MhokQw%@VdmeR{NrhL($ z{wvIgT1ts>M85t_1G83>$7gh&wTNr@ph_!7`(2OtC&!Di_JeSMnea-Ni*RL!@oi)Yt@<<*Tqe~fg3D@Fc87yt!JzqRn&A1jk!hD!V1f%XNa zdcfsQF-@h_<&**p+drtXzGqzvsGr{FAp~5ceW19+uA0%84Oxv;$%v!fXN%k&bpN}6 zCqtB847iNxBZsCTVfb?^P8)VLvW0H%U{9WW498zB{|Z!EH?PT0(G!-CyHKq-pdqVe zY^L_%;gy@$Xa?r=Yf!{GxS@e^C|yb0o0hn`FD5;*2&*|V>&ubTfYpJk-x8m%txP&I z@W$D>0#O0zN0MzkfF3Qb-_`RyTl!6FH}8RFnra=+C>9)kc@F1;&q&x2TJdpG0kooJ zw91q$iLnvkp*0 z{$X2F*~0q7DQv3-cZ(tHaWx>8IvX9tlZNoMGrXtPNb*K2Up(G<1^YMIUsp4l0nqH8 zkyl^7!29*vVI5+S7=ZM?Ibj4^(DC(_gde5P^8hf>5+1D&ek12x5oY_DF=UrIiIbM< zhvnDI&GBo#Op<=3>nu-B3jMb?j|h0@=|gQw%1|fa9)Aq?{k1QdJ+e4GGl8?bITW*; zY~hKvuu3|AvN>JJirW4H%S*`yK(QaWrqVE%2r2DA@K0O!&Huw4>c$O5SU}7+KJiDT z=?9-lP7*I$F}CpbU(wIk&-X~~DM+akpbwCCzlA?ZfpbUr{hG?&dY2Z^{9I-t1c2yd zS?cZhccyG^+u_)7aknm{N3qwznQzQqa7mY2=O$|Zc={VCL(&m}g92e=nm||b4+Spf zL#^&|&b-V3DO6quSGfyYxBppH$!Pm1RIow{FrrSboN7|9S8*hBkHs3e(#4jFl0O)h z8vf*ug@kN=i%Ix3T&RW&_Is0ke&fN*s{>`?QMtk>=z}#xHU+d7SGd+Z+$cVZC`5g8 z)O8Um3Be-QPGp0KpW(p>2P{Q|Ka$o&BSZP@#?v-{2JN0$V@!_(Z(>R-6udJUIIF8X zs`7pw@%k;s?)riPl*|dtDje^%i)P?}@s%rPtCXr@^(`U7PXOIk6cD^@fFA!cD4sG9 zqGfz&D1A~B7#&-?ZAI4?XX_&2-v z(PFVHYcQ$l29j?#C$2~9+CK1`oW@U~XG~ThGdp3I{P{PQNfd_tiIWSso6;0fG6ao^ z8j}nPP)V6luPY>}$}^Mb4lWS+A9$qR!G&hp>rSCaq%C~E*T^y^EZ#B>IH@Du)CC=B z&1gWKo2-Kg>bHkbpyywb&+f`=FCOyR5Y(^9P!(*9-hI|m$fjK%W+d$n@|cUYp8$%o z;x)JugwmQ`|I?a2r#6yHs9mE>6kLCkkWJ7mrmH&yV7_YsN_E%ETz%(-n;;*i$aiMV z8Z%uNAb983HECxnIv_&fuG~7DY`mp2TmPRfn`cthz{jdRue;0ih|j(G^y$mwLxn}W zeeWNVrB8{{G+wy`T8|Y7!;B%I%ssmjN^py}+rEtow`Y6@1bF(}N%p;Sw=*yER($t} z8h!OixtCIkOxDUhLzsJf+-AJ(Y>+g}o%3b8+$5@Kl}oYBT7nFD(lOSz8@yNxmFyh` zSF%vg)b6H+vlz>&0g#+B=y5ydO)5}!?*{Gq-p=p7jttL?;`kuvhiA5`4PaAJU_;V3 z5urT)p=i<5{|~h_WFqEAS8|B8A#q*3WWaH^-uCjGC0xTA z-pf$^5Xc<1_g8a@6?&^3I|c`3_`H0<5l^u&ZP5b-Vh-89>BPQ0QO&a~M6e>J0_Xzp zo(xmYA2=$pY~wf8xSMGT^VzU>=Yvm8?~CpN86?SM+Z8XjZ*oW4otX9HW8+w{NtX&} zUNyIWV%-R&mqRnkbwtCktAc{rGaEHe_*J9;2Xp|fn&P~%XP+O)65k=udN=X~q&{yX z8$_bXSd<|x?TQ}mPI|&_5nwgnR@?XT^~4pfmtvYryZ49ci_&86ozdcYy6wAwRt#Zq zM-?%qXLgU<_pTTQEC(*j+>mz9B~T5&R{>Ht12zHl;OtT*qVlU&#^cAH_e#XF(>&!I z->N#A19Z()aaJYl=P?+YQXlzN+-|f28iz!ei|pP)-X=@d;bm-8=t{z@XNr1%T4*u+ zsp%`U9^c+$b|3HdtU6d4M`Fy#yimVT;kOx{&Qj|`JsB)ovg$Aw+>lY z3M?L}f?M%g+<>%>OW!;lt`{)G|MV+Z((eF#Pm6kHyi&iVkNCX*RtxEiKgz)&-;>A5 z{~&lTcEVH0yMnzDf^3w4|=Pr?fV&|)P+20!EDFWEa|a>krNy2 z%t-gjtdpgJ zzOKfuw54{Y@h}a=z^!BW&MyhshI{_*f)|d zw`rWX)0NfT&5_}|DYRL^;Ir!cr!Ksu3E6yu-AQ01M7Makm3XXr!EXpZb_>_63>s$M z*h#M~<={1w7+%cgmf)?Zt<^FD=hjBJgho_r86AyJaHdJ@X+>6l+M$_|h~Qlfe&jYl z|L|*-rl`7L6?rEEe^TOb5rr08k~CVWic~D5y56eHKQuD4sVnV1@yNb6;x4C>Q8_rb zz;!Ht3aaFpaeKq^zw-qZQ!zy2)vUwrGBtto1#{TK0MU>h4&e8=0Zo<_f^pRuA>7Im z0iC68Ium;J30fZe-p;KgsbqqZ7kGY~Vt}EV)k;m7i7EJ-P6LPFm61oA^*OTX!UeQx zFS=WRC4k=oYZX6h*(ivdE;RC5inZ^Z5~zSaRB>euGv*xbAh7}~?HPa=BOh;ugbVrH z!6QtOwRtGHCey3{6{b5g0AjNjHzwIlFyQB~IJn0Ps$`;{Quq%gTH7_g-MSX{BQb$) zni1&;kWR%fMMf9v;KO}&udrTmt}};q(m}EIHq_H|fRi%O+zxP=hhNzK&OYZUfWsyYst?lbjs?T-pJJToOtp%}t`0jk|EGfpcG6Y{eF zMs7|a(4@EHM?qMZUCan+{a&@&2nGHLD|etC<^)a5wLNQ5R+wZ6y9k__7uIsB6eyxz zHlh;aDR7(&nUSeO_H%-kY>AixRPc)FrX3BCC2Q+dv6-sc0y8M5ce$n4f84C zYOV2`;tzUjEZZt*pFjO;ZX-qEi!&ZkVY+okRr;8rk+KyvGqc(UPV9JHt~Pc2gKDF9 z(2t=R^Cc8$^w+?Fqxa+K>#y%plhJy|2w9$9=~%`OE_@^_$M#J7UYg9cc&Z^@8JT>5 zgGpT~wLC(yJ0JdxDwMfCHUYR76{1ElOW^S7UAY%0gb(EqDF2Q!fAHq}$b4MSN{pPJ z4V#sJ*rg@S31#xe_@J7v@*Z9MunjN?a`x{@5I)djDY8aU`O{acQ8lPq31}42zBh3N zqd7pJT5M)1A`pb12N|u(;x3mqJpz`6;=b0#&Z7^0_O3G&TWP0aXq89 z*O4w+uYfjH9lWf!`+4uBAhwXo!?bmpj2+O2u!iiE5`~dk3`W#3TT{I>NnP@~IB8>r z3&foNdL`Vl|4-i{dvuKKFc6tFl%&}!Fd!f)V!T>Hv?nos$OdGRxN@*5ax&u@olB#u zHR|0`?EL8d-luXR;rzGtt_f^i{3|OPKMo4=?`Ct?zJtJ2h4tUFT(Ze{Oe`r@Zr!g6 z`}7lOxH=g4LnBN>vzW!ud~cKS5Qbkej@T60@4=F8sTZVe0nRbd6zjuDk))B0Z|+cf zx=d5fc9XJN3drW`*(3P_gUMjO8WRZNz-H{!&CGc9{^s2suevS+0) zYf(&Z3WDEs6O^2WjMphpk<}v}SZwrXy$U511FpQ0Y~4@p*DMwp@BzZ6BFZ4lFZ|0+ zMPoig-y)0w7?RS{5U2FP{+^uO$lH;8Wd9Cl|J*!yZ8j*Vzt6IYtl(sYB8!HU=WBE# zkEu}oymX!0>pMVqB;1VHQpgZ^RZZo9J^=-l~}QFVQY zZ2!(}6*>QZbO7J4(bCClDp!~0SyrZi_-goiNYrx4iQr2xCkCUyg>#pG>H>p` zj|hjos@4qIw3Gp$B4iB0bd{(g-9x$%F%TJP$@2IEYUX;Y46g)v1)FBYi~241BE1A7 zqT=;SB>d1hbpKYwj}nZJIHVx_60lw8sZ740fj|cm&23;NrvDAlMieYXRz>6gI~dh? zt6}CFLghhfuh%|$q-{`lOTkLTklH0}oy;4)t1~TM?2+G}7Wq|Dgh#VWZnl=-dr$}8 z%NVIscK96}HTna;v5q^Y6}dc}p13Far=3_dcx2k64UX$IKbs8k#4>)YfMGAu1;3cc zoA%_%1B5|)rdh>@67uLxQWsF(+HKf{mwO<~%Zaa=Hv@;LIU{cNc$IH3J@;@BX)5BZ z*0mO$VzBmC;lLIEP)o=5QCH6c34oNlOPmv(>PF!;b}^jEyTGXRuT2g=za z2DVl4c%Kwx^A(H>!xz24*lr03q34D*iUD6q5R#!C>6{h3LuM=8g^rfzR7Lx+{%2kp z;7&?Z`M%;%ZxM3w3=)!UsfzKhczsy>( zZ@-?Q&=pyUZLB?PER~Sh!KSf~%5K1S4I{z|G!`cPFlvzoWWG!UIa32)GjUq_hGl$~@o>yv_lP=gC$)i-dT7`M_L9x~}XzLX~D| z$&~WrVO#Ue4opD}ch#pJHWeaL`D4;8R9q>AFk(%p^2DbGK+wTRq4(mFjz7clucD1ih6u$Q20i^%VYVmrx+Jstmefz`@& z0E}(@zRYgXLHr6kiv=ii0VhsaPX*9$Q;rC=NIW4%Q=TX1x9DEUk#V5*f$7Gn^=5k8 zDk_2q4q@rbH-fc~Q;?>332T=12oaLZ`3oVmeSL~(5-eNZOek1Be(y}!z_XZNv z!$mzvd==QW)aPNt-IaE^E;mF!#~Zmpqbzr$r*|%$ESiTeY)JKMnkY%r2s~M98sXP7 zntZT4!}WRo_Xt-QodekK7$r9ZPPb}6!we>eBHNzT<#Qk6edUs_(dac-95(*=fJ%28 z8osq}cYD3BCiHmLV54S%bk?BDZw;%k^h2YA>`Zn=O`Ef$3=K%3&4<7Ezp@lpVvGGt zc3vG6z|12}vq}TM*S`yG&`=vs3E$fu<_hx;>^9e59r(wzDSu-C`dYbFj^h5FgJF+T zqiG`XRqzu=Xx%7r#BLtGegI-erV*x?R4XgFhF-jviwSw{YDs^78RowZ#%@7A7Rl z%KAAq95&7-6o*~HnNdqk63xl8ud!=0siUmU(qpq0M#BPK5AKEWhF>J)6366rCfi5s z7`tdb9I2GBY$Ud|a&nr#71NMzy2!*Bf3;w8GvLI4QS*G{Gye_oF*5*puGMeKy?~+_ zB`{ebB^k!l8oD@Kw3L5KzbY%cgv$l_(`@l;eqL9C>}xco-i8pzk|uJy1A_6-lQxYt zqpJzUHyiz*1Cx0`L#?e9_EXZT%O>4J?ChB9w7X{l%~Xx3;++T?QlO2!Dpi_U?OT}U zF9Bnl{xNk}p!E-F8cbYxmuAetFqcS|C^>VGVSN4kPyHRC@D%3}#~269_-v(RjFZxZ z)T9t5zKD$Wc-+XPupSd^-%$OOvgYyds(%b8+(BEkO{M7T&KuV2V6~9+5^0@Hq{F6= zITT;&eZ{xujIZ^KO8Y*_;8{~L-u!}XeCKbs@ZPjhXNlvP;?GqY@5TAzuvM5t<>RT@ zF@B$RN3vaIV@5=RZCm5pgtZ%lU8plLcJ+fTv1dk$K=R~EdB~2ZM^tR719SpqqW0`c zIQj#QW^(UsSKYFgh>6@yqk+V>9Tw)~Ctpo_*|!FKwO?+RV_aXU=IxCB-nq-tqIu{C{&qDK0m1V!7xf!bRpRZ@FeF*KDku4%!OZ%qt%b;=tTo``|!e zU#n9^(EfUydiop=mWA~Cc;?13&2vh(L`flAp*{!anmQEXn(2|Dna&ok`_LkEBO!0H z2CXe+|}63eVUs=W^GWy47QI<4a{=NP6!C-Xb0f=zoTTp&r+M z2Dig@DC;Y3=vMR=7huDFe zCu*1c(tEvl-1J@ck5S$jAxFE-?tM?*QC#UG;`;HB#o_RcH-~R0Pp5VuRL;=F_*6(& zPrff#Uzp)Id@8|=a*PylBin^8IQWD8Qfg2)kVcvsg#<@hL$lySL~k$D3>dc4Apc@6jyvnXc7gpuvqX{+$1Zj=|*&O^5|Q(26=h=BfWh*Zi0dG>&eX)9nr8fy6)CWP12;92>&aw(j-5;ClH1HTw!;pR2GL3aBE1()D#@Jwo|)fM*X60u z#7SVWx+cmV5t#)$WUPslDNijqg^@(oI#h=Oas2nUk+#~WUU*9^zOW-iHb_aLc0bEX9DS_$H=Bk&ghN71%7}dX_ z=;b5Oblp#$&o*XDUQ?iKWu8}DkO$SIul}*6<(rXm1*%3}9(k3tCXbgg%>UW^>3I!K zv7gII7t2DYT)$O^UMOz3o`_C~RK!NZYF0XTQqaY_>>UCFbryR(1e)CPN!jV(T}L|0 z3`HIVIuI(9w;$^i%61v!@E)r-g`Gu`2AartgR9holdk2(Nf`^ls9xt^C^| zQiT8vBr@!W)qdC+jR|8yC}=Lz4lIs$|LQI+?aw-Ocyp((INIm^Ay1O&+|=U485Z9K z2XbHrZ0GB2lzCfcIn(gVnE{i2)|cfg7ewU8jK=h@V<|QYVFAen%#MtSSQ%~Niw3g> zILTaUrB>m*TLb0C0*j;9oevcE%4Q0drw14FvMl(!$sEL>9eZ*@knBjV@)Ykc_wI|4 zQ~7A}&Pdbih^r?6GCUgwB+|tfb4){bsJrlLn!j8sN(u|}2Yh9^I@K0Zdkj8Ij&6=h z*x8V}u-WrL=<=Os&zlXU^<38YD*Ay|?8$fR-`t4(3&)g)H7=or{3M8r98urUdw0W+ zJ+!Y3yY%=@Zl91Ji4l{LSnoH|fk0}HVEBQ>vQpK@d*T_MuCeTzRu?XeCne;$PDvPk zlJ^~?iXl(Fi^auGLq{fD{>=XH!pp{mZ+f~0T>Khy>*CA%xM0KS7kAi`R0@-Jic*B) zT%9OAun!L>oyS`^?-Vbjq_zEe+C zOL@)FYxfiE9zvG`+sy%f!mqL>YHZjwr0n*&uZo|qy*6k6nh_T}0(E358RI_{&)!|k zh#DU&l*)V!bITclkv21T<*;T;E^%Mcs$0pkoKcqQtRd&77{(7@-n$nPx4MkskQs2! zF*9nb*Lxjw^+55o)l?U9UJ0=ul)8)QAcaSUzB>qfVn2W-MW#-*O&|Lz&s)$-H=GBg z?FEVHN@b;Je`xoWPaj|H2V|-bEuItWSwJ@X4WF!P_C)+W3&19xw9j_7Z_HeC{Nkqe zyC2qzk}23o=*v7T&jV)9=38~s-ZUNNC7%jJnbT7DxayP?LWM0xcBMf;^SR3%V1ylp za_iHAKfkoxi-tw~%y>1-3`Wx) z+&5AFA(seSFngCfXYA$q6ptiP5`A5-ac)ixGcc;px+J(HuyaDV!qV>HV&@>n;LClb zC8@rql{{NQ*15bVobg@mb@vu6nadl@_FFz});ii6k(cPs?qG|<5&R}=4}Kzo@^I%X ze=Tml+AO^9v)$x=X1K)W+OLj3ylmx{HNlY(ncrLf=Y z+N&RnOv@S|n}+UJ-cK`EY>xQ&t~u*&j6mwXv0zwL@qya`@%_>O3r7_D3C$1rBi|oc zj3gcPf*2iZ7K^%`nzHLpXPm$1;GoJlkt=EWG=`Wr5>%$KC;1eBU1B2kVpd$;H;@2F ziJl}_yeMfaRq=GLcZg7*7j5Tp_P(nk{;Y*3RRu5uf&P$S_bMblZ#_CEAUVWxO^jVM z_$BVU!`_3kCZ?MG>zqbkE}a|xt}%7SMueD(Tw~ex-z|2$q@;QhmCwdM7U}%$tveV- zY3JC=D;(RmwiUOaS=9A?VjkJvt$ZkPItQE9EMbcDG+Nm?eEvDVsHA->=~qedT1qb` z{^OUg?9zFtZHM{1f*;o_XXB*3fBZTj3PI`lp4p2)CHX?mI!rt=na^}*^G~BA{+f^r z(_M0N4FC0O>5MYO;nw?=#vIP-yl=!0`Kzy8nKGuvMgs&{q~^GaoqK^1LUW<#u7r_} zXHQI?a+hm9biA9HFsE3;S&w=I)RfT`x+Ys;X>s3|86AQ{ftHD+y)vU-cQE}B%v4=p3S*+pa%ZJcgho;mlN zhO`k;9;uv>6qr0QX5<8fm*kZ6<4tQmr&||$JS&2$RW0pti&hUqp{|#|G_pnB*2I6G z4yXQf!A}h0x7H5~+3B$}{m`_mpeoRBI`<$o@_WO#bH|(IW>1>e@oFag(n$ zYaaj+r?IuR(~p^q2#YqV+8FuZfb8)GxQ(ji2_X!A9zdy|KcH>2+Sflf7D;1kw>Rw3 z7;E7bP4@=Hra|yDi)BvQV+UK3K^pmmQ;HQ;-{7otv_p|W)71JjFGg1|C%QtN>Q0En z@^{F}f%+!l=l5OT0=HZmpm4KHSOZ_(6h{~i%YP-}e6AvcUNi0GGQ(_37^=IZ?gFeA zp)5uGlzXBi`CPg&mp$Rq4whhX)wbScP~A7NzBhPD?gcYe7QH+FA}(qnIm-V^+|+qs z2ow5La~t>3zE@K7lt(gb0a^xSSQOWso80zI6?l{(d-vSVP(f0K`ULtyOp^7DA14}Y zG6xFhpUKNa)Wvxki56#6nzDrf1BVnoz|j95c+I7WPddZ8Soc|FWuz3d(O`SP9?1p2 zXQ#ejb=scOU8MT0XJ+P?34sHeS(kE>`eZYUY>t;Vp6Ii#{J`v)l7(~G{X6@vCthw` z<9ideQwkGXePrMDIG*fM6#2OD#;c~P`@Yudnr+mQu$V=2a`GVhc_2Q@5oUHUvWWUTk-7ML34cO=be7s0>FuD6$RPG&&iIiV ztLm7;T?(5mA;%6F)rPALsb{qFJ&sRzciuhK%H|A=K$Z?BwQYq2X`W%*600jV@lhe- zr6V#>J;MU6Mqgx&nz~K@$GuZV?kf0d?0K>_a#=ZdF0P^D!UxQ4!&QRq4fj-)2}!R)6>8`1mFT9E*Bmet z9I8Salb^*V)q;hv!$7n%^y9Hwg|sHefJ-|OCpL^%mBfhns#&vuj0-L-tCbAMz1zN) z5Y1763p@8tyn8&WSN=_^{3K7>95(4><@R2zZymQ($s<*kDZ{bIBEqEJ_IHsQW#B!J znGvkGkmhi}U5#4K>L%Lw?K)=bk^;mP2ex{aF61%CTHhqK5~KP!sK~PP&qvv5us8wv zj2?r?$tjbKiCqG zBsSw!;(!<9a3tZz8JKmbO3lF*QjaqM1yy!=NJdY3cvxwkV>>8(ZG|yn#)+!tJP2<| z3MoM^L8H8Zp03Mf#|&{2Cv5J%$p#e;HdqU9h-h^%Q8ybc_iMkoMM24?UW-!LRLNUD9&J z5Y?VXqg8VcKJL~9v{o54wsA8g2RTr}ItVp#|ZdUcI(Cl(?MEZQjeWO;U2q^#0?_v96i0pxT*19)lf`3VaUw7!53LuQno#hAA-5I-}Nn=sr7JJ@pm8#WN?Gc;Sh`mBo)v8rh)J$nnHDb>YYVTEI#@-`H5J@C&?&p1< z_e(zH)0Oet`Dz3~ze^cfweQ0xh6ig9mZO zHQ1g71$WV+pEE z;^&xb>z#+ykG3hPff`(f+lm|Uokx@zwAuTrDnza~eLN{8j_4kkk2t@H>qrhzmu3&S ztoHK4**neDRsy7W{pvzKSgHBii*knSk?Fo`{6{v5A3k*GMlBWdX-u`owM9V6F;XHa zT*NM)>dZgCSH6^e%jEQ`*k>!v*$V_S_Sn`Wj2IdF6MbKMSE|%fewf8Ba~SVpm9O!P ze2OAVwh=Px5t_T!d518~D;ic24r5_L>&xNrNn?n=i}Ot_sq7{+K`L+7t%~+IxSlQW zSN6Bh<7gb`F+?ai+eTZeDX=QEc{n&XXY{rhv#{sGG_%^Sr~&5>7aCWtVQMn>?a>=E zPOXsS^O^RpqwktnwS#EmwTH9zp(_8wbg^Sr9x;epOP#m*FSRbt_mhg%oTavRhxQGp z<8oOL9G-aIrjXSRAHV%p2+P@p^h~gjz7+K!TyZ}zMjqYT`mA-4Q#Ad#?kAcxO=n2` z3u(wj!@qcsTA7@+UaXs?2+j##hrO1ykTizka!Jl%ZcxP`u~1CX=&lIv3n%Zg%l*{n ztU8KkU(|?D%k0pjfj?vmX_aqaR?`b!|5MN(N+84E4%)8wm;w3ic3$it8)lAYg27_+ zy+WcX3HSEq;flH>OOw;wX!5d zsGUb)6vGbUH%&(evth#9<#M8EzVM{-GuvYPmQI%ip%76-CS{Q(pOSLgwj<6WJNzyF ztNT2v>e0YN;lD53kCzOK&4_Zi%sKDs4o!O#&3bE(0tsOrKcilGM6vlGwXoR9Sue^F zL|bmXC%G7GCx+EF+$e{hS#hZ}wFT-?dWYAaFOBa`>z|J-Z1uy}p|N|W`unmCCzaCF7;5 zf$i_IGM*f~_B!lLoZ$Hev?D0_ex%Y#f4LeIQDfg#aD*HSbpJg5<8yjwy7GaJpH$rr~wfDLq;|7gs!7KrIz`Vnp^h~CK)Zr&2k428lN>*%kUptdIK;y(E zG|kjO>1RRR{kweNTie*{Y&Q-lGQdES(G^Ep#=kxX{6|E36k~IMl7h);Vj(a!=-_@w z;0|KAw8r8%W*$xxd1#NH8b{K(EC1=9C<71&AMl^tZF0j;<{NIE4K8;u*XCL-{60bR zZ>3vwsQ2u&e&kt044;cD`JB|K9ozaV)GEO%m<%GZTp@#{lxFq2Y$yf19nXGovJzZz zAX2NCa|6zQ|bg5 zfe+b1!|gfrWq>%H?5VSG2xIpnW9{oB0C(M{7?(9mk)SEdf|`^@_mco#@)ovx-B5U2 zVsjpr@~DEW1&$?G*z)bnYJZdBE~RzjgO|o$mJz<&q?R8@%f4LQQLwX=O2_5STm~)* zbG&?#>^&z5;Oc$R)dAMmsgBK!oi=!@Agpn{*IO&zdPfa;elaxrjHEi*}CGPM*hGaOXk#p`2B(kNLw#e(=dgfgaxxqnSsC5IPTu zVxj=A;T-VRT%gUfBJ8jatKTzG=JHDsVVNTZ7%2eOHP8yFlb0V07ctwcWA*pSvAr9B ze;#g}yeUW+UjXUMT+BB-+MtaQ{`q4+;sf8$m&Box4bpw1i}Z4cZ%peI2{?emtmtDtj$Q({kGl|Rq2ffuGDK>bY?^G&Il2u)J? zNX}@Y{&Z$AGp9_=0dRf#Dd^mqLsXNJ&iM8v`8=EU-;Ke%K<`)RLZ*E-jYP;oW-KM4 zo0PQAWS^-jMtERkhchDcf7mzI66z?Ui&Uhe7sT_FPRoie!hW+C? z`0u4cKKeu8p_^eB5z`Vf7Ka>djd(zG4MTQ(&wh^J`r!R%lQin2Dqhza?Vj^FGf|+* z_bl+p!m~4cswCpNi+}(NYlI2K9A?e}N~Sa?D2PY+^Z9x|%ik??i>kBAX*Pvd?aVei zW@K72Q{n!f0~C==1j*KFbqV2T!dHDE^7R;xf<2$gwFbbJfe5brXz$}^2F@90QgGm4 z`(~255MB7olk*3w&sL4PC(xal86=d*Ia6~O`&I9&@V!F_8egfuR2V*~tiOLL zG=M;!g`+SN1)3bkn)0ZzKxIU;Th9_;!!}M4H+o(0BUCQr=KniCP*-=RR)Z%ILWMaI#3oy?6=WS>RiYA|cPbEn>@hU-a%6Bb}kl z-y+YiSyxXoc_TiE5V6mzrQ0Cs}Sv#m<;tdPep; ztNaO|^4I}FzE1#QCYbg(d6{+(+SDP3Q|cw#y2@;z(z|otYo97XnC~U z%o~}huw@;tx0GW`O#di|t;>4u?y{C!(ilw|-3gvCp&JeE=j?@u+?4|mB%*87%blsuS$U2Y(q)eU7bP`z+6g)H99xx@r?8iD$rIels z1-YbiHOsu%PAb!XQ|rE?cmQ8_|Kb+kp2*{rJcXAa`n~IYrCrujD$H`LCvKop zgZfNU&+N3O;^XhOGo!J#Qt)xJR&hZKiLUd4CGwIn=Sh{3o;5Wh8j*H#fOXbckT1=UTvbx-qJPv_T%KSr=h2P#?vZbA# z=(ahQskC#k&0OO4e@dT3cUF}ClH7g`JT(=rvbAcM0t=9 zAFZ0vwuQ;zr57PGR`Z>+2-dXA3G`$#8WR(t;*AV86{9EQJa8`tVhl0k&Ws0dvl_Nt z;>hZkxVQ4JFHdPqX$jeNk`KL1-fls`)vo=DVKx_mqq>{Wj=wq7bFQ&buRn=u$A*w|?nww*HCJLxpJ!Q{N3X zY9r10M@>$o?9z3Fb$_W^N-@4HYF$jcr>3fJ{mtzl0WWU zaI@0>kzq|nS0=vKrC>>CKMO!o+saQraGZY%3sQY*jHR1YIFxS%Lfzoz1S6KLOFe`DNIdVtAdl9s%Wp2Om8mg0R;5~zm^C(*0 zGDFPQ07vRLhC_c{z7tcjq*)<&A-5U)9xysP=p(*vb277v$?>(sc?_2J&JiD90La_& zGRVd`;tRB^_%hdp_UBT{Z*qojpv(sRX?wIjkw#-5lzfdp1=!p) zkTRP~3&x*rtx)$r*GN62vRL%HDt zNX8*NDA)FsOoDe?Y_$r#RauKq1E1c;j3N-g6Y2l0k^De_nZ%9n=D)?6y9gnhpwOhW<2r^jhpLp@t&? zzvEMD_A20bjo3C&^|~_sIh^#_kCq*M<;j`xj}AolK)b#1`-A81WFzn!Sf~D@0Gq|n z5J@x{uFvW{7s@kIw}FW;=phsy+8fW>2Ft&yIR#dOC52HNj)U_@Wm^&162l!96~j8e zJ05To$CkMqj4Z8hORzh!%7?yW*jO?K1!tiLLi00v`lb9p>g*o>S@E{M#m3Y&EO0ep zN1T{O^_tG#t-Q7~5>D{{oHUi{J5iPyR5b^3?_rr*Ty{K&`_^0m9A}f1T8et@T6xEP zb0CQiEK@lo+RB2k)`!rt(-Dozg7%@>LI!-f;{!hzgnV`$aqU{Hrq%BwPLsOlT4y4R zih&x9$}3|D@OO=7!7?Tu^)5Zo>y+5eX(sc7(O_C|+RW&TfwjV=A-T}B!66l**#x`| zX$iueRE$%?`?`%KzprUHbty$v>5@KO@w}k2C)>~dM}O^0aB5iJ17dc@1cIWn6so@N zy$NB>xN^PtHg_Ip+OV#6;gaTopZ5ode86hO5@7aX;coFi`x&8vuWz=Q)?h`a)u0El z*{Kn7tRV-o**BV%IL+X^BY0>PRuq$k=@l6R;^_?;P&Mz4BP$+85*9 z>aj7bWo?t2M^?34>YbtYMpfOv^bG3%*|9uT6E8jA-*Bs6^^5L7$$zY+euwu}W1z1E zj4ag>b~zgSc;<%HeK8Xj#z)g~_;yNY=dYgbJgj>LX638W*bs8-Bcxgm&%%b_Qwvv} zj#&Tm(f(eG+-@?vYj+cKm7lcKSj9_s%}3z_3ni>XSpq1VlvGpjY|9e9p^V zy|eCnu0R(z$*7O)(@6u6Q5Qm~bU1GBJ#do^E&q%OlUmOZ1=Loi<~rlt>a`p;@5;@b zQL5l29R{c$*0g-uH(B$u!hrdjax4qRk3nxGL~q&=yF`#a!4A$a&pdMPi<$^(H=5@Zy0 z;dmB{vc{FO+m)%_ga0Q>H9BYm=a*tuy;SZL{-_2lH2ne@XEE4NxZ!zBUTij`zeHZr zB=FL!P0_r6?@UbBW7{-rgWZ$$Vw#?wF=Z^Qe7*4x3>qQl%eWiUX-1zE?2_xEvegp8 zzv+nmt7=sZ@XchhFuorSFSJ3;9sDl~AXcbZV*3Z{yBR$PBh!1doN(@0=Zy3eJ=oI| zAETSSF>M{G%@D2^E{p!Lq~+^VCdT%WAr&0?V<&u$X2rt}w@(@kXrxey%k*WrRm2le zSvtYn!c_F|@Dq^Y!n4)r{QNUjw&LiAO!jMY_vO(E3;~bzIOl-hZRlvzL!in6eP_g z_2I@{Q$olSP@VrRzXU4!9KjF=m;UVo_?ftKkQAF_z-Jp3)#)ZAFF;=PIK4YV22hh~ z8aXK&e_QvIbc6JD*y;j#D5P$|A7`50{8S@I0UfqrF*1zixRgbMc5>8r5e{45(E@a{ zdXLC|7t~`&NEOjK(Upwi1&7pt{lB5v!swKdldN7p5&wYW-yHhS81)gWG|w>O7}MP6 zs=7OI@OMIaHyWICH0!4G`e&|P+Hxlhq)tiBaULQD*Bt?EVUJ_fG|3pJn}Mb}R;ut7 zK>(4@ZCqXRwWl;BN=ZW;fq`rSp3tm!{;=rZH#OX@n*s=%t_c5UOVi$Q^%PatnyUcs zHW;b;B_>KR(1pJgbFrDt4(f-s&}t0A4)4XebLRxPqx4j#e<($mY)a2?{<`3t;dBLV zh@w(shT405Zz8f7e;K$8Qo6UNZ1M5#7i=NtdC4R*cP>y!24se zO>t9X#7gth2L9cVc>Y9%VzA=fdLo{BmlGQK8S0wR!Z~k9{;L&aBMYfk0^wojPQ@yD_wNZC!av$(250j> z#s(Z`LXXJ#SA-;azEvREKP897Uw+}yWX-(L{yASm7Ks~g8`c=iYvf$LW+84icS;lf zyYjmFLiOPqQD}%iVqS*tHBJs?SOa)PhVIbsLzD5+iq@ns8}pYkTN|6)i?AD0`!kBU z6!E+3=^q9Ykq!2CmZ%pl>%^-tjbYnpJv}4%{%+S?*Ze`lHz&RDm+p)nlE=J%oo{wf zcMXOz?YKzz%`e}mI(Ar7j6*W@cie*^ zHWiso;eXK4^zHyjwP2U@cot4YX=W8#=&+=5*vqEN2Z=?4aCJhw$!?v&wxg=}-MI5& zV5at%pZo~4IyDE`7A76hyW2VtvO1^h$n7F~EK`2j0K_qvgiw0V$wD?3)9T_LVO1xf zCuL+z-U-a;&+vj|zv`v3H}Y6Qrl^t0OquX=^%wA9o}tx`N{e#Q+e(6ac`B$u4|_bp zC36kWtA+Msrp%;BE7o3nqwgznd(=n5VN2o{kB8YGq}w{I{VZ+!lF-3lqbtjC3*iQ+ zs#u7)lCi8{sW)a7%*lvj|$i-j|PH5zP^6Tm$(c}4OCA)r@LS6=B z5{564G5cU(X#T|f&6f_9S2~O%c3wR!P?AiP_7Pa@I`9R2u#aN(GVE)dX4h&c1*TO| zB6GbvST@)Uw%L@6TJ8RD)Z2dm^)dSA+rdR_0LAa^KcrgYKfaPS>5VPN^iq-xvGg&8 zFcZzpiilfn;?uu;c`v70t(x3mofH0YJmUk@ReMQ$uSVt;f^vXn*h4q~M=h2eF4ENT zeHsmSxmDw>r^rgZF@0>w;f5>m_Z>RSTI$8z$w4W1dvh+ilwD~$zw}wknPK*-9>+br zJD9pNvyXgs`L+koC5+1ZW(XD<9=#IhIT|N1kc3r)+($w&L!WavlTTrv&MHoO4@N!& z++`$vzC-XAF(Fy6lW(R2B?1B@M+}BI0hE}=9nDvKHEL=2|6$suX!axkHX}Eb;_dxl ztH6y_kuUvIPnE*lf9pZ|X%C~VIp%Qt&KlxmgVQHtr2VK}I+dJi0bcus-QfcVcQCnu zygA$3u27xuBYQ7pDo`m^@6}4NMTTwIm@YIPyP7mU_-#Az-k$cOe(sIr5+H+C3x!71 ztujmrGF{0LQAr&RZMl>X&Me-t5?(ipRAfo5c5$fsESjG*9G_a3iIO$Ip2j?Y1biKH zqN%PX*H{nw7qRCU*z?&>f)buNbxPhKq~PR#*4NxHaDVUc>Iwz;eok+H9G@q+ZY#@R z@%%#$XuqNds5tJ!yQ9_-AHff+ z*4rW0Ta&E5p2;}?;g0bM|GDKGSz&6ihy;k>Y!hT%U3Ou#Io=NURJE-~u{Fa#Cf+t! zsW`zMHnjttx0hSl3LbTt_a9ea_v|gfQqTuV`28=GNWJU!AmBqOU*y40yf{SXNCBNR z%!GQHKul&89m`sN_XIX%RH6C0YSMfTj=Ur7^P$3HN*7W=a=FP7N(#KyFw&>4Ld%CD zUwFlRZFyX9jVG0neiW17$ALZ*n-x)b^~XBr4Sve@>Zr)CqT(EL?)ubVWewd2-<7F3 zM4JPr85r%M+e1TP>#w}d6sx=l4i=EVO&Tf2c8WoX6}*RKGo_HR3*=r88PNw3l6RJ3 zAzTW0a!>)&I_#k;214Bbi=iLgCXN*Re+=CRb#=GD&65#7v_E-(9{LT_{M6skSb80j zebsm=XAYM7N#9vsJtSj!u9E}c1=-ejw561RIL%HZ=%z`T>yaU9P#dmDjjy|8t8!aL zY41ICURQ^e>13A|!O#X~Tvt5V1-Q_!Kiwu(;&8 ziGLI5yf^ULap8XyduD%YK#_m6BdJwh3fRbsCgH{@;=PMoiu$Rqcg69ahDhm_Cpwz; zO@))T3vxrHz_N&BOhnuqY`CrQy#LYJ9On!fEWIFfa%4~OrO9de7U5K~^)vTPL-+DK zLA(av>QYds%$1%vyK|Kg^PS&z)ZMa@K{WNXpZqhiHgcZ3_(>@IE1E1s3) zRZPzH%g;>BCb&mGpv5`X1bn^=2DH)xSQ{eSPxe4ljzijZiCQ|YRuwl zfSt-+!w$Y)gFXni|2xEp@<096UPl5xs1qr~eW)`zhhw4m!any`t~bf$fOUP^t}D4K zK-fi?mQw6;Gh}Nf7ed%9s5h!c{Q1r17?P%^6;LlXIK{K9dA_s4;#wf*$WhEa=d!QI z-QcX0m9OEsHBVFB1;0{+HwOp}6bZsXo>%9wB7%#3^Y3p*xqn=|4mq~)Q`19zDWO&i`qLOf`40;nEeFvz=p%^RjT{NKyhJe zvdU;sRYMnlL2yPFwEN3Q&lK%4mcEO9Is`-C^@|9vw2 z*IsAhs|!H1newkEvl0}y#5=q}$Xu{qf+REFj0?OKwIP;oM+l4tQPKF>*dL<_pFj0ZB#SKZ3c-F&Q(7}di}vRddWVzZWo1%*se(bk)ejI zJGBn409yh+ERc|)oN@NOW)=&biM1Jx(ph_Ng>CBx59UF1haDdT6!R6H_D2fz+H*(w zmr#t3+PkMsvOTP$x7=J#PVej3`$v#M<87*f9C|M9==_my3B|vKoL$_(7aQGX33`Smqr4S_(FdXZZ^SrifMUZ!D6UXBz%=a=FMUJYpX$qWGqyS2yhE$pifQ~B?#Elg zTE$A&qF=xis^sY3PLzIkPgVG!F9Zny$xpP|Kx+ z2i&vcWEyu0Qvdw=1?k&*3rk7^_SD~oPhNeLHH%Z+WI@+7Ix?63QX+Pb5nquYeQ62_<4=|ugKayl*PmMqbF9pl};hG9CFB1LoYi;i~I#8}gvMmEEVIGL@ zUKwx${$VKmv5$My27R)iwQ3-+0`NgB5SdMVwf~7(tzh$Ooiw|3ylK-UhCe%7ypDZe z-t2dNB@?{AJ)7*nk$cU#^)&dzLzP-rkycx)wOOq*9y|Vfo-OBF#M3Kg1;L8gSo0!@ zSE|=Y-l@ffbWeJyR73J!Y_&6)wvKgl=s3igZ);5v*^0H3$K{laAz?{j4aC3#P5k{N-#kE2;{D*yDcCDHGB}o@Z zxZII-6Ej=;g{$wgnt+@0=gj*~UU4DdY#`uhrephHZ7Mg%^Z8_MDog8UpY7uWDL9DM zW}eP{dR9LY#r>=EAQdL6mFX`#afKdttEq2S_!oFsEu?Lc^&) zB}&uTP%jO=rTg5loD;@kzQ6iz+xtp<{1i5h<@lOg-l>*JAe}N+>reT)NUMnqqG=p> zPN3pAnWEbNmE({Hd3jvG{C?#f>1l#2q4bZhmtt-3OQ7`N>H+kt+>al_Yo&jVmKuK2 zhmQTbZTxENK&c@eI&-=AscU)i>d_j0bVP++?Rd2Ekj473 zA4P(E=e=N7%;~#r-jnCazcNMdctVSkCKHZFqv_gzaGbVuGGCe5n?E=e8WlR!A{pqx zzhpq1ZnpEwlx<(D=cV_*wKsW%1TWmQa{x;*ia#hERr-N6-HcFb0VOIWf^2KP{C;*?xIk`_r+2ov4COflp1X3KV!Oyp4H?jYdB+B907-m*;}eK%~7{OB>rHFaY-_2IoMicgu)%o!~%w%*Mjpj*~m4ney6*K9&n`6rm0 z`*yFfr$ww$=a(b(N83fN;B<^9R5m28m}xYA$_5MGr$povXpXvje5sM%u`l4t5VICd zLt6H!Z$?^=d-;H&@20j2pqFbxh6WA3a6{CKDUaqJfByqOA5;efnbJe z2MSguK1PRpx^DK2|N7JNUXBJfyZ>sqKqv%T+?x^OPws40jAxDSo41_s+BSZ@S}|4p zZo};IjXg{KiN`v$sOHcJ2Wmhc)(Gb`wsh@$48Y(FQwopFKQtKN*;1B3HQqaix9LFd z|K6V*$c&rCg)L`U3f%?q?UwP4i*mkb!pAVh$CVs^+$Z|2#?_IFA&$oe|2&!llUcE)Eu5VYdON!H zV>Qf<%k5tbpS?fmh&QtLDF*mdihA#}>cCx^R(Y<$EczS?6>1GFhw?o2J0HtlZKR+; zpiuqbX@ceZY;Y@6Gse>pfro;BE{*^73m@Tw)O0@F=Ak}v!^$y5qfPgR+fh_ye8`fa zUCqm!%EB@=h9Gac!vxPf%I!Foa6GGFSV-8Vryj?A8rt0q*o`jY2p^t2Kbs1Z`yO1| zA9CD(S{UO|7jqsv0jH(&wIb=}-Y?5!74xUJnWBU1Qt_Hg6o zgOZuMEjis7CXMhJ7YX@Om>%TV6aGoF&a~66lnkkoAO}3#l6da34b(bT<-}=O0Y+{x zs8b`$+N$8&Dtx^3ha|-W6awG6fumcg696neAyP@_9nJRxr18i@8Jhp&VQs&>7o(I#XA<2OSgqs)c_*@$8r!FnhLH5PCY^6G z)#mrE!HYMuAb(Q~5X$(haMHovol9_=9-#0vRyvv$-RB5e_4nO*9@GE)pXA=Tmk&=z z2;R>V+hmff5BIXP>wf}=cWU*P7!0kl*3r-VE4On0HHOeA7B{FBHYn|v5?kqCN{*UsrzCYqq8!e39IcL5*WwL>wI3sL zp$`ce=%kKlg+ndMpd>EWR?gQNY#cZHQL`LC!LOPA*U~5s%G`>l@!;p#lSnY2qe-5xJBx0K=wM_yHOs#bnI-cbC)LKj>{;8$~7rZ~jZunm-Ip=C%DUGmL(?7Z&NPxwMy0-s40V{Yk*m zW(x#O3d8G@6&6!#WR$6skB6>3x->i%L{)|3KrSA=B8xi$5dqSB&9DL&+29F_q@9i= zEG;-D)N<6~mfk+@QdV-=m1y1}){(0_nwJN8b}|7A!bgPvrYAmiBmwjbo;#B+os*Lr z$u}_=by^j88%&qvRJf7dC)FbOW#=a9*~8}`b6eGoX1`Ido-88ZQtKbxeyayT;U&+d zNRv(XFNo0mGaV+b7rvYMH#|t8b-b?phOOiL)|6{ID%+pNa?yyTIidX2R+etdpD~#| z1hu)qXh&z|JbmNT=3Pp!Ah+LQ6Wn?%W!9*Oc&D!wZ@zbsjaq)*3(G`>X(ASiRN-`0GzWcCZo94sIPXKm{A}&Z4;#r|wYKLDA7hkPU(dnr4coaUd z{PwmM#klLqsL)8AVhcomB4aPYGqOqd%r%>otDrx|c|}n^DUp??L1x2_HUL z4=|wS-8$7?av)N|W;;7QQ0BsNmg~Na{DL4+2|X6zTb3vNrWrQEGoon?v=t+yA`TM6 zkJ9wFo9nM8sBasgEv-Q_qgRVF7X^dZJ+Ctt^UX}sxeGD+G4@6o3??`(XY9}#%#lkv zT^pXhT|dZ?T~+I0J}ekwd2-*RXdBnx5aLXS8uW`2!W5Y^gF|sHOCF!FT_*TC{N+NM zI`in&a_P|*sJ2Ch9wS$OZ!stNN|?QriJ_BKsO$Q0yG(LNfyA4=R{H~cqGhNm z>FdX*?v6ZV|Lqp;*fz@5Xn|j-$tzl$3R*rjo)4)8d2`!4Uw>j3 zz9cnjq#BFc)8Hv%h^t_j9fHcrDKBE|c3)(y9s@4t)tHROonx$9$nW7<#G}hk z3z7bsB$1bjmU zDYF<&7XKGJwYpDEIA(#b$UiF@vKQ1lKact0PtG<$xd}#p06A-69ALvWEPi`%K&OGReUr% zuTFhPR(I9X8g_c32s_A3lQi8K;l_lnl0{gzUZt9TOBs7Wnqmn zq#xR_VY2~iQ^jog^_l|EtMi$N4Y!7*lJNmQ^D=4by$9~lSe4PzX|y7W4M-$iwK7*KNGws)@xu8_+g9^>NG9>rnn?!`6ngAr2U>56Vv@qqraZ~H z8kmmrSmxc$Ftgn&@>nl7^AyOia`Mh$w}NKD=T~FN@6_rtT&dDOszR$nruQtOLU`_0 zTNtzpAMZC~z^pUKA-5C+XYsX*r z)K#>At+h;(VaaWowmCMLv%`tysq5k8P3k7Z61c8iX3w$~P~b}hv^ajg8)(s`F`=D#VX6E0<`|&sSMv7PslVpx7gK|u@ETm`Z^%5{x5TJM8)y}=S*Uo zGhHC39B1^3`j@5b2q%nSH9PbKf-iCl@t~TX^_RX6=AaB!6Mcg3mQcLy|0)&Z%_#LU zb2IR3VrxfVlO7(rTWz+f++39Hrb>|h+sk$SbX{MOIvWttI*t_U&~p&qqU7y_h_;ai zhovH=YCb-4r_z-ZCKoMTV##L>YMw#h6uztGd~Kp;+TzkXo*~sn4}sE^RvSIhsp5)y z*DRD3@&gw9NPW&cy#URTl3bmy5vrUxD+}(n!W}4m{&-%H4SaCeOi`0Z+exmJqv;(3 zWdMbNJn+su9Yo*Myi%(h<)JC!l&qfB)Y5}MVSRYVz9eC1EOehBXWijoA!W*R5^zR} zW&CJkwp7R&j+=n#nU+EVH83v&iAnb-9oJH_Bc3uHZttna^qO0@#2@>6zvY?)2{vTD z;^_S%QWC8kVa+tMlu{F`acG)2@79b_mkUWE-C=1$rFB~yJUmaL6r_x*6ehC-Rkgu^ z0&YI|%B@XAb<4BuXZ+0HfYyE7~&uuJzQ@wkfy>|=DX{#OM`BIk?HxFNOA1a7HuhufZCXE1Ms2X4_r#`_ZWGB&V?P#lEj7qpZ^!lRmzT%nZoz5?c|_1NEL9 zkVjr0Z0*tBThjj9!FxkZWn(I=X)JPX7&5)os@gg*NALdHE!4*RX1`<`8)3r`eOmwT zcXsX^X!57?D37u$lyXxPq9fJRu@G9>=NVxV7JO89&qG#&yZi{|-X8Bu*;1S5-5v-P5fVcl zJY@IpfOK$k+?&nhma*L-k(+7Cddthuj~y@fH1&W{Z*pP-=zQhc9r>BxuRILVu@=j z$=|;>O0n=3eXFDRB;GgU9&&@wrS33Qqkp{b_z_DMUX3|}b)c7maK^)nR%g1JZBguH9_%AJ z<4$k6i#XfAx~{%qc9PT&9(g%rGESa$M>rzriRzWIXc<0D65EAT!1s$5oE~j@d*k-_ z>h^Yb?{H20)7)0ctr6aPGwwpVdI$kuiCXg@){HREAu0MiuobMYosjqeGX9pRFGiIu zIKzWDY`*wV3!14JJNteIr#ACoH&p!*ile@YR+fC<21i@^%fo`+fbWKfgpCvXw!{mH z3FTYCDJSP8EiHF^vt!`SwIuo+M)CW1JcniTpG8f;+8%sUv>s@?b;D9a^dqUl`W3o+ z=Nh|zw_@v;7Fyd^oH$bHSSSxWb!BVx;ir;Y%R7VWz7vw6pXQ_@BF6>@6P=K9N-2iN zc+U0>J;~OS1wfaW#H%(WIk%50Iem&tuph15+DOac@l`P`3gav?k`O)ymr6L>@`RLM zDLAHw2Nj&u3_S9*PyPwK?0XnW$iYs3WBDTLfy%hyxXibka9;HV9C#JsgRW64j|@Zs z&zT3u3G$TjuK~V7EoEyNLKaumX|U1kOB`q3?`3Q6|6+|q{EAWI`0L-;WQqw8lMEy_ zJ9C=-<%J zrb=_Ofxse6H}6|ayF6R0AvE(6&qislZZOW&7jcFTa!w&l^Ks4?s*a?UlBOAGLu&<%OUhG%S@Q?Bu-o%TH!}@-pZIj*bA>;$%EnDb4O_r z>>%;ARsnDLkC|L8!^{-OGbltUCl#WwE38T>TQj5_Ioo`dm^pLe zP{(_E4oq(Yge(6LnNkANAbNd9=;&E_^$g6b}6F$wkV5VgX6M`@W++X1#+R^ zr=^IY0D7S*Gcp0qS}nmGDiM+6rjnXhCqF|7{ui_~cVf#6C_(pia8PpW_bZADdS6^= z&kSk|5B;Ziw=Q3(*4$Rq8Ev<`TB#YMv)9jWl%=F7rA1Jd z({$Cu?Z!n2WNUTOZ^b!O-8?1kY%=Ycg=TLNodj=u2+IUBvz2oieuf`EOlpwAEPpb% z+vZ5EiX{ZmHkBc@?enFo^|7BDv|@a&aaDb77yS17UiN9B1Qm5ZuEjg zU3vBa>FUFd*PfYxSMa1ZJWc=T?R=`;TIDc_zQZ+?>i)^Q2vZh;E27UC zbr+?r>>1obk-9&L7X#KRjy4`OOy_A$+wbtM+XfZsp~t@0z>ix{`XZw(`3ph!S-66x zPFeEhiLjGjBo)W;%MqoPqu<1*QqA-1r*w`bnzBeP9+k!GiOL^)jI{e|*(3UDeLFH2 zp1TuT(K@yz$QoWot3+ta;|=<< zou=pUw{Y&tHTh{eRNK;#QVeF8LkY!5}$wDc&FY^;QbB{gW0QRd4KM zZe%OHLSY`7MjT_Bvq<2QktIrpq4h%KYl6^n%ZB;|*BO8Q>9?c7nH#s;5-B_;S_%Rw zgi)%86$3i|7O57hS_cs}!RMHB1)oO4sHj)NXZrHm^K;(C!wU+~Yqr{A8K^$hdR`Wr zs7%Zkv8U0X7XwuXx2zz*>JpmGG2TEt=wv;HXZwOMryqSoo#fI`{G1SR6KnYfO(>mH zsfbU*i(28CTWbbOLPfcf|2WUIyrBzUyo(XJS~=aTBU}2~j)1W-J%)9CcMRqZmi9aG zzun(X1aS*^LQ#;RP5Q8wN}{;YdC3^ORG{;_HnR$yOMfbtCX*r0JMsd_(&{C`?|7=J zcUmeNvvFLqv#dUv)OTt&51u$tR1F-%2?xy&w-Cb!%aN_N=4irhPxQm2ciq`OL?b1F z@b%;0Vgk)QmU;x$*pc#@&a@!&ih1`k>VBOZ&y>k=Pi5q9A>uri&BFbcv~pP-)<$Nu zZsWLey=evae6S^K@l|GMr7m@bTIIgMH?w0B24o^|)eaF5*!D+wA%&_F-#fiOoyoD( zvC9&?EFycHTIm6Y@t~?P{IL!Gpq)DJJ6aj~zFB3fxD`iZ+=HxeQLb{Sx4j?uTmxxF z&B{V8z@f0^f1jqk$l3F*Qw)|RRP0WhH@3JWYvpdA`6qi{+ms+C)iS$q=PRB%yt%6e z$l@yIER?4&oI3!x==2R^?YNHrCjTdKwd8Wg&X+QW__bo$@s34~d*qf~Dd!0091owg z5}jA`K3bW{E@P7n+wMJEIdZJt_s);TS*C;pR>4htsD`kM@CCy7N`b8AH$Z_m$IfnS zR?tJxAU8_Mx$%SB^#oTtYPpJs%Sn{>S?4T0qemz|=4{g5o?SlJhFjE|<4tcK&N0X9 zSX}!p(2zC+oH+a*h}?S=7v3l%-7}FPoo{ZtMt?+^g5xoZ{=2q0w|p{5E0TRQXy`^- zv7&}6?2aYCl?GAs^s#ca3HSIFcP}Aw_YH+klODV@%yx%oj@?tn`{2|^BL;7|xPW(Y zl3Fcxms6Q;KgZFyG<8S1_5nNMz+`UrTs3WW zfE{8iY;W^QigX*US#*t+*@G61=)6&8zuA{{!k?X_d2m0)**-6e;7&ZsI3g-_?&KO4 zz#Fg96ZTIt{n{bieHQ+;uv2U%VsZx?T!{<*N7J?AVVnyY|yLhC%Y|I zlWJif5IYewj?^P*3FOs>Qq{;w{JF&rOJeHu_}H3e4q2a9GA(+MwlmT&GW^n!_56!H z8Qvhp^SG9orxdWFu)HqPNVO<$_Do|S45)gk-678*XEk|k!R9}yji5bh`$YK6LBB{# z5wmx^Nz3x+^wu3uh)z~PTuwr=)fcJc5Gjp~BB}j9-n;>3*p7>bq!kvRx}OQEhwFVA zx9UFfo6w83WD&dnvc6A0r-0?8ij#EWy=;NDoyNN@e*Q2m6|d~;PD*Y|aU9Bkhoq8^ zmY)>o@wJ>MSa_wU{Q9%jhCV+aQ?#?yhj{+s%FI>C{-F~gVkdG6CJ`sPGKtP8PM@n5 zqsu}sp!@`D;%_2-ORt$m2E0DFXDGPSqrwYa8z=m+BW}}lxKr_}drUQrQK$a}K z7w=G-lWubI&&xA^UB*na|s7eQ!CQit))AXBA?` zoNVUWP|7tkd%YUhU*dtfU%>T&2}otl!+Ey7UkaP$UQL~x(3I|B6t&8#DUy+?)nf6^ zS@fb>Fk5_SUS5V^E7r57yR3w??k?PE^~?S*P8bz0ojkHA67qCgE ztz*647U2md7gNZ{?2t?wDK+y5`d8tNeGz^b&zWpt;P|cvk?B@%v?$YNfyP2=>q*AUXZ@d-UNOOs{*5d!5jH{Esclf0Ua`L&3iK^?ugeN@cfTe6ez}E{E!P=)`xKU(Kd5;U~ zDmKj47%zM`k;MK4}Aq zSk;%hS=wT?|}#j!9# zSA2F>A0$Ahf|!N=RcL(eCM(G5W&FMLzRkndaH?{(^zFg%WP(4Fcuf>6qUYJQ) z>|cs#UBwwGb4w5n4QRX8LA4=Sy{g}3kNF>%IS&2tYepKpfeLSpuEdlucE&RG*A=_~ zH`c`W1rrqp$75Em7lU(ThLi5xQFMb_8{z6f8C74twadv}l@I3HcpDoc@RPfMC8mn> z4=HRGFIJ0fYS&b##SOsPgCGnufAWE#Y4k&t!{Vu#U0WQv1%{1)llvJw3A9 zhqFZx^ONsp-Fg{Ol$6pEdAw z2j*~IMzXW9gpQ3B6K%Te22UK5!xkbELF-erV%{96Lgwuyp{-Eja6%l+?1^+}4yW?? z9yTNw;uB%^32B?-o{pYUpK-eF^)gQc3eeNbk^-R{ppyP?BGNwA6HFDp0AT4c-={z?)im~_7@eLeTc zo63&`TlB*yf&MZTy@qtM+st7FqnY48Aambt$tgways>mvMg@A!!WzytLAcvPUA#I- zF^%qb5o7xx%W?=$u$qa(xV*hcVKUYs{m1Ik3b{=EYPy&# z`qYN}$g{^;HFrk}cW-g=wEpBVR_6BJ5~ASbuV$Upw;Q|TqrM0B<80o4Syat#J{T%z zeY}E!b&pu#4T*kX9FV9-GA(`WJ!{vwh&JoV8s6%EXY(uQsYEyRYT#qefTdo2z?KJL zGA0mqnAW=wVm^Lv#TlShOW#$$Ap8^WI!jzUGG`U`Y!n<^Luf#V$-V(muwUKD!_+OZ z`KO%jxR@!7%jr`y6~6O=8=U{yQ}J(CUTx++{!sykA9Kx#;3LQ01xdf_! zza*S3=apZ*H~_=wvy|P-zbrZTy;J8~C$cNc%`jrwl|ci$V|(l_4K4nwQO(&f&Fxb{ zDluMRnYCY0mqipjES-HQ<;-x+4otD3?xW~)>6}Tcyw}en zo+*zMXGy$|sd+c{adQf9L=sg(;#RDz3n{^{hpwN0$EzqQVi7k&xrcSB&xFQWti{n2 znPW{euorI&STjbEF_U8Fd*2AMJ=6Y6@iD7R%ZiViUZhQTceRA`?XGiOmu9%P?uw(t z&AX#WB{nE8o2!2@p|g_mIP&BAZ2=mxL$9@v=NF-oRfRunkN(DOrn<7sQf5FWQ9RO*IYgIQX6cv8bP~6tpSND0h7M~eM!7(I!Y+) zl>D1FB_RS+R%YT9MQrU^=i3PmuXzD+kD1E;@yC9k?{I707RclS4&spiQM3;wDdUfx zzo}0e%t;ueoe2P=CP29Z0hi_*iqZMsf{+Su}d$6J6lWNDKUkny?`u<(mXO%)7H&`k=Ndm_lry-5ZDL63nasf-Vw^v_L8 zQc!^}jCjEGlRU#!vfKb+B}@}Qw10*GlHj|{{%=)&bd*5E4DlTB;dkI34WPha_XmhF z*o-*Wo(x{WW1G{x@$pf#8~^~#U_5h#`uFG?f{XyLo5DW`wv<$$I(PxKMqxilK?eX) ztglROv9FNx#ezvfmzWc})tsgzvirEB;y_?T*A` + + + + + Wavelets Demo + + + + + + + +
+
+ +
+

© Rafat Hussain 2015

+
+ +
+ + + + + + + + + + + + + diff --git a/js/app.js b/js/app.js new file mode 100644 index 0000000..a13b934 --- /dev/null +++ b/js/app.js @@ -0,0 +1,28 @@ +/* + * Please see the included README.md file for license terms and conditions. + */ + + +// This file is a suggested starting place for your code. +// It is completely optional and not required. +// Note the reference that includes it in the index.html file. + + +/*jslint browser:true, devel:true, white:true, vars:true */ +/*global $:false, intel:false app:false, dev:false, cordova:false */ + + + +// This file contains your event handlers, the center of your application. +// NOTE: see app.initEvents() in init-app.js for event handler initialization code. + +// function myEventHandler() { +// "use strict" ; +// // ...event handler code here... +// } + + +// ...additional event handlers here... + +var wave = {}; + diff --git a/js/dygraph-combined-dev.js b/js/dygraph-combined-dev.js new file mode 100644 index 0000000..79fa0b9 --- /dev/null +++ b/js/dygraph-combined-dev.js @@ -0,0 +1,12127 @@ +/*! @license Copyright 2014 Dan Vanderkam (danvdk@gmail.com) MIT-licensed (http://opensource.org/licenses/MIT) */ +// Console-polyfill. MIT license. +// https://github.com/paulmillr/console-polyfill +// Make it safe to do console.log() always. +(function(con) { + 'use strict'; + var prop, method; + var empty = {}; + var dummy = function() {}; + var properties = 'memory'.split(','); + var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' + + 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' + + 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(','); + while (prop = properties.pop()) con[prop] = con[prop] || empty; + while (method = methods.pop()) con[method] = con[method] || dummy; +})(this.console = this.console || {}); // Using `this` for web workers. +/** + * @license + * Copyright 2012 Dan Vanderkam (danvdk@gmail.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +(function() { +'use strict'; + +/** + * @fileoverview Adds support for dashed lines to the HTML5 canvas. + * + * Usage: + * var ctx = canvas.getContext("2d"); + * ctx.installPattern([10, 5]) // draw 10 pixels, skip 5 pixels, repeat. + * ctx.beginPath(); + * ctx.moveTo(100, 100); // start the first line segment. + * ctx.lineTo(150, 200); + * ctx.lineTo(200, 100); + * ctx.moveTo(300, 150); // start a second, unconnected line + * ctx.lineTo(400, 250); + * ... + * ctx.stroke(); // draw the dashed line. + * ctx.uninstallPattern(); + * + * This is designed to leave the canvas untouched when it's not used. + * If you never install a pattern, or call uninstallPattern(), then the canvas + * will be exactly as it would have if you'd never used this library. The only + * difference from the standard canvas will be the "installPattern" method of + * the drawing context. + */ + +/** + * Change the stroking style of the canvas drawing context from a solid line to + * a pattern (e.g. dashes, dash-dot-dash, etc.) + * + * Once you've installed the pattern, you can draw with it by using the + * beginPath(), moveTo(), lineTo() and stroke() method calls. Note that some + * more advanced methods (e.g. quadraticCurveTo() and bezierCurveTo()) are not + * supported. See file overview for a working example. + * + * Side effects of calling this method include adding an "isPatternInstalled" + * property and "uninstallPattern" method to this particular canvas context. + * You must call uninstallPattern() before calling installPattern() again. + * + * @param {Array.} pattern A description of the stroke pattern. Even + * indices indicate a draw and odd indices indicate a gap (in pixels). The + * array should have a even length as any odd lengthed array could be expressed + * as a smaller even length array. + */ +CanvasRenderingContext2D.prototype.installPattern = function(pattern) { + if (typeof(this.isPatternInstalled) !== 'undefined') { + throw "Must un-install old line pattern before installing a new one."; + } + this.isPatternInstalled = true; + + var dashedLineToHistory = [0, 0]; + + // list of connected line segements: + // [ [x1, y1], ..., [xn, yn] ], [ [x1, y1], ..., [xn, yn] ] + var segments = []; + + // Stash away copies of the unmodified line-drawing functions. + var realBeginPath = this.beginPath; + var realLineTo = this.lineTo; + var realMoveTo = this.moveTo; + var realStroke = this.stroke; + + /** @type {function()|undefined} */ + this.uninstallPattern = function() { + this.beginPath = realBeginPath; + this.lineTo = realLineTo; + this.moveTo = realMoveTo; + this.stroke = realStroke; + this.uninstallPattern = undefined; + this.isPatternInstalled = undefined; + }; + + // Keep our own copies of the line segments as they're drawn. + this.beginPath = function() { + segments = []; + realBeginPath.call(this); + }; + this.moveTo = function(x, y) { + segments.push([[x, y]]); + realMoveTo.call(this, x, y); + }; + this.lineTo = function(x, y) { + var last = segments[segments.length - 1]; + last.push([x, y]); + }; + + this.stroke = function() { + if (segments.length === 0) { + // Maybe the user is drawing something other than a line. + // TODO(danvk): test this case. + realStroke.call(this); + return; + } + + for (var i = 0; i < segments.length; i++) { + var seg = segments[i]; + var x1 = seg[0][0], y1 = seg[0][1]; + for (var j = 1; j < seg.length; j++) { + // Draw a dashed line from (x1, y1) - (x2, y2) + var x2 = seg[j][0], y2 = seg[j][1]; + this.save(); + + // Calculate transformation parameters + var dx = (x2-x1); + var dy = (y2-y1); + var len = Math.sqrt(dx*dx + dy*dy); + var rot = Math.atan2(dy, dx); + + // Set transformation + this.translate(x1, y1); + realMoveTo.call(this, 0, 0); + this.rotate(rot); + + // Set last pattern index we used for this pattern. + var patternIndex = dashedLineToHistory[0]; + var x = 0; + while (len > x) { + // Get the length of the pattern segment we are dealing with. + var segment = pattern[patternIndex]; + // If our last draw didn't complete the pattern segment all the way + // we will try to finish it. Otherwise we will try to do the whole + // segment. + if (dashedLineToHistory[1]) { + x += dashedLineToHistory[1]; + } else { + x += segment; + } + + if (x > len) { + // We were unable to complete this pattern index all the way, keep + // where we are the history so our next draw continues where we + // left off in the pattern. + dashedLineToHistory = [patternIndex, x-len]; + x = len; + } else { + // We completed this patternIndex, we put in the history that we + // are on the beginning of the next segment. + dashedLineToHistory = [(patternIndex+1)%pattern.length, 0]; + } + + // We do a line on a even pattern index and just move on a odd + // pattern index. The move is the empty space in the dash. + if (patternIndex % 2 === 0) { + realLineTo.call(this, x, 0); + } else { + realMoveTo.call(this, x, 0); + } + + // If we are not done, next loop process the next pattern segment, or + // the first segment again if we are at the end of the pattern. + patternIndex = (patternIndex+1) % pattern.length; + } + + this.restore(); + x1 = x2; + y1 = y2; + } + } + realStroke.call(this); + segments = []; + }; +}; + +/** + * Removes the previously-installed pattern. + * You must call installPattern() before calling this. You can install at most + * one pattern at a time--there is no pattern stack. + */ +CanvasRenderingContext2D.prototype.uninstallPattern = function() { + // This will be replaced by a non-error version when a pattern is installed. + throw "Must install a line pattern before uninstalling it."; +}; + +})(); +/** + * @license + * Copyright 2011 Dan Vanderkam (danvdk@gmail.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +/** + * @fileoverview DygraphOptions is responsible for parsing and returning information about options. + * + * Still tightly coupled to Dygraphs, we could remove some of that, you know. + */ + +var DygraphOptions = (function() { +/*jshint strict:false */ + +// For "production" code, this gets set to false by uglifyjs. +// Need to define it outside of "use strict", hence the nested IIFEs. +if (typeof(DEBUG) === 'undefined') DEBUG=true; + +return (function() { + +// TODO: remove this jshint directive & fix the warnings. +/*jshint sub:true */ +/*global Dygraph:false */ +"use strict"; + +/* + * Interesting member variables: (REMOVING THIS LIST AS I CLOSURIZE) + * global_ - global attributes (common among all graphs, AIUI) + * user - attributes set by the user + * series_ - { seriesName -> { idx, yAxis, options }} + */ + +/** + * This parses attributes into an object that can be easily queried. + * + * It doesn't necessarily mean that all options are available, specifically + * if labels are not yet available, since those drive details of the per-series + * and per-axis options. + * + * @param {Dygraph} dygraph The chart to which these options belong. + * @constructor + */ +var DygraphOptions = function(dygraph) { + /** + * The dygraph. + * @type {!Dygraph} + */ + this.dygraph_ = dygraph; + + /** + * Array of axis index to { series : [ series names ] , options : { axis-specific options. } + * @type {Array.<{series : Array., options : Object}>} @private + */ + this.yAxes_ = []; + + /** + * Contains x-axis specific options, which are stored in the options key. + * This matches the yAxes_ object structure (by being a dictionary with an + * options element) allowing for shared code. + * @type {options: Object} @private + */ + this.xAxis_ = {}; + this.series_ = {}; + + // Once these two objects are initialized, you can call get(); + this.global_ = this.dygraph_.attrs_; + this.user_ = this.dygraph_.user_attrs_ || {}; + + /** + * A list of series in columnar order. + * @type {Array.} + */ + this.labels_ = []; + + this.highlightSeries_ = this.get("highlightSeriesOpts") || {}; + this.reparseSeries(); +}; + +/** + * Not optimal, but does the trick when you're only using two axes. + * If we move to more axes, this can just become a function. + * + * @type {Object.} + * @private + */ +DygraphOptions.AXIS_STRING_MAPPINGS_ = { + 'y' : 0, + 'Y' : 0, + 'y1' : 0, + 'Y1' : 0, + 'y2' : 1, + 'Y2' : 1 +}; + +/** + * @param {string|number} axis + * @private + */ +DygraphOptions.axisToIndex_ = function(axis) { + if (typeof(axis) == "string") { + if (DygraphOptions.AXIS_STRING_MAPPINGS_.hasOwnProperty(axis)) { + return DygraphOptions.AXIS_STRING_MAPPINGS_[axis]; + } + throw "Unknown axis : " + axis; + } + if (typeof(axis) == "number") { + if (axis === 0 || axis === 1) { + return axis; + } + throw "Dygraphs only supports two y-axes, indexed from 0-1."; + } + if (axis) { + throw "Unknown axis : " + axis; + } + // No axis specification means axis 0. + return 0; +}; + +/** + * Reparses options that are all related to series. This typically occurs when + * options are either updated, or source data has been made available. + * + * TODO(konigsberg): The method name is kind of weak; fix. + */ +DygraphOptions.prototype.reparseSeries = function() { + var labels = this.get("labels"); + if (!labels) { + return; // -- can't do more for now, will parse after getting the labels. + } + + this.labels_ = labels.slice(1); + + this.yAxes_ = [ { series : [], options : {}} ]; // Always one axis at least. + this.xAxis_ = { options : {} }; + this.series_ = {}; + + // Traditionally, per-series options were specified right up there with the options. For instance + // { + // labels: [ "X", "foo", "bar" ], + // pointSize: 3, + // foo : {}, // options for foo + // bar : {} // options for bar + // } + // + // Moving forward, series really should be specified in the series element, separating them. + // like so: + // + // { + // labels: [ "X", "foo", "bar" ], + // pointSize: 3, + // series : { + // foo : {}, // options for foo + // bar : {} // options for bar + // } + // } + // + // So, if series is found, it's expected to contain per-series data, otherwise we fall + // back. + var oldStyleSeries = !this.user_["series"]; + + if (oldStyleSeries) { + var axisId = 0; // 0-offset; there's always one. + // Go through once, add all the series, and for those with {} axis options, add a new axis. + for (var idx = 0; idx < this.labels_.length; idx++) { + var seriesName = this.labels_[idx]; + + var optionsForSeries = this.user_[seriesName] || {}; + + var yAxis = 0; + var axis = optionsForSeries["axis"]; + if (typeof(axis) == 'object') { + yAxis = ++axisId; + this.yAxes_[yAxis] = { series : [ seriesName ], options : axis }; + } + + // Associate series without axis options with axis 0. + if (!axis) { // undefined + this.yAxes_[0].series.push(seriesName); + } + + this.series_[seriesName] = { idx: idx, yAxis: yAxis, options : optionsForSeries }; + } + + // Go through one more time and assign series to an axis defined by another + // series, e.g. { 'Y1: { axis: {} }, 'Y2': { axis: 'Y1' } } + for (var idx = 0; idx < this.labels_.length; idx++) { + var seriesName = this.labels_[idx]; + var optionsForSeries = this.series_[seriesName]["options"]; + var axis = optionsForSeries["axis"]; + + if (typeof(axis) == 'string') { + if (!this.series_.hasOwnProperty(axis)) { + console.error("Series " + seriesName + " wants to share a y-axis with " + + "series " + axis + ", which does not define its own axis."); + return; + } + var yAxis = this.series_[axis].yAxis; + this.series_[seriesName].yAxis = yAxis; + this.yAxes_[yAxis].series.push(seriesName); + } + } + } else { + for (var idx = 0; idx < this.labels_.length; idx++) { + var seriesName = this.labels_[idx]; + var optionsForSeries = this.user_.series[seriesName] || {}; + var yAxis = DygraphOptions.axisToIndex_(optionsForSeries["axis"]); + + this.series_[seriesName] = { + idx: idx, + yAxis: yAxis, + options : optionsForSeries }; + + if (!this.yAxes_[yAxis]) { + this.yAxes_[yAxis] = { series : [ seriesName ], options : {} }; + } else { + this.yAxes_[yAxis].series.push(seriesName); + } + } + } + + var axis_opts = this.user_["axes"] || {}; + Dygraph.update(this.yAxes_[0].options, axis_opts["y"] || {}); + if (this.yAxes_.length > 1) { + Dygraph.update(this.yAxes_[1].options, axis_opts["y2"] || {}); + } + Dygraph.update(this.xAxis_.options, axis_opts["x"] || {}); + + if (DEBUG) this.validateOptions_(); +}; + +/** + * Get a global value. + * + * @param {string} name the name of the option. + */ +DygraphOptions.prototype.get = function(name) { + var result = this.getGlobalUser_(name); + if (result !== null) { + return result; + } + return this.getGlobalDefault_(name); +}; + +DygraphOptions.prototype.getGlobalUser_ = function(name) { + if (this.user_.hasOwnProperty(name)) { + return this.user_[name]; + } + return null; +}; + +DygraphOptions.prototype.getGlobalDefault_ = function(name) { + if (this.global_.hasOwnProperty(name)) { + return this.global_[name]; + } + if (Dygraph.DEFAULT_ATTRS.hasOwnProperty(name)) { + return Dygraph.DEFAULT_ATTRS[name]; + } + return null; +}; + +/** + * Get a value for a specific axis. If there is no specific value for the axis, + * the global value is returned. + * + * @param {string} name the name of the option. + * @param {string|number} axis the axis to search. Can be the string representation + * ("y", "y2") or the axis number (0, 1). + */ +DygraphOptions.prototype.getForAxis = function(name, axis) { + var axisIdx; + var axisString; + + // Since axis can be a number or a string, straighten everything out here. + if (typeof(axis) == 'number') { + axisIdx = axis; + axisString = axisIdx === 0 ? "y" : "y2"; + } else { + if (axis == "y1") { axis = "y"; } // Standardize on 'y'. Is this bad? I think so. + if (axis == "y") { + axisIdx = 0; + } else if (axis == "y2") { + axisIdx = 1; + } else if (axis == "x") { + axisIdx = -1; // simply a placeholder for below. + } else { + throw "Unknown axis " + axis; + } + axisString = axis; + } + + var userAxis = (axisIdx == -1) ? this.xAxis_ : this.yAxes_[axisIdx]; + + // Search the user-specified axis option first. + if (userAxis) { // This condition could be removed if we always set up this.yAxes_ for y2. + var axisOptions = userAxis.options; + if (axisOptions.hasOwnProperty(name)) { + return axisOptions[name]; + } + } + + // User-specified global options second. + // But, hack, ignore globally-specified 'logscale' for 'x' axis declaration. + if (!(axis === 'x' && name === 'logscale')) { + var result = this.getGlobalUser_(name); + if (result !== null) { + return result; + } + } + // Default axis options third. + var defaultAxisOptions = Dygraph.DEFAULT_ATTRS.axes[axisString]; + if (defaultAxisOptions.hasOwnProperty(name)) { + return defaultAxisOptions[name]; + } + + // Default global options last. + return this.getGlobalDefault_(name); +}; + +/** + * Get a value for a specific series. If there is no specific value for the series, + * the value for the axis is returned (and afterwards, the global value.) + * + * @param {string} name the name of the option. + * @param {string} series the series to search. + */ +DygraphOptions.prototype.getForSeries = function(name, series) { + // Honors indexes as series. + if (series === this.dygraph_.getHighlightSeries()) { + if (this.highlightSeries_.hasOwnProperty(name)) { + return this.highlightSeries_[name]; + } + } + + if (!this.series_.hasOwnProperty(series)) { + throw "Unknown series: " + series; + } + + var seriesObj = this.series_[series]; + var seriesOptions = seriesObj["options"]; + if (seriesOptions.hasOwnProperty(name)) { + return seriesOptions[name]; + } + + return this.getForAxis(name, seriesObj["yAxis"]); +}; + +/** + * Returns the number of y-axes on the chart. + * @return {number} the number of axes. + */ +DygraphOptions.prototype.numAxes = function() { + return this.yAxes_.length; +}; + +/** + * Return the y-axis for a given series, specified by name. + */ +DygraphOptions.prototype.axisForSeries = function(series) { + return this.series_[series].yAxis; +}; + +/** + * Returns the options for the specified axis. + */ +// TODO(konigsberg): this is y-axis specific. Support the x axis. +DygraphOptions.prototype.axisOptions = function(yAxis) { + return this.yAxes_[yAxis].options; +}; + +/** + * Return the series associated with an axis. + */ +DygraphOptions.prototype.seriesForAxis = function(yAxis) { + return this.yAxes_[yAxis].series; +}; + +/** + * Return the list of all series, in their columnar order. + */ +DygraphOptions.prototype.seriesNames = function() { + return this.labels_; +}; + +if (DEBUG) { + +/** + * Validate all options. + * This requires Dygraph.OPTIONS_REFERENCE, which is only available in debug builds. + * @private + */ +DygraphOptions.prototype.validateOptions_ = function() { + if (typeof Dygraph.OPTIONS_REFERENCE === 'undefined') { + throw 'Called validateOptions_ in prod build.'; + } + + var that = this; + var validateOption = function(optionName) { + if (!Dygraph.OPTIONS_REFERENCE[optionName]) { + that.warnInvalidOption_(optionName); + } + }; + + var optionsDicts = [this.xAxis_.options, + this.yAxes_[0].options, + this.yAxes_[1] && this.yAxes_[1].options, + this.global_, + this.user_, + this.highlightSeries_]; + var names = this.seriesNames(); + for (var i = 0; i < names.length; i++) { + var name = names[i]; + if (this.series_.hasOwnProperty(name)) { + optionsDicts.push(this.series_[name].options); + } + } + for (var i = 0; i < optionsDicts.length; i++) { + var dict = optionsDicts[i]; + if (!dict) continue; + for (var optionName in dict) { + if (dict.hasOwnProperty(optionName)) { + validateOption(optionName); + } + } + } +}; + +var WARNINGS = {}; // Only show any particular warning once. + +/** + * Logs a warning about invalid options. + * TODO: make this throw for testing + * @private + */ +DygraphOptions.prototype.warnInvalidOption_ = function(optionName) { + if (!WARNINGS[optionName]) { + WARNINGS[optionName] = true; + var isSeries = (this.labels_.indexOf(optionName) >= 0); + if (isSeries) { + console.warn('Use new-style per-series options (saw ' + optionName + ' as top-level options key). See http://bit.ly/1tceaJs'); + } else { + console.warn('Unknown option ' + optionName + ' (full list of options at dygraphs.com/options.html'); + throw "invalid option " + optionName; + } + } +}; + +// Reset list of previously-shown warnings. Used for testing. +DygraphOptions.resetWarnings_ = function() { + WARNINGS = {}; +}; + +} + +return DygraphOptions; + +})(); +})(); +/** + * @license + * Copyright 2011 Dan Vanderkam (danvdk@gmail.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +/** + * @fileoverview Based on PlotKitLayout, but modified to meet the needs of + * dygraphs. + */ + +var DygraphLayout = (function() { + +/*global Dygraph:false */ +"use strict"; + +/** + * Creates a new DygraphLayout object. + * + * This class contains all the data to be charted. + * It uses data coordinates, but also records the chart range (in data + * coordinates) and hence is able to calculate percentage positions ('In this + * view, Point A lies 25% down the x-axis.') + * + * Two things that it does not do are: + * 1. Record pixel coordinates for anything. + * 2. (oddly) determine anything about the layout of chart elements. + * + * The naming is a vestige of Dygraph's original PlotKit roots. + * + * @constructor + */ +var DygraphLayout = function(dygraph) { + this.dygraph_ = dygraph; + /** + * Array of points for each series. + * + * [series index][row index in series] = |Point| structure, + * where series index refers to visible series only, and the + * point index is for the reduced set of points for the current + * zoom region (including one point just outside the window). + * All points in the same row index share the same X value. + * + * @type {Array.>} + */ + this.points = []; + this.setNames = []; + this.annotations = []; + this.yAxes_ = null; + + // TODO(danvk): it's odd that xTicks_ and yTicks_ are inputs, but xticks and + // yticks are outputs. Clean this up. + this.xTicks_ = null; + this.yTicks_ = null; +}; + +/** + * Add points for a single series. + * + * @param {string} setname Name of the series. + * @param {Array.} set_xy Points for the series. + */ +DygraphLayout.prototype.addDataset = function(setname, set_xy) { + this.points.push(set_xy); + this.setNames.push(setname); +}; + +/** + * Returns the box which the chart should be drawn in. This is the canvas's + * box, less space needed for the axis and chart labels. + * + * @return {{x: number, y: number, w: number, h: number}} + */ +DygraphLayout.prototype.getPlotArea = function() { + return this.area_; +}; + +// Compute the box which the chart should be drawn in. This is the canvas's +// box, less space needed for axis, chart labels, and other plug-ins. +// NOTE: This should only be called by Dygraph.predraw_(). +DygraphLayout.prototype.computePlotArea = function() { + var area = { + // TODO(danvk): per-axis setting. + x: 0, + y: 0 + }; + + area.w = this.dygraph_.width_ - area.x - this.dygraph_.getOption('rightGap'); + area.h = this.dygraph_.height_; + + // Let plugins reserve space. + var e = { + chart_div: this.dygraph_.graphDiv, + reserveSpaceLeft: function(px) { + var r = { + x: area.x, + y: area.y, + w: px, + h: area.h + }; + area.x += px; + area.w -= px; + return r; + }, + reserveSpaceRight: function(px) { + var r = { + x: area.x + area.w - px, + y: area.y, + w: px, + h: area.h + }; + area.w -= px; + return r; + }, + reserveSpaceTop: function(px) { + var r = { + x: area.x, + y: area.y, + w: area.w, + h: px + }; + area.y += px; + area.h -= px; + return r; + }, + reserveSpaceBottom: function(px) { + var r = { + x: area.x, + y: area.y + area.h - px, + w: area.w, + h: px + }; + area.h -= px; + return r; + }, + chartRect: function() { + return {x:area.x, y:area.y, w:area.w, h:area.h}; + } + }; + this.dygraph_.cascadeEvents_('layout', e); + + this.area_ = area; +}; + +DygraphLayout.prototype.setAnnotations = function(ann) { + // The Dygraph object's annotations aren't parsed. We parse them here and + // save a copy. If there is no parser, then the user must be using raw format. + this.annotations = []; + var parse = this.dygraph_.getOption('xValueParser') || function(x) { return x; }; + for (var i = 0; i < ann.length; i++) { + var a = {}; + if (!ann[i].xval && ann[i].x === undefined) { + console.error("Annotations must have an 'x' property"); + return; + } + if (ann[i].icon && + !(ann[i].hasOwnProperty('width') && + ann[i].hasOwnProperty('height'))) { + console.error("Must set width and height when setting " + + "annotation.icon property"); + return; + } + Dygraph.update(a, ann[i]); + if (!a.xval) a.xval = parse(a.x); + this.annotations.push(a); + } +}; + +DygraphLayout.prototype.setXTicks = function(xTicks) { + this.xTicks_ = xTicks; +}; + +// TODO(danvk): add this to the Dygraph object's API or move it into Layout. +DygraphLayout.prototype.setYAxes = function (yAxes) { + this.yAxes_ = yAxes; +}; + +DygraphLayout.prototype.evaluate = function() { + this._xAxis = {}; + this._evaluateLimits(); + this._evaluateLineCharts(); + this._evaluateLineTicks(); + this._evaluateAnnotations(); +}; + +DygraphLayout.prototype._evaluateLimits = function() { + var xlimits = this.dygraph_.xAxisRange(); + this._xAxis.minval = xlimits[0]; + this._xAxis.maxval = xlimits[1]; + var xrange = xlimits[1] - xlimits[0]; + this._xAxis.scale = (xrange !== 0 ? 1 / xrange : 1.0); + + if (this.dygraph_.getOptionForAxis("logscale", 'x')) { + this._xAxis.xlogrange = Dygraph.log10(this._xAxis.maxval) - Dygraph.log10(this._xAxis.minval); + this._xAxis.xlogscale = (this._xAxis.xlogrange !== 0 ? 1.0 / this._xAxis.xlogrange : 1.0); + } + for (var i = 0; i < this.yAxes_.length; i++) { + var axis = this.yAxes_[i]; + axis.minyval = axis.computedValueRange[0]; + axis.maxyval = axis.computedValueRange[1]; + axis.yrange = axis.maxyval - axis.minyval; + axis.yscale = (axis.yrange !== 0 ? 1.0 / axis.yrange : 1.0); + + if (this.dygraph_.getOption("logscale")) { + axis.ylogrange = Dygraph.log10(axis.maxyval) - Dygraph.log10(axis.minyval); + axis.ylogscale = (axis.ylogrange !== 0 ? 1.0 / axis.ylogrange : 1.0); + if (!isFinite(axis.ylogrange) || isNaN(axis.ylogrange)) { + console.error('axis ' + i + ' of graph at ' + axis.g + + ' can\'t be displayed in log scale for range [' + + axis.minyval + ' - ' + axis.maxyval + ']'); + } + } + } +}; + +DygraphLayout.calcXNormal_ = function(value, xAxis, logscale) { + if (logscale) { + return ((Dygraph.log10(value) - Dygraph.log10(xAxis.minval)) * xAxis.xlogscale); + } else { + return (value - xAxis.minval) * xAxis.scale; + } +}; + +/** + * @param {DygraphAxisType} axis + * @param {number} value + * @param {boolean} logscale + * @return {number} + */ +DygraphLayout.calcYNormal_ = function(axis, value, logscale) { + if (logscale) { + var x = 1.0 - ((Dygraph.log10(value) - Dygraph.log10(axis.minyval)) * axis.ylogscale); + return isFinite(x) ? x : NaN; // shim for v8 issue; see pull request 276 + } else { + return 1.0 - ((value - axis.minyval) * axis.yscale); + } +}; + +DygraphLayout.prototype._evaluateLineCharts = function() { + var isStacked = this.dygraph_.getOption("stackedGraph"); + var isLogscaleForX = this.dygraph_.getOptionForAxis("logscale", 'x'); + + for (var setIdx = 0; setIdx < this.points.length; setIdx++) { + var points = this.points[setIdx]; + var setName = this.setNames[setIdx]; + var connectSeparated = this.dygraph_.getOption('connectSeparatedPoints', setName); + var axis = this.dygraph_.axisPropertiesForSeries(setName); + // TODO (konigsberg): use optionsForAxis instead. + var logscale = this.dygraph_.attributes_.getForSeries("logscale", setName); + + for (var j = 0; j < points.length; j++) { + var point = points[j]; + + // Range from 0-1 where 0 represents left and 1 represents right. + point.x = DygraphLayout.calcXNormal_(point.xval, this._xAxis, isLogscaleForX); + // Range from 0-1 where 0 represents top and 1 represents bottom + var yval = point.yval; + if (isStacked) { + point.y_stacked = DygraphLayout.calcYNormal_( + axis, point.yval_stacked, logscale); + if (yval !== null && !isNaN(yval)) { + yval = point.yval_stacked; + } + } + if (yval === null) { + yval = NaN; + if (!connectSeparated) { + point.yval = NaN; + } + } + point.y = DygraphLayout.calcYNormal_(axis, yval, logscale); + } + + this.dygraph_.dataHandler_.onLineEvaluated(points, axis, logscale); + } +}; + +DygraphLayout.prototype._evaluateLineTicks = function() { + var i, tick, label, pos; + this.xticks = []; + for (i = 0; i < this.xTicks_.length; i++) { + tick = this.xTicks_[i]; + label = tick.label; + pos = this.dygraph_.toPercentXCoord(tick.v); + if ((pos >= 0.0) && (pos < 1.0)) { + this.xticks.push([pos, label]); + } + } + + this.yticks = []; + for (i = 0; i < this.yAxes_.length; i++ ) { + var axis = this.yAxes_[i]; + for (var j = 0; j < axis.ticks.length; j++) { + tick = axis.ticks[j]; + label = tick.label; + pos = this.dygraph_.toPercentYCoord(tick.v, i); + if ((pos > 0.0) && (pos <= 1.0)) { + this.yticks.push([i, pos, label]); + } + } + } +}; + +DygraphLayout.prototype._evaluateAnnotations = function() { + // Add the annotations to the point to which they belong. + // Make a map from (setName, xval) to annotation for quick lookups. + var i; + var annotations = {}; + for (i = 0; i < this.annotations.length; i++) { + var a = this.annotations[i]; + annotations[a.xval + "," + a.series] = a; + } + + this.annotated_points = []; + + // Exit the function early if there are no annotations. + if (!this.annotations || !this.annotations.length) { + return; + } + + // TODO(antrob): loop through annotations not points. + for (var setIdx = 0; setIdx < this.points.length; setIdx++) { + var points = this.points[setIdx]; + for (i = 0; i < points.length; i++) { + var p = points[i]; + var k = p.xval + "," + p.name; + if (k in annotations) { + p.annotation = annotations[k]; + this.annotated_points.push(p); + } + } + } +}; + +/** + * Convenience function to remove all the data sets from a graph + */ +DygraphLayout.prototype.removeAllDatasets = function() { + delete this.points; + delete this.setNames; + delete this.setPointsLengths; + delete this.setPointsOffsets; + this.points = []; + this.setNames = []; + this.setPointsLengths = []; + this.setPointsOffsets = []; +}; + +return DygraphLayout; + +})(); +/** + * @license + * Copyright 2006 Dan Vanderkam (danvdk@gmail.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +/** + * @fileoverview Based on PlotKit.CanvasRenderer, but modified to meet the + * needs of dygraphs. + * + * In particular, support for: + * - grid overlays + * - error bars + * - dygraphs attribute system + */ + +/** + * The DygraphCanvasRenderer class does the actual rendering of the chart onto + * a canvas. It's based on PlotKit.CanvasRenderer. + * @param {Object} element The canvas to attach to + * @param {Object} elementContext The 2d context of the canvas (injected so it + * can be mocked for testing.) + * @param {Layout} layout The DygraphLayout object for this graph. + * @constructor + */ + +var DygraphCanvasRenderer = (function() { +/*global Dygraph:false */ +"use strict"; + + +/** + * @constructor + * + * This gets called when there are "new points" to chart. This is generally the + * case when the underlying data being charted has changed. It is _not_ called + * in the common case that the user has zoomed or is panning the view. + * + * The chart canvas has already been created by the Dygraph object. The + * renderer simply gets a drawing context. + * + * @param {Dygraph} dygraph The chart to which this renderer belongs. + * @param {HTMLCanvasElement} element The <canvas> DOM element on which to draw. + * @param {CanvasRenderingContext2D} elementContext The drawing context. + * @param {DygraphLayout} layout The chart's DygraphLayout object. + * + * TODO(danvk): remove the elementContext property. + */ +var DygraphCanvasRenderer = function(dygraph, element, elementContext, layout) { + this.dygraph_ = dygraph; + + this.layout = layout; + this.element = element; + this.elementContext = elementContext; + + this.height = dygraph.height_; + this.width = dygraph.width_; + + // --- check whether everything is ok before we return + // NOTE(konigsberg): isIE is never defined in this object. Bug of some sort. + if (!this.isIE && !(Dygraph.isCanvasSupported(this.element))) + throw "Canvas is not supported."; + + // internal state + this.area = layout.getPlotArea(); + + // Set up a clipping area for the canvas (and the interaction canvas). + // This ensures that we don't overdraw. + if (this.dygraph_.isUsingExcanvas_) { + this._createIEClipArea(); + } else { + // on Android 3 and 4, setting a clipping area on a canvas prevents it from + // displaying anything. + if (!Dygraph.isAndroid()) { + var ctx = this.dygraph_.canvas_ctx_; + ctx.beginPath(); + ctx.rect(this.area.x, this.area.y, this.area.w, this.area.h); + ctx.clip(); + + ctx = this.dygraph_.hidden_ctx_; + ctx.beginPath(); + ctx.rect(this.area.x, this.area.y, this.area.w, this.area.h); + ctx.clip(); + } + } +}; + +/** + * Clears out all chart content and DOM elements. + * This is called immediately before render() on every frame, including + * during zooms and pans. + * @private + */ +DygraphCanvasRenderer.prototype.clear = function() { + var context; + if (this.isIE) { + // VML takes a while to start up, so we just poll every this.IEDelay + try { + if (this.clearDelay) { + this.clearDelay.cancel(); + this.clearDelay = null; + } + context = this.elementContext; + } + catch (e) { + // TODO(danvk): this is broken, since MochiKit.Async is gone. + // this.clearDelay = MochiKit.Async.wait(this.IEDelay); + // this.clearDelay.addCallback(bind(this.clear, this)); + return; + } + } + + context = this.elementContext; + context.clearRect(0, 0, this.width, this.height); +}; + +/** + * This method is responsible for drawing everything on the chart, including + * lines, error bars, fills and axes. + * It is called immediately after clear() on every frame, including during pans + * and zooms. + * @private + */ +DygraphCanvasRenderer.prototype.render = function() { + // attaches point.canvas{x,y} + this._updatePoints(); + + // actually draws the chart. + this._renderLineChart(); +}; + +DygraphCanvasRenderer.prototype._createIEClipArea = function() { + var className = 'dygraph-clip-div'; + var graphDiv = this.dygraph_.graphDiv; + + // Remove old clip divs. + for (var i = graphDiv.childNodes.length-1; i >= 0; i--) { + if (graphDiv.childNodes[i].className == className) { + graphDiv.removeChild(graphDiv.childNodes[i]); + } + } + + // Determine background color to give clip divs. + var backgroundColor = document.bgColor; + var element = this.dygraph_.graphDiv; + while (element != document) { + var bgcolor = element.currentStyle.backgroundColor; + if (bgcolor && bgcolor != 'transparent') { + backgroundColor = bgcolor; + break; + } + element = element.parentNode; + } + + function createClipDiv(area) { + if (area.w === 0 || area.h === 0) { + return; + } + var elem = document.createElement('div'); + elem.className = className; + elem.style.backgroundColor = backgroundColor; + elem.style.position = 'absolute'; + elem.style.left = area.x + 'px'; + elem.style.top = area.y + 'px'; + elem.style.width = area.w + 'px'; + elem.style.height = area.h + 'px'; + graphDiv.appendChild(elem); + } + + var plotArea = this.area; + // Left side + createClipDiv({ + x:0, y:0, + w:plotArea.x, + h:this.height + }); + + // Top + createClipDiv({ + x: plotArea.x, y: 0, + w: this.width - plotArea.x, + h: plotArea.y + }); + + // Right side + createClipDiv({ + x: plotArea.x + plotArea.w, y: 0, + w: this.width - plotArea.x - plotArea.w, + h: this.height + }); + + // Bottom + createClipDiv({ + x: plotArea.x, + y: plotArea.y + plotArea.h, + w: this.width - plotArea.x, + h: this.height - plotArea.h - plotArea.y + }); +}; + + +/** + * Returns a predicate to be used with an iterator, which will + * iterate over points appropriately, depending on whether + * connectSeparatedPoints is true. When it's false, the predicate will + * skip over points with missing yVals. + */ +DygraphCanvasRenderer._getIteratorPredicate = function(connectSeparatedPoints) { + return connectSeparatedPoints ? + DygraphCanvasRenderer._predicateThatSkipsEmptyPoints : + null; +}; + +DygraphCanvasRenderer._predicateThatSkipsEmptyPoints = + function(array, idx) { + return array[idx].yval !== null; +}; + +/** + * Draws a line with the styles passed in and calls all the drawPointCallbacks. + * @param {Object} e The dictionary passed to the plotter function. + * @private + */ +DygraphCanvasRenderer._drawStyledLine = function(e, + color, strokeWidth, strokePattern, drawPoints, + drawPointCallback, pointSize) { + var g = e.dygraph; + // TODO(konigsberg): Compute attributes outside this method call. + var stepPlot = g.getBooleanOption("stepPlot", e.setName); + + if (!Dygraph.isArrayLike(strokePattern)) { + strokePattern = null; + } + + var drawGapPoints = g.getBooleanOption('drawGapEdgePoints', e.setName); + + var points = e.points; + var setName = e.setName; + var iter = Dygraph.createIterator(points, 0, points.length, + DygraphCanvasRenderer._getIteratorPredicate( + g.getBooleanOption("connectSeparatedPoints", setName))); + + var stroking = strokePattern && (strokePattern.length >= 2); + + var ctx = e.drawingContext; + ctx.save(); + if (stroking) { + ctx.installPattern(strokePattern); + } + + var pointsOnLine = DygraphCanvasRenderer._drawSeries( + e, iter, strokeWidth, pointSize, drawPoints, drawGapPoints, stepPlot, color); + DygraphCanvasRenderer._drawPointsOnLine( + e, pointsOnLine, drawPointCallback, color, pointSize); + + if (stroking) { + ctx.uninstallPattern(); + } + + ctx.restore(); +}; + +/** + * This does the actual drawing of lines on the canvas, for just one series. + * Returns a list of [canvasx, canvasy] pairs for points for which a + * drawPointCallback should be fired. These include isolated points, or all + * points if drawPoints=true. + * @param {Object} e The dictionary passed to the plotter function. + * @private + */ +DygraphCanvasRenderer._drawSeries = function(e, + iter, strokeWidth, pointSize, drawPoints, drawGapPoints, stepPlot, color) { + + var prevCanvasX = null; + var prevCanvasY = null; + var nextCanvasY = null; + var isIsolated; // true if this point is isolated (no line segments) + var point; // the point being processed in the while loop + var pointsOnLine = []; // Array of [canvasx, canvasy] pairs. + var first = true; // the first cycle through the while loop + + var ctx = e.drawingContext; + ctx.beginPath(); + ctx.strokeStyle = color; + ctx.lineWidth = strokeWidth; + + // NOTE: we break the iterator's encapsulation here for about a 25% speedup. + var arr = iter.array_; + var limit = iter.end_; + var predicate = iter.predicate_; + + for (var i = iter.start_; i < limit; i++) { + point = arr[i]; + if (predicate) { + while (i < limit && !predicate(arr, i)) { + i++; + } + if (i == limit) break; + point = arr[i]; + } + + // FIXME: The 'canvasy != canvasy' test here catches NaN values but the test + // doesn't catch Infinity values. Could change this to + // !isFinite(point.canvasy), but I assume it avoids isNaN for performance? + if (point.canvasy === null || point.canvasy != point.canvasy) { + if (stepPlot && prevCanvasX !== null) { + // Draw a horizontal line to the start of the missing data + ctx.moveTo(prevCanvasX, prevCanvasY); + ctx.lineTo(point.canvasx, prevCanvasY); + } + prevCanvasX = prevCanvasY = null; + } else { + isIsolated = false; + if (drawGapPoints || !prevCanvasX) { + iter.nextIdx_ = i; + iter.next(); + nextCanvasY = iter.hasNext ? iter.peek.canvasy : null; + + var isNextCanvasYNullOrNaN = nextCanvasY === null || + nextCanvasY != nextCanvasY; + isIsolated = (!prevCanvasX && isNextCanvasYNullOrNaN); + if (drawGapPoints) { + // Also consider a point to be "isolated" if it's adjacent to a + // null point, excluding the graph edges. + if ((!first && !prevCanvasX) || + (iter.hasNext && isNextCanvasYNullOrNaN)) { + isIsolated = true; + } + } + } + + if (prevCanvasX !== null) { + if (strokeWidth) { + if (stepPlot) { + ctx.moveTo(prevCanvasX, prevCanvasY); + ctx.lineTo(point.canvasx, prevCanvasY); + } + + ctx.lineTo(point.canvasx, point.canvasy); + } + } else { + ctx.moveTo(point.canvasx, point.canvasy); + } + if (drawPoints || isIsolated) { + pointsOnLine.push([point.canvasx, point.canvasy, point.idx]); + } + prevCanvasX = point.canvasx; + prevCanvasY = point.canvasy; + } + first = false; + } + ctx.stroke(); + return pointsOnLine; +}; + +/** + * This fires the drawPointCallback functions, which draw dots on the points by + * default. This gets used when the "drawPoints" option is set, or when there + * are isolated points. + * @param {Object} e The dictionary passed to the plotter function. + * @private + */ +DygraphCanvasRenderer._drawPointsOnLine = function( + e, pointsOnLine, drawPointCallback, color, pointSize) { + var ctx = e.drawingContext; + for (var idx = 0; idx < pointsOnLine.length; idx++) { + var cb = pointsOnLine[idx]; + ctx.save(); + drawPointCallback.call(e.dygraph, + e.dygraph, e.setName, ctx, cb[0], cb[1], color, pointSize, cb[2]); + ctx.restore(); + } +}; + +/** + * Attaches canvas coordinates to the points array. + * @private + */ +DygraphCanvasRenderer.prototype._updatePoints = function() { + // Update Points + // TODO(danvk): here + // + // TODO(bhs): this loop is a hot-spot for high-point-count charts. These + // transformations can be pushed into the canvas via linear transformation + // matrices. + // NOTE(danvk): this is trickier than it sounds at first. The transformation + // needs to be done before the .moveTo() and .lineTo() calls, but must be + // undone before the .stroke() call to ensure that the stroke width is + // unaffected. An alternative is to reduce the stroke width in the + // transformed coordinate space, but you can't specify different values for + // each dimension (as you can with .scale()). The speedup here is ~12%. + var sets = this.layout.points; + for (var i = sets.length; i--;) { + var points = sets[i]; + for (var j = points.length; j--;) { + var point = points[j]; + point.canvasx = this.area.w * point.x + this.area.x; + point.canvasy = this.area.h * point.y + this.area.y; + } + } +}; + +/** + * Add canvas Actually draw the lines chart, including error bars. + * + * This function can only be called if DygraphLayout's points array has been + * updated with canvas{x,y} attributes, i.e. by + * DygraphCanvasRenderer._updatePoints. + * + * @param {string=} opt_seriesName when specified, only that series will + * be drawn. (This is used for expedited redrawing with highlightSeriesOpts) + * @param {CanvasRenderingContext2D} opt_ctx when specified, the drawing + * context. However, lines are typically drawn on the object's + * elementContext. + * @private + */ +DygraphCanvasRenderer.prototype._renderLineChart = function(opt_seriesName, opt_ctx) { + var ctx = opt_ctx || this.elementContext; + var i; + + var sets = this.layout.points; + var setNames = this.layout.setNames; + var setName; + + this.colors = this.dygraph_.colorsMap_; + + // Determine which series have specialized plotters. + var plotter_attr = this.dygraph_.getOption("plotter"); + var plotters = plotter_attr; + if (!Dygraph.isArrayLike(plotters)) { + plotters = [plotters]; + } + + var setPlotters = {}; // series name -> plotter fn. + for (i = 0; i < setNames.length; i++) { + setName = setNames[i]; + var setPlotter = this.dygraph_.getOption("plotter", setName); + if (setPlotter == plotter_attr) continue; // not specialized. + + setPlotters[setName] = setPlotter; + } + + for (i = 0; i < plotters.length; i++) { + var plotter = plotters[i]; + var is_last = (i == plotters.length - 1); + + for (var j = 0; j < sets.length; j++) { + setName = setNames[j]; + if (opt_seriesName && setName != opt_seriesName) continue; + + var points = sets[j]; + + // Only throw in the specialized plotters on the last iteration. + var p = plotter; + if (setName in setPlotters) { + if (is_last) { + p = setPlotters[setName]; + } else { + // Don't use the standard plotters in this case. + continue; + } + } + + var color = this.colors[setName]; + var strokeWidth = this.dygraph_.getOption("strokeWidth", setName); + + ctx.save(); + ctx.strokeStyle = color; + ctx.lineWidth = strokeWidth; + p({ + points: points, + setName: setName, + drawingContext: ctx, + color: color, + strokeWidth: strokeWidth, + dygraph: this.dygraph_, + axis: this.dygraph_.axisPropertiesForSeries(setName), + plotArea: this.area, + seriesIndex: j, + seriesCount: sets.length, + singleSeriesName: opt_seriesName, + allSeriesPoints: sets + }); + ctx.restore(); + } + } +}; + +/** + * Standard plotters. These may be used by clients via Dygraph.Plotters. + * See comments there for more details. + */ +DygraphCanvasRenderer._Plotters = { + linePlotter: function(e) { + DygraphCanvasRenderer._linePlotter(e); + }, + + fillPlotter: function(e) { + DygraphCanvasRenderer._fillPlotter(e); + }, + + errorPlotter: function(e) { + DygraphCanvasRenderer._errorPlotter(e); + } +}; + +/** + * Plotter which draws the central lines for a series. + * @private + */ +DygraphCanvasRenderer._linePlotter = function(e) { + var g = e.dygraph; + var setName = e.setName; + var strokeWidth = e.strokeWidth; + + // TODO(danvk): Check if there's any performance impact of just calling + // getOption() inside of _drawStyledLine. Passing in so many parameters makes + // this code a bit nasty. + var borderWidth = g.getNumericOption("strokeBorderWidth", setName); + var drawPointCallback = g.getOption("drawPointCallback", setName) || + Dygraph.Circles.DEFAULT; + var strokePattern = g.getOption("strokePattern", setName); + var drawPoints = g.getBooleanOption("drawPoints", setName); + var pointSize = g.getNumericOption("pointSize", setName); + + if (borderWidth && strokeWidth) { + DygraphCanvasRenderer._drawStyledLine(e, + g.getOption("strokeBorderColor", setName), + strokeWidth + 2 * borderWidth, + strokePattern, + drawPoints, + drawPointCallback, + pointSize + ); + } + + DygraphCanvasRenderer._drawStyledLine(e, + e.color, + strokeWidth, + strokePattern, + drawPoints, + drawPointCallback, + pointSize + ); +}; + +/** + * Draws the shaded error bars/confidence intervals for each series. + * This happens before the center lines are drawn, since the center lines + * need to be drawn on top of the error bars for all series. + * @private + */ +DygraphCanvasRenderer._errorPlotter = function(e) { + var g = e.dygraph; + var setName = e.setName; + var errorBars = g.getBooleanOption("errorBars") || + g.getBooleanOption("customBars"); + if (!errorBars) return; + + var fillGraph = g.getBooleanOption("fillGraph", setName); + if (fillGraph) { + console.warn("Can't use fillGraph option with error bars"); + } + + var ctx = e.drawingContext; + var color = e.color; + var fillAlpha = g.getNumericOption('fillAlpha', setName); + var stepPlot = g.getBooleanOption("stepPlot", setName); + var points = e.points; + + var iter = Dygraph.createIterator(points, 0, points.length, + DygraphCanvasRenderer._getIteratorPredicate( + g.getBooleanOption("connectSeparatedPoints", setName))); + + var newYs; + + // setup graphics context + var prevX = NaN; + var prevY = NaN; + var prevYs = [-1, -1]; + // should be same color as the lines but only 15% opaque. + var rgb = Dygraph.toRGB_(color); + var err_color = + 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + fillAlpha + ')'; + ctx.fillStyle = err_color; + ctx.beginPath(); + + var isNullUndefinedOrNaN = function(x) { + return (x === null || + x === undefined || + isNaN(x)); + }; + + while (iter.hasNext) { + var point = iter.next(); + if ((!stepPlot && isNullUndefinedOrNaN(point.y)) || + (stepPlot && !isNaN(prevY) && isNullUndefinedOrNaN(prevY))) { + prevX = NaN; + continue; + } + + newYs = [ point.y_bottom, point.y_top ]; + if (stepPlot) { + prevY = point.y; + } + + // The documentation specifically disallows nulls inside the point arrays, + // but in case it happens we should do something sensible. + if (isNaN(newYs[0])) newYs[0] = point.y; + if (isNaN(newYs[1])) newYs[1] = point.y; + + newYs[0] = e.plotArea.h * newYs[0] + e.plotArea.y; + newYs[1] = e.plotArea.h * newYs[1] + e.plotArea.y; + if (!isNaN(prevX)) { + if (stepPlot) { + ctx.moveTo(prevX, prevYs[0]); + ctx.lineTo(point.canvasx, prevYs[0]); + ctx.lineTo(point.canvasx, prevYs[1]); + } else { + ctx.moveTo(prevX, prevYs[0]); + ctx.lineTo(point.canvasx, newYs[0]); + ctx.lineTo(point.canvasx, newYs[1]); + } + ctx.lineTo(prevX, prevYs[1]); + ctx.closePath(); + } + prevYs = newYs; + prevX = point.canvasx; + } + ctx.fill(); +}; + + +/** + * Proxy for CanvasRenderingContext2D which drops moveTo/lineTo calls which are + * superfluous. It accumulates all movements which haven't changed the x-value + * and only applies the two with the most extreme y-values. + * + * Calls to lineTo/moveTo must have non-decreasing x-values. + */ +DygraphCanvasRenderer._fastCanvasProxy = function(context) { + var pendingActions = []; // array of [type, x, y] tuples + var lastRoundedX = null; + + var LINE_TO = 1, + MOVE_TO = 2; + + var actionCount = 0; // number of moveTos and lineTos passed to context. + + // Drop superfluous motions + // Assumes all pendingActions have the same (rounded) x-value. + var compressActions = function(opt_losslessOnly) { + if (pendingActions.length <= 1) return; + + // Lossless compression: drop inconsequential moveTos. + for (var i = pendingActions.length - 1; i > 0; i--) { + var action = pendingActions[i]; + if (action[0] == MOVE_TO) { + var prevAction = pendingActions[i - 1]; + if (prevAction[1] == action[1] && prevAction[2] == action[2]) { + pendingActions.splice(i, 1); + } + } + } + + // Lossless compression: ... drop consecutive moveTos ... + for (var i = 0; i < pendingActions.length - 1; /* incremented internally */) { + var action = pendingActions[i]; + if (action[0] == MOVE_TO && pendingActions[i + 1][0] == MOVE_TO) { + pendingActions.splice(i, 1); + } else { + i++; + } + } + + // Lossy compression: ... drop all but the extreme y-values ... + if (pendingActions.length > 2 && !opt_losslessOnly) { + // keep an initial moveTo, but drop all others. + var startIdx = 0; + if (pendingActions[0][0] == MOVE_TO) startIdx++; + var minIdx = null, maxIdx = null; + for (var i = startIdx; i < pendingActions.length; i++) { + var action = pendingActions[i]; + if (action[0] != LINE_TO) continue; + if (minIdx === null && maxIdx === null) { + minIdx = i; + maxIdx = i; + } else { + var y = action[2]; + if (y < pendingActions[minIdx][2]) { + minIdx = i; + } else if (y > pendingActions[maxIdx][2]) { + maxIdx = i; + } + } + } + var minAction = pendingActions[minIdx], + maxAction = pendingActions[maxIdx]; + pendingActions.splice(startIdx, pendingActions.length - startIdx); + if (minIdx < maxIdx) { + pendingActions.push(minAction); + pendingActions.push(maxAction); + } else if (minIdx > maxIdx) { + pendingActions.push(maxAction); + pendingActions.push(minAction); + } else { + pendingActions.push(minAction); + } + } + }; + + var flushActions = function(opt_noLossyCompression) { + compressActions(opt_noLossyCompression); + for (var i = 0, len = pendingActions.length; i < len; i++) { + var action = pendingActions[i]; + if (action[0] == LINE_TO) { + context.lineTo(action[1], action[2]); + } else if (action[0] == MOVE_TO) { + context.moveTo(action[1], action[2]); + } + } + actionCount += pendingActions.length; + pendingActions = []; + }; + + var addAction = function(action, x, y) { + var rx = Math.round(x); + if (lastRoundedX === null || rx != lastRoundedX) { + flushActions(); + lastRoundedX = rx; + } + pendingActions.push([action, x, y]); + }; + + return { + moveTo: function(x, y) { + addAction(MOVE_TO, x, y); + }, + lineTo: function(x, y) { + addAction(LINE_TO, x, y); + }, + + // for major operations like stroke/fill, we skip compression to ensure + // that there are no artifacts at the right edge. + stroke: function() { flushActions(true); context.stroke(); }, + fill: function() { flushActions(true); context.fill(); }, + beginPath: function() { flushActions(true); context.beginPath(); }, + closePath: function() { flushActions(true); context.closePath(); }, + + _count: function() { return actionCount; } + }; +}; + +/** + * Draws the shaded regions when "fillGraph" is set. Not to be confused with + * error bars. + * + * For stacked charts, it's more convenient to handle all the series + * simultaneously. So this plotter plots all the points on the first series + * it's asked to draw, then ignores all the other series. + * + * @private + */ +DygraphCanvasRenderer._fillPlotter = function(e) { + // Skip if we're drawing a single series for interactive highlight overlay. + if (e.singleSeriesName) return; + + // We'll handle all the series at once, not one-by-one. + if (e.seriesIndex !== 0) return; + + var g = e.dygraph; + var setNames = g.getLabels().slice(1); // remove x-axis + + // getLabels() includes names for invisible series, which are not included in + // allSeriesPoints. We remove those to make the two match. + // TODO(danvk): provide a simpler way to get this information. + for (var i = setNames.length; i >= 0; i--) { + if (!g.visibility()[i]) setNames.splice(i, 1); + } + + var anySeriesFilled = (function() { + for (var i = 0; i < setNames.length; i++) { + if (g.getBooleanOption("fillGraph", setNames[i])) return true; + } + return false; + })(); + + if (!anySeriesFilled) return; + + var area = e.plotArea; + var sets = e.allSeriesPoints; + var setCount = sets.length; + + var fillAlpha = g.getNumericOption('fillAlpha'); + var stackedGraph = g.getBooleanOption("stackedGraph"); + var colors = g.getColors(); + + // For stacked graphs, track the baseline for filling. + // + // The filled areas below graph lines are trapezoids with two + // vertical edges. The top edge is the line segment being drawn, and + // the baseline is the bottom edge. Each baseline corresponds to the + // top line segment from the previous stacked line. In the case of + // step plots, the trapezoids are rectangles. + var baseline = {}; + var currBaseline; + var prevStepPlot; // for different line drawing modes (line/step) per series + + // Helper function to trace a line back along the baseline. + var traceBackPath = function(ctx, baselineX, baselineY, pathBack) { + ctx.lineTo(baselineX, baselineY); + if (stackedGraph) { + for (var i = pathBack.length - 1; i >= 0; i--) { + var pt = pathBack[i]; + ctx.lineTo(pt[0], pt[1]); + } + } + }; + + // process sets in reverse order (needed for stacked graphs) + for (var setIdx = setCount - 1; setIdx >= 0; setIdx--) { + var ctx = e.drawingContext; + var setName = setNames[setIdx]; + if (!g.getBooleanOption('fillGraph', setName)) continue; + + var stepPlot = g.getBooleanOption('stepPlot', setName); + var color = colors[setIdx]; + var axis = g.axisPropertiesForSeries(setName); + var axisY = 1.0 + axis.minyval * axis.yscale; + if (axisY < 0.0) axisY = 0.0; + else if (axisY > 1.0) axisY = 1.0; + axisY = area.h * axisY + area.y; + + var points = sets[setIdx]; + var iter = Dygraph.createIterator(points, 0, points.length, + DygraphCanvasRenderer._getIteratorPredicate( + g.getBooleanOption("connectSeparatedPoints", setName))); + + // setup graphics context + var prevX = NaN; + var prevYs = [-1, -1]; + var newYs; + // should be same color as the lines but only 15% opaque. + var rgb = Dygraph.toRGB_(color); + var err_color = + 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + fillAlpha + ')'; + ctx.fillStyle = err_color; + ctx.beginPath(); + var last_x, is_first = true; + + // If the point density is high enough, dropping segments on their way to + // the canvas justifies the overhead of doing so. + if (points.length > 2 * g.width_) { + ctx = DygraphCanvasRenderer._fastCanvasProxy(ctx); + } + + // For filled charts, we draw points from left to right, then back along + // the x-axis to complete a shape for filling. + // For stacked plots, this "back path" is a more complex shape. This array + // stores the [x, y] values needed to trace that shape. + var pathBack = []; + + // TODO(danvk): there are a lot of options at play in this loop. + // The logic would be much clearer if some (e.g. stackGraph and + // stepPlot) were split off into separate sub-plotters. + var point; + while (iter.hasNext) { + point = iter.next(); + if (!Dygraph.isOK(point.y) && !stepPlot) { + traceBackPath(ctx, prevX, prevYs[1], pathBack); + pathBack = []; + prevX = NaN; + if (point.y_stacked !== null && !isNaN(point.y_stacked)) { + baseline[point.canvasx] = area.h * point.y_stacked + area.y; + } + continue; + } + if (stackedGraph) { + if (!is_first && last_x == point.xval) { + continue; + } else { + is_first = false; + last_x = point.xval; + } + + currBaseline = baseline[point.canvasx]; + var lastY; + if (currBaseline === undefined) { + lastY = axisY; + } else { + if(prevStepPlot) { + lastY = currBaseline[0]; + } else { + lastY = currBaseline; + } + } + newYs = [ point.canvasy, lastY ]; + + if (stepPlot) { + // Step plots must keep track of the top and bottom of + // the baseline at each point. + if (prevYs[0] === -1) { + baseline[point.canvasx] = [ point.canvasy, axisY ]; + } else { + baseline[point.canvasx] = [ point.canvasy, prevYs[0] ]; + } + } else { + baseline[point.canvasx] = point.canvasy; + } + + } else { + if (isNaN(point.canvasy) && stepPlot) { + newYs = [ area.y + area.h, axisY ]; + } else { + newYs = [ point.canvasy, axisY ]; + } + } + if (!isNaN(prevX)) { + // Move to top fill point + if (stepPlot) { + ctx.lineTo(point.canvasx, prevYs[0]); + ctx.lineTo(point.canvasx, newYs[0]); + } else { + ctx.lineTo(point.canvasx, newYs[0]); + } + + // Record the baseline for the reverse path. + if (stackedGraph) { + pathBack.push([prevX, prevYs[1]]); + if (prevStepPlot && currBaseline) { + // Draw to the bottom of the baseline + pathBack.push([point.canvasx, currBaseline[1]]); + } else { + pathBack.push([point.canvasx, newYs[1]]); + } + } + } else { + ctx.moveTo(point.canvasx, newYs[1]); + ctx.lineTo(point.canvasx, newYs[0]); + } + prevYs = newYs; + prevX = point.canvasx; + } + prevStepPlot = stepPlot; + if (newYs && point) { + traceBackPath(ctx, point.canvasx, newYs[1], pathBack); + pathBack = []; + } + ctx.fill(); + } +}; + +return DygraphCanvasRenderer; + +})(); +/** + * @license + * Copyright 2006 Dan Vanderkam (danvdk@gmail.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +/** + * @fileoverview Creates an interactive, zoomable graph based on a CSV file or + * string. Dygraph can handle multiple series with or without error bars. The + * date/value ranges will be automatically set. Dygraph uses the + * <canvas> tag, so it only works in FF1.5+. + * @author danvdk@gmail.com (Dan Vanderkam) + + Usage: +
+ + + The CSV file is of the form + + Date,SeriesA,SeriesB,SeriesC + YYYYMMDD,A1,B1,C1 + YYYYMMDD,A2,B2,C2 + + If the 'errorBars' option is set in the constructor, the input should be of + the form + Date,SeriesA,SeriesB,... + YYYYMMDD,A1,sigmaA1,B1,sigmaB1,... + YYYYMMDD,A2,sigmaA2,B2,sigmaB2,... + + If the 'fractions' option is set, the input should be of the form: + + Date,SeriesA,SeriesB,... + YYYYMMDD,A1/B1,A2/B2,... + YYYYMMDD,A1/B1,A2/B2,... + + And error bars will be calculated automatically using a binomial distribution. + + For further documentation and examples, see http://dygraphs.com/ + + */ + +// For "production" code, this gets set to false by uglifyjs. +if (typeof(DEBUG) === 'undefined') DEBUG=true; + +var Dygraph = (function() { +/*global DygraphLayout:false, DygraphCanvasRenderer:false, DygraphOptions:false, G_vmlCanvasManager:false,ActiveXObject:false */ +"use strict"; + +/** + * Creates an interactive, zoomable chart. + * + * @constructor + * @param {div | String} div A div or the id of a div into which to construct + * the chart. + * @param {String | Function} file A file containing CSV data or a function + * that returns this data. The most basic expected format for each line is + * "YYYY/MM/DD,val1,val2,...". For more information, see + * http://dygraphs.com/data.html. + * @param {Object} attrs Various other attributes, e.g. errorBars determines + * whether the input data contains error ranges. For a complete list of + * options, see http://dygraphs.com/options.html. + */ +var Dygraph = function(div, data, opts, opt_fourth_param) { + // These have to go above the "Hack for IE" in __init__ since .ready() can be + // called as soon as the constructor returns. Once support for OldIE is + // dropped, this can go down with the rest of the initializers. + this.is_initial_draw_ = true; + this.readyFns_ = []; + + if (opt_fourth_param !== undefined) { + // Old versions of dygraphs took in the series labels as a constructor + // parameter. This doesn't make sense anymore, but it's easy to continue + // to support this usage. + console.warn("Using deprecated four-argument dygraph constructor"); + this.__old_init__(div, data, opts, opt_fourth_param); + } else { + this.__init__(div, data, opts); + } +}; + +Dygraph.NAME = "Dygraph"; +Dygraph.VERSION = "1.1.0"; +Dygraph.__repr__ = function() { + return "[" + Dygraph.NAME + " " + Dygraph.VERSION + "]"; +}; + +/** + * Returns information about the Dygraph class. + */ +Dygraph.toString = function() { + return Dygraph.__repr__(); +}; + +// Various default values +Dygraph.DEFAULT_ROLL_PERIOD = 1; +Dygraph.DEFAULT_WIDTH = 480; +Dygraph.DEFAULT_HEIGHT = 320; + +// For max 60 Hz. animation: +Dygraph.ANIMATION_STEPS = 12; +Dygraph.ANIMATION_DURATION = 200; + +// Label constants for the labelsKMB and labelsKMG2 options. +// (i.e. '100000' -> '100K') +Dygraph.KMB_LABELS = [ 'K', 'M', 'B', 'T', 'Q' ]; +Dygraph.KMG2_BIG_LABELS = [ 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y' ]; +Dygraph.KMG2_SMALL_LABELS = [ 'm', 'u', 'n', 'p', 'f', 'a', 'z', 'y' ]; + +// These are defined before DEFAULT_ATTRS so that it can refer to them. +/** + * @private + * Return a string version of a number. This respects the digitsAfterDecimal + * and maxNumberWidth options. + * @param {number} x The number to be formatted + * @param {Dygraph} opts An options view + */ +Dygraph.numberValueFormatter = function(x, opts) { + var sigFigs = opts('sigFigs'); + + if (sigFigs !== null) { + // User has opted for a fixed number of significant figures. + return Dygraph.floatFormat(x, sigFigs); + } + + var digits = opts('digitsAfterDecimal'); + var maxNumberWidth = opts('maxNumberWidth'); + + var kmb = opts('labelsKMB'); + var kmg2 = opts('labelsKMG2'); + + var label; + + // switch to scientific notation if we underflow or overflow fixed display. + if (x !== 0.0 && + (Math.abs(x) >= Math.pow(10, maxNumberWidth) || + Math.abs(x) < Math.pow(10, -digits))) { + label = x.toExponential(digits); + } else { + label = '' + Dygraph.round_(x, digits); + } + + if (kmb || kmg2) { + var k; + var k_labels = []; + var m_labels = []; + if (kmb) { + k = 1000; + k_labels = Dygraph.KMB_LABELS; + } + if (kmg2) { + if (kmb) console.warn("Setting both labelsKMB and labelsKMG2. Pick one!"); + k = 1024; + k_labels = Dygraph.KMG2_BIG_LABELS; + m_labels = Dygraph.KMG2_SMALL_LABELS; + } + + var absx = Math.abs(x); + var n = Dygraph.pow(k, k_labels.length); + for (var j = k_labels.length - 1; j >= 0; j--, n /= k) { + if (absx >= n) { + label = Dygraph.round_(x / n, digits) + k_labels[j]; + break; + } + } + if (kmg2) { + // TODO(danvk): clean up this logic. Why so different than kmb? + var x_parts = String(x.toExponential()).split('e-'); + if (x_parts.length === 2 && x_parts[1] >= 3 && x_parts[1] <= 24) { + if (x_parts[1] % 3 > 0) { + label = Dygraph.round_(x_parts[0] / + Dygraph.pow(10, (x_parts[1] % 3)), + digits); + } else { + label = Number(x_parts[0]).toFixed(2); + } + label += m_labels[Math.floor(x_parts[1] / 3) - 1]; + } + } + } + + return label; +}; + +/** + * variant for use as an axisLabelFormatter. + * @private + */ +Dygraph.numberAxisLabelFormatter = function(x, granularity, opts) { + return Dygraph.numberValueFormatter(x, opts); +}; + +/** + * @type {!Array.} + * @private + * @constant + */ +Dygraph.SHORT_MONTH_NAMES_ = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + + +/** + * Convert a JS date to a string appropriate to display on an axis that + * is displaying values at the stated granularity. This respects the + * labelsUTC option. + * @param {Date} date The date to format + * @param {number} granularity One of the Dygraph granularity constants + * @param {Dygraph} opts An options view + * @return {string} The date formatted as local time + * @private + */ +Dygraph.dateAxisLabelFormatter = function(date, granularity, opts) { + var utc = opts('labelsUTC'); + var accessors = utc ? Dygraph.DateAccessorsUTC : Dygraph.DateAccessorsLocal; + + var year = accessors.getFullYear(date), + month = accessors.getMonth(date), + day = accessors.getDate(date), + hours = accessors.getHours(date), + mins = accessors.getMinutes(date), + secs = accessors.getSeconds(date), + millis = accessors.getSeconds(date); + + if (granularity >= Dygraph.DECADAL) { + return '' + year; + } else if (granularity >= Dygraph.MONTHLY) { + return Dygraph.SHORT_MONTH_NAMES_[month] + ' ' + year; + } else { + var frac = hours * 3600 + mins * 60 + secs + 1e-3 * millis; + if (frac === 0 || granularity >= Dygraph.DAILY) { + // e.g. '21 Jan' (%d%b) + return Dygraph.zeropad(day) + ' ' + Dygraph.SHORT_MONTH_NAMES_[month]; + } else { + return Dygraph.hmsString_(hours, mins, secs); + } + } +}; +// alias in case anyone is referencing the old method. +Dygraph.dateAxisFormatter = Dygraph.dateAxisLabelFormatter; + +/** + * Return a string version of a JS date for a value label. This respects the + * labelsUTC option. + * @param {Date} date The date to be formatted + * @param {Dygraph} opts An options view + * @private + */ +Dygraph.dateValueFormatter = function(d, opts) { + return Dygraph.dateString_(d, opts('labelsUTC')); +}; + +/** + * Standard plotters. These may be used by clients. + * Available plotters are: + * - Dygraph.Plotters.linePlotter: draws central lines (most common) + * - Dygraph.Plotters.errorPlotter: draws error bars + * - Dygraph.Plotters.fillPlotter: draws fills under lines (used with fillGraph) + * + * By default, the plotter is [fillPlotter, errorPlotter, linePlotter]. + * This causes all the lines to be drawn over all the fills/error bars. + */ +Dygraph.Plotters = DygraphCanvasRenderer._Plotters; + + +// Default attribute values. +Dygraph.DEFAULT_ATTRS = { + highlightCircleSize: 3, + highlightSeriesOpts: null, + highlightSeriesBackgroundAlpha: 0.5, + + labelsDivWidth: 250, + labelsDivStyles: { + // TODO(danvk): move defaults from createStatusMessage_ here. + }, + labelsSeparateLines: false, + labelsShowZeroValues: true, + labelsKMB: false, + labelsKMG2: false, + showLabelsOnHighlight: true, + + digitsAfterDecimal: 2, + maxNumberWidth: 6, + sigFigs: null, + + strokeWidth: 1.0, + strokeBorderWidth: 0, + strokeBorderColor: "white", + + axisTickSize: 3, + axisLabelFontSize: 14, + rightGap: 5, + + showRoller: false, + xValueParser: Dygraph.dateParser, + + delimiter: ',', + + sigma: 2.0, + errorBars: false, + fractions: false, + wilsonInterval: true, // only relevant if fractions is true + customBars: false, + fillGraph: false, + fillAlpha: 0.15, + connectSeparatedPoints: false, + + stackedGraph: false, + stackedGraphNaNFill: 'all', + hideOverlayOnMouseOut: true, + + legend: 'onmouseover', + stepPlot: false, + avoidMinZero: false, + xRangePad: 0, + yRangePad: null, + drawAxesAtZero: false, + + // Sizes of the various chart labels. + titleHeight: 28, + xLabelHeight: 18, + yLabelWidth: 18, + + drawXAxis: true, + drawYAxis: true, + axisLineColor: "black", + axisLineWidth: 0.3, + gridLineWidth: 0.3, + axisLabelColor: "black", + axisLabelWidth: 50, + drawYGrid: true, + drawXGrid: true, + gridLineColor: "rgb(128,128,128)", + + interactionModel: null, // will be set to Dygraph.Interaction.defaultModel + animatedZooms: false, // (for now) + + // Range selector options + showRangeSelector: false, + rangeSelectorHeight: 40, + rangeSelectorPlotStrokeColor: "#808FAB", + rangeSelectorPlotFillColor: "#A7B1C4", + showInRangeSelector: null, + + // The ordering here ensures that central lines always appear above any + // fill bars/error bars. + plotter: [ + Dygraph.Plotters.fillPlotter, + Dygraph.Plotters.errorPlotter, + Dygraph.Plotters.linePlotter + ], + + plugins: [ ], + + // per-axis options + axes: { + x: { + pixelsPerLabel: 70, + axisLabelWidth: 60, + axisLabelFormatter: Dygraph.dateAxisLabelFormatter, + valueFormatter: Dygraph.dateValueFormatter, + drawGrid: true, + drawAxis: true, + independentTicks: true, + ticker: null // will be set in dygraph-tickers.js + }, + y: { + axisLabelWidth: 50, + pixelsPerLabel: 30, + valueFormatter: Dygraph.numberValueFormatter, + axisLabelFormatter: Dygraph.numberAxisLabelFormatter, + drawGrid: true, + drawAxis: true, + independentTicks: true, + ticker: null // will be set in dygraph-tickers.js + }, + y2: { + axisLabelWidth: 50, + pixelsPerLabel: 30, + valueFormatter: Dygraph.numberValueFormatter, + axisLabelFormatter: Dygraph.numberAxisLabelFormatter, + drawAxis: true, // only applies when there are two axes of data. + drawGrid: false, + independentTicks: false, + ticker: null // will be set in dygraph-tickers.js + } + } +}; + +// Directions for panning and zooming. Use bit operations when combined +// values are possible. +Dygraph.HORIZONTAL = 1; +Dygraph.VERTICAL = 2; + +// Installed plugins, in order of precedence (most-general to most-specific). +// Plugins are installed after they are defined, in plugins/install.js. +Dygraph.PLUGINS = [ +]; + +// Used for initializing annotation CSS rules only once. +Dygraph.addedAnnotationCSS = false; + +Dygraph.prototype.__old_init__ = function(div, file, labels, attrs) { + // Labels is no longer a constructor parameter, since it's typically set + // directly from the data source. It also conains a name for the x-axis, + // which the previous constructor form did not. + if (labels !== null) { + var new_labels = ["Date"]; + for (var i = 0; i < labels.length; i++) new_labels.push(labels[i]); + Dygraph.update(attrs, { 'labels': new_labels }); + } + this.__init__(div, file, attrs); +}; + +/** + * Initializes the Dygraph. This creates a new DIV and constructs the PlotKit + * and context <canvas> inside of it. See the constructor for details. + * on the parameters. + * @param {Element} div the Element to render the graph into. + * @param {string | Function} file Source data + * @param {Object} attrs Miscellaneous other options + * @private + */ +Dygraph.prototype.__init__ = function(div, file, attrs) { + // Hack for IE: if we're using excanvas and the document hasn't finished + // loading yet (and hence may not have initialized whatever it needs to + // initialize), then keep calling this routine periodically until it has. + if (/MSIE/.test(navigator.userAgent) && !window.opera && + typeof(G_vmlCanvasManager) != 'undefined' && + document.readyState != 'complete') { + var self = this; + setTimeout(function() { self.__init__(div, file, attrs); }, 100); + return; + } + + // Support two-argument constructor + if (attrs === null || attrs === undefined) { attrs = {}; } + + attrs = Dygraph.mapLegacyOptions_(attrs); + + if (typeof(div) == 'string') { + div = document.getElementById(div); + } + + if (!div) { + console.error("Constructing dygraph with a non-existent div!"); + return; + } + + this.isUsingExcanvas_ = typeof(G_vmlCanvasManager) != 'undefined'; + + // Copy the important bits into the object + // TODO(danvk): most of these should just stay in the attrs_ dictionary. + this.maindiv_ = div; + this.file_ = file; + this.rollPeriod_ = attrs.rollPeriod || Dygraph.DEFAULT_ROLL_PERIOD; + this.previousVerticalX_ = -1; + this.fractions_ = attrs.fractions || false; + this.dateWindow_ = attrs.dateWindow || null; + + this.annotations_ = []; + + // Zoomed indicators - These indicate when the graph has been zoomed and on what axis. + this.zoomed_x_ = false; + this.zoomed_y_ = false; + + // Clear the div. This ensure that, if multiple dygraphs are passed the same + // div, then only one will be drawn. + div.innerHTML = ""; + + // For historical reasons, the 'width' and 'height' options trump all CSS + // rules _except_ for an explicit 'width' or 'height' on the div. + // As an added convenience, if the div has zero height (like
does + // without any styles), then we use a default height/width. + if (div.style.width === '' && attrs.width) { + div.style.width = attrs.width + "px"; + } + if (div.style.height === '' && attrs.height) { + div.style.height = attrs.height + "px"; + } + if (div.style.height === '' && div.clientHeight === 0) { + div.style.height = Dygraph.DEFAULT_HEIGHT + "px"; + if (div.style.width === '') { + div.style.width = Dygraph.DEFAULT_WIDTH + "px"; + } + } + // These will be zero if the dygraph's div is hidden. In that case, + // use the user-specified attributes if present. If not, use zero + // and assume the user will call resize to fix things later. + this.width_ = div.clientWidth || attrs.width || 0; + this.height_ = div.clientHeight || attrs.height || 0; + + // TODO(danvk): set fillGraph to be part of attrs_ here, not user_attrs_. + if (attrs.stackedGraph) { + attrs.fillGraph = true; + // TODO(nikhilk): Add any other stackedGraph checks here. + } + + // DEPRECATION WARNING: All option processing should be moved from + // attrs_ and user_attrs_ to options_, which holds all this information. + // + // Dygraphs has many options, some of which interact with one another. + // To keep track of everything, we maintain two sets of options: + // + // this.user_attrs_ only options explicitly set by the user. + // this.attrs_ defaults, options derived from user_attrs_, data. + // + // Options are then accessed this.attr_('attr'), which first looks at + // user_attrs_ and then computed attrs_. This way Dygraphs can set intelligent + // defaults without overriding behavior that the user specifically asks for. + this.user_attrs_ = {}; + Dygraph.update(this.user_attrs_, attrs); + + // This sequence ensures that Dygraph.DEFAULT_ATTRS is never modified. + this.attrs_ = {}; + Dygraph.updateDeep(this.attrs_, Dygraph.DEFAULT_ATTRS); + + this.boundaryIds_ = []; + this.setIndexByName_ = {}; + this.datasetIndex_ = []; + + this.registeredEvents_ = []; + this.eventListeners_ = {}; + + this.attributes_ = new DygraphOptions(this); + + // Create the containing DIV and other interactive elements + this.createInterface_(); + + // Activate plugins. + this.plugins_ = []; + var plugins = Dygraph.PLUGINS.concat(this.getOption('plugins')); + for (var i = 0; i < plugins.length; i++) { + // the plugins option may contain either plugin classes or instances. + // Plugin instances contain an activate method. + var Plugin = plugins[i]; // either a constructor or an instance. + var pluginInstance; + if (typeof(Plugin.activate) !== 'undefined') { + pluginInstance = Plugin; + } else { + pluginInstance = new Plugin(); + } + + var pluginDict = { + plugin: pluginInstance, + events: {}, + options: {}, + pluginOptions: {} + }; + + var handlers = pluginInstance.activate(this); + for (var eventName in handlers) { + if (!handlers.hasOwnProperty(eventName)) continue; + // TODO(danvk): validate eventName. + pluginDict.events[eventName] = handlers[eventName]; + } + + this.plugins_.push(pluginDict); + } + + // At this point, plugins can no longer register event handlers. + // Construct a map from event -> ordered list of [callback, plugin]. + for (var i = 0; i < this.plugins_.length; i++) { + var plugin_dict = this.plugins_[i]; + for (var eventName in plugin_dict.events) { + if (!plugin_dict.events.hasOwnProperty(eventName)) continue; + var callback = plugin_dict.events[eventName]; + + var pair = [plugin_dict.plugin, callback]; + if (!(eventName in this.eventListeners_)) { + this.eventListeners_[eventName] = [pair]; + } else { + this.eventListeners_[eventName].push(pair); + } + } + } + + this.createDragInterface_(); + + this.start_(); +}; + +/** + * Triggers a cascade of events to the various plugins which are interested in them. + * Returns true if the "default behavior" should be prevented, i.e. if one + * of the event listeners called event.preventDefault(). + * @private + */ +Dygraph.prototype.cascadeEvents_ = function(name, extra_props) { + if (!(name in this.eventListeners_)) return false; + + // QUESTION: can we use objects & prototypes to speed this up? + var e = { + dygraph: this, + cancelable: false, + defaultPrevented: false, + preventDefault: function() { + if (!e.cancelable) throw "Cannot call preventDefault on non-cancelable event."; + e.defaultPrevented = true; + }, + propagationStopped: false, + stopPropagation: function() { + e.propagationStopped = true; + } + }; + Dygraph.update(e, extra_props); + + var callback_plugin_pairs = this.eventListeners_[name]; + if (callback_plugin_pairs) { + for (var i = callback_plugin_pairs.length - 1; i >= 0; i--) { + var plugin = callback_plugin_pairs[i][0]; + var callback = callback_plugin_pairs[i][1]; + callback.call(plugin, e); + if (e.propagationStopped) break; + } + } + return e.defaultPrevented; +}; + +/** + * Fetch a plugin instance of a particular class. Only for testing. + * @private + * @param {!Class} type The type of the plugin. + * @return {Object} Instance of the plugin, or null if there is none. + */ +Dygraph.prototype.getPluginInstance_ = function(type) { + for (var i = 0; i < this.plugins_.length; i++) { + var p = this.plugins_[i]; + if (p.plugin instanceof type) { + return p.plugin; + } + } + return null; +}; + +/** + * Returns the zoomed status of the chart for one or both axes. + * + * Axis is an optional parameter. Can be set to 'x' or 'y'. + * + * The zoomed status for an axis is set whenever a user zooms using the mouse + * or when the dateWindow or valueRange are updated (unless the + * isZoomedIgnoreProgrammaticZoom option is also specified). + */ +Dygraph.prototype.isZoomed = function(axis) { + if (axis === null || axis === undefined) { + return this.zoomed_x_ || this.zoomed_y_; + } + if (axis === 'x') return this.zoomed_x_; + if (axis === 'y') return this.zoomed_y_; + throw "axis parameter is [" + axis + "] must be null, 'x' or 'y'."; +}; + +/** + * Returns information about the Dygraph object, including its containing ID. + */ +Dygraph.prototype.toString = function() { + var maindiv = this.maindiv_; + var id = (maindiv && maindiv.id) ? maindiv.id : maindiv; + return "[Dygraph " + id + "]"; +}; + +/** + * @private + * Returns the value of an option. This may be set by the user (either in the + * constructor or by calling updateOptions) or by dygraphs, and may be set to a + * per-series value. + * @param {string} name The name of the option, e.g. 'rollPeriod'. + * @param {string} [seriesName] The name of the series to which the option + * will be applied. If no per-series value of this option is available, then + * the global value is returned. This is optional. + * @return { ... } The value of the option. + */ +Dygraph.prototype.attr_ = function(name, seriesName) { + if (DEBUG) { + if (typeof(Dygraph.OPTIONS_REFERENCE) === 'undefined') { + console.error('Must include options reference JS for testing'); + } else if (!Dygraph.OPTIONS_REFERENCE.hasOwnProperty(name)) { + console.error('Dygraphs is using property ' + name + ', which has no ' + + 'entry in the Dygraphs.OPTIONS_REFERENCE listing.'); + // Only log this error once. + Dygraph.OPTIONS_REFERENCE[name] = true; + } + } + return seriesName ? this.attributes_.getForSeries(name, seriesName) : this.attributes_.get(name); +}; + +/** + * Returns the current value for an option, as set in the constructor or via + * updateOptions. You may pass in an (optional) series name to get per-series + * values for the option. + * + * All values returned by this method should be considered immutable. If you + * modify them, there is no guarantee that the changes will be honored or that + * dygraphs will remain in a consistent state. If you want to modify an option, + * use updateOptions() instead. + * + * @param {string} name The name of the option (e.g. 'strokeWidth') + * @param {string=} opt_seriesName Series name to get per-series values. + * @return {*} The value of the option. + */ +Dygraph.prototype.getOption = function(name, opt_seriesName) { + return this.attr_(name, opt_seriesName); +}; + +/** + * Like getOption(), but specifically returns a number. + * This is a convenience function for working with the Closure Compiler. + * @param {string} name The name of the option (e.g. 'strokeWidth') + * @param {string=} opt_seriesName Series name to get per-series values. + * @return {number} The value of the option. + * @private + */ +Dygraph.prototype.getNumericOption = function(name, opt_seriesName) { + return /** @type{number} */(this.getOption(name, opt_seriesName)); +}; + +/** + * Like getOption(), but specifically returns a string. + * This is a convenience function for working with the Closure Compiler. + * @param {string} name The name of the option (e.g. 'strokeWidth') + * @param {string=} opt_seriesName Series name to get per-series values. + * @return {string} The value of the option. + * @private + */ +Dygraph.prototype.getStringOption = function(name, opt_seriesName) { + return /** @type{string} */(this.getOption(name, opt_seriesName)); +}; + +/** + * Like getOption(), but specifically returns a boolean. + * This is a convenience function for working with the Closure Compiler. + * @param {string} name The name of the option (e.g. 'strokeWidth') + * @param {string=} opt_seriesName Series name to get per-series values. + * @return {boolean} The value of the option. + * @private + */ +Dygraph.prototype.getBooleanOption = function(name, opt_seriesName) { + return /** @type{boolean} */(this.getOption(name, opt_seriesName)); +}; + +/** + * Like getOption(), but specifically returns a function. + * This is a convenience function for working with the Closure Compiler. + * @param {string} name The name of the option (e.g. 'strokeWidth') + * @param {string=} opt_seriesName Series name to get per-series values. + * @return {function(...)} The value of the option. + * @private + */ +Dygraph.prototype.getFunctionOption = function(name, opt_seriesName) { + return /** @type{function(...)} */(this.getOption(name, opt_seriesName)); +}; + +Dygraph.prototype.getOptionForAxis = function(name, axis) { + return this.attributes_.getForAxis(name, axis); +}; + +/** + * @private + * @param {string} axis The name of the axis (i.e. 'x', 'y' or 'y2') + * @return { ... } A function mapping string -> option value + */ +Dygraph.prototype.optionsViewForAxis_ = function(axis) { + var self = this; + return function(opt) { + var axis_opts = self.user_attrs_.axes; + if (axis_opts && axis_opts[axis] && axis_opts[axis].hasOwnProperty(opt)) { + return axis_opts[axis][opt]; + } + + // I don't like that this is in a second spot. + if (axis === 'x' && opt === 'logscale') { + // return the default value. + // TODO(konigsberg): pull the default from a global default. + return false; + } + + // user-specified attributes always trump defaults, even if they're less + // specific. + if (typeof(self.user_attrs_[opt]) != 'undefined') { + return self.user_attrs_[opt]; + } + + axis_opts = self.attrs_.axes; + if (axis_opts && axis_opts[axis] && axis_opts[axis].hasOwnProperty(opt)) { + return axis_opts[axis][opt]; + } + // check old-style axis options + // TODO(danvk): add a deprecation warning if either of these match. + if (axis == 'y' && self.axes_[0].hasOwnProperty(opt)) { + return self.axes_[0][opt]; + } else if (axis == 'y2' && self.axes_[1].hasOwnProperty(opt)) { + return self.axes_[1][opt]; + } + return self.attr_(opt); + }; +}; + +/** + * Returns the current rolling period, as set by the user or an option. + * @return {number} The number of points in the rolling window + */ +Dygraph.prototype.rollPeriod = function() { + return this.rollPeriod_; +}; + +/** + * Returns the currently-visible x-range. This can be affected by zooming, + * panning or a call to updateOptions. + * Returns a two-element array: [left, right]. + * If the Dygraph has dates on the x-axis, these will be millis since epoch. + */ +Dygraph.prototype.xAxisRange = function() { + return this.dateWindow_ ? this.dateWindow_ : this.xAxisExtremes(); +}; + +/** + * Returns the lower- and upper-bound x-axis values of the + * data set. + */ +Dygraph.prototype.xAxisExtremes = function() { + var pad = this.getNumericOption('xRangePad') / this.plotter_.area.w; + if (this.numRows() === 0) { + return [0 - pad, 1 + pad]; + } + var left = this.rawData_[0][0]; + var right = this.rawData_[this.rawData_.length - 1][0]; + if (pad) { + // Must keep this in sync with dygraph-layout _evaluateLimits() + var range = right - left; + left -= range * pad; + right += range * pad; + } + return [left, right]; +}; + +/** + * Returns the currently-visible y-range for an axis. This can be affected by + * zooming, panning or a call to updateOptions. Axis indices are zero-based. If + * called with no arguments, returns the range of the first axis. + * Returns a two-element array: [bottom, top]. + */ +Dygraph.prototype.yAxisRange = function(idx) { + if (typeof(idx) == "undefined") idx = 0; + if (idx < 0 || idx >= this.axes_.length) { + return null; + } + var axis = this.axes_[idx]; + return [ axis.computedValueRange[0], axis.computedValueRange[1] ]; +}; + +/** + * Returns the currently-visible y-ranges for each axis. This can be affected by + * zooming, panning, calls to updateOptions, etc. + * Returns an array of [bottom, top] pairs, one for each y-axis. + */ +Dygraph.prototype.yAxisRanges = function() { + var ret = []; + for (var i = 0; i < this.axes_.length; i++) { + ret.push(this.yAxisRange(i)); + } + return ret; +}; + +// TODO(danvk): use these functions throughout dygraphs. +/** + * Convert from data coordinates to canvas/div X/Y coordinates. + * If specified, do this conversion for the coordinate system of a particular + * axis. Uses the first axis by default. + * Returns a two-element array: [X, Y] + * + * Note: use toDomXCoord instead of toDomCoords(x, null) and use toDomYCoord + * instead of toDomCoords(null, y, axis). + */ +Dygraph.prototype.toDomCoords = function(x, y, axis) { + return [ this.toDomXCoord(x), this.toDomYCoord(y, axis) ]; +}; + +/** + * Convert from data x coordinates to canvas/div X coordinate. + * If specified, do this conversion for the coordinate system of a particular + * axis. + * Returns a single value or null if x is null. + */ +Dygraph.prototype.toDomXCoord = function(x) { + if (x === null) { + return null; + } + + var area = this.plotter_.area; + var xRange = this.xAxisRange(); + return area.x + (x - xRange[0]) / (xRange[1] - xRange[0]) * area.w; +}; + +/** + * Convert from data x coordinates to canvas/div Y coordinate and optional + * axis. Uses the first axis by default. + * + * returns a single value or null if y is null. + */ +Dygraph.prototype.toDomYCoord = function(y, axis) { + var pct = this.toPercentYCoord(y, axis); + + if (pct === null) { + return null; + } + var area = this.plotter_.area; + return area.y + pct * area.h; +}; + +/** + * Convert from canvas/div coords to data coordinates. + * If specified, do this conversion for the coordinate system of a particular + * axis. Uses the first axis by default. + * Returns a two-element array: [X, Y]. + * + * Note: use toDataXCoord instead of toDataCoords(x, null) and use toDataYCoord + * instead of toDataCoords(null, y, axis). + */ +Dygraph.prototype.toDataCoords = function(x, y, axis) { + return [ this.toDataXCoord(x), this.toDataYCoord(y, axis) ]; +}; + +/** + * Convert from canvas/div x coordinate to data coordinate. + * + * If x is null, this returns null. + */ +Dygraph.prototype.toDataXCoord = function(x) { + if (x === null) { + return null; + } + + var area = this.plotter_.area; + var xRange = this.xAxisRange(); + + if (!this.attributes_.getForAxis("logscale", 'x')) { + return xRange[0] + (x - area.x) / area.w * (xRange[1] - xRange[0]); + } else { + // TODO: remove duplicate code? + // Computing the inverse of toDomCoord. + var pct = (x - area.x) / area.w; + + // Computing the inverse of toPercentXCoord. The function was arrived at with + // the following steps: + // + // Original calcuation: + // pct = (log(x) - log(xRange[0])) / (log(xRange[1]) - log(xRange[0]))); + // + // Multiply both sides by the right-side demoninator. + // pct * (log(xRange[1] - log(xRange[0]))) = log(x) - log(xRange[0]) + // + // add log(xRange[0]) to both sides + // log(xRange[0]) + (pct * (log(xRange[1]) - log(xRange[0])) = log(x); + // + // Swap both sides of the equation, + // log(x) = log(xRange[0]) + (pct * (log(xRange[1]) - log(xRange[0])) + // + // Use both sides as the exponent in 10^exp and we're done. + // x = 10 ^ (log(xRange[0]) + (pct * (log(xRange[1]) - log(xRange[0]))) + var logr0 = Dygraph.log10(xRange[0]); + var logr1 = Dygraph.log10(xRange[1]); + var exponent = logr0 + (pct * (logr1 - logr0)); + var value = Math.pow(Dygraph.LOG_SCALE, exponent); + return value; + } +}; + +/** + * Convert from canvas/div y coord to value. + * + * If y is null, this returns null. + * if axis is null, this uses the first axis. + */ +Dygraph.prototype.toDataYCoord = function(y, axis) { + if (y === null) { + return null; + } + + var area = this.plotter_.area; + var yRange = this.yAxisRange(axis); + + if (typeof(axis) == "undefined") axis = 0; + if (!this.attributes_.getForAxis("logscale", axis)) { + return yRange[0] + (area.y + area.h - y) / area.h * (yRange[1] - yRange[0]); + } else { + // Computing the inverse of toDomCoord. + var pct = (y - area.y) / area.h; + + // Computing the inverse of toPercentYCoord. The function was arrived at with + // the following steps: + // + // Original calcuation: + // pct = (log(yRange[1]) - log(y)) / (log(yRange[1]) - log(yRange[0])); + // + // Multiply both sides by the right-side demoninator. + // pct * (log(yRange[1]) - log(yRange[0])) = log(yRange[1]) - log(y); + // + // subtract log(yRange[1]) from both sides. + // (pct * (log(yRange[1]) - log(yRange[0]))) - log(yRange[1]) = -log(y); + // + // and multiply both sides by -1. + // log(yRange[1]) - (pct * (logr1 - log(yRange[0])) = log(y); + // + // Swap both sides of the equation, + // log(y) = log(yRange[1]) - (pct * (log(yRange[1]) - log(yRange[0]))); + // + // Use both sides as the exponent in 10^exp and we're done. + // y = 10 ^ (log(yRange[1]) - (pct * (log(yRange[1]) - log(yRange[0])))); + var logr0 = Dygraph.log10(yRange[0]); + var logr1 = Dygraph.log10(yRange[1]); + var exponent = logr1 - (pct * (logr1 - logr0)); + var value = Math.pow(Dygraph.LOG_SCALE, exponent); + return value; + } +}; + +/** + * Converts a y for an axis to a percentage from the top to the + * bottom of the drawing area. + * + * If the coordinate represents a value visible on the canvas, then + * the value will be between 0 and 1, where 0 is the top of the canvas. + * However, this method will return values outside the range, as + * values can fall outside the canvas. + * + * If y is null, this returns null. + * if axis is null, this uses the first axis. + * + * @param {number} y The data y-coordinate. + * @param {number} [axis] The axis number on which the data coordinate lives. + * @return {number} A fraction in [0, 1] where 0 = the top edge. + */ +Dygraph.prototype.toPercentYCoord = function(y, axis) { + if (y === null) { + return null; + } + if (typeof(axis) == "undefined") axis = 0; + + var yRange = this.yAxisRange(axis); + + var pct; + var logscale = this.attributes_.getForAxis("logscale", axis); + if (logscale) { + var logr0 = Dygraph.log10(yRange[0]); + var logr1 = Dygraph.log10(yRange[1]); + pct = (logr1 - Dygraph.log10(y)) / (logr1 - logr0); + } else { + // yRange[1] - y is unit distance from the bottom. + // yRange[1] - yRange[0] is the scale of the range. + // (yRange[1] - y) / (yRange[1] - yRange[0]) is the % from the bottom. + pct = (yRange[1] - y) / (yRange[1] - yRange[0]); + } + return pct; +}; + +/** + * Converts an x value to a percentage from the left to the right of + * the drawing area. + * + * If the coordinate represents a value visible on the canvas, then + * the value will be between 0 and 1, where 0 is the left of the canvas. + * However, this method will return values outside the range, as + * values can fall outside the canvas. + * + * If x is null, this returns null. + * @param {number} x The data x-coordinate. + * @return {number} A fraction in [0, 1] where 0 = the left edge. + */ +Dygraph.prototype.toPercentXCoord = function(x) { + if (x === null) { + return null; + } + + var xRange = this.xAxisRange(); + var pct; + var logscale = this.attributes_.getForAxis("logscale", 'x') ; + if (logscale === true) { // logscale can be null so we test for true explicitly. + var logr0 = Dygraph.log10(xRange[0]); + var logr1 = Dygraph.log10(xRange[1]); + pct = (Dygraph.log10(x) - logr0) / (logr1 - logr0); + } else { + // x - xRange[0] is unit distance from the left. + // xRange[1] - xRange[0] is the scale of the range. + // The full expression below is the % from the left. + pct = (x - xRange[0]) / (xRange[1] - xRange[0]); + } + return pct; +}; + +/** + * Returns the number of columns (including the independent variable). + * @return {number} The number of columns. + */ +Dygraph.prototype.numColumns = function() { + if (!this.rawData_) return 0; + return this.rawData_[0] ? this.rawData_[0].length : this.attr_("labels").length; +}; + +/** + * Returns the number of rows (excluding any header/label row). + * @return {number} The number of rows, less any header. + */ +Dygraph.prototype.numRows = function() { + if (!this.rawData_) return 0; + return this.rawData_.length; +}; + +/** + * Returns the value in the given row and column. If the row and column exceed + * the bounds on the data, returns null. Also returns null if the value is + * missing. + * @param {number} row The row number of the data (0-based). Row 0 is the + * first row of data, not a header row. + * @param {number} col The column number of the data (0-based) + * @return {number} The value in the specified cell or null if the row/col + * were out of range. + */ +Dygraph.prototype.getValue = function(row, col) { + if (row < 0 || row > this.rawData_.length) return null; + if (col < 0 || col > this.rawData_[row].length) return null; + + return this.rawData_[row][col]; +}; + +/** + * Generates interface elements for the Dygraph: a containing div, a div to + * display the current point, and a textbox to adjust the rolling average + * period. Also creates the Renderer/Layout elements. + * @private + */ +Dygraph.prototype.createInterface_ = function() { + // Create the all-enclosing graph div + var enclosing = this.maindiv_; + + this.graphDiv = document.createElement("div"); + + // TODO(danvk): any other styles that are useful to set here? + this.graphDiv.style.textAlign = 'left'; // This is a CSS "reset" + this.graphDiv.style.position = 'relative'; + enclosing.appendChild(this.graphDiv); + + // Create the canvas for interactive parts of the chart. + this.canvas_ = Dygraph.createCanvas(); + this.canvas_.style.position = "absolute"; + + // ... and for static parts of the chart. + this.hidden_ = this.createPlotKitCanvas_(this.canvas_); + + this.canvas_ctx_ = Dygraph.getContext(this.canvas_); + this.hidden_ctx_ = Dygraph.getContext(this.hidden_); + + this.resizeElements_(); + + // The interactive parts of the graph are drawn on top of the chart. + this.graphDiv.appendChild(this.hidden_); + this.graphDiv.appendChild(this.canvas_); + this.mouseEventElement_ = this.createMouseEventElement_(); + + // Create the grapher + this.layout_ = new DygraphLayout(this); + + var dygraph = this; + + this.mouseMoveHandler_ = function(e) { + dygraph.mouseMove_(e); + }; + + this.mouseOutHandler_ = function(e) { + // The mouse has left the chart if: + // 1. e.target is inside the chart + // 2. e.relatedTarget is outside the chart + var target = e.target || e.fromElement; + var relatedTarget = e.relatedTarget || e.toElement; + if (Dygraph.isNodeContainedBy(target, dygraph.graphDiv) && + !Dygraph.isNodeContainedBy(relatedTarget, dygraph.graphDiv)) { + dygraph.mouseOut_(e); + } + }; + + this.addAndTrackEvent(window, 'mouseout', this.mouseOutHandler_); + this.addAndTrackEvent(this.mouseEventElement_, 'mousemove', this.mouseMoveHandler_); + + // Don't recreate and register the resize handler on subsequent calls. + // This happens when the graph is resized. + if (!this.resizeHandler_) { + this.resizeHandler_ = function(e) { + dygraph.resize(); + }; + + // Update when the window is resized. + // TODO(danvk): drop frames depending on complexity of the chart. + this.addAndTrackEvent(window, 'resize', this.resizeHandler_); + } +}; + +Dygraph.prototype.resizeElements_ = function() { + this.graphDiv.style.width = this.width_ + "px"; + this.graphDiv.style.height = this.height_ + "px"; + + var canvasScale = Dygraph.getContextPixelRatio(this.canvas_ctx_); + this.canvas_.width = this.width_ * canvasScale; + this.canvas_.height = this.height_ * canvasScale; + this.canvas_.style.width = this.width_ + "px"; // for IE + this.canvas_.style.height = this.height_ + "px"; // for IE + if (canvasScale !== 1) { + this.canvas_ctx_.scale(canvasScale, canvasScale); + } + + var hiddenScale = Dygraph.getContextPixelRatio(this.hidden_ctx_); + this.hidden_.width = this.width_ * hiddenScale; + this.hidden_.height = this.height_ * hiddenScale; + this.hidden_.style.width = this.width_ + "px"; // for IE + this.hidden_.style.height = this.height_ + "px"; // for IE + if (hiddenScale !== 1) { + this.hidden_ctx_.scale(hiddenScale, hiddenScale); + } +}; + +/** + * Detach DOM elements in the dygraph and null out all data references. + * Calling this when you're done with a dygraph can dramatically reduce memory + * usage. See, e.g., the tests/perf.html example. + */ +Dygraph.prototype.destroy = function() { + this.canvas_ctx_.restore(); + this.hidden_ctx_.restore(); + + // Destroy any plugins, in the reverse order that they were registered. + for (var i = this.plugins_.length - 1; i >= 0; i--) { + var p = this.plugins_.pop(); + if (p.plugin.destroy) p.plugin.destroy(); + } + + var removeRecursive = function(node) { + while (node.hasChildNodes()) { + removeRecursive(node.firstChild); + node.removeChild(node.firstChild); + } + }; + + this.removeTrackedEvents_(); + + // remove mouse event handlers (This may not be necessary anymore) + Dygraph.removeEvent(window, 'mouseout', this.mouseOutHandler_); + Dygraph.removeEvent(this.mouseEventElement_, 'mousemove', this.mouseMoveHandler_); + + // remove window handlers + Dygraph.removeEvent(window,'resize', this.resizeHandler_); + this.resizeHandler_ = null; + + removeRecursive(this.maindiv_); + + var nullOut = function(obj) { + for (var n in obj) { + if (typeof(obj[n]) === 'object') { + obj[n] = null; + } + } + }; + // These may not all be necessary, but it can't hurt... + nullOut(this.layout_); + nullOut(this.plotter_); + nullOut(this); +}; + +/** + * Creates the canvas on which the chart will be drawn. Only the Renderer ever + * draws on this particular canvas. All Dygraph work (i.e. drawing hover dots + * or the zoom rectangles) is done on this.canvas_. + * @param {Object} canvas The Dygraph canvas over which to overlay the plot + * @return {Object} The newly-created canvas + * @private + */ +Dygraph.prototype.createPlotKitCanvas_ = function(canvas) { + var h = Dygraph.createCanvas(); + h.style.position = "absolute"; + // TODO(danvk): h should be offset from canvas. canvas needs to include + // some extra area to make it easier to zoom in on the far left and far + // right. h needs to be precisely the plot area, so that clipping occurs. + h.style.top = canvas.style.top; + h.style.left = canvas.style.left; + h.width = this.width_; + h.height = this.height_; + h.style.width = this.width_ + "px"; // for IE + h.style.height = this.height_ + "px"; // for IE + return h; +}; + +/** + * Creates an overlay element used to handle mouse events. + * @return {Object} The mouse event element. + * @private + */ +Dygraph.prototype.createMouseEventElement_ = function() { + if (this.isUsingExcanvas_) { + var elem = document.createElement("div"); + elem.style.position = 'absolute'; + elem.style.backgroundColor = 'white'; + elem.style.filter = 'alpha(opacity=0)'; + elem.style.width = this.width_ + "px"; + elem.style.height = this.height_ + "px"; + this.graphDiv.appendChild(elem); + return elem; + } else { + return this.canvas_; + } +}; + +/** + * Generate a set of distinct colors for the data series. This is done with a + * color wheel. Saturation/Value are customizable, and the hue is + * equally-spaced around the color wheel. If a custom set of colors is + * specified, that is used instead. + * @private + */ +Dygraph.prototype.setColors_ = function() { + var labels = this.getLabels(); + var num = labels.length - 1; + this.colors_ = []; + this.colorsMap_ = {}; + + // These are used for when no custom colors are specified. + var sat = this.getNumericOption('colorSaturation') || 1.0; + var val = this.getNumericOption('colorValue') || 0.5; + var half = Math.ceil(num / 2); + + var colors = this.getOption('colors'); + var visibility = this.visibility(); + for (var i = 0; i < num; i++) { + if (!visibility[i]) { + continue; + } + var label = labels[i + 1]; + var colorStr = this.attributes_.getForSeries('color', label); + if (!colorStr) { + if (colors) { + colorStr = colors[i % colors.length]; + } else { + // alternate colors for high contrast. + var idx = i % 2 ? (half + (i + 1)/ 2) : Math.ceil((i + 1) / 2); + var hue = (1.0 * idx / (1 + num)); + colorStr = Dygraph.hsvToRGB(hue, sat, val); + } + } + this.colors_.push(colorStr); + this.colorsMap_[label] = colorStr; + } +}; + +/** + * Return the list of colors. This is either the list of colors passed in the + * attributes or the autogenerated list of rgb(r,g,b) strings. + * This does not return colors for invisible series. + * @return {Array.} The list of colors. + */ +Dygraph.prototype.getColors = function() { + return this.colors_; +}; + +/** + * Returns a few attributes of a series, i.e. its color, its visibility, which + * axis it's assigned to, and its column in the original data. + * Returns null if the series does not exist. + * Otherwise, returns an object with column, visibility, color and axis properties. + * The "axis" property will be set to 1 for y1 and 2 for y2. + * The "column" property can be fed back into getValue(row, column) to get + * values for this series. + */ +Dygraph.prototype.getPropertiesForSeries = function(series_name) { + var idx = -1; + var labels = this.getLabels(); + for (var i = 1; i < labels.length; i++) { + if (labels[i] == series_name) { + idx = i; + break; + } + } + if (idx == -1) return null; + + return { + name: series_name, + column: idx, + visible: this.visibility()[idx - 1], + color: this.colorsMap_[series_name], + axis: 1 + this.attributes_.axisForSeries(series_name) + }; +}; + +/** + * Create the text box to adjust the averaging period + * @private + */ +Dygraph.prototype.createRollInterface_ = function() { + // Create a roller if one doesn't exist already. + if (!this.roller_) { + this.roller_ = document.createElement("input"); + this.roller_.type = "text"; + this.roller_.style.display = "none"; + this.graphDiv.appendChild(this.roller_); + } + + var display = this.getBooleanOption('showRoller') ? 'block' : 'none'; + + var area = this.plotter_.area; + var textAttr = { "position": "absolute", + "zIndex": 10, + "top": (area.y + area.h - 25) + "px", + "left": (area.x + 1) + "px", + "display": display + }; + this.roller_.size = "2"; + this.roller_.value = this.rollPeriod_; + for (var name in textAttr) { + if (textAttr.hasOwnProperty(name)) { + this.roller_.style[name] = textAttr[name]; + } + } + + var dygraph = this; + this.roller_.onchange = function() { dygraph.adjustRoll(dygraph.roller_.value); }; +}; + +/** + * Set up all the mouse handlers needed to capture dragging behavior for zoom + * events. + * @private + */ +Dygraph.prototype.createDragInterface_ = function() { + var context = { + // Tracks whether the mouse is down right now + isZooming: false, + isPanning: false, // is this drag part of a pan? + is2DPan: false, // if so, is that pan 1- or 2-dimensional? + dragStartX: null, // pixel coordinates + dragStartY: null, // pixel coordinates + dragEndX: null, // pixel coordinates + dragEndY: null, // pixel coordinates + dragDirection: null, + prevEndX: null, // pixel coordinates + prevEndY: null, // pixel coordinates + prevDragDirection: null, + cancelNextDblclick: false, // see comment in dygraph-interaction-model.js + + // The value on the left side of the graph when a pan operation starts. + initialLeftmostDate: null, + + // The number of units each pixel spans. (This won't be valid for log + // scales) + xUnitsPerPixel: null, + + // TODO(danvk): update this comment + // The range in second/value units that the viewport encompasses during a + // panning operation. + dateRange: null, + + // Top-left corner of the canvas, in DOM coords + // TODO(konigsberg): Rename topLeftCanvasX, topLeftCanvasY. + px: 0, + py: 0, + + // Values for use with panEdgeFraction, which limit how far outside the + // graph's data boundaries it can be panned. + boundedDates: null, // [minDate, maxDate] + boundedValues: null, // [[minValue, maxValue] ...] + + // We cover iframes during mouse interactions. See comments in + // dygraph-utils.js for more info on why this is a good idea. + tarp: new Dygraph.IFrameTarp(), + + // contextB is the same thing as this context object but renamed. + initializeMouseDown: function(event, g, contextB) { + // prevents mouse drags from selecting page text. + if (event.preventDefault) { + event.preventDefault(); // Firefox, Chrome, etc. + } else { + event.returnValue = false; // IE + event.cancelBubble = true; + } + + var canvasPos = Dygraph.findPos(g.canvas_); + contextB.px = canvasPos.x; + contextB.py = canvasPos.y; + contextB.dragStartX = Dygraph.dragGetX_(event, contextB); + contextB.dragStartY = Dygraph.dragGetY_(event, contextB); + contextB.cancelNextDblclick = false; + contextB.tarp.cover(); + }, + destroy: function() { + var context = this; + if (context.isZooming || context.isPanning) { + context.isZooming = false; + context.dragStartX = null; + context.dragStartY = null; + } + + if (context.isPanning) { + context.isPanning = false; + context.draggingDate = null; + context.dateRange = null; + for (var i = 0; i < self.axes_.length; i++) { + delete self.axes_[i].draggingValue; + delete self.axes_[i].dragValueRange; + } + } + + context.tarp.uncover(); + } + }; + + var interactionModel = this.getOption("interactionModel"); + + // Self is the graph. + var self = this; + + // Function that binds the graph and context to the handler. + var bindHandler = function(handler) { + return function(event) { + handler(event, self, context); + }; + }; + + for (var eventName in interactionModel) { + if (!interactionModel.hasOwnProperty(eventName)) continue; + this.addAndTrackEvent(this.mouseEventElement_, eventName, + bindHandler(interactionModel[eventName])); + } + + // If the user releases the mouse button during a drag, but not over the + // canvas, then it doesn't count as a zooming action. + if (!interactionModel.willDestroyContextMyself) { + var mouseUpHandler = function(event) { + context.destroy(); + }; + + this.addAndTrackEvent(document, 'mouseup', mouseUpHandler); + } +}; + +/** + * Draw a gray zoom rectangle over the desired area of the canvas. Also clears + * up any previous zoom rectangles that were drawn. This could be optimized to + * avoid extra redrawing, but it's tricky to avoid interactions with the status + * dots. + * + * @param {number} direction the direction of the zoom rectangle. Acceptable + * values are Dygraph.HORIZONTAL and Dygraph.VERTICAL. + * @param {number} startX The X position where the drag started, in canvas + * coordinates. + * @param {number} endX The current X position of the drag, in canvas coords. + * @param {number} startY The Y position where the drag started, in canvas + * coordinates. + * @param {number} endY The current Y position of the drag, in canvas coords. + * @param {number} prevDirection the value of direction on the previous call to + * this function. Used to avoid excess redrawing + * @param {number} prevEndX The value of endX on the previous call to this + * function. Used to avoid excess redrawing + * @param {number} prevEndY The value of endY on the previous call to this + * function. Used to avoid excess redrawing + * @private + */ +Dygraph.prototype.drawZoomRect_ = function(direction, startX, endX, startY, + endY, prevDirection, prevEndX, + prevEndY) { + var ctx = this.canvas_ctx_; + + // Clean up from the previous rect if necessary + if (prevDirection == Dygraph.HORIZONTAL) { + ctx.clearRect(Math.min(startX, prevEndX), this.layout_.getPlotArea().y, + Math.abs(startX - prevEndX), this.layout_.getPlotArea().h); + } else if (prevDirection == Dygraph.VERTICAL) { + ctx.clearRect(this.layout_.getPlotArea().x, Math.min(startY, prevEndY), + this.layout_.getPlotArea().w, Math.abs(startY - prevEndY)); + } + + // Draw a light-grey rectangle to show the new viewing area + if (direction == Dygraph.HORIZONTAL) { + if (endX && startX) { + ctx.fillStyle = "rgba(128,128,128,0.33)"; + ctx.fillRect(Math.min(startX, endX), this.layout_.getPlotArea().y, + Math.abs(endX - startX), this.layout_.getPlotArea().h); + } + } else if (direction == Dygraph.VERTICAL) { + if (endY && startY) { + ctx.fillStyle = "rgba(128,128,128,0.33)"; + ctx.fillRect(this.layout_.getPlotArea().x, Math.min(startY, endY), + this.layout_.getPlotArea().w, Math.abs(endY - startY)); + } + } + + if (this.isUsingExcanvas_) { + this.currentZoomRectArgs_ = [direction, startX, endX, startY, endY, 0, 0, 0]; + } +}; + +/** + * Clear the zoom rectangle (and perform no zoom). + * @private + */ +Dygraph.prototype.clearZoomRect_ = function() { + this.currentZoomRectArgs_ = null; + this.canvas_ctx_.clearRect(0, 0, this.width_, this.height_); +}; + +/** + * Zoom to something containing [lowX, highX]. These are pixel coordinates in + * the canvas. The exact zoom window may be slightly larger if there are no data + * points near lowX or highX. Don't confuse this function with doZoomXDates, + * which accepts dates that match the raw data. This function redraws the graph. + * + * @param {number} lowX The leftmost pixel value that should be visible. + * @param {number} highX The rightmost pixel value that should be visible. + * @private + */ +Dygraph.prototype.doZoomX_ = function(lowX, highX) { + this.currentZoomRectArgs_ = null; + // Find the earliest and latest dates contained in this canvasx range. + // Convert the call to date ranges of the raw data. + var minDate = this.toDataXCoord(lowX); + var maxDate = this.toDataXCoord(highX); + this.doZoomXDates_(minDate, maxDate); +}; + +/** + * Zoom to something containing [minDate, maxDate] values. Don't confuse this + * method with doZoomX which accepts pixel coordinates. This function redraws + * the graph. + * + * @param {number} minDate The minimum date that should be visible. + * @param {number} maxDate The maximum date that should be visible. + * @private + */ +Dygraph.prototype.doZoomXDates_ = function(minDate, maxDate) { + // TODO(danvk): when xAxisRange is null (i.e. "fit to data", the animation + // can produce strange effects. Rather than the x-axis transitioning slowly + // between values, it can jerk around.) + var old_window = this.xAxisRange(); + var new_window = [minDate, maxDate]; + this.zoomed_x_ = true; + var that = this; + this.doAnimatedZoom(old_window, new_window, null, null, function() { + if (that.getFunctionOption("zoomCallback")) { + that.getFunctionOption("zoomCallback").call(that, + minDate, maxDate, that.yAxisRanges()); + } + }); +}; + +/** + * Zoom to something containing [lowY, highY]. These are pixel coordinates in + * the canvas. This function redraws the graph. + * + * @param {number} lowY The topmost pixel value that should be visible. + * @param {number} highY The lowest pixel value that should be visible. + * @private + */ +Dygraph.prototype.doZoomY_ = function(lowY, highY) { + this.currentZoomRectArgs_ = null; + // Find the highest and lowest values in pixel range for each axis. + // Note that lowY (in pixels) corresponds to the max Value (in data coords). + // This is because pixels increase as you go down on the screen, whereas data + // coordinates increase as you go up the screen. + var oldValueRanges = this.yAxisRanges(); + var newValueRanges = []; + for (var i = 0; i < this.axes_.length; i++) { + var hi = this.toDataYCoord(lowY, i); + var low = this.toDataYCoord(highY, i); + newValueRanges.push([low, hi]); + } + + this.zoomed_y_ = true; + var that = this; + this.doAnimatedZoom(null, null, oldValueRanges, newValueRanges, function() { + if (that.getFunctionOption("zoomCallback")) { + var xRange = that.xAxisRange(); + that.getFunctionOption("zoomCallback").call(that, + xRange[0], xRange[1], that.yAxisRanges()); + } + }); +}; + +/** + * Transition function to use in animations. Returns values between 0.0 + * (totally old values) and 1.0 (totally new values) for each frame. + * @private + */ +Dygraph.zoomAnimationFunction = function(frame, numFrames) { + var k = 1.5; + return (1.0 - Math.pow(k, -frame)) / (1.0 - Math.pow(k, -numFrames)); +}; + +/** + * Reset the zoom to the original view coordinates. This is the same as + * double-clicking on the graph. + */ +Dygraph.prototype.resetZoom = function() { + var dirty = false, dirtyX = false, dirtyY = false; + if (this.dateWindow_ !== null) { + dirty = true; + dirtyX = true; + } + + for (var i = 0; i < this.axes_.length; i++) { + if (typeof(this.axes_[i].valueWindow) !== 'undefined' && this.axes_[i].valueWindow !== null) { + dirty = true; + dirtyY = true; + } + } + + // Clear any selection, since it's likely to be drawn in the wrong place. + this.clearSelection(); + + if (dirty) { + this.zoomed_x_ = false; + this.zoomed_y_ = false; + + var minDate = this.rawData_[0][0]; + var maxDate = this.rawData_[this.rawData_.length - 1][0]; + + // With only one frame, don't bother calculating extreme ranges. + // TODO(danvk): merge this block w/ the code below. + if (!this.getBooleanOption("animatedZooms")) { + this.dateWindow_ = null; + for (i = 0; i < this.axes_.length; i++) { + if (this.axes_[i].valueWindow !== null) { + delete this.axes_[i].valueWindow; + } + } + this.drawGraph_(); + if (this.getFunctionOption("zoomCallback")) { + this.getFunctionOption("zoomCallback").call(this, + minDate, maxDate, this.yAxisRanges()); + } + return; + } + + var oldWindow=null, newWindow=null, oldValueRanges=null, newValueRanges=null; + if (dirtyX) { + oldWindow = this.xAxisRange(); + newWindow = [minDate, maxDate]; + } + + if (dirtyY) { + oldValueRanges = this.yAxisRanges(); + // TODO(danvk): this is pretty inefficient + var packed = this.gatherDatasets_(this.rolledSeries_, null); + var extremes = packed.extremes; + + // this has the side-effect of modifying this.axes_. + // this doesn't make much sense in this context, but it's convenient (we + // need this.axes_[*].extremeValues) and not harmful since we'll be + // calling drawGraph_ shortly, which clobbers these values. + this.computeYAxisRanges_(extremes); + + newValueRanges = []; + for (i = 0; i < this.axes_.length; i++) { + var axis = this.axes_[i]; + newValueRanges.push((axis.valueRange !== null && + axis.valueRange !== undefined) ? + axis.valueRange : axis.extremeRange); + } + } + + var that = this; + this.doAnimatedZoom(oldWindow, newWindow, oldValueRanges, newValueRanges, + function() { + that.dateWindow_ = null; + for (var i = 0; i < that.axes_.length; i++) { + if (that.axes_[i].valueWindow !== null) { + delete that.axes_[i].valueWindow; + } + } + if (that.getFunctionOption("zoomCallback")) { + that.getFunctionOption("zoomCallback").call(that, + minDate, maxDate, that.yAxisRanges()); + } + }); + } +}; + +/** + * Combined animation logic for all zoom functions. + * either the x parameters or y parameters may be null. + * @private + */ +Dygraph.prototype.doAnimatedZoom = function(oldXRange, newXRange, oldYRanges, newYRanges, callback) { + var steps = this.getBooleanOption("animatedZooms") ? + Dygraph.ANIMATION_STEPS : 1; + + var windows = []; + var valueRanges = []; + var step, frac; + + if (oldXRange !== null && newXRange !== null) { + for (step = 1; step <= steps; step++) { + frac = Dygraph.zoomAnimationFunction(step, steps); + windows[step-1] = [oldXRange[0]*(1-frac) + frac*newXRange[0], + oldXRange[1]*(1-frac) + frac*newXRange[1]]; + } + } + + if (oldYRanges !== null && newYRanges !== null) { + for (step = 1; step <= steps; step++) { + frac = Dygraph.zoomAnimationFunction(step, steps); + var thisRange = []; + for (var j = 0; j < this.axes_.length; j++) { + thisRange.push([oldYRanges[j][0]*(1-frac) + frac*newYRanges[j][0], + oldYRanges[j][1]*(1-frac) + frac*newYRanges[j][1]]); + } + valueRanges[step-1] = thisRange; + } + } + + var that = this; + Dygraph.repeatAndCleanup(function(step) { + if (valueRanges.length) { + for (var i = 0; i < that.axes_.length; i++) { + var w = valueRanges[step][i]; + that.axes_[i].valueWindow = [w[0], w[1]]; + } + } + if (windows.length) { + that.dateWindow_ = windows[step]; + } + that.drawGraph_(); + }, steps, Dygraph.ANIMATION_DURATION / steps, callback); +}; + +/** + * Get the current graph's area object. + * + * Returns: {x, y, w, h} + */ +Dygraph.prototype.getArea = function() { + return this.plotter_.area; +}; + +/** + * Convert a mouse event to DOM coordinates relative to the graph origin. + * + * Returns a two-element array: [X, Y]. + */ +Dygraph.prototype.eventToDomCoords = function(event) { + if (event.offsetX && event.offsetY) { + return [ event.offsetX, event.offsetY ]; + } else { + var eventElementPos = Dygraph.findPos(this.mouseEventElement_); + var canvasx = Dygraph.pageX(event) - eventElementPos.x; + var canvasy = Dygraph.pageY(event) - eventElementPos.y; + return [canvasx, canvasy]; + } +}; + +/** + * Given a canvas X coordinate, find the closest row. + * @param {number} domX graph-relative DOM X coordinate + * Returns {number} row number. + * @private + */ +Dygraph.prototype.findClosestRow = function(domX) { + var minDistX = Infinity; + var closestRow = -1; + var sets = this.layout_.points; + for (var i = 0; i < sets.length; i++) { + var points = sets[i]; + var len = points.length; + for (var j = 0; j < len; j++) { + var point = points[j]; + if (!Dygraph.isValidPoint(point, true)) continue; + var dist = Math.abs(point.canvasx - domX); + if (dist < minDistX) { + minDistX = dist; + closestRow = point.idx; + } + } + } + + return closestRow; +}; + +/** + * Given canvas X,Y coordinates, find the closest point. + * + * This finds the individual data point across all visible series + * that's closest to the supplied DOM coordinates using the standard + * Euclidean X,Y distance. + * + * @param {number} domX graph-relative DOM X coordinate + * @param {number} domY graph-relative DOM Y coordinate + * Returns: {row, seriesName, point} + * @private + */ +Dygraph.prototype.findClosestPoint = function(domX, domY) { + var minDist = Infinity; + var dist, dx, dy, point, closestPoint, closestSeries, closestRow; + for ( var setIdx = this.layout_.points.length - 1 ; setIdx >= 0 ; --setIdx ) { + var points = this.layout_.points[setIdx]; + for (var i = 0; i < points.length; ++i) { + point = points[i]; + if (!Dygraph.isValidPoint(point)) continue; + dx = point.canvasx - domX; + dy = point.canvasy - domY; + dist = dx * dx + dy * dy; + if (dist < minDist) { + minDist = dist; + closestPoint = point; + closestSeries = setIdx; + closestRow = point.idx; + } + } + } + var name = this.layout_.setNames[closestSeries]; + return { + row: closestRow, + seriesName: name, + point: closestPoint + }; +}; + +/** + * Given canvas X,Y coordinates, find the touched area in a stacked graph. + * + * This first finds the X data point closest to the supplied DOM X coordinate, + * then finds the series which puts the Y coordinate on top of its filled area, + * using linear interpolation between adjacent point pairs. + * + * @param {number} domX graph-relative DOM X coordinate + * @param {number} domY graph-relative DOM Y coordinate + * Returns: {row, seriesName, point} + * @private + */ +Dygraph.prototype.findStackedPoint = function(domX, domY) { + var row = this.findClosestRow(domX); + var closestPoint, closestSeries; + for (var setIdx = 0; setIdx < this.layout_.points.length; ++setIdx) { + var boundary = this.getLeftBoundary_(setIdx); + var rowIdx = row - boundary; + var points = this.layout_.points[setIdx]; + if (rowIdx >= points.length) continue; + var p1 = points[rowIdx]; + if (!Dygraph.isValidPoint(p1)) continue; + var py = p1.canvasy; + if (domX > p1.canvasx && rowIdx + 1 < points.length) { + // interpolate series Y value using next point + var p2 = points[rowIdx + 1]; + if (Dygraph.isValidPoint(p2)) { + var dx = p2.canvasx - p1.canvasx; + if (dx > 0) { + var r = (domX - p1.canvasx) / dx; + py += r * (p2.canvasy - p1.canvasy); + } + } + } else if (domX < p1.canvasx && rowIdx > 0) { + // interpolate series Y value using previous point + var p0 = points[rowIdx - 1]; + if (Dygraph.isValidPoint(p0)) { + var dx = p1.canvasx - p0.canvasx; + if (dx > 0) { + var r = (p1.canvasx - domX) / dx; + py += r * (p0.canvasy - p1.canvasy); + } + } + } + // Stop if the point (domX, py) is above this series' upper edge + if (setIdx === 0 || py < domY) { + closestPoint = p1; + closestSeries = setIdx; + } + } + var name = this.layout_.setNames[closestSeries]; + return { + row: row, + seriesName: name, + point: closestPoint + }; +}; + +/** + * When the mouse moves in the canvas, display information about a nearby data + * point and draw dots over those points in the data series. This function + * takes care of cleanup of previously-drawn dots. + * @param {Object} event The mousemove event from the browser. + * @private + */ +Dygraph.prototype.mouseMove_ = function(event) { + // This prevents JS errors when mousing over the canvas before data loads. + var points = this.layout_.points; + if (points === undefined || points === null) return; + + var canvasCoords = this.eventToDomCoords(event); + var canvasx = canvasCoords[0]; + var canvasy = canvasCoords[1]; + + var highlightSeriesOpts = this.getOption("highlightSeriesOpts"); + var selectionChanged = false; + if (highlightSeriesOpts && !this.isSeriesLocked()) { + var closest; + if (this.getBooleanOption("stackedGraph")) { + closest = this.findStackedPoint(canvasx, canvasy); + } else { + closest = this.findClosestPoint(canvasx, canvasy); + } + selectionChanged = this.setSelection(closest.row, closest.seriesName); + } else { + var idx = this.findClosestRow(canvasx); + selectionChanged = this.setSelection(idx); + } + + var callback = this.getFunctionOption("highlightCallback"); + if (callback && selectionChanged) { + callback.call(this, event, + this.lastx_, + this.selPoints_, + this.lastRow_, + this.highlightSet_); + } +}; + +/** + * Fetch left offset from the specified set index or if not passed, the + * first defined boundaryIds record (see bug #236). + * @private + */ +Dygraph.prototype.getLeftBoundary_ = function(setIdx) { + if (this.boundaryIds_[setIdx]) { + return this.boundaryIds_[setIdx][0]; + } else { + for (var i = 0; i < this.boundaryIds_.length; i++) { + if (this.boundaryIds_[i] !== undefined) { + return this.boundaryIds_[i][0]; + } + } + return 0; + } +}; + +Dygraph.prototype.animateSelection_ = function(direction) { + var totalSteps = 10; + var millis = 30; + if (this.fadeLevel === undefined) this.fadeLevel = 0; + if (this.animateId === undefined) this.animateId = 0; + var start = this.fadeLevel; + var steps = direction < 0 ? start : totalSteps - start; + if (steps <= 0) { + if (this.fadeLevel) { + this.updateSelection_(1.0); + } + return; + } + + var thisId = ++this.animateId; + var that = this; + Dygraph.repeatAndCleanup( + function(n) { + // ignore simultaneous animations + if (that.animateId != thisId) return; + + that.fadeLevel += direction; + if (that.fadeLevel === 0) { + that.clearSelection(); + } else { + that.updateSelection_(that.fadeLevel / totalSteps); + } + }, + steps, millis, function() {}); +}; + +/** + * Draw dots over the selectied points in the data series. This function + * takes care of cleanup of previously-drawn dots. + * @private + */ +Dygraph.prototype.updateSelection_ = function(opt_animFraction) { + /*var defaultPrevented = */ + this.cascadeEvents_('select', { + selectedX: this.lastx_, + selectedPoints: this.selPoints_ + }); + // TODO(danvk): use defaultPrevented here? + + // Clear the previously drawn vertical, if there is one + var i; + var ctx = this.canvas_ctx_; + if (this.getOption('highlightSeriesOpts')) { + ctx.clearRect(0, 0, this.width_, this.height_); + var alpha = 1.0 - this.getNumericOption('highlightSeriesBackgroundAlpha'); + if (alpha) { + // Activating background fade includes an animation effect for a gradual + // fade. TODO(klausw): make this independently configurable if it causes + // issues? Use a shared preference to control animations? + var animateBackgroundFade = true; + if (animateBackgroundFade) { + if (opt_animFraction === undefined) { + // start a new animation + this.animateSelection_(1); + return; + } + alpha *= opt_animFraction; + } + ctx.fillStyle = 'rgba(255,255,255,' + alpha + ')'; + ctx.fillRect(0, 0, this.width_, this.height_); + } + + // Redraw only the highlighted series in the interactive canvas (not the + // static plot canvas, which is where series are usually drawn). + this.plotter_._renderLineChart(this.highlightSet_, ctx); + } else if (this.previousVerticalX_ >= 0) { + // Determine the maximum highlight circle size. + var maxCircleSize = 0; + var labels = this.attr_('labels'); + for (i = 1; i < labels.length; i++) { + var r = this.getNumericOption('highlightCircleSize', labels[i]); + if (r > maxCircleSize) maxCircleSize = r; + } + var px = this.previousVerticalX_; + ctx.clearRect(px - maxCircleSize - 1, 0, + 2 * maxCircleSize + 2, this.height_); + } + + if (this.isUsingExcanvas_ && this.currentZoomRectArgs_) { + Dygraph.prototype.drawZoomRect_.apply(this, this.currentZoomRectArgs_); + } + + if (this.selPoints_.length > 0) { + // Draw colored circles over the center of each selected point + var canvasx = this.selPoints_[0].canvasx; + ctx.save(); + for (i = 0; i < this.selPoints_.length; i++) { + var pt = this.selPoints_[i]; + if (!Dygraph.isOK(pt.canvasy)) continue; + + var circleSize = this.getNumericOption('highlightCircleSize', pt.name); + var callback = this.getFunctionOption("drawHighlightPointCallback", pt.name); + var color = this.plotter_.colors[pt.name]; + if (!callback) { + callback = Dygraph.Circles.DEFAULT; + } + ctx.lineWidth = this.getNumericOption('strokeWidth', pt.name); + ctx.strokeStyle = color; + ctx.fillStyle = color; + callback.call(this, this, pt.name, ctx, canvasx, pt.canvasy, + color, circleSize, pt.idx); + } + ctx.restore(); + + this.previousVerticalX_ = canvasx; + } +}; + +/** + * Manually set the selected points and display information about them in the + * legend. The selection can be cleared using clearSelection() and queried + * using getSelection(). + * @param {number} row Row number that should be highlighted (i.e. appear with + * hover dots on the chart). + * @param {seriesName} optional series name to highlight that series with the + * the highlightSeriesOpts setting. + * @param { locked } optional If true, keep seriesName selected when mousing + * over the graph, disabling closest-series highlighting. Call clearSelection() + * to unlock it. + */ +Dygraph.prototype.setSelection = function(row, opt_seriesName, opt_locked) { + // Extract the points we've selected + this.selPoints_ = []; + + var changed = false; + if (row !== false && row >= 0) { + if (row != this.lastRow_) changed = true; + this.lastRow_ = row; + for (var setIdx = 0; setIdx < this.layout_.points.length; ++setIdx) { + var points = this.layout_.points[setIdx]; + // Check if the point at the appropriate index is the point we're looking + // for. If it is, just use it, otherwise search the array for a point + // in the proper place. + var setRow = row - this.getLeftBoundary_(setIdx); + if (setRow < points.length && points[setRow].idx == row) { + var point = points[setRow]; + if (point.yval !== null) this.selPoints_.push(point); + } else { + for (var pointIdx = 0; pointIdx < points.length; ++pointIdx) { + var point = points[pointIdx]; + if (point.idx == row) { + if (point.yval !== null) { + this.selPoints_.push(point); + } + break; + } + } + } + } + } else { + if (this.lastRow_ >= 0) changed = true; + this.lastRow_ = -1; + } + + if (this.selPoints_.length) { + this.lastx_ = this.selPoints_[0].xval; + } else { + this.lastx_ = -1; + } + + if (opt_seriesName !== undefined) { + if (this.highlightSet_ !== opt_seriesName) changed = true; + this.highlightSet_ = opt_seriesName; + } + + if (opt_locked !== undefined) { + this.lockedSet_ = opt_locked; + } + + if (changed) { + this.updateSelection_(undefined); + } + return changed; +}; + +/** + * The mouse has left the canvas. Clear out whatever artifacts remain + * @param {Object} event the mouseout event from the browser. + * @private + */ +Dygraph.prototype.mouseOut_ = function(event) { + if (this.getFunctionOption("unhighlightCallback")) { + this.getFunctionOption("unhighlightCallback").call(this, event); + } + + if (this.getBooleanOption("hideOverlayOnMouseOut") && !this.lockedSet_) { + this.clearSelection(); + } +}; + +/** + * Clears the current selection (i.e. points that were highlighted by moving + * the mouse over the chart). + */ +Dygraph.prototype.clearSelection = function() { + this.cascadeEvents_('deselect', {}); + + this.lockedSet_ = false; + // Get rid of the overlay data + if (this.fadeLevel) { + this.animateSelection_(-1); + return; + } + this.canvas_ctx_.clearRect(0, 0, this.width_, this.height_); + this.fadeLevel = 0; + this.selPoints_ = []; + this.lastx_ = -1; + this.lastRow_ = -1; + this.highlightSet_ = null; +}; + +/** + * Returns the number of the currently selected row. To get data for this row, + * you can use the getValue method. + * @return {number} row number, or -1 if nothing is selected + */ +Dygraph.prototype.getSelection = function() { + if (!this.selPoints_ || this.selPoints_.length < 1) { + return -1; + } + + for (var setIdx = 0; setIdx < this.layout_.points.length; setIdx++) { + var points = this.layout_.points[setIdx]; + for (var row = 0; row < points.length; row++) { + if (points[row].x == this.selPoints_[0].x) { + return points[row].idx; + } + } + } + return -1; +}; + +/** + * Returns the name of the currently-highlighted series. + * Only available when the highlightSeriesOpts option is in use. + */ +Dygraph.prototype.getHighlightSeries = function() { + return this.highlightSet_; +}; + +/** + * Returns true if the currently-highlighted series was locked + * via setSelection(..., seriesName, true). + */ +Dygraph.prototype.isSeriesLocked = function() { + return this.lockedSet_; +}; + +/** + * Fires when there's data available to be graphed. + * @param {string} data Raw CSV data to be plotted + * @private + */ +Dygraph.prototype.loadedEvent_ = function(data) { + this.rawData_ = this.parseCSV_(data); + this.cascadeDataDidUpdateEvent_(); + this.predraw_(); +}; + +/** + * Add ticks on the x-axis representing years, months, quarters, weeks, or days + * @private + */ +Dygraph.prototype.addXTicks_ = function() { + // Determine the correct ticks scale on the x-axis: quarterly, monthly, ... + var range; + if (this.dateWindow_) { + range = [this.dateWindow_[0], this.dateWindow_[1]]; + } else { + range = this.xAxisExtremes(); + } + + var xAxisOptionsView = this.optionsViewForAxis_('x'); + var xTicks = xAxisOptionsView('ticker')( + range[0], + range[1], + this.plotter_.area.w, // TODO(danvk): should be area.width + xAxisOptionsView, + this); + // var msg = 'ticker(' + range[0] + ', ' + range[1] + ', ' + this.width_ + ', ' + this.attr_('pixelsPerXLabel') + ') -> ' + JSON.stringify(xTicks); + // console.log(msg); + this.layout_.setXTicks(xTicks); +}; + +/** + * Returns the correct handler class for the currently set options. + * @private + */ +Dygraph.prototype.getHandlerClass_ = function() { + var handlerClass; + if (this.attr_('dataHandler')) { + handlerClass = this.attr_('dataHandler'); + } else if (this.fractions_) { + if (this.getBooleanOption('errorBars')) { + handlerClass = Dygraph.DataHandlers.FractionsBarsHandler; + } else { + handlerClass = Dygraph.DataHandlers.DefaultFractionHandler; + } + } else if (this.getBooleanOption('customBars')) { + handlerClass = Dygraph.DataHandlers.CustomBarsHandler; + } else if (this.getBooleanOption('errorBars')) { + handlerClass = Dygraph.DataHandlers.ErrorBarsHandler; + } else { + handlerClass = Dygraph.DataHandlers.DefaultHandler; + } + return handlerClass; +}; + +/** + * @private + * This function is called once when the chart's data is changed or the options + * dictionary is updated. It is _not_ called when the user pans or zooms. The + * idea is that values derived from the chart's data can be computed here, + * rather than every time the chart is drawn. This includes things like the + * number of axes, rolling averages, etc. + */ +Dygraph.prototype.predraw_ = function() { + var start = new Date(); + + // Create the correct dataHandler + this.dataHandler_ = new (this.getHandlerClass_())(); + + this.layout_.computePlotArea(); + + // TODO(danvk): move more computations out of drawGraph_ and into here. + this.computeYAxes_(); + + if (!this.is_initial_draw_) { + this.canvas_ctx_.restore(); + this.hidden_ctx_.restore(); + } + + this.canvas_ctx_.save(); + this.hidden_ctx_.save(); + + // Create a new plotter. + this.plotter_ = new DygraphCanvasRenderer(this, + this.hidden_, + this.hidden_ctx_, + this.layout_); + + // The roller sits in the bottom left corner of the chart. We don't know where + // this will be until the options are available, so it's positioned here. + this.createRollInterface_(); + + this.cascadeEvents_('predraw'); + + // Convert the raw data (a 2D array) into the internal format and compute + // rolling averages. + this.rolledSeries_ = [null]; // x-axis is the first series and it's special + for (var i = 1; i < this.numColumns(); i++) { + // var logScale = this.attr_('logscale', i); // TODO(klausw): this looks wrong // konigsberg thinks so too. + var series = this.dataHandler_.extractSeries(this.rawData_, i, this.attributes_); + if (this.rollPeriod_ > 1) { + series = this.dataHandler_.rollingAverage(series, this.rollPeriod_, this.attributes_); + } + + this.rolledSeries_.push(series); + } + + // If the data or options have changed, then we'd better redraw. + this.drawGraph_(); + + // This is used to determine whether to do various animations. + var end = new Date(); + this.drawingTimeMs_ = (end - start); +}; + +/** + * Point structure. + * + * xval_* and yval_* are the original unscaled data values, + * while x_* and y_* are scaled to the range (0.0-1.0) for plotting. + * yval_stacked is the cumulative Y value used for stacking graphs, + * and bottom/top/minus/plus are used for error bar graphs. + * + * @typedef {{ + * idx: number, + * name: string, + * x: ?number, + * xval: ?number, + * y_bottom: ?number, + * y: ?number, + * y_stacked: ?number, + * y_top: ?number, + * yval_minus: ?number, + * yval: ?number, + * yval_plus: ?number, + * yval_stacked + * }} + */ +Dygraph.PointType = undefined; + +/** + * Calculates point stacking for stackedGraph=true. + * + * For stacking purposes, interpolate or extend neighboring data across + * NaN values based on stackedGraphNaNFill settings. This is for display + * only, the underlying data value as shown in the legend remains NaN. + * + * @param {Array.} points Point array for a single series. + * Updates each Point's yval_stacked property. + * @param {Array.} cumulativeYval Accumulated top-of-graph stacked Y + * values for the series seen so far. Index is the row number. Updated + * based on the current series's values. + * @param {Array.} seriesExtremes Min and max values, updated + * to reflect the stacked values. + * @param {string} fillMethod Interpolation method, one of 'all', 'inside', or + * 'none'. + * @private + */ +Dygraph.stackPoints_ = function( + points, cumulativeYval, seriesExtremes, fillMethod) { + var lastXval = null; + var prevPoint = null; + var nextPoint = null; + var nextPointIdx = -1; + + // Find the next stackable point starting from the given index. + var updateNextPoint = function(idx) { + // If we've previously found a non-NaN point and haven't gone past it yet, + // just use that. + if (nextPointIdx >= idx) return; + + // We haven't found a non-NaN point yet or have moved past it, + // look towards the right to find a non-NaN point. + for (var j = idx; j < points.length; ++j) { + // Clear out a previously-found point (if any) since it's no longer + // valid, we shouldn't use it for interpolation anymore. + nextPoint = null; + if (!isNaN(points[j].yval) && points[j].yval !== null) { + nextPointIdx = j; + nextPoint = points[j]; + break; + } + } + }; + + for (var i = 0; i < points.length; ++i) { + var point = points[i]; + var xval = point.xval; + if (cumulativeYval[xval] === undefined) { + cumulativeYval[xval] = 0; + } + + var actualYval = point.yval; + if (isNaN(actualYval) || actualYval === null) { + if(fillMethod == 'none') { + actualYval = 0; + } else { + // Interpolate/extend for stacking purposes if possible. + updateNextPoint(i); + if (prevPoint && nextPoint && fillMethod != 'none') { + // Use linear interpolation between prevPoint and nextPoint. + actualYval = prevPoint.yval + (nextPoint.yval - prevPoint.yval) * + ((xval - prevPoint.xval) / (nextPoint.xval - prevPoint.xval)); + } else if (prevPoint && fillMethod == 'all') { + actualYval = prevPoint.yval; + } else if (nextPoint && fillMethod == 'all') { + actualYval = nextPoint.yval; + } else { + actualYval = 0; + } + } + } else { + prevPoint = point; + } + + var stackedYval = cumulativeYval[xval]; + if (lastXval != xval) { + // If an x-value is repeated, we ignore the duplicates. + stackedYval += actualYval; + cumulativeYval[xval] = stackedYval; + } + lastXval = xval; + + point.yval_stacked = stackedYval; + + if (stackedYval > seriesExtremes[1]) { + seriesExtremes[1] = stackedYval; + } + if (stackedYval < seriesExtremes[0]) { + seriesExtremes[0] = stackedYval; + } + } +}; + + +/** + * Loop over all fields and create datasets, calculating extreme y-values for + * each series and extreme x-indices as we go. + * + * dateWindow is passed in as an explicit parameter so that we can compute + * extreme values "speculatively", i.e. without actually setting state on the + * dygraph. + * + * @param {Array.)>>} rolledSeries, where + * rolledSeries[seriesIndex][row] = raw point, where + * seriesIndex is the column number starting with 1, and + * rawPoint is [x,y] or [x, [y, err]] or [x, [y, yminus, yplus]]. + * @param {?Array.} dateWindow [xmin, xmax] pair, or null. + * @return {{ + * points: Array.>, + * seriesExtremes: Array.>, + * boundaryIds: Array.}} + * @private + */ +Dygraph.prototype.gatherDatasets_ = function(rolledSeries, dateWindow) { + var boundaryIds = []; + var points = []; + var cumulativeYval = []; // For stacked series. + var extremes = {}; // series name -> [low, high] + var seriesIdx, sampleIdx; + var firstIdx, lastIdx; + var axisIdx; + + // Loop over the fields (series). Go from the last to the first, + // because if they're stacked that's how we accumulate the values. + var num_series = rolledSeries.length - 1; + var series; + for (seriesIdx = num_series; seriesIdx >= 1; seriesIdx--) { + if (!this.visibility()[seriesIdx - 1]) continue; + + // Prune down to the desired range, if necessary (for zooming) + // Because there can be lines going to points outside of the visible area, + // we actually prune to visible points, plus one on either side. + if (dateWindow) { + series = rolledSeries[seriesIdx]; + var low = dateWindow[0]; + var high = dateWindow[1]; + + // TODO(danvk): do binary search instead of linear search. + // TODO(danvk): pass firstIdx and lastIdx directly to the renderer. + firstIdx = null; + lastIdx = null; + for (sampleIdx = 0; sampleIdx < series.length; sampleIdx++) { + if (series[sampleIdx][0] >= low && firstIdx === null) { + firstIdx = sampleIdx; + } + if (series[sampleIdx][0] <= high) { + lastIdx = sampleIdx; + } + } + + if (firstIdx === null) firstIdx = 0; + var correctedFirstIdx = firstIdx; + var isInvalidValue = true; + while (isInvalidValue && correctedFirstIdx > 0) { + correctedFirstIdx--; + // check if the y value is null. + isInvalidValue = series[correctedFirstIdx][1] === null; + } + + if (lastIdx === null) lastIdx = series.length - 1; + var correctedLastIdx = lastIdx; + isInvalidValue = true; + while (isInvalidValue && correctedLastIdx < series.length - 1) { + correctedLastIdx++; + isInvalidValue = series[correctedLastIdx][1] === null; + } + + if (correctedFirstIdx!==firstIdx) { + firstIdx = correctedFirstIdx; + } + if (correctedLastIdx !== lastIdx) { + lastIdx = correctedLastIdx; + } + + boundaryIds[seriesIdx-1] = [firstIdx, lastIdx]; + + // .slice's end is exclusive, we want to include lastIdx. + series = series.slice(firstIdx, lastIdx + 1); + } else { + series = rolledSeries[seriesIdx]; + boundaryIds[seriesIdx-1] = [0, series.length-1]; + } + + var seriesName = this.attr_("labels")[seriesIdx]; + var seriesExtremes = this.dataHandler_.getExtremeYValues(series, + dateWindow, this.getBooleanOption("stepPlot",seriesName)); + + var seriesPoints = this.dataHandler_.seriesToPoints(series, + seriesName, boundaryIds[seriesIdx-1][0]); + + if (this.getBooleanOption("stackedGraph")) { + axisIdx = this.attributes_.axisForSeries(seriesName); + if (cumulativeYval[axisIdx] === undefined) { + cumulativeYval[axisIdx] = []; + } + Dygraph.stackPoints_(seriesPoints, cumulativeYval[axisIdx], seriesExtremes, + this.getBooleanOption("stackedGraphNaNFill")); + } + + extremes[seriesName] = seriesExtremes; + points[seriesIdx] = seriesPoints; + } + + return { points: points, extremes: extremes, boundaryIds: boundaryIds }; +}; + +/** + * Update the graph with new data. This method is called when the viewing area + * has changed. If the underlying data or options have changed, predraw_ will + * be called before drawGraph_ is called. + * + * @private + */ +Dygraph.prototype.drawGraph_ = function() { + var start = new Date(); + + // This is used to set the second parameter to drawCallback, below. + var is_initial_draw = this.is_initial_draw_; + this.is_initial_draw_ = false; + + this.layout_.removeAllDatasets(); + this.setColors_(); + this.attrs_.pointSize = 0.5 * this.getNumericOption('highlightCircleSize'); + + var packed = this.gatherDatasets_(this.rolledSeries_, this.dateWindow_); + var points = packed.points; + var extremes = packed.extremes; + this.boundaryIds_ = packed.boundaryIds; + + this.setIndexByName_ = {}; + var labels = this.attr_("labels"); + if (labels.length > 0) { + this.setIndexByName_[labels[0]] = 0; + } + var dataIdx = 0; + for (var i = 1; i < points.length; i++) { + this.setIndexByName_[labels[i]] = i; + if (!this.visibility()[i - 1]) continue; + this.layout_.addDataset(labels[i], points[i]); + this.datasetIndex_[i] = dataIdx++; + } + + this.computeYAxisRanges_(extremes); + this.layout_.setYAxes(this.axes_); + + this.addXTicks_(); + + // Save the X axis zoomed status as the updateOptions call will tend to set it erroneously + var tmp_zoomed_x = this.zoomed_x_; + // Tell PlotKit to use this new data and render itself + this.zoomed_x_ = tmp_zoomed_x; + this.layout_.evaluate(); + this.renderGraph_(is_initial_draw); + + if (this.getStringOption("timingName")) { + var end = new Date(); + console.log(this.getStringOption("timingName") + " - drawGraph: " + (end - start) + "ms"); + } +}; + +/** + * This does the work of drawing the chart. It assumes that the layout and axis + * scales have already been set (e.g. by predraw_). + * + * @private + */ +Dygraph.prototype.renderGraph_ = function(is_initial_draw) { + this.cascadeEvents_('clearChart'); + this.plotter_.clear(); + + if (this.getFunctionOption('underlayCallback')) { + // NOTE: we pass the dygraph object to this callback twice to avoid breaking + // users who expect a deprecated form of this callback. + this.getFunctionOption('underlayCallback').call(this, + this.hidden_ctx_, this.layout_.getPlotArea(), this, this); + } + + var e = { + canvas: this.hidden_, + drawingContext: this.hidden_ctx_ + }; + this.cascadeEvents_('willDrawChart', e); + this.plotter_.render(); + this.cascadeEvents_('didDrawChart', e); + this.lastRow_ = -1; // because plugins/legend.js clears the legend + + // TODO(danvk): is this a performance bottleneck when panning? + // The interaction canvas should already be empty in that situation. + this.canvas_.getContext('2d').clearRect(0, 0, this.width_, this.height_); + + if (this.getFunctionOption("drawCallback") !== null) { + this.getFunctionOption("drawCallback")(this, is_initial_draw); + } + if (is_initial_draw) { + this.readyFired_ = true; + while (this.readyFns_.length > 0) { + var fn = this.readyFns_.pop(); + fn(this); + } + } +}; + +/** + * @private + * Determine properties of the y-axes which are independent of the data + * currently being displayed. This includes things like the number of axes and + * the style of the axes. It does not include the range of each axis and its + * tick marks. + * This fills in this.axes_. + * axes_ = [ { options } ] + * indices are into the axes_ array. + */ +Dygraph.prototype.computeYAxes_ = function() { + // Preserve valueWindow settings if they exist, and if the user hasn't + // specified a new valueRange. + var valueWindows, axis, index, opts, v; + if (this.axes_ !== undefined && this.user_attrs_.hasOwnProperty("valueRange") === false) { + valueWindows = []; + for (index = 0; index < this.axes_.length; index++) { + valueWindows.push(this.axes_[index].valueWindow); + } + } + + // this.axes_ doesn't match this.attributes_.axes_.options. It's used for + // data computation as well as options storage. + // Go through once and add all the axes. + this.axes_ = []; + + for (axis = 0; axis < this.attributes_.numAxes(); axis++) { + // Add a new axis, making a copy of its per-axis options. + opts = { g : this }; + Dygraph.update(opts, this.attributes_.axisOptions(axis)); + this.axes_[axis] = opts; + } + + + // Copy global valueRange option over to the first axis. + // NOTE(konigsberg): Are these two statements necessary? + // I tried removing it. The automated tests pass, and manually + // messing with tests/zoom.html showed no trouble. + v = this.attr_('valueRange'); + if (v) this.axes_[0].valueRange = v; + + if (valueWindows !== undefined) { + // Restore valueWindow settings. + + // When going from two axes back to one, we only restore + // one axis. + var idxCount = Math.min(valueWindows.length, this.axes_.length); + + for (index = 0; index < idxCount; index++) { + this.axes_[index].valueWindow = valueWindows[index]; + } + } + + for (axis = 0; axis < this.axes_.length; axis++) { + if (axis === 0) { + opts = this.optionsViewForAxis_('y' + (axis ? '2' : '')); + v = opts("valueRange"); + if (v) this.axes_[axis].valueRange = v; + } else { // To keep old behavior + var axes = this.user_attrs_.axes; + if (axes && axes.y2) { + v = axes.y2.valueRange; + if (v) this.axes_[axis].valueRange = v; + } + } + } +}; + +/** + * Returns the number of y-axes on the chart. + * @return {number} the number of axes. + */ +Dygraph.prototype.numAxes = function() { + return this.attributes_.numAxes(); +}; + +/** + * @private + * Returns axis properties for the given series. + * @param {string} setName The name of the series for which to get axis + * properties, e.g. 'Y1'. + * @return {Object} The axis properties. + */ +Dygraph.prototype.axisPropertiesForSeries = function(series) { + // TODO(danvk): handle errors. + return this.axes_[this.attributes_.axisForSeries(series)]; +}; + +/** + * @private + * Determine the value range and tick marks for each axis. + * @param {Object} extremes A mapping from seriesName -> [low, high] + * This fills in the valueRange and ticks fields in each entry of this.axes_. + */ +Dygraph.prototype.computeYAxisRanges_ = function(extremes) { + var isNullUndefinedOrNaN = function(num) { + return isNaN(parseFloat(num)); + }; + var numAxes = this.attributes_.numAxes(); + var ypadCompat, span, series, ypad; + + var p_axis; + + // Compute extreme values, a span and tick marks for each axis. + for (var i = 0; i < numAxes; i++) { + var axis = this.axes_[i]; + var logscale = this.attributes_.getForAxis("logscale", i); + var includeZero = this.attributes_.getForAxis("includeZero", i); + var independentTicks = this.attributes_.getForAxis("independentTicks", i); + series = this.attributes_.seriesForAxis(i); + + // Add some padding. This supports two Y padding operation modes: + // + // - backwards compatible (yRangePad not set): + // 10% padding for automatic Y ranges, but not for user-supplied + // ranges, and move a close-to-zero edge to zero except if + // avoidMinZero is set, since drawing at the edge results in + // invisible lines. Unfortunately lines drawn at the edge of a + // user-supplied range will still be invisible. If logscale is + // set, add a variable amount of padding at the top but + // none at the bottom. + // + // - new-style (yRangePad set by the user): + // always add the specified Y padding. + // + ypadCompat = true; + ypad = 0.1; // add 10% + if (this.getNumericOption('yRangePad') !== null) { + ypadCompat = false; + // Convert pixel padding to ratio + ypad = this.getNumericOption('yRangePad') / this.plotter_.area.h; + } + + if (series.length === 0) { + // If no series are defined or visible then use a reasonable default + axis.extremeRange = [0, 1]; + } else { + // Calculate the extremes of extremes. + var minY = Infinity; // extremes[series[0]][0]; + var maxY = -Infinity; // extremes[series[0]][1]; + var extremeMinY, extremeMaxY; + + for (var j = 0; j < series.length; j++) { + // this skips invisible series + if (!extremes.hasOwnProperty(series[j])) continue; + + // Only use valid extremes to stop null data series' from corrupting the scale. + extremeMinY = extremes[series[j]][0]; + if (extremeMinY !== null) { + minY = Math.min(extremeMinY, minY); + } + extremeMaxY = extremes[series[j]][1]; + if (extremeMaxY !== null) { + maxY = Math.max(extremeMaxY, maxY); + } + } + + // Include zero if requested by the user. + if (includeZero && !logscale) { + if (minY > 0) minY = 0; + if (maxY < 0) maxY = 0; + } + + // Ensure we have a valid scale, otherwise default to [0, 1] for safety. + if (minY == Infinity) minY = 0; + if (maxY == -Infinity) maxY = 1; + + span = maxY - minY; + // special case: if we have no sense of scale, center on the sole value. + if (span === 0) { + if (maxY !== 0) { + span = Math.abs(maxY); + } else { + // ... and if the sole value is zero, use range 0-1. + maxY = 1; + span = 1; + } + } + + var maxAxisY, minAxisY; + if (logscale) { + if (ypadCompat) { + maxAxisY = maxY + ypad * span; + minAxisY = minY; + } else { + var logpad = Math.exp(Math.log(span) * ypad); + maxAxisY = maxY * logpad; + minAxisY = minY / logpad; + } + } else { + maxAxisY = maxY + ypad * span; + minAxisY = minY - ypad * span; + + // Backwards-compatible behavior: Move the span to start or end at zero if it's + // close to zero, but not if avoidMinZero is set. + if (ypadCompat && !this.getBooleanOption("avoidMinZero")) { + if (minAxisY < 0 && minY >= 0) minAxisY = 0; + if (maxAxisY > 0 && maxY <= 0) maxAxisY = 0; + } + } + axis.extremeRange = [minAxisY, maxAxisY]; + } + if (axis.valueWindow) { + // This is only set if the user has zoomed on the y-axis. It is never set + // by a user. It takes precedence over axis.valueRange because, if you set + // valueRange, you'd still expect to be able to pan. + axis.computedValueRange = [axis.valueWindow[0], axis.valueWindow[1]]; + } else if (axis.valueRange) { + // This is a user-set value range for this axis. + var y0 = isNullUndefinedOrNaN(axis.valueRange[0]) ? axis.extremeRange[0] : axis.valueRange[0]; + var y1 = isNullUndefinedOrNaN(axis.valueRange[1]) ? axis.extremeRange[1] : axis.valueRange[1]; + if (!ypadCompat) { + if (axis.logscale) { + var logpad = Math.exp(Math.log(span) * ypad); + y0 *= logpad; + y1 /= logpad; + } else { + span = y1 - y0; + y0 -= span * ypad; + y1 += span * ypad; + } + } + axis.computedValueRange = [y0, y1]; + } else { + axis.computedValueRange = axis.extremeRange; + } + + + if (independentTicks) { + axis.independentTicks = independentTicks; + var opts = this.optionsViewForAxis_('y' + (i ? '2' : '')); + var ticker = opts('ticker'); + axis.ticks = ticker(axis.computedValueRange[0], + axis.computedValueRange[1], + this.plotter_.area.h, + opts, + this); + // Define the first independent axis as primary axis. + if (!p_axis) p_axis = axis; + } + } + if (p_axis === undefined) { + throw ("Configuration Error: At least one axis has to have the \"independentTicks\" option activated."); + } + // Add ticks. By default, all axes inherit the tick positions of the + // primary axis. However, if an axis is specifically marked as having + // independent ticks, then that is permissible as well. + for (var i = 0; i < numAxes; i++) { + var axis = this.axes_[i]; + + if (!axis.independentTicks) { + var opts = this.optionsViewForAxis_('y' + (i ? '2' : '')); + var ticker = opts('ticker'); + var p_ticks = p_axis.ticks; + var p_scale = p_axis.computedValueRange[1] - p_axis.computedValueRange[0]; + var scale = axis.computedValueRange[1] - axis.computedValueRange[0]; + var tick_values = []; + for (var k = 0; k < p_ticks.length; k++) { + var y_frac = (p_ticks[k].v - p_axis.computedValueRange[0]) / p_scale; + var y_val = axis.computedValueRange[0] + y_frac * scale; + tick_values.push(y_val); + } + + axis.ticks = ticker(axis.computedValueRange[0], + axis.computedValueRange[1], + this.plotter_.area.h, + opts, + this, + tick_values); + } + } +}; + +/** + * Detects the type of the str (date or numeric) and sets the various + * formatting attributes in this.attrs_ based on this type. + * @param {string} str An x value. + * @private + */ +Dygraph.prototype.detectTypeFromString_ = function(str) { + var isDate = false; + var dashPos = str.indexOf('-'); // could be 2006-01-01 _or_ 1.0e-2 + if ((dashPos > 0 && (str[dashPos-1] != 'e' && str[dashPos-1] != 'E')) || + str.indexOf('/') >= 0 || + isNaN(parseFloat(str))) { + isDate = true; + } else if (str.length == 8 && str > '19700101' && str < '20371231') { + // TODO(danvk): remove support for this format. + isDate = true; + } + + this.setXAxisOptions_(isDate); +}; + +Dygraph.prototype.setXAxisOptions_ = function(isDate) { + if (isDate) { + this.attrs_.xValueParser = Dygraph.dateParser; + this.attrs_.axes.x.valueFormatter = Dygraph.dateValueFormatter; + this.attrs_.axes.x.ticker = Dygraph.dateTicker; + this.attrs_.axes.x.axisLabelFormatter = Dygraph.dateAxisLabelFormatter; + } else { + /** @private (shut up, jsdoc!) */ + this.attrs_.xValueParser = function(x) { return parseFloat(x); }; + // TODO(danvk): use Dygraph.numberValueFormatter here? + /** @private (shut up, jsdoc!) */ + this.attrs_.axes.x.valueFormatter = function(x) { return x; }; + this.attrs_.axes.x.ticker = Dygraph.numericTicks; + this.attrs_.axes.x.axisLabelFormatter = this.attrs_.axes.x.valueFormatter; + } +}; + +/** + * @private + * Parses a string in a special csv format. We expect a csv file where each + * line is a date point, and the first field in each line is the date string. + * We also expect that all remaining fields represent series. + * if the errorBars attribute is set, then interpret the fields as: + * date, series1, stddev1, series2, stddev2, ... + * @param {[Object]} data See above. + * + * @return [Object] An array with one entry for each row. These entries + * are an array of cells in that row. The first entry is the parsed x-value for + * the row. The second, third, etc. are the y-values. These can take on one of + * three forms, depending on the CSV and constructor parameters: + * 1. numeric value + * 2. [ value, stddev ] + * 3. [ low value, center value, high value ] + */ +Dygraph.prototype.parseCSV_ = function(data) { + var ret = []; + var line_delimiter = Dygraph.detectLineDelimiter(data); + var lines = data.split(line_delimiter || "\n"); + var vals, j; + + // Use the default delimiter or fall back to a tab if that makes sense. + var delim = this.getStringOption('delimiter'); + if (lines[0].indexOf(delim) == -1 && lines[0].indexOf('\t') >= 0) { + delim = '\t'; + } + + var start = 0; + if (!('labels' in this.user_attrs_)) { + // User hasn't explicitly set labels, so they're (presumably) in the CSV. + start = 1; + this.attrs_.labels = lines[0].split(delim); // NOTE: _not_ user_attrs_. + this.attributes_.reparseSeries(); + } + var line_no = 0; + + var xParser; + var defaultParserSet = false; // attempt to auto-detect x value type + var expectedCols = this.attr_("labels").length; + var outOfOrder = false; + for (var i = start; i < lines.length; i++) { + var line = lines[i]; + line_no = i; + if (line.length === 0) continue; // skip blank lines + if (line[0] == '#') continue; // skip comment lines + var inFields = line.split(delim); + if (inFields.length < 2) continue; + + var fields = []; + if (!defaultParserSet) { + this.detectTypeFromString_(inFields[0]); + xParser = this.getFunctionOption("xValueParser"); + defaultParserSet = true; + } + fields[0] = xParser(inFields[0], this); + + // If fractions are expected, parse the numbers as "A/B" + if (this.fractions_) { + for (j = 1; j < inFields.length; j++) { + // TODO(danvk): figure out an appropriate way to flag parse errors. + vals = inFields[j].split("/"); + if (vals.length != 2) { + console.error('Expected fractional "num/den" values in CSV data ' + + "but found a value '" + inFields[j] + "' on line " + + (1 + i) + " ('" + line + "') which is not of this form."); + fields[j] = [0, 0]; + } else { + fields[j] = [Dygraph.parseFloat_(vals[0], i, line), + Dygraph.parseFloat_(vals[1], i, line)]; + } + } + } else if (this.getBooleanOption("errorBars")) { + // If there are error bars, values are (value, stddev) pairs + if (inFields.length % 2 != 1) { + console.error('Expected alternating (value, stdev.) pairs in CSV data ' + + 'but line ' + (1 + i) + ' has an odd number of values (' + + (inFields.length - 1) + "): '" + line + "'"); + } + for (j = 1; j < inFields.length; j += 2) { + fields[(j + 1) / 2] = [Dygraph.parseFloat_(inFields[j], i, line), + Dygraph.parseFloat_(inFields[j + 1], i, line)]; + } + } else if (this.getBooleanOption("customBars")) { + // Bars are a low;center;high tuple + for (j = 1; j < inFields.length; j++) { + var val = inFields[j]; + if (/^ *$/.test(val)) { + fields[j] = [null, null, null]; + } else { + vals = val.split(";"); + if (vals.length == 3) { + fields[j] = [ Dygraph.parseFloat_(vals[0], i, line), + Dygraph.parseFloat_(vals[1], i, line), + Dygraph.parseFloat_(vals[2], i, line) ]; + } else { + console.warn('When using customBars, values must be either blank ' + + 'or "low;center;high" tuples (got "' + val + + '" on line ' + (1+i)); + } + } + } + } else { + // Values are just numbers + for (j = 1; j < inFields.length; j++) { + fields[j] = Dygraph.parseFloat_(inFields[j], i, line); + } + } + if (ret.length > 0 && fields[0] < ret[ret.length - 1][0]) { + outOfOrder = true; + } + + if (fields.length != expectedCols) { + console.error("Number of columns in line " + i + " (" + fields.length + + ") does not agree with number of labels (" + expectedCols + + ") " + line); + } + + // If the user specified the 'labels' option and none of the cells of the + // first row parsed correctly, then they probably double-specified the + // labels. We go with the values set in the option, discard this row and + // log a warning to the JS console. + if (i === 0 && this.attr_('labels')) { + var all_null = true; + for (j = 0; all_null && j < fields.length; j++) { + if (fields[j]) all_null = false; + } + if (all_null) { + console.warn("The dygraphs 'labels' option is set, but the first row " + + "of CSV data ('" + line + "') appears to also contain " + + "labels. Will drop the CSV labels and use the option " + + "labels."); + continue; + } + } + ret.push(fields); + } + + if (outOfOrder) { + console.warn("CSV is out of order; order it correctly to speed loading."); + ret.sort(function(a,b) { return a[0] - b[0]; }); + } + + return ret; +}; + +/** + * The user has provided their data as a pre-packaged JS array. If the x values + * are numeric, this is the same as dygraphs' internal format. If the x values + * are dates, we need to convert them from Date objects to ms since epoch. + * @param {!Array} data + * @return {Object} data with numeric x values. + * @private + */ +Dygraph.prototype.parseArray_ = function(data) { + // Peek at the first x value to see if it's numeric. + if (data.length === 0) { + console.error("Can't plot empty data set"); + return null; + } + if (data[0].length === 0) { + console.error("Data set cannot contain an empty row"); + return null; + } + + var i; + if (this.attr_("labels") === null) { + console.warn("Using default labels. Set labels explicitly via 'labels' " + + "in the options parameter"); + this.attrs_.labels = [ "X" ]; + for (i = 1; i < data[0].length; i++) { + this.attrs_.labels.push("Y" + i); // Not user_attrs_. + } + this.attributes_.reparseSeries(); + } else { + var num_labels = this.attr_("labels"); + if (num_labels.length != data[0].length) { + console.error("Mismatch between number of labels (" + num_labels + ")" + + " and number of columns in array (" + data[0].length + ")"); + return null; + } + } + + if (Dygraph.isDateLike(data[0][0])) { + // Some intelligent defaults for a date x-axis. + this.attrs_.axes.x.valueFormatter = Dygraph.dateValueFormatter; + this.attrs_.axes.x.ticker = Dygraph.dateTicker; + this.attrs_.axes.x.axisLabelFormatter = Dygraph.dateAxisLabelFormatter; + + // Assume they're all dates. + var parsedData = Dygraph.clone(data); + for (i = 0; i < data.length; i++) { + if (parsedData[i].length === 0) { + console.error("Row " + (1 + i) + " of data is empty"); + return null; + } + if (parsedData[i][0] === null || + typeof(parsedData[i][0].getTime) != 'function' || + isNaN(parsedData[i][0].getTime())) { + console.error("x value in row " + (1 + i) + " is not a Date"); + return null; + } + parsedData[i][0] = parsedData[i][0].getTime(); + } + return parsedData; + } else { + // Some intelligent defaults for a numeric x-axis. + /** @private (shut up, jsdoc!) */ + this.attrs_.axes.x.valueFormatter = function(x) { return x; }; + this.attrs_.axes.x.ticker = Dygraph.numericTicks; + this.attrs_.axes.x.axisLabelFormatter = Dygraph.numberAxisLabelFormatter; + return data; + } +}; + +/** + * Parses a DataTable object from gviz. + * The data is expected to have a first column that is either a date or a + * number. All subsequent columns must be numbers. If there is a clear mismatch + * between this.xValueParser_ and the type of the first column, it will be + * fixed. Fills out rawData_. + * @param {!google.visualization.DataTable} data See above. + * @private + */ +Dygraph.prototype.parseDataTable_ = function(data) { + var shortTextForAnnotationNum = function(num) { + // converts [0-9]+ [A-Z][a-z]* + // example: 0=A, 1=B, 25=Z, 26=Aa, 27=Ab + // and continues like.. Ba Bb .. Za .. Zz..Aaa...Zzz Aaaa Zzzz + var shortText = String.fromCharCode(65 /* A */ + num % 26); + num = Math.floor(num / 26); + while ( num > 0 ) { + shortText = String.fromCharCode(65 /* A */ + (num - 1) % 26 ) + shortText.toLowerCase(); + num = Math.floor((num - 1) / 26); + } + return shortText; + }; + + var cols = data.getNumberOfColumns(); + var rows = data.getNumberOfRows(); + + var indepType = data.getColumnType(0); + if (indepType == 'date' || indepType == 'datetime') { + this.attrs_.xValueParser = Dygraph.dateParser; + this.attrs_.axes.x.valueFormatter = Dygraph.dateValueFormatter; + this.attrs_.axes.x.ticker = Dygraph.dateTicker; + this.attrs_.axes.x.axisLabelFormatter = Dygraph.dateAxisLabelFormatter; + } else if (indepType == 'number') { + this.attrs_.xValueParser = function(x) { return parseFloat(x); }; + this.attrs_.axes.x.valueFormatter = function(x) { return x; }; + this.attrs_.axes.x.ticker = Dygraph.numericTicks; + this.attrs_.axes.x.axisLabelFormatter = this.attrs_.axes.x.valueFormatter; + } else { + console.error("only 'date', 'datetime' and 'number' types are supported " + + "for column 1 of DataTable input (Got '" + indepType + "')"); + return null; + } + + // Array of the column indices which contain data (and not annotations). + var colIdx = []; + var annotationCols = {}; // data index -> [annotation cols] + var hasAnnotations = false; + var i, j; + for (i = 1; i < cols; i++) { + var type = data.getColumnType(i); + if (type == 'number') { + colIdx.push(i); + } else if (type == 'string' && this.getBooleanOption('displayAnnotations')) { + // This is OK -- it's an annotation column. + var dataIdx = colIdx[colIdx.length - 1]; + if (!annotationCols.hasOwnProperty(dataIdx)) { + annotationCols[dataIdx] = [i]; + } else { + annotationCols[dataIdx].push(i); + } + hasAnnotations = true; + } else { + console.error("Only 'number' is supported as a dependent type with Gviz." + + " 'string' is only supported if displayAnnotations is true"); + } + } + + // Read column labels + // TODO(danvk): add support back for errorBars + var labels = [data.getColumnLabel(0)]; + for (i = 0; i < colIdx.length; i++) { + labels.push(data.getColumnLabel(colIdx[i])); + if (this.getBooleanOption("errorBars")) i += 1; + } + this.attrs_.labels = labels; + cols = labels.length; + + var ret = []; + var outOfOrder = false; + var annotations = []; + for (i = 0; i < rows; i++) { + var row = []; + if (typeof(data.getValue(i, 0)) === 'undefined' || + data.getValue(i, 0) === null) { + console.warn("Ignoring row " + i + + " of DataTable because of undefined or null first column."); + continue; + } + + if (indepType == 'date' || indepType == 'datetime') { + row.push(data.getValue(i, 0).getTime()); + } else { + row.push(data.getValue(i, 0)); + } + if (!this.getBooleanOption("errorBars")) { + for (j = 0; j < colIdx.length; j++) { + var col = colIdx[j]; + row.push(data.getValue(i, col)); + if (hasAnnotations && + annotationCols.hasOwnProperty(col) && + data.getValue(i, annotationCols[col][0]) !== null) { + var ann = {}; + ann.series = data.getColumnLabel(col); + ann.xval = row[0]; + ann.shortText = shortTextForAnnotationNum(annotations.length); + ann.text = ''; + for (var k = 0; k < annotationCols[col].length; k++) { + if (k) ann.text += "\n"; + ann.text += data.getValue(i, annotationCols[col][k]); + } + annotations.push(ann); + } + } + + // Strip out infinities, which give dygraphs problems later on. + for (j = 0; j < row.length; j++) { + if (!isFinite(row[j])) row[j] = null; + } + } else { + for (j = 0; j < cols - 1; j++) { + row.push([ data.getValue(i, 1 + 2 * j), data.getValue(i, 2 + 2 * j) ]); + } + } + if (ret.length > 0 && row[0] < ret[ret.length - 1][0]) { + outOfOrder = true; + } + ret.push(row); + } + + if (outOfOrder) { + console.warn("DataTable is out of order; order it correctly to speed loading."); + ret.sort(function(a,b) { return a[0] - b[0]; }); + } + this.rawData_ = ret; + + if (annotations.length > 0) { + this.setAnnotations(annotations, true); + } + this.attributes_.reparseSeries(); +}; + +/** + * Signals to plugins that the chart data has updated. + * This happens after the data has updated but before the chart has redrawn. + */ +Dygraph.prototype.cascadeDataDidUpdateEvent_ = function() { + // TODO(danvk): there are some issues checking xAxisRange() and using + // toDomCoords from handlers of this event. The visible range should be set + // when the chart is drawn, not derived from the data. + this.cascadeEvents_('dataDidUpdate', {}); +}; + +/** + * Get the CSV data. If it's in a function, call that function. If it's in a + * file, do an XMLHttpRequest to get it. + * @private + */ +Dygraph.prototype.start_ = function() { + var data = this.file_; + + // Functions can return references of all other types. + if (typeof data == 'function') { + data = data(); + } + + if (Dygraph.isArrayLike(data)) { + this.rawData_ = this.parseArray_(data); + this.cascadeDataDidUpdateEvent_(); + this.predraw_(); + } else if (typeof data == 'object' && + typeof data.getColumnRange == 'function') { + // must be a DataTable from gviz. + this.parseDataTable_(data); + this.cascadeDataDidUpdateEvent_(); + this.predraw_(); + } else if (typeof data == 'string') { + // Heuristic: a newline means it's CSV data. Otherwise it's an URL. + var line_delimiter = Dygraph.detectLineDelimiter(data); + if (line_delimiter) { + this.loadedEvent_(data); + } else { + // REMOVE_FOR_IE + var req; + if (window.XMLHttpRequest) { + // Firefox, Opera, IE7, and other browsers will use the native object + req = new XMLHttpRequest(); + } else { + // IE 5 and 6 will use the ActiveX control + req = new ActiveXObject("Microsoft.XMLHTTP"); + } + + var caller = this; + req.onreadystatechange = function () { + if (req.readyState == 4) { + if (req.status === 200 || // Normal http + req.status === 0) { // Chrome w/ --allow-file-access-from-files + caller.loadedEvent_(req.responseText); + } + } + }; + + req.open("GET", data, true); + req.send(null); + } + } else { + console.error("Unknown data format: " + (typeof data)); + } +}; + +/** + * Changes various properties of the graph. These can include: + *
    + *
  • file: changes the source data for the graph
  • + *
  • errorBars: changes whether the data contains stddev
  • + *
+ * + * There's a huge variety of options that can be passed to this method. For a + * full list, see http://dygraphs.com/options.html. + * + * @param {Object} input_attrs The new properties and values + * @param {boolean} block_redraw Usually the chart is redrawn after every + * call to updateOptions(). If you know better, you can pass true to + * explicitly block the redraw. This can be useful for chaining + * updateOptions() calls, avoiding the occasional infinite loop and + * preventing redraws when it's not necessary (e.g. when updating a + * callback). + */ +Dygraph.prototype.updateOptions = function(input_attrs, block_redraw) { + if (typeof(block_redraw) == 'undefined') block_redraw = false; + + // mapLegacyOptions_ drops the "file" parameter as a convenience to us. + var file = input_attrs.file; + var attrs = Dygraph.mapLegacyOptions_(input_attrs); + + // TODO(danvk): this is a mess. Move these options into attr_. + if ('rollPeriod' in attrs) { + this.rollPeriod_ = attrs.rollPeriod; + } + if ('dateWindow' in attrs) { + this.dateWindow_ = attrs.dateWindow; + if (!('isZoomedIgnoreProgrammaticZoom' in attrs)) { + this.zoomed_x_ = (attrs.dateWindow !== null); + } + } + if ('valueRange' in attrs && !('isZoomedIgnoreProgrammaticZoom' in attrs)) { + this.zoomed_y_ = (attrs.valueRange !== null); + } + + // TODO(danvk): validate per-series options. + // Supported: + // strokeWidth + // pointSize + // drawPoints + // highlightCircleSize + + // Check if this set options will require new points. + var requiresNewPoints = Dygraph.isPixelChangingOptionList(this.attr_("labels"), attrs); + + Dygraph.updateDeep(this.user_attrs_, attrs); + + this.attributes_.reparseSeries(); + + if (file) { + // This event indicates that the data is about to change, but hasn't yet. + // TODO(danvk): support cancelation of the update via this event. + this.cascadeEvents_('dataWillUpdate', {}); + + this.file_ = file; + if (!block_redraw) this.start_(); + } else { + if (!block_redraw) { + if (requiresNewPoints) { + this.predraw_(); + } else { + this.renderGraph_(false); + } + } + } +}; + +/** + * Returns a copy of the options with deprecated names converted into current + * names. Also drops the (potentially-large) 'file' attribute. If the caller is + * interested in that, they should save a copy before calling this. + * @private + */ +Dygraph.mapLegacyOptions_ = function(attrs) { + var my_attrs = {}; + for (var k in attrs) { + if (!attrs.hasOwnProperty(k)) continue; + if (k == 'file') continue; + if (attrs.hasOwnProperty(k)) my_attrs[k] = attrs[k]; + } + + var set = function(axis, opt, value) { + if (!my_attrs.axes) my_attrs.axes = {}; + if (!my_attrs.axes[axis]) my_attrs.axes[axis] = {}; + my_attrs.axes[axis][opt] = value; + }; + var map = function(opt, axis, new_opt) { + if (typeof(attrs[opt]) != 'undefined') { + console.warn("Option " + opt + " is deprecated. Use the " + + new_opt + " option for the " + axis + " axis instead. " + + "(e.g. { axes : { " + axis + " : { " + new_opt + " : ... } } } " + + "(see http://dygraphs.com/per-axis.html for more information."); + set(axis, new_opt, attrs[opt]); + delete my_attrs[opt]; + } + }; + + // This maps, e.g., xValueFormater -> axes: { x: { valueFormatter: ... } } + map('xValueFormatter', 'x', 'valueFormatter'); + map('pixelsPerXLabel', 'x', 'pixelsPerLabel'); + map('xAxisLabelFormatter', 'x', 'axisLabelFormatter'); + map('xTicker', 'x', 'ticker'); + map('yValueFormatter', 'y', 'valueFormatter'); + map('pixelsPerYLabel', 'y', 'pixelsPerLabel'); + map('yAxisLabelFormatter', 'y', 'axisLabelFormatter'); + map('yTicker', 'y', 'ticker'); + map('drawXGrid', 'x', 'drawGrid'); + map('drawXAxis', 'x', 'drawAxis'); + map('drawYGrid', 'y', 'drawGrid'); + map('drawYAxis', 'y', 'drawAxis'); + map('xAxisLabelWidth', 'x', 'axisLabelWidth'); + map('yAxisLabelWidth', 'y', 'axisLabelWidth'); + return my_attrs; +}; + +/** + * Resizes the dygraph. If no parameters are specified, resizes to fill the + * containing div (which has presumably changed size since the dygraph was + * instantiated. If the width/height are specified, the div will be resized. + * + * This is far more efficient than destroying and re-instantiating a + * Dygraph, since it doesn't have to reparse the underlying data. + * + * @param {number} width Width (in pixels) + * @param {number} height Height (in pixels) + */ +Dygraph.prototype.resize = function(width, height) { + if (this.resize_lock) { + return; + } + this.resize_lock = true; + + if ((width === null) != (height === null)) { + console.warn("Dygraph.resize() should be called with zero parameters or " + + "two non-NULL parameters. Pretending it was zero."); + width = height = null; + } + + var old_width = this.width_; + var old_height = this.height_; + + if (width) { + this.maindiv_.style.width = width + "px"; + this.maindiv_.style.height = height + "px"; + this.width_ = width; + this.height_ = height; + } else { + this.width_ = this.maindiv_.clientWidth; + this.height_ = this.maindiv_.clientHeight; + } + + if (old_width != this.width_ || old_height != this.height_) { + // Resizing a canvas erases it, even when the size doesn't change, so + // any resize needs to be followed by a redraw. + this.resizeElements_(); + this.predraw_(); + } + + this.resize_lock = false; +}; + +/** + * Adjusts the number of points in the rolling average. Updates the graph to + * reflect the new averaging period. + * @param {number} length Number of points over which to average the data. + */ +Dygraph.prototype.adjustRoll = function(length) { + this.rollPeriod_ = length; + this.predraw_(); +}; + +/** + * Returns a boolean array of visibility statuses. + */ +Dygraph.prototype.visibility = function() { + // Do lazy-initialization, so that this happens after we know the number of + // data series. + if (!this.getOption("visibility")) { + this.attrs_.visibility = []; + } + // TODO(danvk): it looks like this could go into an infinite loop w/ user_attrs. + while (this.getOption("visibility").length < this.numColumns() - 1) { + this.attrs_.visibility.push(true); + } + return this.getOption("visibility"); +}; + +/** + * Changes the visiblity of a series. + * + * @param {number} num the series index + * @param {boolean} value true or false, identifying the visibility. + */ +Dygraph.prototype.setVisibility = function(num, value) { + var x = this.visibility(); + if (num < 0 || num >= x.length) { + console.warn("invalid series number in setVisibility: " + num); + } else { + x[num] = value; + this.predraw_(); + } +}; + +/** + * How large of an area will the dygraph render itself in? + * This is used for testing. + * @return A {width: w, height: h} object. + * @private + */ +Dygraph.prototype.size = function() { + return { width: this.width_, height: this.height_ }; +}; + +/** + * Update the list of annotations and redraw the chart. + * See dygraphs.com/annotations.html for more info on how to use annotations. + * @param ann {Array} An array of annotation objects. + * @param suppressDraw {Boolean} Set to "true" to block chart redraw (optional). + */ +Dygraph.prototype.setAnnotations = function(ann, suppressDraw) { + // Only add the annotation CSS rule once we know it will be used. + Dygraph.addAnnotationRule(); + this.annotations_ = ann; + if (!this.layout_) { + console.warn("Tried to setAnnotations before dygraph was ready. " + + "Try setting them in a ready() block. See " + + "dygraphs.com/tests/annotation.html"); + return; + } + + this.layout_.setAnnotations(this.annotations_); + if (!suppressDraw) { + this.predraw_(); + } +}; + +/** + * Return the list of annotations. + */ +Dygraph.prototype.annotations = function() { + return this.annotations_; +}; + +/** + * Get the list of label names for this graph. The first column is the + * x-axis, so the data series names start at index 1. + * + * Returns null when labels have not yet been defined. + */ +Dygraph.prototype.getLabels = function() { + var labels = this.attr_("labels"); + return labels ? labels.slice() : null; +}; + +/** + * Get the index of a series (column) given its name. The first column is the + * x-axis, so the data series start with index 1. + */ +Dygraph.prototype.indexFromSetName = function(name) { + return this.setIndexByName_[name]; +}; + +/** + * Trigger a callback when the dygraph has drawn itself and is ready to be + * manipulated. This is primarily useful when dygraphs has to do an XHR for the + * data (i.e. a URL is passed as the data source) and the chart is drawn + * asynchronously. If the chart has already drawn, the callback will fire + * immediately. + * + * This is a good place to call setAnnotation(). + * + * @param {function(!Dygraph)} callback The callback to trigger when the chart + * is ready. + */ +Dygraph.prototype.ready = function(callback) { + if (this.is_initial_draw_) { + this.readyFns_.push(callback); + } else { + callback.call(this, this); + } +}; + +/** + * @private + * Adds a default style for the annotation CSS classes to the document. This is + * only executed when annotations are actually used. It is designed to only be + * called once -- all calls after the first will return immediately. + */ +Dygraph.addAnnotationRule = function() { + // TODO(danvk): move this function into plugins/annotations.js? + if (Dygraph.addedAnnotationCSS) return; + + var rule = "border: 1px solid black; " + + "background-color: white; " + + "text-align: center;"; + + var styleSheetElement = document.createElement("style"); + styleSheetElement.type = "text/css"; + document.getElementsByTagName("head")[0].appendChild(styleSheetElement); + + // Find the first style sheet that we can access. + // We may not add a rule to a style sheet from another domain for security + // reasons. This sometimes comes up when using gviz, since the Google gviz JS + // adds its own style sheets from google.com. + for (var i = 0; i < document.styleSheets.length; i++) { + if (document.styleSheets[i].disabled) continue; + var mysheet = document.styleSheets[i]; + try { + if (mysheet.insertRule) { // Firefox + var idx = mysheet.cssRules ? mysheet.cssRules.length : 0; + mysheet.insertRule(".dygraphDefaultAnnotation { " + rule + " }", idx); + } else if (mysheet.addRule) { // IE + mysheet.addRule(".dygraphDefaultAnnotation", rule); + } + Dygraph.addedAnnotationCSS = true; + return; + } catch(err) { + // Was likely a security exception. + } + } + + console.warn("Unable to add default annotation CSS rule; display may be off."); +}; + +return Dygraph; + +})(); +/** + * @license + * Copyright 2011 Dan Vanderkam (danvdk@gmail.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +/** + * @fileoverview This file contains utility functions used by dygraphs. These + * are typically static (i.e. not related to any particular dygraph). Examples + * include date/time formatting functions, basic algorithms (e.g. binary + * search) and generic DOM-manipulation functions. + */ + +(function() { + +/*global Dygraph:false, G_vmlCanvasManager:false, Node:false */ +"use strict"; + +Dygraph.LOG_SCALE = 10; +Dygraph.LN_TEN = Math.log(Dygraph.LOG_SCALE); + +/** + * @private + * @param {number} x + * @return {number} + */ +Dygraph.log10 = function(x) { + return Math.log(x) / Dygraph.LN_TEN; +}; + +/** A dotted line stroke pattern. */ +Dygraph.DOTTED_LINE = [2, 2]; +/** A dashed line stroke pattern. */ +Dygraph.DASHED_LINE = [7, 3]; +/** A dot dash stroke pattern. */ +Dygraph.DOT_DASH_LINE = [7, 2, 2, 2]; + +/** + * Return the 2d context for a dygraph canvas. + * + * This method is only exposed for the sake of replacing the function in + * automated tests, e.g. + * + * var oldFunc = Dygraph.getContext(); + * Dygraph.getContext = function(canvas) { + * var realContext = oldFunc(canvas); + * return new Proxy(realContext); + * }; + * @param {!HTMLCanvasElement} canvas + * @return {!CanvasRenderingContext2D} + * @private + */ +Dygraph.getContext = function(canvas) { + return /** @type{!CanvasRenderingContext2D}*/(canvas.getContext("2d")); +}; + +/** + * Add an event handler. This smooths a difference between IE and the rest of + * the world. + * @param {!Node} elem The element to add the event to. + * @param {string} type The type of the event, e.g. 'click' or 'mousemove'. + * @param {function(Event):(boolean|undefined)} fn The function to call + * on the event. The function takes one parameter: the event object. + * @private + */ +Dygraph.addEvent = function addEvent(elem, type, fn) { + if (elem.addEventListener) { + elem.addEventListener(type, fn, false); + } else { + elem[type+fn] = function(){fn(window.event);}; + elem.attachEvent('on'+type, elem[type+fn]); + } +}; + +/** + * Add an event handler. This event handler is kept until the graph is + * destroyed with a call to graph.destroy(). + * + * @param {!Node} elem The element to add the event to. + * @param {string} type The type of the event, e.g. 'click' or 'mousemove'. + * @param {function(Event):(boolean|undefined)} fn The function to call + * on the event. The function takes one parameter: the event object. + * @private + */ +Dygraph.prototype.addAndTrackEvent = function(elem, type, fn) { + Dygraph.addEvent(elem, type, fn); + this.registeredEvents_.push({ elem : elem, type : type, fn : fn }); +}; + +/** + * Remove an event handler. This smooths a difference between IE and the rest + * of the world. + * @param {!Node} elem The element to remove the event from. + * @param {string} type The type of the event, e.g. 'click' or 'mousemove'. + * @param {function(Event):(boolean|undefined)} fn The function to call + * on the event. The function takes one parameter: the event object. + * @private + */ +Dygraph.removeEvent = function(elem, type, fn) { + if (elem.removeEventListener) { + elem.removeEventListener(type, fn, false); + } else { + try { + elem.detachEvent('on'+type, elem[type+fn]); + } catch(e) { + // We only detach event listeners on a "best effort" basis in IE. See: + // http://stackoverflow.com/questions/2553632/detachevent-not-working-with-named-inline-functions + } + elem[type+fn] = null; + } +}; + +Dygraph.prototype.removeTrackedEvents_ = function() { + if (this.registeredEvents_) { + for (var idx = 0; idx < this.registeredEvents_.length; idx++) { + var reg = this.registeredEvents_[idx]; + Dygraph.removeEvent(reg.elem, reg.type, reg.fn); + } + } + + this.registeredEvents_ = []; +}; + +/** + * Cancels further processing of an event. This is useful to prevent default + * browser actions, e.g. highlighting text on a double-click. + * Based on the article at + * http://www.switchonthecode.com/tutorials/javascript-tutorial-the-scroll-wheel + * @param {!Event} e The event whose normal behavior should be canceled. + * @private + */ +Dygraph.cancelEvent = function(e) { + e = e ? e : window.event; + if (e.stopPropagation) { + e.stopPropagation(); + } + if (e.preventDefault) { + e.preventDefault(); + } + e.cancelBubble = true; + e.cancel = true; + e.returnValue = false; + return false; +}; + +/** + * Convert hsv values to an rgb(r,g,b) string. Taken from MochiKit.Color. This + * is used to generate default series colors which are evenly spaced on the + * color wheel. + * @param { number } hue Range is 0.0-1.0. + * @param { number } saturation Range is 0.0-1.0. + * @param { number } value Range is 0.0-1.0. + * @return { string } "rgb(r,g,b)" where r, g and b range from 0-255. + * @private + */ +Dygraph.hsvToRGB = function (hue, saturation, value) { + var red; + var green; + var blue; + if (saturation === 0) { + red = value; + green = value; + blue = value; + } else { + var i = Math.floor(hue * 6); + var f = (hue * 6) - i; + var p = value * (1 - saturation); + var q = value * (1 - (saturation * f)); + var t = value * (1 - (saturation * (1 - f))); + switch (i) { + case 1: red = q; green = value; blue = p; break; + case 2: red = p; green = value; blue = t; break; + case 3: red = p; green = q; blue = value; break; + case 4: red = t; green = p; blue = value; break; + case 5: red = value; green = p; blue = q; break; + case 6: // fall through + case 0: red = value; green = t; blue = p; break; + } + } + red = Math.floor(255 * red + 0.5); + green = Math.floor(255 * green + 0.5); + blue = Math.floor(255 * blue + 0.5); + return 'rgb(' + red + ',' + green + ',' + blue + ')'; +}; + +// The following functions are from quirksmode.org with a modification for Safari from +// http://blog.firetree.net/2005/07/04/javascript-find-position/ +// http://www.quirksmode.org/js/findpos.html +// ... and modifications to support scrolling divs. + +/** + * Find the coordinates of an object relative to the top left of the page. + * + * TODO(danvk): change obj type from Node -> !Node + * @param {Node} obj + * @return {{x:number,y:number}} + * @private + */ +Dygraph.findPos = function(obj) { + var curleft = 0, curtop = 0; + if (obj.offsetParent) { + var copyObj = obj; + while (1) { + // NOTE: the if statement here is for IE8. + var borderLeft = "0", borderTop = "0"; + if (window.getComputedStyle) { + var computedStyle = window.getComputedStyle(copyObj, null); + borderLeft = computedStyle.borderLeft || "0"; + borderTop = computedStyle.borderTop || "0"; + } + curleft += parseInt(borderLeft, 10) ; + curtop += parseInt(borderTop, 10) ; + curleft += copyObj.offsetLeft; + curtop += copyObj.offsetTop; + if (!copyObj.offsetParent) { + break; + } + copyObj = copyObj.offsetParent; + } + } else { + // TODO(danvk): why would obj ever have these properties? + if (obj.x) curleft += obj.x; + if (obj.y) curtop += obj.y; + } + + // This handles the case where the object is inside a scrolled div. + while (obj && obj != document.body) { + curleft -= obj.scrollLeft; + curtop -= obj.scrollTop; + obj = obj.parentNode; + } + return {x: curleft, y: curtop}; +}; + +/** + * Returns the x-coordinate of the event in a coordinate system where the + * top-left corner of the page (not the window) is (0,0). + * Taken from MochiKit.Signal + * @param {!Event} e + * @return {number} + * @private + */ +Dygraph.pageX = function(e) { + if (e.pageX) { + return (!e.pageX || e.pageX < 0) ? 0 : e.pageX; + } else { + var de = document.documentElement; + var b = document.body; + return e.clientX + + (de.scrollLeft || b.scrollLeft) - + (de.clientLeft || 0); + } +}; + +/** + * Returns the y-coordinate of the event in a coordinate system where the + * top-left corner of the page (not the window) is (0,0). + * Taken from MochiKit.Signal + * @param {!Event} e + * @return {number} + * @private + */ +Dygraph.pageY = function(e) { + if (e.pageY) { + return (!e.pageY || e.pageY < 0) ? 0 : e.pageY; + } else { + var de = document.documentElement; + var b = document.body; + return e.clientY + + (de.scrollTop || b.scrollTop) - + (de.clientTop || 0); + } +}; + +/** + * Converts page the x-coordinate of the event to pixel x-coordinates on the + * canvas (i.e. DOM Coords). + * @param {!Event} e Drag event. + * @param {!DygraphInteractionContext} context Interaction context object. + * @return {number} The amount by which the drag has moved to the right. + */ +Dygraph.dragGetX_ = function(e, context) { + return Dygraph.pageX(e) - context.px; +}; + +/** + * Converts page the y-coordinate of the event to pixel y-coordinates on the + * canvas (i.e. DOM Coords). + * @param {!Event} e Drag event. + * @param {!DygraphInteractionContext} context Interaction context object. + * @return {number} The amount by which the drag has moved down. + */ +Dygraph.dragGetY_ = function(e, context) { + return Dygraph.pageY(e) - context.py; +}; + +/** + * This returns true unless the parameter is 0, null, undefined or NaN. + * TODO(danvk): rename this function to something like 'isNonZeroNan'. + * + * @param {number} x The number to consider. + * @return {boolean} Whether the number is zero or NaN. + * @private + */ +Dygraph.isOK = function(x) { + return !!x && !isNaN(x); +}; + +/** + * @param {{x:?number,y:?number,yval:?number}} p The point to consider, valid + * points are {x, y} objects + * @param {boolean=} opt_allowNaNY Treat point with y=NaN as valid + * @return {boolean} Whether the point has numeric x and y. + * @private + */ +Dygraph.isValidPoint = function(p, opt_allowNaNY) { + if (!p) return false; // null or undefined object + if (p.yval === null) return false; // missing point + if (p.x === null || p.x === undefined) return false; + if (p.y === null || p.y === undefined) return false; + if (isNaN(p.x) || (!opt_allowNaNY && isNaN(p.y))) return false; + return true; +}; + +/** + * Number formatting function which mimicks the behavior of %g in printf, i.e. + * either exponential or fixed format (without trailing 0s) is used depending on + * the length of the generated string. The advantage of this format is that + * there is a predictable upper bound on the resulting string length, + * significant figures are not dropped, and normal numbers are not displayed in + * exponential notation. + * + * NOTE: JavaScript's native toPrecision() is NOT a drop-in replacement for %g. + * It creates strings which are too long for absolute values between 10^-4 and + * 10^-6, e.g. '0.00001' instead of '1e-5'. See tests/number-format.html for + * output examples. + * + * @param {number} x The number to format + * @param {number=} opt_precision The precision to use, default 2. + * @return {string} A string formatted like %g in printf. The max generated + * string length should be precision + 6 (e.g 1.123e+300). + */ +Dygraph.floatFormat = function(x, opt_precision) { + // Avoid invalid precision values; [1, 21] is the valid range. + var p = Math.min(Math.max(1, opt_precision || 2), 21); + + // This is deceptively simple. The actual algorithm comes from: + // + // Max allowed length = p + 4 + // where 4 comes from 'e+n' and '.'. + // + // Length of fixed format = 2 + y + p + // where 2 comes from '0.' and y = # of leading zeroes. + // + // Equating the two and solving for y yields y = 2, or 0.00xxxx which is + // 1.0e-3. + // + // Since the behavior of toPrecision() is identical for larger numbers, we + // don't have to worry about the other bound. + // + // Finally, the argument for toExponential() is the number of trailing digits, + // so we take off 1 for the value before the '.'. + return (Math.abs(x) < 1.0e-3 && x !== 0.0) ? + x.toExponential(p - 1) : x.toPrecision(p); +}; + +/** + * Converts '9' to '09' (useful for dates) + * @param {number} x + * @return {string} + * @private + */ +Dygraph.zeropad = function(x) { + if (x < 10) return "0" + x; else return "" + x; +}; + +/** + * Date accessors to get the parts of a calendar date (year, month, + * day, hour, minute, second and millisecond) according to local time, + * and factory method to call the Date constructor with an array of arguments. + */ +Dygraph.DateAccessorsLocal = { + getFullYear: function(d) {return d.getFullYear();}, + getMonth: function(d) {return d.getMonth();}, + getDate: function(d) {return d.getDate();}, + getHours: function(d) {return d.getHours();}, + getMinutes: function(d) {return d.getMinutes();}, + getSeconds: function(d) {return d.getSeconds();}, + getMilliseconds: function(d) {return d.getMilliseconds();}, + getDay: function(d) {return d.getDay();}, + makeDate: function(y, m, d, hh, mm, ss, ms) { + return new Date(y, m, d, hh, mm, ss, ms); + } +}; + +/** + * Date accessors to get the parts of a calendar date (year, month, + * day of month, hour, minute, second and millisecond) according to UTC time, + * and factory method to call the Date constructor with an array of arguments. + */ +Dygraph.DateAccessorsUTC = { + getFullYear: function(d) {return d.getUTCFullYear();}, + getMonth: function(d) {return d.getUTCMonth();}, + getDate: function(d) {return d.getUTCDate();}, + getHours: function(d) {return d.getUTCHours();}, + getMinutes: function(d) {return d.getUTCMinutes();}, + getSeconds: function(d) {return d.getUTCSeconds();}, + getMilliseconds: function(d) {return d.getUTCMilliseconds();}, + getDay: function(d) {return d.getUTCDay();}, + makeDate: function(y, m, d, hh, mm, ss, ms) { + return new Date(Date.UTC(y, m, d, hh, mm, ss, ms)); + } +}; + +/** + * Return a string version of the hours, minutes and seconds portion of a date. + * @param {number} hh The hours (from 0-23) + * @param {number} mm The minutes (from 0-59) + * @param {number} ss The seconds (from 0-59) + * @return {string} A time of the form "HH:MM" or "HH:MM:SS" + * @private + */ +Dygraph.hmsString_ = function(hh, mm, ss) { + var zeropad = Dygraph.zeropad; + var ret = zeropad(hh) + ":" + zeropad(mm); + if (ss) { + ret += ":" + zeropad(ss); + } + return ret; +}; + +/** + * Convert a JS date (millis since epoch) to a formatted string. + * @param {number} time The JavaScript time value (ms since epoch) + * @param {boolean} utc Wether output UTC or local time + * @return {string} A date of one of these forms: + * "YYYY/MM/DD", "YYYY/MM/DD HH:MM" or "YYYY/MM/DD HH:MM:SS" + * @private + */ +Dygraph.dateString_ = function(time, utc) { + var zeropad = Dygraph.zeropad; + var accessors = utc ? Dygraph.DateAccessorsUTC : Dygraph.DateAccessorsLocal; + var date = new Date(time); + var y = accessors.getFullYear(date); + var m = accessors.getMonth(date); + var d = accessors.getDate(date); + var hh = accessors.getHours(date); + var mm = accessors.getMinutes(date); + var ss = accessors.getSeconds(date); + // Get a year string: + var year = "" + y; + // Get a 0 padded month string + var month = zeropad(m + 1); //months are 0-offset, sigh + // Get a 0 padded day string + var day = zeropad(d); + var frac = hh * 3600 + mm * 60 + ss; + var ret = year + "/" + month + "/" + day; + if (frac) { + ret += " " + Dygraph.hmsString_(hh, mm, ss); + } + return ret; +}; + +/** + * Round a number to the specified number of digits past the decimal point. + * @param {number} num The number to round + * @param {number} places The number of decimals to which to round + * @return {number} The rounded number + * @private + */ +Dygraph.round_ = function(num, places) { + var shift = Math.pow(10, places); + return Math.round(num * shift)/shift; +}; + +/** + * Implementation of binary search over an array. + * Currently does not work when val is outside the range of arry's values. + * @param {number} val the value to search for + * @param {Array.} arry is the value over which to search + * @param {number} abs If abs > 0, find the lowest entry greater than val + * If abs < 0, find the highest entry less than val. + * If abs == 0, find the entry that equals val. + * @param {number=} low The first index in arry to consider (optional) + * @param {number=} high The last index in arry to consider (optional) + * @return {number} Index of the element, or -1 if it isn't found. + * @private + */ +Dygraph.binarySearch = function(val, arry, abs, low, high) { + if (low === null || low === undefined || + high === null || high === undefined) { + low = 0; + high = arry.length - 1; + } + if (low > high) { + return -1; + } + if (abs === null || abs === undefined) { + abs = 0; + } + var validIndex = function(idx) { + return idx >= 0 && idx < arry.length; + }; + var mid = parseInt((low + high) / 2, 10); + var element = arry[mid]; + var idx; + if (element == val) { + return mid; + } else if (element > val) { + if (abs > 0) { + // Accept if element > val, but also if prior element < val. + idx = mid - 1; + if (validIndex(idx) && arry[idx] < val) { + return mid; + } + } + return Dygraph.binarySearch(val, arry, abs, low, mid - 1); + } else if (element < val) { + if (abs < 0) { + // Accept if element < val, but also if prior element > val. + idx = mid + 1; + if (validIndex(idx) && arry[idx] > val) { + return mid; + } + } + return Dygraph.binarySearch(val, arry, abs, mid + 1, high); + } + return -1; // can't actually happen, but makes closure compiler happy +}; + +/** + * Parses a date, returning the number of milliseconds since epoch. This can be + * passed in as an xValueParser in the Dygraph constructor. + * TODO(danvk): enumerate formats that this understands. + * + * @param {string} dateStr A date in a variety of possible string formats. + * @return {number} Milliseconds since epoch. + * @private + */ +Dygraph.dateParser = function(dateStr) { + var dateStrSlashed; + var d; + + // Let the system try the format first, with one caveat: + // YYYY-MM-DD[ HH:MM:SS] is interpreted as UTC by a variety of browsers. + // dygraphs displays dates in local time, so this will result in surprising + // inconsistencies. But if you specify "T" or "Z" (i.e. YYYY-MM-DDTHH:MM:SS), + // then you probably know what you're doing, so we'll let you go ahead. + // Issue: http://code.google.com/p/dygraphs/issues/detail?id=255 + if (dateStr.search("-") == -1 || + dateStr.search("T") != -1 || dateStr.search("Z") != -1) { + d = Dygraph.dateStrToMillis(dateStr); + if (d && !isNaN(d)) return d; + } + + if (dateStr.search("-") != -1) { // e.g. '2009-7-12' or '2009-07-12' + dateStrSlashed = dateStr.replace("-", "/", "g"); + while (dateStrSlashed.search("-") != -1) { + dateStrSlashed = dateStrSlashed.replace("-", "/"); + } + d = Dygraph.dateStrToMillis(dateStrSlashed); + } else if (dateStr.length == 8) { // e.g. '20090712' + // TODO(danvk): remove support for this format. It's confusing. + dateStrSlashed = dateStr.substr(0,4) + "/" + dateStr.substr(4,2) + "/" + + dateStr.substr(6,2); + d = Dygraph.dateStrToMillis(dateStrSlashed); + } else { + // Any format that Date.parse will accept, e.g. "2009/07/12" or + // "2009/07/12 12:34:56" + d = Dygraph.dateStrToMillis(dateStr); + } + + if (!d || isNaN(d)) { + console.error("Couldn't parse " + dateStr + " as a date"); + } + return d; +}; + +/** + * This is identical to JavaScript's built-in Date.parse() method, except that + * it doesn't get replaced with an incompatible method by aggressive JS + * libraries like MooTools or Joomla. + * @param {string} str The date string, e.g. "2011/05/06" + * @return {number} millis since epoch + * @private + */ +Dygraph.dateStrToMillis = function(str) { + return new Date(str).getTime(); +}; + +// These functions are all based on MochiKit. +/** + * Copies all the properties from o to self. + * + * @param {!Object} self + * @param {!Object} o + * @return {!Object} + */ +Dygraph.update = function(self, o) { + if (typeof(o) != 'undefined' && o !== null) { + for (var k in o) { + if (o.hasOwnProperty(k)) { + self[k] = o[k]; + } + } + } + return self; +}; + +/** + * Copies all the properties from o to self. + * + * @param {!Object} self + * @param {!Object} o + * @return {!Object} + * @private + */ +Dygraph.updateDeep = function (self, o) { + // Taken from http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object + function isNode(o) { + return ( + typeof Node === "object" ? o instanceof Node : + typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName==="string" + ); + } + + if (typeof(o) != 'undefined' && o !== null) { + for (var k in o) { + if (o.hasOwnProperty(k)) { + if (o[k] === null) { + self[k] = null; + } else if (Dygraph.isArrayLike(o[k])) { + self[k] = o[k].slice(); + } else if (isNode(o[k])) { + // DOM objects are shallowly-copied. + self[k] = o[k]; + } else if (typeof(o[k]) == 'object') { + if (typeof(self[k]) != 'object' || self[k] === null) { + self[k] = {}; + } + Dygraph.updateDeep(self[k], o[k]); + } else { + self[k] = o[k]; + } + } + } + } + return self; +}; + +/** + * @param {*} o + * @return {boolean} + * @private + */ +Dygraph.isArrayLike = function(o) { + var typ = typeof(o); + if ( + (typ != 'object' && !(typ == 'function' && + typeof(o.item) == 'function')) || + o === null || + typeof(o.length) != 'number' || + o.nodeType === 3 + ) { + return false; + } + return true; +}; + +/** + * @param {Object} o + * @return {boolean} + * @private + */ +Dygraph.isDateLike = function (o) { + if (typeof(o) != "object" || o === null || + typeof(o.getTime) != 'function') { + return false; + } + return true; +}; + +/** + * Note: this only seems to work for arrays. + * @param {!Array} o + * @return {!Array} + * @private + */ +Dygraph.clone = function(o) { + // TODO(danvk): figure out how MochiKit's version works + var r = []; + for (var i = 0; i < o.length; i++) { + if (Dygraph.isArrayLike(o[i])) { + r.push(Dygraph.clone(o[i])); + } else { + r.push(o[i]); + } + } + return r; +}; + +/** + * Create a new canvas element. This is more complex than a simple + * document.createElement("canvas") because of IE and excanvas. + * + * @return {!HTMLCanvasElement} + * @private + */ +Dygraph.createCanvas = function() { + var canvas = document.createElement("canvas"); + + var isIE = (/MSIE/.test(navigator.userAgent) && !window.opera); + if (isIE && (typeof(G_vmlCanvasManager) != 'undefined')) { + canvas = G_vmlCanvasManager.initElement( + /**@type{!HTMLCanvasElement}*/(canvas)); + } + + return canvas; +}; + +/** + * Returns the context's pixel ratio, which is the ratio between the device + * pixel ratio and the backing store ratio. Typically this is 1 for conventional + * displays, and > 1 for HiDPI displays (such as the Retina MBP). + * See http://www.html5rocks.com/en/tutorials/canvas/hidpi/ for more details. + * + * @param {!CanvasRenderingContext2D} context The canvas's 2d context. + * @return {number} The ratio of the device pixel ratio and the backing store + * ratio for the specified context. + */ +Dygraph.getContextPixelRatio = function(context) { + try { + var devicePixelRatio = window.devicePixelRatio; + var backingStoreRatio = context.webkitBackingStorePixelRatio || + context.mozBackingStorePixelRatio || + context.msBackingStorePixelRatio || + context.oBackingStorePixelRatio || + context.backingStorePixelRatio || 1; + if (devicePixelRatio !== undefined) { + return devicePixelRatio / backingStoreRatio; + } else { + // At least devicePixelRatio must be defined for this ratio to make sense. + // We default backingStoreRatio to 1: this does not exist on some browsers + // (i.e. desktop Chrome). + return 1; + } + } catch (e) { + return 1; + } +}; + +/** + * Checks whether the user is on an Android browser. + * Android does not fully support the tag, e.g. w/r/t/ clipping. + * @return {boolean} + * @private + */ +Dygraph.isAndroid = function() { + return (/Android/).test(navigator.userAgent); +}; + + +/** + * TODO(danvk): use @template here when it's better supported for classes. + * @param {!Array} array + * @param {number} start + * @param {number} length + * @param {function(!Array,?):boolean=} predicate + * @constructor + */ +Dygraph.Iterator = function(array, start, length, predicate) { + start = start || 0; + length = length || array.length; + this.hasNext = true; // Use to identify if there's another element. + this.peek = null; // Use for look-ahead + this.start_ = start; + this.array_ = array; + this.predicate_ = predicate; + this.end_ = Math.min(array.length, start + length); + this.nextIdx_ = start - 1; // use -1 so initial advance works. + this.next(); // ignoring result. +}; + +/** + * @return {Object} + */ +Dygraph.Iterator.prototype.next = function() { + if (!this.hasNext) { + return null; + } + var obj = this.peek; + + var nextIdx = this.nextIdx_ + 1; + var found = false; + while (nextIdx < this.end_) { + if (!this.predicate_ || this.predicate_(this.array_, nextIdx)) { + this.peek = this.array_[nextIdx]; + found = true; + break; + } + nextIdx++; + } + this.nextIdx_ = nextIdx; + if (!found) { + this.hasNext = false; + this.peek = null; + } + return obj; +}; + +/** + * Returns a new iterator over array, between indexes start and + * start + length, and only returns entries that pass the accept function + * + * @param {!Array} array the array to iterate over. + * @param {number} start the first index to iterate over, 0 if absent. + * @param {number} length the number of elements in the array to iterate over. + * This, along with start, defines a slice of the array, and so length + * doesn't imply the number of elements in the iterator when accept doesn't + * always accept all values. array.length when absent. + * @param {function(?):boolean=} opt_predicate a function that takes + * parameters array and idx, which returns true when the element should be + * returned. If omitted, all elements are accepted. + * @private + */ +Dygraph.createIterator = function(array, start, length, opt_predicate) { + return new Dygraph.Iterator(array, start, length, opt_predicate); +}; + +// Shim layer with setTimeout fallback. +// From: http://paulirish.com/2011/requestanimationframe-for-smart-animating/ +// Should be called with the window context: +// Dygraph.requestAnimFrame.call(window, function() {}) +Dygraph.requestAnimFrame = (function() { + return window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + window.oRequestAnimationFrame || + window.msRequestAnimationFrame || + function (callback) { + window.setTimeout(callback, 1000 / 60); + }; +})(); + +/** + * Call a function at most maxFrames times at an attempted interval of + * framePeriodInMillis, then call a cleanup function once. repeatFn is called + * once immediately, then at most (maxFrames - 1) times asynchronously. If + * maxFrames==1, then cleanup_fn() is also called synchronously. This function + * is used to sequence animation. + * @param {function(number)} repeatFn Called repeatedly -- takes the frame + * number (from 0 to maxFrames-1) as an argument. + * @param {number} maxFrames The max number of times to call repeatFn + * @param {number} framePeriodInMillis Max requested time between frames. + * @param {function()} cleanupFn A function to call after all repeatFn calls. + * @private + */ +Dygraph.repeatAndCleanup = function(repeatFn, maxFrames, framePeriodInMillis, + cleanupFn) { + var frameNumber = 0; + var previousFrameNumber; + var startTime = new Date().getTime(); + repeatFn(frameNumber); + if (maxFrames == 1) { + cleanupFn(); + return; + } + var maxFrameArg = maxFrames - 1; + + (function loop() { + if (frameNumber >= maxFrames) return; + Dygraph.requestAnimFrame.call(window, function() { + // Determine which frame to draw based on the delay so far. Will skip + // frames if necessary. + var currentTime = new Date().getTime(); + var delayInMillis = currentTime - startTime; + previousFrameNumber = frameNumber; + frameNumber = Math.floor(delayInMillis / framePeriodInMillis); + var frameDelta = frameNumber - previousFrameNumber; + // If we predict that the subsequent repeatFn call will overshoot our + // total frame target, so our last call will cause a stutter, then jump to + // the last call immediately. If we're going to cause a stutter, better + // to do it faster than slower. + var predictOvershootStutter = (frameNumber + frameDelta) > maxFrameArg; + if (predictOvershootStutter || (frameNumber >= maxFrameArg)) { + repeatFn(maxFrameArg); // Ensure final call with maxFrameArg. + cleanupFn(); + } else { + if (frameDelta !== 0) { // Don't call repeatFn with duplicate frames. + repeatFn(frameNumber); + } + loop(); + } + }); + })(); +}; + +// A whitelist of options that do not change pixel positions. +var pixelSafeOptions = { + 'annotationClickHandler': true, + 'annotationDblClickHandler': true, + 'annotationMouseOutHandler': true, + 'annotationMouseOverHandler': true, + 'axisLabelColor': true, + 'axisLineColor': true, + 'axisLineWidth': true, + 'clickCallback': true, + 'drawCallback': true, + 'drawHighlightPointCallback': true, + 'drawPoints': true, + 'drawPointCallback': true, + 'drawXGrid': true, + 'drawYGrid': true, + 'fillAlpha': true, + 'gridLineColor': true, + 'gridLineWidth': true, + 'hideOverlayOnMouseOut': true, + 'highlightCallback': true, + 'highlightCircleSize': true, + 'interactionModel': true, + 'isZoomedIgnoreProgrammaticZoom': true, + 'labelsDiv': true, + 'labelsDivStyles': true, + 'labelsDivWidth': true, + 'labelsKMB': true, + 'labelsKMG2': true, + 'labelsSeparateLines': true, + 'labelsShowZeroValues': true, + 'legend': true, + 'panEdgeFraction': true, + 'pixelsPerYLabel': true, + 'pointClickCallback': true, + 'pointSize': true, + 'rangeSelectorPlotFillColor': true, + 'rangeSelectorPlotStrokeColor': true, + 'showLabelsOnHighlight': true, + 'showRoller': true, + 'strokeWidth': true, + 'underlayCallback': true, + 'unhighlightCallback': true, + 'zoomCallback': true +}; + +/** + * This function will scan the option list and determine if they + * require us to recalculate the pixel positions of each point. + * TODO: move this into dygraph-options.js + * @param {!Array.} labels a list of options to check. + * @param {!Object} attrs + * @return {boolean} true if the graph needs new points else false. + * @private + */ +Dygraph.isPixelChangingOptionList = function(labels, attrs) { + // Assume that we do not require new points. + // This will change to true if we actually do need new points. + + // Create a dictionary of series names for faster lookup. + // If there are no labels, then the dictionary stays empty. + var seriesNamesDictionary = { }; + if (labels) { + for (var i = 1; i < labels.length; i++) { + seriesNamesDictionary[labels[i]] = true; + } + } + + // Scan through a flat (i.e. non-nested) object of options. + // Returns true/false depending on whether new points are needed. + var scanFlatOptions = function(options) { + for (var property in options) { + if (options.hasOwnProperty(property) && + !pixelSafeOptions[property]) { + return true; + } + } + return false; + }; + + // Iterate through the list of updated options. + for (var property in attrs) { + if (!attrs.hasOwnProperty(property)) continue; + + // Find out of this field is actually a series specific options list. + if (property == 'highlightSeriesOpts' || + (seriesNamesDictionary[property] && !attrs.series)) { + // This property value is a list of options for this series. + if (scanFlatOptions(attrs[property])) return true; + } else if (property == 'series' || property == 'axes') { + // This is twice-nested options list. + var perSeries = attrs[property]; + for (var series in perSeries) { + if (perSeries.hasOwnProperty(series) && + scanFlatOptions(perSeries[series])) { + return true; + } + } + } else { + // If this was not a series specific option list, check if it's a pixel + // changing property. + if (!pixelSafeOptions[property]) return true; + } + } + + return false; +}; + +Dygraph.Circles = { + DEFAULT : function(g, name, ctx, canvasx, canvasy, color, radius) { + ctx.beginPath(); + ctx.fillStyle = color; + ctx.arc(canvasx, canvasy, radius, 0, 2 * Math.PI, false); + ctx.fill(); + } + // For more shapes, include extras/shapes.js +}; + +/** + * To create a "drag" interaction, you typically register a mousedown event + * handler on the element where the drag begins. In that handler, you register a + * mouseup handler on the window to determine when the mouse is released, + * wherever that release happens. This works well, except when the user releases + * the mouse over an off-domain iframe. In that case, the mouseup event is + * handled by the iframe and never bubbles up to the window handler. + * + * To deal with this issue, we cover iframes with high z-index divs to make sure + * they don't capture mouseup. + * + * Usage: + * element.addEventListener('mousedown', function() { + * var tarper = new Dygraph.IFrameTarp(); + * tarper.cover(); + * var mouseUpHandler = function() { + * ... + * window.removeEventListener(mouseUpHandler); + * tarper.uncover(); + * }; + * window.addEventListener('mouseup', mouseUpHandler); + * }; + * + * @constructor + */ +Dygraph.IFrameTarp = function() { + /** @type {Array.} */ + this.tarps = []; +}; + +/** + * Find all the iframes in the document and cover them with high z-index + * transparent divs. + */ +Dygraph.IFrameTarp.prototype.cover = function() { + var iframes = document.getElementsByTagName("iframe"); + for (var i = 0; i < iframes.length; i++) { + var iframe = iframes[i]; + var pos = Dygraph.findPos(iframe), + x = pos.x, + y = pos.y, + width = iframe.offsetWidth, + height = iframe.offsetHeight; + + var div = document.createElement("div"); + div.style.position = "absolute"; + div.style.left = x + 'px'; + div.style.top = y + 'px'; + div.style.width = width + 'px'; + div.style.height = height + 'px'; + div.style.zIndex = 999; + document.body.appendChild(div); + this.tarps.push(div); + } +}; + +/** + * Remove all the iframe covers. You should call this in a mouseup handler. + */ +Dygraph.IFrameTarp.prototype.uncover = function() { + for (var i = 0; i < this.tarps.length; i++) { + this.tarps[i].parentNode.removeChild(this.tarps[i]); + } + this.tarps = []; +}; + +/** + * Determine whether |data| is delimited by CR, CRLF, LF, LFCR. + * @param {string} data + * @return {?string} the delimiter that was detected (or null on failure). + */ +Dygraph.detectLineDelimiter = function(data) { + for (var i = 0; i < data.length; i++) { + var code = data.charAt(i); + if (code === '\r') { + // Might actually be "\r\n". + if (((i + 1) < data.length) && (data.charAt(i + 1) === '\n')) { + return '\r\n'; + } + return code; + } + if (code === '\n') { + // Might actually be "\n\r". + if (((i + 1) < data.length) && (data.charAt(i + 1) === '\r')) { + return '\n\r'; + } + return code; + } + } + + return null; +}; + +/** + * Is one node contained by another? + * @param {Node} containee The contained node. + * @param {Node} container The container node. + * @return {boolean} Whether containee is inside (or equal to) container. + * @private + */ +Dygraph.isNodeContainedBy = function(containee, container) { + if (container === null || containee === null) { + return false; + } + var containeeNode = /** @type {Node} */ (containee); + while (containeeNode && containeeNode !== container) { + containeeNode = containeeNode.parentNode; + } + return (containeeNode === container); +}; + + +// This masks some numeric issues in older versions of Firefox, +// where 1.0/Math.pow(10,2) != Math.pow(10,-2). +/** @type {function(number,number):number} */ +Dygraph.pow = function(base, exp) { + if (exp < 0) { + return 1.0 / Math.pow(base, -exp); + } + return Math.pow(base, exp); +}; + +/** + * Converts any valid CSS color (hex, rgb(), named color) to an RGB tuple. + * + * @param {!string} colorStr Any valid CSS color string. + * @return {{r:number,g:number,b:number}} Parsed RGB tuple. + * @private + */ +Dygraph.toRGB_ = function(colorStr) { + // TODO(danvk): cache color parses to avoid repeated DOM manipulation. + var div = document.createElement('div'); + div.style.backgroundColor = colorStr; + div.style.visibility = 'hidden'; + document.body.appendChild(div); + var rgbStr; + if (window.getComputedStyle) { + rgbStr = window.getComputedStyle(div, null).backgroundColor; + } else { + // IE8 + rgbStr = div.currentStyle.backgroundColor; + } + document.body.removeChild(div); + var bits = /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/.exec(rgbStr); + return { + r: parseInt(bits[1], 10), + g: parseInt(bits[2], 10), + b: parseInt(bits[3], 10) + }; +}; + +/** + * Checks whether the browser supports the <canvas> tag. + * @param {HTMLCanvasElement=} opt_canvasElement Pass a canvas element as an + * optimization if you have one. + * @return {boolean} Whether the browser supports canvas. + */ +Dygraph.isCanvasSupported = function(opt_canvasElement) { + var canvas; + try { + canvas = opt_canvasElement || document.createElement("canvas"); + canvas.getContext("2d"); + } + catch (e) { + var ie = navigator.appVersion.match(/MSIE (\d\.\d)/); + var opera = (navigator.userAgent.toLowerCase().indexOf("opera") != -1); + if ((!ie) || (ie[1] < 6) || (opera)) + return false; + return true; + } + return true; +}; + +/** + * Parses the value as a floating point number. This is like the parseFloat() + * built-in, but with a few differences: + * - the empty string is parsed as null, rather than NaN. + * - if the string cannot be parsed at all, an error is logged. + * If the string can't be parsed, this method returns null. + * @param {string} x The string to be parsed + * @param {number=} opt_line_no The line number from which the string comes. + * @param {string=} opt_line The text of the line from which the string comes. + */ +Dygraph.parseFloat_ = function(x, opt_line_no, opt_line) { + var val = parseFloat(x); + if (!isNaN(val)) return val; + + // Try to figure out what happeend. + // If the value is the empty string, parse it as null. + if (/^ *$/.test(x)) return null; + + // If it was actually "NaN", return it as NaN. + if (/^ *nan *$/i.test(x)) return NaN; + + // Looks like a parsing error. + var msg = "Unable to parse '" + x + "' as a number"; + if (opt_line !== undefined && opt_line_no !== undefined) { + msg += " on line " + (1+(opt_line_no||0)) + " ('" + opt_line + "') of CSV."; + } + console.error(msg); + + return null; +}; + +})(); +/** + * @license + * Copyright 2011 Dan Vanderkam (danvdk@gmail.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +/** + * @fileoverview A wrapper around the Dygraph class which implements the + * interface for a GViz (aka Google Visualization API) visualization. + * It is designed to be a drop-in replacement for Google's AnnotatedTimeline, + * so the documentation at + * http://code.google.com/apis/chart/interactive/docs/gallery/annotatedtimeline.html + * translates over directly. + * + * For a full demo, see: + * - http://dygraphs.com/tests/gviz.html + * - http://dygraphs.com/tests/annotation-gviz.html + */ + +(function() { +/*global Dygraph:false */ +"use strict"; + +/** + * A wrapper around Dygraph that implements the gviz API. + * @param {!HTMLDivElement} container The DOM object the visualization should + * live in. + * @constructor + */ +Dygraph.GVizChart = function(container) { + this.container = container; +}; + +/** + * @param {GVizDataTable} data + * @param {Object.<*>} options + */ +Dygraph.GVizChart.prototype.draw = function(data, options) { + // Clear out any existing dygraph. + // TODO(danvk): would it make more sense to simply redraw using the current + // date_graph object? + this.container.innerHTML = ''; + if (typeof(this.date_graph) != 'undefined') { + this.date_graph.destroy(); + } + + this.date_graph = new Dygraph(this.container, data, options); +}; + +/** + * Google charts compatible setSelection + * Only row selection is supported, all points in the row will be highlighted + * @param {Array.<{row:number}>} selection_array array of the selected cells + * @public + */ +Dygraph.GVizChart.prototype.setSelection = function(selection_array) { + var row = false; + if (selection_array.length) { + row = selection_array[0].row; + } + this.date_graph.setSelection(row); +}; + +/** + * Google charts compatible getSelection implementation + * @return {Array.<{row:number,column:number}>} array of the selected cells + * @public + */ +Dygraph.GVizChart.prototype.getSelection = function() { + var selection = []; + + var row = this.date_graph.getSelection(); + + if (row < 0) return selection; + + var points = this.date_graph.layout_.points; + for (var setIdx = 0; setIdx < points.length; ++setIdx) { + selection.push({row: row, column: setIdx + 1}); + } + + return selection; +}; + +})(); +/** + * @license + * Copyright 2011 Robert Konigsberg (konigsberg@google.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +/** + * @fileoverview The default interaction model for Dygraphs. This is kept out + * of dygraph.js for better navigability. + * @author Robert Konigsberg (konigsberg@google.com) + */ + +(function() { +/*global Dygraph:false */ +"use strict"; + +/** + * You can drag this many pixels past the edge of the chart and still have it + * be considered a zoom. This makes it easier to zoom to the exact edge of the + * chart, a fairly common operation. + */ +var DRAG_EDGE_MARGIN = 100; + +/** + * A collection of functions to facilitate build custom interaction models. + * @class + */ +Dygraph.Interaction = {}; + +/** + * Checks whether the beginning & ending of an event were close enough that it + * should be considered a click. If it should, dispatch appropriate events. + * Returns true if the event was treated as a click. + * + * @param {Event} event + * @param {Dygraph} g + * @param {Object} context + */ +Dygraph.Interaction.maybeTreatMouseOpAsClick = function(event, g, context) { + context.dragEndX = Dygraph.dragGetX_(event, context); + context.dragEndY = Dygraph.dragGetY_(event, context); + var regionWidth = Math.abs(context.dragEndX - context.dragStartX); + var regionHeight = Math.abs(context.dragEndY - context.dragStartY); + + if (regionWidth < 2 && regionHeight < 2 && + g.lastx_ !== undefined && g.lastx_ != -1) { + Dygraph.Interaction.treatMouseOpAsClick(g, event, context); + } + + context.regionWidth = regionWidth; + context.regionHeight = regionHeight; +}; + +/** + * Called in response to an interaction model operation that + * should start the default panning behavior. + * + * It's used in the default callback for "mousedown" operations. + * Custom interaction model builders can use it to provide the default + * panning behavior. + * + * @param {Event} event the event object which led to the startPan call. + * @param {Dygraph} g The dygraph on which to act. + * @param {Object} context The dragging context object (with + * dragStartX/dragStartY/etc. properties). This function modifies the + * context. + */ +Dygraph.Interaction.startPan = function(event, g, context) { + var i, axis; + context.isPanning = true; + var xRange = g.xAxisRange(); + + if (g.getOptionForAxis("logscale", "x")) { + context.initialLeftmostDate = Dygraph.log10(xRange[0]); + context.dateRange = Dygraph.log10(xRange[1]) - Dygraph.log10(xRange[0]); + } else { + context.initialLeftmostDate = xRange[0]; + context.dateRange = xRange[1] - xRange[0]; + } + context.xUnitsPerPixel = context.dateRange / (g.plotter_.area.w - 1); + + if (g.getNumericOption("panEdgeFraction")) { + var maxXPixelsToDraw = g.width_ * g.getNumericOption("panEdgeFraction"); + var xExtremes = g.xAxisExtremes(); // I REALLY WANT TO CALL THIS xTremes! + + var boundedLeftX = g.toDomXCoord(xExtremes[0]) - maxXPixelsToDraw; + var boundedRightX = g.toDomXCoord(xExtremes[1]) + maxXPixelsToDraw; + + var boundedLeftDate = g.toDataXCoord(boundedLeftX); + var boundedRightDate = g.toDataXCoord(boundedRightX); + context.boundedDates = [boundedLeftDate, boundedRightDate]; + + var boundedValues = []; + var maxYPixelsToDraw = g.height_ * g.getNumericOption("panEdgeFraction"); + + for (i = 0; i < g.axes_.length; i++) { + axis = g.axes_[i]; + var yExtremes = axis.extremeRange; + + var boundedTopY = g.toDomYCoord(yExtremes[0], i) + maxYPixelsToDraw; + var boundedBottomY = g.toDomYCoord(yExtremes[1], i) - maxYPixelsToDraw; + + var boundedTopValue = g.toDataYCoord(boundedTopY, i); + var boundedBottomValue = g.toDataYCoord(boundedBottomY, i); + + boundedValues[i] = [boundedTopValue, boundedBottomValue]; + } + context.boundedValues = boundedValues; + } + + // Record the range of each y-axis at the start of the drag. + // If any axis has a valueRange or valueWindow, then we want a 2D pan. + // We can't store data directly in g.axes_, because it does not belong to us + // and could change out from under us during a pan (say if there's a data + // update). + context.is2DPan = false; + context.axes = []; + for (i = 0; i < g.axes_.length; i++) { + axis = g.axes_[i]; + var axis_data = {}; + var yRange = g.yAxisRange(i); + // TODO(konigsberg): These values should be in |context|. + // In log scale, initialTopValue, dragValueRange and unitsPerPixel are log scale. + var logscale = g.attributes_.getForAxis("logscale", i); + if (logscale) { + axis_data.initialTopValue = Dygraph.log10(yRange[1]); + axis_data.dragValueRange = Dygraph.log10(yRange[1]) - Dygraph.log10(yRange[0]); + } else { + axis_data.initialTopValue = yRange[1]; + axis_data.dragValueRange = yRange[1] - yRange[0]; + } + axis_data.unitsPerPixel = axis_data.dragValueRange / (g.plotter_.area.h - 1); + context.axes.push(axis_data); + + // While calculating axes, set 2dpan. + if (axis.valueWindow || axis.valueRange) context.is2DPan = true; + } +}; + +/** + * Called in response to an interaction model operation that + * responds to an event that pans the view. + * + * It's used in the default callback for "mousemove" operations. + * Custom interaction model builders can use it to provide the default + * panning behavior. + * + * @param {Event} event the event object which led to the movePan call. + * @param {Dygraph} g The dygraph on which to act. + * @param {Object} context The dragging context object (with + * dragStartX/dragStartY/etc. properties). This function modifies the + * context. + */ +Dygraph.Interaction.movePan = function(event, g, context) { + context.dragEndX = Dygraph.dragGetX_(event, context); + context.dragEndY = Dygraph.dragGetY_(event, context); + + var minDate = context.initialLeftmostDate - + (context.dragEndX - context.dragStartX) * context.xUnitsPerPixel; + if (context.boundedDates) { + minDate = Math.max(minDate, context.boundedDates[0]); + } + var maxDate = minDate + context.dateRange; + if (context.boundedDates) { + if (maxDate > context.boundedDates[1]) { + // Adjust minDate, and recompute maxDate. + minDate = minDate - (maxDate - context.boundedDates[1]); + maxDate = minDate + context.dateRange; + } + } + + if (g.getOptionForAxis("logscale", "x")) { + g.dateWindow_ = [ Math.pow(Dygraph.LOG_SCALE, minDate), + Math.pow(Dygraph.LOG_SCALE, maxDate) ]; + } else { + g.dateWindow_ = [minDate, maxDate]; + } + + // y-axis scaling is automatic unless this is a full 2D pan. + if (context.is2DPan) { + + var pixelsDragged = context.dragEndY - context.dragStartY; + + // Adjust each axis appropriately. + for (var i = 0; i < g.axes_.length; i++) { + var axis = g.axes_[i]; + var axis_data = context.axes[i]; + var unitsDragged = pixelsDragged * axis_data.unitsPerPixel; + + var boundedValue = context.boundedValues ? context.boundedValues[i] : null; + + // In log scale, maxValue and minValue are the logs of those values. + var maxValue = axis_data.initialTopValue + unitsDragged; + if (boundedValue) { + maxValue = Math.min(maxValue, boundedValue[1]); + } + var minValue = maxValue - axis_data.dragValueRange; + if (boundedValue) { + if (minValue < boundedValue[0]) { + // Adjust maxValue, and recompute minValue. + maxValue = maxValue - (minValue - boundedValue[0]); + minValue = maxValue - axis_data.dragValueRange; + } + } + if (g.attributes_.getForAxis("logscale", i)) { + axis.valueWindow = [ Math.pow(Dygraph.LOG_SCALE, minValue), + Math.pow(Dygraph.LOG_SCALE, maxValue) ]; + } else { + axis.valueWindow = [ minValue, maxValue ]; + } + } + } + + g.drawGraph_(false); +}; + +/** + * Called in response to an interaction model operation that + * responds to an event that ends panning. + * + * It's used in the default callback for "mouseup" operations. + * Custom interaction model builders can use it to provide the default + * panning behavior. + * + * @param {Event} event the event object which led to the endPan call. + * @param {Dygraph} g The dygraph on which to act. + * @param {Object} context The dragging context object (with + * dragStartX/dragStartY/etc. properties). This function modifies the + * context. + */ +Dygraph.Interaction.endPan = Dygraph.Interaction.maybeTreatMouseOpAsClick; + +/** + * Called in response to an interaction model operation that + * responds to an event that starts zooming. + * + * It's used in the default callback for "mousedown" operations. + * Custom interaction model builders can use it to provide the default + * zooming behavior. + * + * @param {Event} event the event object which led to the startZoom call. + * @param {Dygraph} g The dygraph on which to act. + * @param {Object} context The dragging context object (with + * dragStartX/dragStartY/etc. properties). This function modifies the + * context. + */ +Dygraph.Interaction.startZoom = function(event, g, context) { + context.isZooming = true; + context.zoomMoved = false; +}; + +/** + * Called in response to an interaction model operation that + * responds to an event that defines zoom boundaries. + * + * It's used in the default callback for "mousemove" operations. + * Custom interaction model builders can use it to provide the default + * zooming behavior. + * + * @param {Event} event the event object which led to the moveZoom call. + * @param {Dygraph} g The dygraph on which to act. + * @param {Object} context The dragging context object (with + * dragStartX/dragStartY/etc. properties). This function modifies the + * context. + */ +Dygraph.Interaction.moveZoom = function(event, g, context) { + context.zoomMoved = true; + context.dragEndX = Dygraph.dragGetX_(event, context); + context.dragEndY = Dygraph.dragGetY_(event, context); + + var xDelta = Math.abs(context.dragStartX - context.dragEndX); + var yDelta = Math.abs(context.dragStartY - context.dragEndY); + + // drag direction threshold for y axis is twice as large as x axis + context.dragDirection = (xDelta < yDelta / 2) ? Dygraph.VERTICAL : Dygraph.HORIZONTAL; + + g.drawZoomRect_( + context.dragDirection, + context.dragStartX, + context.dragEndX, + context.dragStartY, + context.dragEndY, + context.prevDragDirection, + context.prevEndX, + context.prevEndY); + + context.prevEndX = context.dragEndX; + context.prevEndY = context.dragEndY; + context.prevDragDirection = context.dragDirection; +}; + +/** + * TODO(danvk): move this logic into dygraph.js + * @param {Dygraph} g + * @param {Event} event + * @param {Object} context + */ +Dygraph.Interaction.treatMouseOpAsClick = function(g, event, context) { + var clickCallback = g.getFunctionOption('clickCallback'); + var pointClickCallback = g.getFunctionOption('pointClickCallback'); + + var selectedPoint = null; + + // Find out if the click occurs on a point. + var closestIdx = -1; + var closestDistance = Number.MAX_VALUE; + + // check if the click was on a particular point. + for (var i = 0; i < g.selPoints_.length; i++) { + var p = g.selPoints_[i]; + var distance = Math.pow(p.canvasx - context.dragEndX, 2) + + Math.pow(p.canvasy - context.dragEndY, 2); + if (!isNaN(distance) && + (closestIdx == -1 || distance < closestDistance)) { + closestDistance = distance; + closestIdx = i; + } + } + + // Allow any click within two pixels of the dot. + var radius = g.getNumericOption('highlightCircleSize') + 2; + if (closestDistance <= radius * radius) { + selectedPoint = g.selPoints_[closestIdx]; + } + + if (selectedPoint) { + var e = { + cancelable: true, + point: selectedPoint, + canvasx: context.dragEndX, + canvasy: context.dragEndY + }; + var defaultPrevented = g.cascadeEvents_('pointClick', e); + if (defaultPrevented) { + // Note: this also prevents click / clickCallback from firing. + return; + } + if (pointClickCallback) { + pointClickCallback.call(g, event, selectedPoint); + } + } + + var e = { + cancelable: true, + xval: g.lastx_, // closest point by x value + pts: g.selPoints_, + canvasx: context.dragEndX, + canvasy: context.dragEndY + }; + if (!g.cascadeEvents_('click', e)) { + if (clickCallback) { + // TODO(danvk): pass along more info about the points, e.g. 'x' + clickCallback.call(g, event, g.lastx_, g.selPoints_); + } + } +}; + +/** + * Called in response to an interaction model operation that + * responds to an event that performs a zoom based on previously defined + * bounds.. + * + * It's used in the default callback for "mouseup" operations. + * Custom interaction model builders can use it to provide the default + * zooming behavior. + * + * @param {Event} event the event object which led to the endZoom call. + * @param {Dygraph} g The dygraph on which to end the zoom. + * @param {Object} context The dragging context object (with + * dragStartX/dragStartY/etc. properties). This function modifies the + * context. + */ +Dygraph.Interaction.endZoom = function(event, g, context) { + g.clearZoomRect_(); + context.isZooming = false; + Dygraph.Interaction.maybeTreatMouseOpAsClick(event, g, context); + + // The zoom rectangle is visibly clipped to the plot area, so its behavior + // should be as well. + // See http://code.google.com/p/dygraphs/issues/detail?id=280 + var plotArea = g.getArea(); + if (context.regionWidth >= 10 && + context.dragDirection == Dygraph.HORIZONTAL) { + var left = Math.min(context.dragStartX, context.dragEndX), + right = Math.max(context.dragStartX, context.dragEndX); + left = Math.max(left, plotArea.x); + right = Math.min(right, plotArea.x + plotArea.w); + if (left < right) { + g.doZoomX_(left, right); + } + context.cancelNextDblclick = true; + } else if (context.regionHeight >= 10 && + context.dragDirection == Dygraph.VERTICAL) { + var top = Math.min(context.dragStartY, context.dragEndY), + bottom = Math.max(context.dragStartY, context.dragEndY); + top = Math.max(top, plotArea.y); + bottom = Math.min(bottom, plotArea.y + plotArea.h); + if (top < bottom) { + g.doZoomY_(top, bottom); + } + context.cancelNextDblclick = true; + } + context.dragStartX = null; + context.dragStartY = null; +}; + +/** + * @private + */ +Dygraph.Interaction.startTouch = function(event, g, context) { + event.preventDefault(); // touch browsers are all nice. + if (event.touches.length > 1) { + // If the user ever puts two fingers down, it's not a double tap. + context.startTimeForDoubleTapMs = null; + } + + var touches = []; + for (var i = 0; i < event.touches.length; i++) { + var t = event.touches[i]; + // we dispense with 'dragGetX_' because all touchBrowsers support pageX + touches.push({ + pageX: t.pageX, + pageY: t.pageY, + dataX: g.toDataXCoord(t.pageX), + dataY: g.toDataYCoord(t.pageY) + // identifier: t.identifier + }); + } + context.initialTouches = touches; + + if (touches.length == 1) { + // This is just a swipe. + context.initialPinchCenter = touches[0]; + context.touchDirections = { x: true, y: true }; + } else if (touches.length >= 2) { + // It's become a pinch! + // In case there are 3+ touches, we ignore all but the "first" two. + + // only screen coordinates can be averaged (data coords could be log scale). + context.initialPinchCenter = { + pageX: 0.5 * (touches[0].pageX + touches[1].pageX), + pageY: 0.5 * (touches[0].pageY + touches[1].pageY), + + // TODO(danvk): remove + dataX: 0.5 * (touches[0].dataX + touches[1].dataX), + dataY: 0.5 * (touches[0].dataY + touches[1].dataY) + }; + + // Make pinches in a 45-degree swath around either axis 1-dimensional zooms. + var initialAngle = 180 / Math.PI * Math.atan2( + context.initialPinchCenter.pageY - touches[0].pageY, + touches[0].pageX - context.initialPinchCenter.pageX); + + // use symmetry to get it into the first quadrant. + initialAngle = Math.abs(initialAngle); + if (initialAngle > 90) initialAngle = 90 - initialAngle; + + context.touchDirections = { + x: (initialAngle < (90 - 45/2)), + y: (initialAngle > 45/2) + }; + } + + // save the full x & y ranges. + context.initialRange = { + x: g.xAxisRange(), + y: g.yAxisRange() + }; +}; + +/** + * @private + */ +Dygraph.Interaction.moveTouch = function(event, g, context) { + // If the tap moves, then it's definitely not part of a double-tap. + context.startTimeForDoubleTapMs = null; + + var i, touches = []; + for (i = 0; i < event.touches.length; i++) { + var t = event.touches[i]; + touches.push({ + pageX: t.pageX, + pageY: t.pageY + }); + } + var initialTouches = context.initialTouches; + + var c_now; + + // old and new centers. + var c_init = context.initialPinchCenter; + if (touches.length == 1) { + c_now = touches[0]; + } else { + c_now = { + pageX: 0.5 * (touches[0].pageX + touches[1].pageX), + pageY: 0.5 * (touches[0].pageY + touches[1].pageY) + }; + } + + // this is the "swipe" component + // we toss it out for now, but could use it in the future. + var swipe = { + pageX: c_now.pageX - c_init.pageX, + pageY: c_now.pageY - c_init.pageY + }; + var dataWidth = context.initialRange.x[1] - context.initialRange.x[0]; + var dataHeight = context.initialRange.y[0] - context.initialRange.y[1]; + swipe.dataX = (swipe.pageX / g.plotter_.area.w) * dataWidth; + swipe.dataY = (swipe.pageY / g.plotter_.area.h) * dataHeight; + var xScale, yScale; + + // The residual bits are usually split into scale & rotate bits, but we split + // them into x-scale and y-scale bits. + if (touches.length == 1) { + xScale = 1.0; + yScale = 1.0; + } else if (touches.length >= 2) { + var initHalfWidth = (initialTouches[1].pageX - c_init.pageX); + xScale = (touches[1].pageX - c_now.pageX) / initHalfWidth; + + var initHalfHeight = (initialTouches[1].pageY - c_init.pageY); + yScale = (touches[1].pageY - c_now.pageY) / initHalfHeight; + } + + // Clip scaling to [1/8, 8] to prevent too much blowup. + xScale = Math.min(8, Math.max(0.125, xScale)); + yScale = Math.min(8, Math.max(0.125, yScale)); + + var didZoom = false; + if (context.touchDirections.x) { + g.dateWindow_ = [ + c_init.dataX - swipe.dataX + (context.initialRange.x[0] - c_init.dataX) / xScale, + c_init.dataX - swipe.dataX + (context.initialRange.x[1] - c_init.dataX) / xScale + ]; + didZoom = true; + } + + if (context.touchDirections.y) { + for (i = 0; i < 1 /*g.axes_.length*/; i++) { + var axis = g.axes_[i]; + var logscale = g.attributes_.getForAxis("logscale", i); + if (logscale) { + // TODO(danvk): implement + } else { + axis.valueWindow = [ + c_init.dataY - swipe.dataY + (context.initialRange.y[0] - c_init.dataY) / yScale, + c_init.dataY - swipe.dataY + (context.initialRange.y[1] - c_init.dataY) / yScale + ]; + didZoom = true; + } + } + } + + g.drawGraph_(false); + + // We only call zoomCallback on zooms, not pans, to mirror desktop behavior. + if (didZoom && touches.length > 1 && g.getFunctionOption('zoomCallback')) { + var viewWindow = g.xAxisRange(); + g.getFunctionOption("zoomCallback").call(g, viewWindow[0], viewWindow[1], g.yAxisRanges()); + } +}; + +/** + * @private + */ +Dygraph.Interaction.endTouch = function(event, g, context) { + if (event.touches.length !== 0) { + // this is effectively a "reset" + Dygraph.Interaction.startTouch(event, g, context); + } else if (event.changedTouches.length == 1) { + // Could be part of a "double tap" + // The heuristic here is that it's a double-tap if the two touchend events + // occur within 500ms and within a 50x50 pixel box. + var now = new Date().getTime(); + var t = event.changedTouches[0]; + if (context.startTimeForDoubleTapMs && + now - context.startTimeForDoubleTapMs < 500 && + context.doubleTapX && Math.abs(context.doubleTapX - t.screenX) < 50 && + context.doubleTapY && Math.abs(context.doubleTapY - t.screenY) < 50) { + g.resetZoom(); + } else { + context.startTimeForDoubleTapMs = now; + context.doubleTapX = t.screenX; + context.doubleTapY = t.screenY; + } + } +}; + +// Determine the distance from x to [left, right]. +var distanceFromInterval = function(x, left, right) { + if (x < left) { + return left - x; + } else if (x > right) { + return x - right; + } else { + return 0; + } +}; + +/** + * Returns the number of pixels by which the event happens from the nearest + * edge of the chart. For events in the interior of the chart, this returns zero. + */ +var distanceFromChart = function(event, g) { + var chartPos = Dygraph.findPos(g.canvas_); + var box = { + left: chartPos.x, + right: chartPos.x + g.canvas_.offsetWidth, + top: chartPos.y, + bottom: chartPos.y + g.canvas_.offsetHeight + }; + + var pt = { + x: Dygraph.pageX(event), + y: Dygraph.pageY(event) + }; + + var dx = distanceFromInterval(pt.x, box.left, box.right), + dy = distanceFromInterval(pt.y, box.top, box.bottom); + return Math.max(dx, dy); +}; + +/** + * Default interation model for dygraphs. You can refer to specific elements of + * this when constructing your own interaction model, e.g.: + * g.updateOptions( { + * interactionModel: { + * mousedown: Dygraph.defaultInteractionModel.mousedown + * } + * } ); + */ +Dygraph.Interaction.defaultModel = { + // Track the beginning of drag events + mousedown: function(event, g, context) { + // Right-click should not initiate a zoom. + if (event.button && event.button == 2) return; + + context.initializeMouseDown(event, g, context); + + if (event.altKey || event.shiftKey) { + Dygraph.startPan(event, g, context); + } else { + Dygraph.startZoom(event, g, context); + } + + // Note: we register mousemove/mouseup on document to allow some leeway for + // events to move outside of the chart. Interaction model events get + // registered on the canvas, which is too small to allow this. + var mousemove = function(event) { + if (context.isZooming) { + // When the mouse moves >200px from the chart edge, cancel the zoom. + var d = distanceFromChart(event, g); + if (d < DRAG_EDGE_MARGIN) { + Dygraph.moveZoom(event, g, context); + } else { + if (context.dragEndX !== null) { + context.dragEndX = null; + context.dragEndY = null; + g.clearZoomRect_(); + } + } + } else if (context.isPanning) { + Dygraph.movePan(event, g, context); + } + }; + var mouseup = function(event) { + if (context.isZooming) { + if (context.dragEndX !== null) { + Dygraph.endZoom(event, g, context); + } else { + Dygraph.Interaction.maybeTreatMouseOpAsClick(event, g, context); + } + } else if (context.isPanning) { + Dygraph.endPan(event, g, context); + } + + Dygraph.removeEvent(document, 'mousemove', mousemove); + Dygraph.removeEvent(document, 'mouseup', mouseup); + context.destroy(); + }; + + g.addAndTrackEvent(document, 'mousemove', mousemove); + g.addAndTrackEvent(document, 'mouseup', mouseup); + }, + willDestroyContextMyself: true, + + touchstart: function(event, g, context) { + Dygraph.Interaction.startTouch(event, g, context); + }, + touchmove: function(event, g, context) { + Dygraph.Interaction.moveTouch(event, g, context); + }, + touchend: function(event, g, context) { + Dygraph.Interaction.endTouch(event, g, context); + }, + + // Disable zooming out if panning. + dblclick: function(event, g, context) { + if (context.cancelNextDblclick) { + context.cancelNextDblclick = false; + return; + } + + // Give plugins a chance to grab this event. + var e = { + canvasx: context.dragEndX, + canvasy: context.dragEndY + }; + if (g.cascadeEvents_('dblclick', e)) { + return; + } + + if (event.altKey || event.shiftKey) { + return; + } + g.resetZoom(); + } +}; + +Dygraph.DEFAULT_ATTRS.interactionModel = Dygraph.Interaction.defaultModel; + +// old ways of accessing these methods/properties +Dygraph.defaultInteractionModel = Dygraph.Interaction.defaultModel; +Dygraph.endZoom = Dygraph.Interaction.endZoom; +Dygraph.moveZoom = Dygraph.Interaction.moveZoom; +Dygraph.startZoom = Dygraph.Interaction.startZoom; +Dygraph.endPan = Dygraph.Interaction.endPan; +Dygraph.movePan = Dygraph.Interaction.movePan; +Dygraph.startPan = Dygraph.Interaction.startPan; + +Dygraph.Interaction.nonInteractiveModel_ = { + mousedown: function(event, g, context) { + context.initializeMouseDown(event, g, context); + }, + mouseup: Dygraph.Interaction.maybeTreatMouseOpAsClick +}; + +// Default interaction model when using the range selector. +Dygraph.Interaction.dragIsPanInteractionModel = { + mousedown: function(event, g, context) { + context.initializeMouseDown(event, g, context); + Dygraph.startPan(event, g, context); + }, + mousemove: function(event, g, context) { + if (context.isPanning) { + Dygraph.movePan(event, g, context); + } + }, + mouseup: function(event, g, context) { + if (context.isPanning) { + Dygraph.endPan(event, g, context); + } + } +}; + +})(); +/** + * @license + * Copyright 2011 Dan Vanderkam (danvdk@gmail.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +/** + * @fileoverview Description of this file. + * @author danvk@google.com (Dan Vanderkam) + * + * A ticker is a function with the following interface: + * + * function(a, b, pixels, options_view, dygraph, forced_values); + * -> [ { v: tick1_v, label: tick1_label[, label_v: label_v1] }, + * { v: tick2_v, label: tick2_label[, label_v: label_v2] }, + * ... + * ] + * + * The returned value is called a "tick list". + * + * Arguments + * --------- + * + * [a, b] is the range of the axis for which ticks are being generated. For a + * numeric axis, these will simply be numbers. For a date axis, these will be + * millis since epoch (convertable to Date objects using "new Date(a)" and "new + * Date(b)"). + * + * opts provides access to chart- and axis-specific options. It can be used to + * access number/date formatting code/options, check for a log scale, etc. + * + * pixels is the length of the axis in pixels. opts('pixelsPerLabel') is the + * minimum amount of space to be allotted to each label. For instance, if + * pixels=400 and opts('pixelsPerLabel')=40 then the ticker should return + * between zero and ten (400/40) ticks. + * + * dygraph is the Dygraph object for which an axis is being constructed. + * + * forced_values is used for secondary y-axes. The tick positions are typically + * set by the primary y-axis, so the secondary y-axis has no choice in where to + * put these. It simply has to generate labels for these data values. + * + * Tick lists + * ---------- + * Typically a tick will have both a grid/tick line and a label at one end of + * that line (at the bottom for an x-axis, at left or right for the y-axis). + * + * A tick may be missing one of these two components: + * - If "label_v" is specified instead of "v", then there will be no tick or + * gridline, just a label. + * - Similarly, if "label" is not specified, then there will be a gridline + * without a label. + * + * This flexibility is useful in a few situations: + * - For log scales, some of the tick lines may be too close to all have labels. + * - For date scales where years are being displayed, it is desirable to display + * tick marks at the beginnings of years but labels (e.g. "2006") in the + * middle of the years. + */ + +/*jshint sub:true */ +/*global Dygraph:false */ +(function() { +"use strict"; + +/** @typedef {Array.<{v:number, label:string, label_v:(string|undefined)}>} */ +Dygraph.TickList = undefined; // the ' = undefined' keeps jshint happy. + +/** @typedef {function( + * number, + * number, + * number, + * function(string):*, + * Dygraph=, + * Array.= + * ): Dygraph.TickList} + */ +Dygraph.Ticker = undefined; // the ' = undefined' keeps jshint happy. + +/** @type {Dygraph.Ticker} */ +Dygraph.numericLinearTicks = function(a, b, pixels, opts, dygraph, vals) { + var nonLogscaleOpts = function(opt) { + if (opt === 'logscale') return false; + return opts(opt); + }; + return Dygraph.numericTicks(a, b, pixels, nonLogscaleOpts, dygraph, vals); +}; + +/** @type {Dygraph.Ticker} */ +Dygraph.numericTicks = function(a, b, pixels, opts, dygraph, vals) { + var pixels_per_tick = /** @type{number} */(opts('pixelsPerLabel')); + var ticks = []; + var i, j, tickV, nTicks; + if (vals) { + for (i = 0; i < vals.length; i++) { + ticks.push({v: vals[i]}); + } + } else { + // TODO(danvk): factor this log-scale block out into a separate function. + if (opts("logscale")) { + nTicks = Math.floor(pixels / pixels_per_tick); + var minIdx = Dygraph.binarySearch(a, Dygraph.PREFERRED_LOG_TICK_VALUES, 1); + var maxIdx = Dygraph.binarySearch(b, Dygraph.PREFERRED_LOG_TICK_VALUES, -1); + if (minIdx == -1) { + minIdx = 0; + } + if (maxIdx == -1) { + maxIdx = Dygraph.PREFERRED_LOG_TICK_VALUES.length - 1; + } + // Count the number of tick values would appear, if we can get at least + // nTicks / 4 accept them. + var lastDisplayed = null; + if (maxIdx - minIdx >= nTicks / 4) { + for (var idx = maxIdx; idx >= minIdx; idx--) { + var tickValue = Dygraph.PREFERRED_LOG_TICK_VALUES[idx]; + var pixel_coord = Math.log(tickValue / a) / Math.log(b / a) * pixels; + var tick = { v: tickValue }; + if (lastDisplayed === null) { + lastDisplayed = { + tickValue : tickValue, + pixel_coord : pixel_coord + }; + } else { + if (Math.abs(pixel_coord - lastDisplayed.pixel_coord) >= pixels_per_tick) { + lastDisplayed = { + tickValue : tickValue, + pixel_coord : pixel_coord + }; + } else { + tick.label = ""; + } + } + ticks.push(tick); + } + // Since we went in backwards order. + ticks.reverse(); + } + } + + // ticks.length won't be 0 if the log scale function finds values to insert. + if (ticks.length === 0) { + // Basic idea: + // Try labels every 1, 2, 5, 10, 20, 50, 100, etc. + // Calculate the resulting tick spacing (i.e. this.height_ / nTicks). + // The first spacing greater than pixelsPerYLabel is what we use. + // TODO(danvk): version that works on a log scale. + var kmg2 = opts("labelsKMG2"); + var mults, base; + if (kmg2) { + mults = [1, 2, 4, 8, 16, 32, 64, 128, 256]; + base = 16; + } else { + mults = [1, 2, 5, 10, 20, 50, 100]; + base = 10; + } + + // Get the maximum number of permitted ticks based on the + // graph's pixel size and pixels_per_tick setting. + var max_ticks = Math.ceil(pixels / pixels_per_tick); + + // Now calculate the data unit equivalent of this tick spacing. + // Use abs() since graphs may have a reversed Y axis. + var units_per_tick = Math.abs(b - a) / max_ticks; + + // Based on this, get a starting scale which is the largest + // integer power of the chosen base (10 or 16) that still remains + // below the requested pixels_per_tick spacing. + var base_power = Math.floor(Math.log(units_per_tick) / Math.log(base)); + var base_scale = Math.pow(base, base_power); + + // Now try multiples of the starting scale until we find one + // that results in tick marks spaced sufficiently far apart. + // The "mults" array should cover the range 1 .. base^2 to + // adjust for rounding and edge effects. + var scale, low_val, high_val, spacing; + for (j = 0; j < mults.length; j++) { + scale = base_scale * mults[j]; + low_val = Math.floor(a / scale) * scale; + high_val = Math.ceil(b / scale) * scale; + nTicks = Math.abs(high_val - low_val) / scale; + spacing = pixels / nTicks; + if (spacing > pixels_per_tick) break; + } + + // Construct the set of ticks. + // Allow reverse y-axis if it's explicitly requested. + if (low_val > high_val) scale *= -1; + for (i = 0; i <= nTicks; i++) { + tickV = low_val + i * scale; + ticks.push( {v: tickV} ); + } + } + } + + var formatter = /**@type{AxisLabelFormatter}*/(opts('axisLabelFormatter')); + + // Add labels to the ticks. + for (i = 0; i < ticks.length; i++) { + if (ticks[i].label !== undefined) continue; // Use current label. + // TODO(danvk): set granularity to something appropriate here. + ticks[i].label = formatter(ticks[i].v, 0, opts, dygraph); + } + + return ticks; +}; + + +/** @type {Dygraph.Ticker} */ +Dygraph.dateTicker = function(a, b, pixels, opts, dygraph, vals) { + var chosen = Dygraph.pickDateTickGranularity(a, b, pixels, opts); + + if (chosen >= 0) { + return Dygraph.getDateAxis(a, b, chosen, opts, dygraph); + } else { + // this can happen if self.width_ is zero. + return []; + } +}; + +// Time granularity enumeration +// TODO(danvk): make this an @enum +Dygraph.SECONDLY = 0; +Dygraph.TWO_SECONDLY = 1; +Dygraph.FIVE_SECONDLY = 2; +Dygraph.TEN_SECONDLY = 3; +Dygraph.THIRTY_SECONDLY = 4; +Dygraph.MINUTELY = 5; +Dygraph.TWO_MINUTELY = 6; +Dygraph.FIVE_MINUTELY = 7; +Dygraph.TEN_MINUTELY = 8; +Dygraph.THIRTY_MINUTELY = 9; +Dygraph.HOURLY = 10; +Dygraph.TWO_HOURLY = 11; +Dygraph.SIX_HOURLY = 12; +Dygraph.DAILY = 13; +Dygraph.TWO_DAILY = 14; +Dygraph.WEEKLY = 15; +Dygraph.MONTHLY = 16; +Dygraph.QUARTERLY = 17; +Dygraph.BIANNUAL = 18; +Dygraph.ANNUAL = 19; +Dygraph.DECADAL = 20; +Dygraph.CENTENNIAL = 21; +Dygraph.NUM_GRANULARITIES = 22; + +// Date components enumeration (in the order of the arguments in Date) +// TODO: make this an @enum +Dygraph.DATEFIELD_Y = 0; +Dygraph.DATEFIELD_M = 1; +Dygraph.DATEFIELD_D = 2; +Dygraph.DATEFIELD_HH = 3; +Dygraph.DATEFIELD_MM = 4; +Dygraph.DATEFIELD_SS = 5; +Dygraph.DATEFIELD_MS = 6; +Dygraph.NUM_DATEFIELDS = 7; + + +/** + * The value of datefield will start at an even multiple of "step", i.e. + * if datefield=SS and step=5 then the first tick will be on a multiple of 5s. + * + * For granularities <= HOURLY, ticks are generated every `spacing` ms. + * + * At coarser granularities, ticks are generated by incrementing `datefield` by + * `step`. In this case, the `spacing` value is only used to estimate the + * number of ticks. It should roughly correspond to the spacing between + * adjacent ticks. + * + * @type {Array.<{datefield:number, step:number, spacing:number}>} + */ +Dygraph.TICK_PLACEMENT = []; +Dygraph.TICK_PLACEMENT[Dygraph.SECONDLY] = {datefield: Dygraph.DATEFIELD_SS, step: 1, spacing: 1000 * 1}; +Dygraph.TICK_PLACEMENT[Dygraph.TWO_SECONDLY] = {datefield: Dygraph.DATEFIELD_SS, step: 2, spacing: 1000 * 2}; +Dygraph.TICK_PLACEMENT[Dygraph.FIVE_SECONDLY] = {datefield: Dygraph.DATEFIELD_SS, step: 5, spacing: 1000 * 5}; +Dygraph.TICK_PLACEMENT[Dygraph.TEN_SECONDLY] = {datefield: Dygraph.DATEFIELD_SS, step: 10, spacing: 1000 * 10}; +Dygraph.TICK_PLACEMENT[Dygraph.THIRTY_SECONDLY] = {datefield: Dygraph.DATEFIELD_SS, step: 30, spacing: 1000 * 30}; +Dygraph.TICK_PLACEMENT[Dygraph.MINUTELY] = {datefield: Dygraph.DATEFIELD_MM, step: 1, spacing: 1000 * 60}; +Dygraph.TICK_PLACEMENT[Dygraph.TWO_MINUTELY] = {datefield: Dygraph.DATEFIELD_MM, step: 2, spacing: 1000 * 60 * 2}; +Dygraph.TICK_PLACEMENT[Dygraph.FIVE_MINUTELY] = {datefield: Dygraph.DATEFIELD_MM, step: 5, spacing: 1000 * 60 * 5}; +Dygraph.TICK_PLACEMENT[Dygraph.TEN_MINUTELY] = {datefield: Dygraph.DATEFIELD_MM, step: 10, spacing: 1000 * 60 * 10}; +Dygraph.TICK_PLACEMENT[Dygraph.THIRTY_MINUTELY] = {datefield: Dygraph.DATEFIELD_MM, step: 30, spacing: 1000 * 60 * 30}; +Dygraph.TICK_PLACEMENT[Dygraph.HOURLY] = {datefield: Dygraph.DATEFIELD_HH, step: 1, spacing: 1000 * 3600}; +Dygraph.TICK_PLACEMENT[Dygraph.TWO_HOURLY] = {datefield: Dygraph.DATEFIELD_HH, step: 2, spacing: 1000 * 3600 * 2}; +Dygraph.TICK_PLACEMENT[Dygraph.SIX_HOURLY] = {datefield: Dygraph.DATEFIELD_HH, step: 6, spacing: 1000 * 3600 * 6}; +Dygraph.TICK_PLACEMENT[Dygraph.DAILY] = {datefield: Dygraph.DATEFIELD_D, step: 1, spacing: 1000 * 86400}; +Dygraph.TICK_PLACEMENT[Dygraph.TWO_DAILY] = {datefield: Dygraph.DATEFIELD_D, step: 2, spacing: 1000 * 86400 * 2}; +Dygraph.TICK_PLACEMENT[Dygraph.WEEKLY] = {datefield: Dygraph.DATEFIELD_D, step: 7, spacing: 1000 * 604800}; +Dygraph.TICK_PLACEMENT[Dygraph.MONTHLY] = {datefield: Dygraph.DATEFIELD_M, step: 1, spacing: 1000 * 7200 * 365.2524}; // 1e3 * 60 * 60 * 24 * 365.2524 / 12 +Dygraph.TICK_PLACEMENT[Dygraph.QUARTERLY] = {datefield: Dygraph.DATEFIELD_M, step: 3, spacing: 1000 * 21600 * 365.2524}; // 1e3 * 60 * 60 * 24 * 365.2524 / 4 +Dygraph.TICK_PLACEMENT[Dygraph.BIANNUAL] = {datefield: Dygraph.DATEFIELD_M, step: 6, spacing: 1000 * 43200 * 365.2524}; // 1e3 * 60 * 60 * 24 * 365.2524 / 2 +Dygraph.TICK_PLACEMENT[Dygraph.ANNUAL] = {datefield: Dygraph.DATEFIELD_Y, step: 1, spacing: 1000 * 86400 * 365.2524}; // 1e3 * 60 * 60 * 24 * 365.2524 * 1 +Dygraph.TICK_PLACEMENT[Dygraph.DECADAL] = {datefield: Dygraph.DATEFIELD_Y, step: 10, spacing: 1000 * 864000 * 365.2524}; // 1e3 * 60 * 60 * 24 * 365.2524 * 10 +Dygraph.TICK_PLACEMENT[Dygraph.CENTENNIAL] = {datefield: Dygraph.DATEFIELD_Y, step: 100, spacing: 1000 * 8640000 * 365.2524}; // 1e3 * 60 * 60 * 24 * 365.2524 * 100 + + +/** + * This is a list of human-friendly values at which to show tick marks on a log + * scale. It is k * 10^n, where k=1..9 and n=-39..+39, so: + * ..., 1, 2, 3, 4, 5, ..., 9, 10, 20, 30, ..., 90, 100, 200, 300, ... + * NOTE: this assumes that Dygraph.LOG_SCALE = 10. + * @type {Array.} + */ +Dygraph.PREFERRED_LOG_TICK_VALUES = (function() { + var vals = []; + for (var power = -39; power <= 39; power++) { + var range = Math.pow(10, power); + for (var mult = 1; mult <= 9; mult++) { + var val = range * mult; + vals.push(val); + } + } + return vals; +})(); + +/** + * Determine the correct granularity of ticks on a date axis. + * + * @param {number} a Left edge of the chart (ms) + * @param {number} b Right edge of the chart (ms) + * @param {number} pixels Size of the chart in the relevant dimension (width). + * @param {function(string):*} opts Function mapping from option name -> value. + * @return {number} The appropriate axis granularity for this chart. See the + * enumeration of possible values in dygraph-tickers.js. + */ +Dygraph.pickDateTickGranularity = function(a, b, pixels, opts) { + var pixels_per_tick = /** @type{number} */(opts('pixelsPerLabel')); + for (var i = 0; i < Dygraph.NUM_GRANULARITIES; i++) { + var num_ticks = Dygraph.numDateTicks(a, b, i); + if (pixels / num_ticks >= pixels_per_tick) { + return i; + } + } + return -1; +}; + +/** + * Compute the number of ticks on a date axis for a given granularity. + * @param {number} start_time + * @param {number} end_time + * @param {number} granularity (one of the granularities enumerated above) + * @return {number} (Approximate) number of ticks that would result. + */ +Dygraph.numDateTicks = function(start_time, end_time, granularity) { + var spacing = Dygraph.TICK_PLACEMENT[granularity].spacing; + return Math.round(1.0 * (end_time - start_time) / spacing); +}; + +/** + * Compute the positions and labels of ticks on a date axis for a given granularity. + * @param {number} start_time + * @param {number} end_time + * @param {number} granularity (one of the granularities enumerated above) + * @param {function(string):*} opts Function mapping from option name -> value. + * @param {Dygraph=} dg + * @return {!Dygraph.TickList} + */ +Dygraph.getDateAxis = function(start_time, end_time, granularity, opts, dg) { + var formatter = /** @type{AxisLabelFormatter} */( + opts("axisLabelFormatter")); + var utc = opts("labelsUTC"); + var accessors = utc ? Dygraph.DateAccessorsUTC : Dygraph.DateAccessorsLocal; + + var datefield = Dygraph.TICK_PLACEMENT[granularity].datefield; + var step = Dygraph.TICK_PLACEMENT[granularity].step; + var spacing = Dygraph.TICK_PLACEMENT[granularity].spacing; + + // Choose a nice tick position before the initial instant. + // Currently, this code deals properly with the existent daily granularities: + // DAILY (with step of 1) and WEEKLY (with step of 7 but specially handled). + // Other daily granularities (say TWO_DAILY) should also be handled specially + // by setting the start_date_offset to 0. + var start_date = new Date(start_time); + var date_array = []; + date_array[Dygraph.DATEFIELD_Y] = accessors.getFullYear(start_date); + date_array[Dygraph.DATEFIELD_M] = accessors.getMonth(start_date); + date_array[Dygraph.DATEFIELD_D] = accessors.getDate(start_date); + date_array[Dygraph.DATEFIELD_HH] = accessors.getHours(start_date); + date_array[Dygraph.DATEFIELD_MM] = accessors.getMinutes(start_date); + date_array[Dygraph.DATEFIELD_SS] = accessors.getSeconds(start_date); + date_array[Dygraph.DATEFIELD_MS] = accessors.getMilliseconds(start_date); + + var start_date_offset = date_array[datefield] % step; + if (granularity == Dygraph.WEEKLY) { + // This will put the ticks on Sundays. + start_date_offset = accessors.getDay(start_date); + } + + date_array[datefield] -= start_date_offset; + for (var df = datefield + 1; df < Dygraph.NUM_DATEFIELDS; df++) { + // The minimum value is 1 for the day of month, and 0 for all other fields. + date_array[df] = (df === Dygraph.DATEFIELD_D) ? 1 : 0; + } + + // Generate the ticks. + // For granularities not coarser than HOURLY we use the fact that: + // the number of milliseconds between ticks is constant + // and equal to the defined spacing. + // Otherwise we rely on the 'roll over' property of the Date functions: + // when some date field is set to a value outside of its logical range, + // the excess 'rolls over' the next (more significant) field. + // However, when using local time with DST transitions, + // there are dates that do not represent any time value at all + // (those in the hour skipped at the 'spring forward'), + // and the JavaScript engines usually return an equivalent value. + // Hence we have to check that the date is properly increased at each step, + // returning a date at a nice tick position. + var ticks = []; + var tick_date = accessors.makeDate.apply(null, date_array); + var tick_time = tick_date.getTime(); + if (granularity <= Dygraph.HOURLY) { + if (tick_time < start_time) { + tick_time += spacing; + tick_date = new Date(tick_time); + } + while (tick_time <= end_time) { + ticks.push({ v: tick_time, + label: formatter(tick_date, granularity, opts, dg) + }); + tick_time += spacing; + tick_date = new Date(tick_time); + } + } else { + if (tick_time < start_time) { + date_array[datefield] += step; + tick_date = accessors.makeDate.apply(null, date_array); + tick_time = tick_date.getTime(); + } + while (tick_time <= end_time) { + if (granularity >= Dygraph.DAILY || + accessors.getHours(tick_date) % step === 0) { + ticks.push({ v: tick_time, + label: formatter(tick_date, granularity, opts, dg) + }); + } + date_array[datefield] += step; + tick_date = accessors.makeDate.apply(null, date_array); + tick_time = tick_date.getTime(); + } + } + return ticks; +}; + +// These are set here so that this file can be included after dygraph.js +// or independently. +if (Dygraph && + Dygraph.DEFAULT_ATTRS && + Dygraph.DEFAULT_ATTRS['axes'] && + Dygraph.DEFAULT_ATTRS['axes']['x'] && + Dygraph.DEFAULT_ATTRS['axes']['y'] && + Dygraph.DEFAULT_ATTRS['axes']['y2']) { + Dygraph.DEFAULT_ATTRS['axes']['x']['ticker'] = Dygraph.dateTicker; + Dygraph.DEFAULT_ATTRS['axes']['y']['ticker'] = Dygraph.numericTicks; + Dygraph.DEFAULT_ATTRS['axes']['y2']['ticker'] = Dygraph.numericTicks; +} + +})(); +/*global Dygraph:false */ + +// Namespace for plugins. Load this before plugins/*.js files. +Dygraph.Plugins = {}; +/** + * @license + * Copyright 2012 Dan Vanderkam (danvdk@gmail.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +/*global Dygraph:false */ + +Dygraph.Plugins.Annotations = (function() { + +"use strict"; + +/** +Current bits of jankiness: +- Uses dygraph.layout_ to get the parsed annotations. +- Uses dygraph.plotter_.area + +It would be nice if the plugin didn't require so much special support inside +the core dygraphs classes, but annotations involve quite a bit of parsing and +layout. + +TODO(danvk): cache DOM elements. + +*/ + +var annotations = function() { + this.annotations_ = []; +}; + +annotations.prototype.toString = function() { + return "Annotations Plugin"; +}; + +annotations.prototype.activate = function(g) { + return { + clearChart: this.clearChart, + didDrawChart: this.didDrawChart + }; +}; + +annotations.prototype.detachLabels = function() { + for (var i = 0; i < this.annotations_.length; i++) { + var a = this.annotations_[i]; + if (a.parentNode) a.parentNode.removeChild(a); + this.annotations_[i] = null; + } + this.annotations_ = []; +}; + +annotations.prototype.clearChart = function(e) { + this.detachLabels(); +}; + +annotations.prototype.didDrawChart = function(e) { + var g = e.dygraph; + + // Early out in the (common) case of zero annotations. + var points = g.layout_.annotated_points; + if (!points || points.length === 0) return; + + var containerDiv = e.canvas.parentNode; + var annotationStyle = { + "position": "absolute", + "fontSize": g.getOption('axisLabelFontSize') + "px", + "zIndex": 10, + "overflow": "hidden" + }; + + var bindEvt = function(eventName, classEventName, pt) { + return function(annotation_event) { + var a = pt.annotation; + if (a.hasOwnProperty(eventName)) { + a[eventName](a, pt, g, annotation_event); + } else if (g.getOption(classEventName)) { + g.getOption(classEventName)(a, pt, g, annotation_event ); + } + }; + }; + + // Add the annotations one-by-one. + var area = e.dygraph.plotter_.area; + + // x-coord to sum of previous annotation's heights (used for stacking). + var xToUsedHeight = {}; + + for (var i = 0; i < points.length; i++) { + var p = points[i]; + if (p.canvasx < area.x || p.canvasx > area.x + area.w || + p.canvasy < area.y || p.canvasy > area.y + area.h) { + continue; + } + + var a = p.annotation; + var tick_height = 6; + if (a.hasOwnProperty("tickHeight")) { + tick_height = a.tickHeight; + } + + var div = document.createElement("div"); + for (var name in annotationStyle) { + if (annotationStyle.hasOwnProperty(name)) { + div.style[name] = annotationStyle[name]; + } + } + if (!a.hasOwnProperty('icon')) { + div.className = "dygraphDefaultAnnotation"; + } + if (a.hasOwnProperty('cssClass')) { + div.className += " " + a.cssClass; + } + + var width = a.hasOwnProperty('width') ? a.width : 16; + var height = a.hasOwnProperty('height') ? a.height : 16; + if (a.hasOwnProperty('icon')) { + var img = document.createElement("img"); + img.src = a.icon; + img.width = width; + img.height = height; + div.appendChild(img); + } else if (p.annotation.hasOwnProperty('shortText')) { + div.appendChild(document.createTextNode(p.annotation.shortText)); + } + var left = p.canvasx - width / 2; + div.style.left = left + "px"; + var divTop = 0; + if (a.attachAtBottom) { + var y = (area.y + area.h - height - tick_height); + if (xToUsedHeight[left]) { + y -= xToUsedHeight[left]; + } else { + xToUsedHeight[left] = 0; + } + xToUsedHeight[left] += (tick_height + height); + divTop = y; + } else { + divTop = p.canvasy - height - tick_height; + } + div.style.top = divTop + "px"; + div.style.width = width + "px"; + div.style.height = height + "px"; + div.title = p.annotation.text; + div.style.color = g.colorsMap_[p.name]; + div.style.borderColor = g.colorsMap_[p.name]; + a.div = div; + + g.addAndTrackEvent(div, 'click', + bindEvt('clickHandler', 'annotationClickHandler', p, this)); + g.addAndTrackEvent(div, 'mouseover', + bindEvt('mouseOverHandler', 'annotationMouseOverHandler', p, this)); + g.addAndTrackEvent(div, 'mouseout', + bindEvt('mouseOutHandler', 'annotationMouseOutHandler', p, this)); + g.addAndTrackEvent(div, 'dblclick', + bindEvt('dblClickHandler', 'annotationDblClickHandler', p, this)); + + containerDiv.appendChild(div); + this.annotations_.push(div); + + var ctx = e.drawingContext; + ctx.save(); + ctx.strokeStyle = g.colorsMap_[p.name]; + ctx.beginPath(); + if (!a.attachAtBottom) { + ctx.moveTo(p.canvasx, p.canvasy); + ctx.lineTo(p.canvasx, p.canvasy - 2 - tick_height); + } else { + var y = divTop + height; + ctx.moveTo(p.canvasx, y); + ctx.lineTo(p.canvasx, y + tick_height); + } + ctx.closePath(); + ctx.stroke(); + ctx.restore(); + } +}; + +annotations.prototype.destroy = function() { + this.detachLabels(); +}; + +return annotations; + +})(); +/** + * @license + * Copyright 2012 Dan Vanderkam (danvdk@gmail.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +/*global Dygraph:false */ + +Dygraph.Plugins.Axes = (function() { + +'use strict'; + +/* +Bits of jankiness: +- Direct layout access +- Direct area access +- Should include calculation of ticks, not just the drawing. + +Options left to make axis-friendly. + ('drawAxesAtZero') + ('xAxisHeight') +*/ + +/** + * Draws the axes. This includes the labels on the x- and y-axes, as well + * as the tick marks on the axes. + * It does _not_ draw the grid lines which span the entire chart. + */ +var axes = function() { + this.xlabels_ = []; + this.ylabels_ = []; +}; + +axes.prototype.toString = function() { + return 'Axes Plugin'; +}; + +axes.prototype.activate = function(g) { + return { + layout: this.layout, + clearChart: this.clearChart, + willDrawChart: this.willDrawChart + }; +}; + +axes.prototype.layout = function(e) { + var g = e.dygraph; + + if (g.getOptionForAxis('drawAxis', 'y')) { + var w = g.getOptionForAxis('axisLabelWidth', 'y') + 2 * g.getOptionForAxis('axisTickSize', 'y'); + e.reserveSpaceLeft(w); + } + + if (g.getOptionForAxis('drawAxis', 'x')) { + var h; + // NOTE: I think this is probably broken now, since g.getOption() now + // hits the dictionary. (That is, g.getOption('xAxisHeight') now always + // has a value.) + if (g.getOption('xAxisHeight')) { + h = g.getOption('xAxisHeight'); + } else { + h = g.getOptionForAxis('axisLabelFontSize', 'x') + 2 * g.getOptionForAxis('axisTickSize', 'x'); + } + e.reserveSpaceBottom(h); + } + + if (g.numAxes() == 2) { + if (g.getOptionForAxis('drawAxis', 'y2')) { + var w = g.getOptionForAxis('axisLabelWidth', 'y2') + 2 * g.getOptionForAxis('axisTickSize', 'y2'); + e.reserveSpaceRight(w); + } + } else if (g.numAxes() > 2) { + g.error('Only two y-axes are supported at this time. (Trying ' + + 'to use ' + g.numAxes() + ')'); + } +}; + +axes.prototype.detachLabels = function() { + function removeArray(ary) { + for (var i = 0; i < ary.length; i++) { + var el = ary[i]; + if (el.parentNode) el.parentNode.removeChild(el); + } + } + + removeArray(this.xlabels_); + removeArray(this.ylabels_); + this.xlabels_ = []; + this.ylabels_ = []; +}; + +axes.prototype.clearChart = function(e) { + this.detachLabels(); +}; + +axes.prototype.willDrawChart = function(e) { + var g = e.dygraph; + + if (!g.getOptionForAxis('drawAxis', 'x') && + !g.getOptionForAxis('drawAxis', 'y') && + !g.getOptionForAxis('drawAxis', 'y2')) { + return; + } + + // Round pixels to half-integer boundaries for crisper drawing. + function halfUp(x) { return Math.round(x) + 0.5; } + function halfDown(y){ return Math.round(y) - 0.5; } + + var context = e.drawingContext; + var containerDiv = e.canvas.parentNode; + var canvasWidth = g.width_; // e.canvas.width is affected by pixel ratio. + var canvasHeight = g.height_; + + var label, x, y, tick, i; + + var makeLabelStyle = function(axis) { + return { + position: 'absolute', + fontSize: g.getOptionForAxis('axisLabelFontSize', axis) + 'px', + zIndex: 10, + color: g.getOptionForAxis('axisLabelColor', axis), + width: g.getOptionForAxis('axisLabelWidth', axis) + 'px', + // height: g.getOptionForAxis('axisLabelFontSize', 'x') + 2 + "px", + lineHeight: 'normal', // Something other than "normal" line-height screws up label positioning. + overflow: 'hidden' + }; + }; + + var labelStyles = { + x : makeLabelStyle('x'), + y : makeLabelStyle('y'), + y2 : makeLabelStyle('y2') + }; + + var makeDiv = function(txt, axis, prec_axis) { + /* + * This seems to be called with the following three sets of axis/prec_axis: + * x: undefined + * y: y1 + * y: y2 + */ + var div = document.createElement('div'); + var labelStyle = labelStyles[prec_axis == 'y2' ? 'y2' : axis]; + for (var name in labelStyle) { + if (labelStyle.hasOwnProperty(name)) { + div.style[name] = labelStyle[name]; + } + } + var inner_div = document.createElement('div'); + inner_div.className = 'dygraph-axis-label' + + ' dygraph-axis-label-' + axis + + (prec_axis ? ' dygraph-axis-label-' + prec_axis : ''); + inner_div.innerHTML = txt; + div.appendChild(inner_div); + return div; + }; + + // axis lines + context.save(); + + var layout = g.layout_; + var area = e.dygraph.plotter_.area; + + // Helper for repeated axis-option accesses. + var makeOptionGetter = function(axis) { + return function(option) { + return g.getOptionForAxis(option, axis); + }; + }; + + if (g.getOptionForAxis('drawAxis', 'y')) { + if (layout.yticks && layout.yticks.length > 0) { + var num_axes = g.numAxes(); + var getOptions = [makeOptionGetter('y'), makeOptionGetter('y2')]; + for (i = 0; i < layout.yticks.length; i++) { + tick = layout.yticks[i]; + if (typeof(tick) == 'function') return; // <-- when would this happen? + x = area.x; + var sgn = 1; + var prec_axis = 'y1'; + var getAxisOption = getOptions[0]; + if (tick[0] == 1) { // right-side y-axis + x = area.x + area.w; + sgn = -1; + prec_axis = 'y2'; + getAxisOption = getOptions[1]; + } + var fontSize = getAxisOption('axisLabelFontSize'); + y = area.y + tick[1] * area.h; + + /* Tick marks are currently clipped, so don't bother drawing them. + context.beginPath(); + context.moveTo(halfUp(x), halfDown(y)); + context.lineTo(halfUp(x - sgn * this.attr_('axisTickSize')), halfDown(y)); + context.closePath(); + context.stroke(); + */ + + label = makeDiv(tick[2], 'y', num_axes == 2 ? prec_axis : null); + var top = (y - fontSize / 2); + if (top < 0) top = 0; + + if (top + fontSize + 3 > canvasHeight) { + label.style.bottom = '0'; + } else { + label.style.top = top + 'px'; + } + if (tick[0] === 0) { + label.style.left = (area.x - getAxisOption('axisLabelWidth') - getAxisOption('axisTickSize')) + 'px'; + label.style.textAlign = 'right'; + } else if (tick[0] == 1) { + label.style.left = (area.x + area.w + + getAxisOption('axisTickSize')) + 'px'; + label.style.textAlign = 'left'; + } + label.style.width = getAxisOption('axisLabelWidth') + 'px'; + containerDiv.appendChild(label); + this.ylabels_.push(label); + } + + // The lowest tick on the y-axis often overlaps with the leftmost + // tick on the x-axis. Shift the bottom tick up a little bit to + // compensate if necessary. + var bottomTick = this.ylabels_[0]; + // Interested in the y2 axis also? + var fontSize = g.getOptionForAxis('axisLabelFontSize', 'y'); + var bottom = parseInt(bottomTick.style.top, 10) + fontSize; + if (bottom > canvasHeight - fontSize) { + bottomTick.style.top = (parseInt(bottomTick.style.top, 10) - + fontSize / 2) + 'px'; + } + } + + // draw a vertical line on the left to separate the chart from the labels. + var axisX; + if (g.getOption('drawAxesAtZero')) { + var r = g.toPercentXCoord(0); + if (r > 1 || r < 0 || isNaN(r)) r = 0; + axisX = halfUp(area.x + r * area.w); + } else { + axisX = halfUp(area.x); + } + + context.strokeStyle = g.getOptionForAxis('axisLineColor', 'y'); + context.lineWidth = g.getOptionForAxis('axisLineWidth', 'y'); + + context.beginPath(); + context.moveTo(axisX, halfDown(area.y)); + context.lineTo(axisX, halfDown(area.y + area.h)); + context.closePath(); + context.stroke(); + + // if there's a secondary y-axis, draw a vertical line for that, too. + if (g.numAxes() == 2) { + context.strokeStyle = g.getOptionForAxis('axisLineColor', 'y2'); + context.lineWidth = g.getOptionForAxis('axisLineWidth', 'y2'); + context.beginPath(); + context.moveTo(halfDown(area.x + area.w), halfDown(area.y)); + context.lineTo(halfDown(area.x + area.w), halfDown(area.y + area.h)); + context.closePath(); + context.stroke(); + } + } + + if (g.getOptionForAxis('drawAxis', 'x')) { + if (layout.xticks) { + var getAxisOption = makeOptionGetter('x'); + for (i = 0; i < layout.xticks.length; i++) { + tick = layout.xticks[i]; + x = area.x + tick[0] * area.w; + y = area.y + area.h; + + /* Tick marks are currently clipped, so don't bother drawing them. + context.beginPath(); + context.moveTo(halfUp(x), halfDown(y)); + context.lineTo(halfUp(x), halfDown(y + this.attr_('axisTickSize'))); + context.closePath(); + context.stroke(); + */ + + label = makeDiv(tick[1], 'x'); + label.style.textAlign = 'center'; + label.style.top = (y + getAxisOption('axisTickSize')) + 'px'; + + var left = (x - getAxisOption('axisLabelWidth')/2); + if (left + getAxisOption('axisLabelWidth') > canvasWidth) { + left = canvasWidth - getAxisOption('axisLabelWidth'); + label.style.textAlign = 'right'; + } + if (left < 0) { + left = 0; + label.style.textAlign = 'left'; + } + + label.style.left = left + 'px'; + label.style.width = getAxisOption('axisLabelWidth') + 'px'; + containerDiv.appendChild(label); + this.xlabels_.push(label); + } + } + + context.strokeStyle = g.getOptionForAxis('axisLineColor', 'x'); + context.lineWidth = g.getOptionForAxis('axisLineWidth', 'x'); + context.beginPath(); + var axisY; + if (g.getOption('drawAxesAtZero')) { + var r = g.toPercentYCoord(0, 0); + if (r > 1 || r < 0) r = 1; + axisY = halfDown(area.y + r * area.h); + } else { + axisY = halfDown(area.y + area.h); + } + context.moveTo(halfUp(area.x), axisY); + context.lineTo(halfUp(area.x + area.w), axisY); + context.closePath(); + context.stroke(); + } + + context.restore(); +}; + +return axes; +})(); +/** + * @license + * Copyright 2012 Dan Vanderkam (danvdk@gmail.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ +/*global Dygraph:false */ + +Dygraph.Plugins.ChartLabels = (function() { + +"use strict"; + +// TODO(danvk): move chart label options out of dygraphs and into the plugin. +// TODO(danvk): only tear down & rebuild the DIVs when it's necessary. + +var chart_labels = function() { + this.title_div_ = null; + this.xlabel_div_ = null; + this.ylabel_div_ = null; + this.y2label_div_ = null; +}; + +chart_labels.prototype.toString = function() { + return "ChartLabels Plugin"; +}; + +chart_labels.prototype.activate = function(g) { + return { + layout: this.layout, + // clearChart: this.clearChart, + didDrawChart: this.didDrawChart + }; +}; + +// QUESTION: should there be a plugin-utils.js? +var createDivInRect = function(r) { + var div = document.createElement('div'); + div.style.position = 'absolute'; + div.style.left = r.x + 'px'; + div.style.top = r.y + 'px'; + div.style.width = r.w + 'px'; + div.style.height = r.h + 'px'; + return div; +}; + +// Detach and null out any existing nodes. +chart_labels.prototype.detachLabels_ = function() { + var els = [ this.title_div_, + this.xlabel_div_, + this.ylabel_div_, + this.y2label_div_ ]; + for (var i = 0; i < els.length; i++) { + var el = els[i]; + if (!el) continue; + if (el.parentNode) el.parentNode.removeChild(el); + } + + this.title_div_ = null; + this.xlabel_div_ = null; + this.ylabel_div_ = null; + this.y2label_div_ = null; +}; + +var createRotatedDiv = function(g, box, axis, classes, html) { + // TODO(danvk): is this outer div actually necessary? + var div = document.createElement("div"); + div.style.position = 'absolute'; + if (axis == 1) { + // NOTE: this is cheating. Should be positioned relative to the box. + div.style.left = '0px'; + } else { + div.style.left = box.x + 'px'; + } + div.style.top = box.y + 'px'; + div.style.width = box.w + 'px'; + div.style.height = box.h + 'px'; + div.style.fontSize = (g.getOption('yLabelWidth') - 2) + 'px'; + + var inner_div = document.createElement("div"); + inner_div.style.position = 'absolute'; + inner_div.style.width = box.h + 'px'; + inner_div.style.height = box.w + 'px'; + inner_div.style.top = (box.h / 2 - box.w / 2) + 'px'; + inner_div.style.left = (box.w / 2 - box.h / 2) + 'px'; + inner_div.style.textAlign = 'center'; + + // CSS rotation is an HTML5 feature which is not standardized. Hence every + // browser has its own name for the CSS style. + var val = 'rotate(' + (axis == 1 ? '-' : '') + '90deg)'; + inner_div.style.transform = val; // HTML5 + inner_div.style.WebkitTransform = val; // Safari/Chrome + inner_div.style.MozTransform = val; // Firefox + inner_div.style.OTransform = val; // Opera + inner_div.style.msTransform = val; // IE9 + + if (typeof(document.documentMode) !== 'undefined' && + document.documentMode < 9) { + // We're dealing w/ an old version of IE, so we have to rotate the text + // using a BasicImage transform. This uses a different origin of rotation + // than HTML5 rotation (top left of div vs. its center). + inner_div.style.filter = + 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + + (axis == 1 ? '3' : '1') + ')'; + inner_div.style.left = '0px'; + inner_div.style.top = '0px'; + } + + var class_div = document.createElement("div"); + class_div.className = classes; + class_div.innerHTML = html; + + inner_div.appendChild(class_div); + div.appendChild(inner_div); + return div; +}; + +chart_labels.prototype.layout = function(e) { + this.detachLabels_(); + + var g = e.dygraph; + var div = e.chart_div; + if (g.getOption('title')) { + // QUESTION: should this return an absolutely-positioned div instead? + var title_rect = e.reserveSpaceTop(g.getOption('titleHeight')); + this.title_div_ = createDivInRect(title_rect); + this.title_div_.style.textAlign = 'center'; + this.title_div_.style.fontSize = (g.getOption('titleHeight') - 8) + 'px'; + this.title_div_.style.fontWeight = 'bold'; + this.title_div_.style.zIndex = 10; + + var class_div = document.createElement("div"); + class_div.className = 'dygraph-label dygraph-title'; + class_div.innerHTML = g.getOption('title'); + this.title_div_.appendChild(class_div); + div.appendChild(this.title_div_); + } + + if (g.getOption('xlabel')) { + var x_rect = e.reserveSpaceBottom(g.getOption('xLabelHeight')); + this.xlabel_div_ = createDivInRect(x_rect); + this.xlabel_div_.style.textAlign = 'center'; + this.xlabel_div_.style.fontSize = (g.getOption('xLabelHeight') - 2) + 'px'; + + var class_div = document.createElement("div"); + class_div.className = 'dygraph-label dygraph-xlabel'; + class_div.innerHTML = g.getOption('xlabel'); + this.xlabel_div_.appendChild(class_div); + div.appendChild(this.xlabel_div_); + } + + if (g.getOption('ylabel')) { + // It would make sense to shift the chart here to make room for the y-axis + // label, but the default yAxisLabelWidth is large enough that this results + // in overly-padded charts. The y-axis label should fit fine. If it + // doesn't, the yAxisLabelWidth option can be increased. + var y_rect = e.reserveSpaceLeft(0); + + this.ylabel_div_ = createRotatedDiv( + g, y_rect, + 1, // primary (left) y-axis + 'dygraph-label dygraph-ylabel', + g.getOption('ylabel')); + div.appendChild(this.ylabel_div_); + } + + if (g.getOption('y2label') && g.numAxes() == 2) { + // same logic applies here as for ylabel. + var y2_rect = e.reserveSpaceRight(0); + this.y2label_div_ = createRotatedDiv( + g, y2_rect, + 2, // secondary (right) y-axis + 'dygraph-label dygraph-y2label', + g.getOption('y2label')); + div.appendChild(this.y2label_div_); + } +}; + +chart_labels.prototype.didDrawChart = function(e) { + var g = e.dygraph; + if (this.title_div_) { + this.title_div_.children[0].innerHTML = g.getOption('title'); + } + if (this.xlabel_div_) { + this.xlabel_div_.children[0].innerHTML = g.getOption('xlabel'); + } + if (this.ylabel_div_) { + this.ylabel_div_.children[0].children[0].innerHTML = g.getOption('ylabel'); + } + if (this.y2label_div_) { + this.y2label_div_.children[0].children[0].innerHTML = g.getOption('y2label'); + } +}; + +chart_labels.prototype.clearChart = function() { +}; + +chart_labels.prototype.destroy = function() { + this.detachLabels_(); +}; + + +return chart_labels; +})(); +/** + * @license + * Copyright 2012 Dan Vanderkam (danvdk@gmail.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ +/*global Dygraph:false */ + +Dygraph.Plugins.Grid = (function() { + +/* + +Current bits of jankiness: +- Direct layout access +- Direct area access + +*/ + +"use strict"; + + +/** + * Draws the gridlines, i.e. the gray horizontal & vertical lines running the + * length of the chart. + * + * @constructor + */ +var grid = function() { +}; + +grid.prototype.toString = function() { + return "Gridline Plugin"; +}; + +grid.prototype.activate = function(g) { + return { + willDrawChart: this.willDrawChart + }; +}; + +grid.prototype.willDrawChart = function(e) { + // Draw the new X/Y grid. Lines appear crisper when pixels are rounded to + // half-integers. This prevents them from drawing in two rows/cols. + var g = e.dygraph; + var ctx = e.drawingContext; + var layout = g.layout_; + var area = e.dygraph.plotter_.area; + + function halfUp(x) { return Math.round(x) + 0.5; } + function halfDown(y){ return Math.round(y) - 0.5; } + + var x, y, i, ticks; + if (g.getOptionForAxis('drawGrid', 'y')) { + var axes = ["y", "y2"]; + var strokeStyles = [], lineWidths = [], drawGrid = [], stroking = [], strokePattern = []; + for (var i = 0; i < axes.length; i++) { + drawGrid[i] = g.getOptionForAxis('drawGrid', axes[i]); + if (drawGrid[i]) { + strokeStyles[i] = g.getOptionForAxis('gridLineColor', axes[i]); + lineWidths[i] = g.getOptionForAxis('gridLineWidth', axes[i]); + strokePattern[i] = g.getOptionForAxis('gridLinePattern', axes[i]); + stroking[i] = strokePattern[i] && (strokePattern[i].length >= 2); + } + } + ticks = layout.yticks; + ctx.save(); + // draw grids for the different y axes + for (i = 0; i < ticks.length; i++) { + var axis = ticks[i][0]; + if(drawGrid[axis]) { + if (stroking[axis]) { + ctx.installPattern(strokePattern[axis]); + } + ctx.strokeStyle = strokeStyles[axis]; + ctx.lineWidth = lineWidths[axis]; + + x = halfUp(area.x); + y = halfDown(area.y + ticks[i][1] * area.h); + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x + area.w, y); + ctx.closePath(); + ctx.stroke(); + + if (stroking[axis]) { + ctx.uninstallPattern(); + } + } + } + ctx.restore(); + } + + // draw grid for x axis + if (g.getOptionForAxis('drawGrid', 'x')) { + ticks = layout.xticks; + ctx.save(); + var strokePattern = g.getOptionForAxis('gridLinePattern', 'x'); + var stroking = strokePattern && (strokePattern.length >= 2); + if (stroking) { + ctx.installPattern(strokePattern); + } + ctx.strokeStyle = g.getOptionForAxis('gridLineColor', 'x'); + ctx.lineWidth = g.getOptionForAxis('gridLineWidth', 'x'); + for (i = 0; i < ticks.length; i++) { + x = halfUp(area.x + ticks[i][0] * area.w); + y = halfDown(area.y + area.h); + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x, area.y); + ctx.closePath(); + ctx.stroke(); + } + if (stroking) { + ctx.uninstallPattern(); + } + ctx.restore(); + } +}; + +grid.prototype.destroy = function() { +}; + +return grid; + +})(); +/** + * @license + * Copyright 2012 Dan Vanderkam (danvdk@gmail.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ +/*global Dygraph:false */ + +Dygraph.Plugins.Legend = (function() { +/* +Current bits of jankiness: +- Uses two private APIs: + 1. Dygraph.optionsViewForAxis_ + 2. dygraph.plotter_.area +- Registers for a "predraw" event, which should be renamed. +- I call calculateEmWidthInDiv more often than needed. +*/ + +/*global Dygraph:false */ +"use strict"; + + +/** + * Creates the legend, which appears when the user hovers over the chart. + * The legend can be either a user-specified or generated div. + * + * @constructor + */ +var legend = function() { + this.legend_div_ = null; + this.is_generated_div_ = false; // do we own this div, or was it user-specified? +}; + +legend.prototype.toString = function() { + return "Legend Plugin"; +}; + +// (defined below) +var generateLegendDashHTML; + +/** + * This is called during the dygraph constructor, after options have been set + * but before the data is available. + * + * Proper tasks to do here include: + * - Reading your own options + * - DOM manipulation + * - Registering event listeners + * + * @param {Dygraph} g Graph instance. + * @return {object.} Mapping of event names to callbacks. + */ +legend.prototype.activate = function(g) { + var div; + var divWidth = g.getOption('labelsDivWidth'); + + var userLabelsDiv = g.getOption('labelsDiv'); + if (userLabelsDiv && null !== userLabelsDiv) { + if (typeof(userLabelsDiv) == "string" || userLabelsDiv instanceof String) { + div = document.getElementById(userLabelsDiv); + } else { + div = userLabelsDiv; + } + } else { + // Default legend styles. These can be overridden in CSS by adding + // "!important" after your rule, e.g. "left: 30px !important;" + var messagestyle = { + "position": "absolute", + "fontSize": "14px", + "zIndex": 10, + "width": divWidth + "px", + "top": "0px", + "left": (g.size().width - divWidth - 2) + "px", + "background": "white", + "lineHeight": "normal", + "textAlign": "left", + "overflow": "hidden"}; + + // TODO(danvk): get rid of labelsDivStyles? CSS is better. + Dygraph.update(messagestyle, g.getOption('labelsDivStyles')); + div = document.createElement("div"); + div.className = "dygraph-legend"; + for (var name in messagestyle) { + if (!messagestyle.hasOwnProperty(name)) continue; + + try { + div.style[name] = messagestyle[name]; + } catch (e) { + console.warn("You are using unsupported css properties for your " + + "browser in labelsDivStyles"); + } + } + + // TODO(danvk): come up with a cleaner way to expose this. + g.graphDiv.appendChild(div); + this.is_generated_div_ = true; + } + + this.legend_div_ = div; + this.one_em_width_ = 10; // just a guess, will be updated. + + return { + select: this.select, + deselect: this.deselect, + // TODO(danvk): rethink the name "predraw" before we commit to it in any API. + predraw: this.predraw, + didDrawChart: this.didDrawChart + }; +}; + +// Needed for dashed lines. +var calculateEmWidthInDiv = function(div) { + var sizeSpan = document.createElement('span'); + sizeSpan.setAttribute('style', 'margin: 0; padding: 0 0 0 1em; border: 0;'); + div.appendChild(sizeSpan); + var oneEmWidth=sizeSpan.offsetWidth; + div.removeChild(sizeSpan); + return oneEmWidth; +}; + +var escapeHTML = function(str) { + return str.replace(/&/g, "&").replace(/"/g, """).replace(//g, ">"); +}; + +legend.prototype.select = function(e) { + var xValue = e.selectedX; + var points = e.selectedPoints; + + var legendMode = e.dygraph.getOption('legend'); + if (legendMode === 'never') { + this.legend_div_.style.display = 'none'; + return; + } + + if (legendMode === 'follow') { + // create floating legend div + var area = e.dygraph.plotter_.area; + var labelsDivWidth = e.dygraph.getOption('labelsDivWidth'); + var yAxisLabelWidth = e.dygraph.getOptionForAxis('axisLabelWidth', 'y'); + // determine floating [left, top] coordinates of the legend div + // within the plotter_ area + // offset 20 px to the right and down from the first selection point + // 20 px is guess based on mouse cursor size + var leftLegend = points[0].x * area.w + 20; + var topLegend = points[0].y * area.h - 20; + + // if legend floats to end of the window area, it flips to the other + // side of the selection point + if ((leftLegend + labelsDivWidth + 1) > (window.scrollX + window.innerWidth)) { + leftLegend = leftLegend - 2 * 20 - labelsDivWidth - (yAxisLabelWidth - area.x); + } + + e.dygraph.graphDiv.appendChild(this.legend_div_); + this.legend_div_.style.left = yAxisLabelWidth + leftLegend + "px"; + this.legend_div_.style.top = topLegend + "px"; + } + + var html = legend.generateLegendHTML(e.dygraph, xValue, points, this.one_em_width_); + this.legend_div_.innerHTML = html; + this.legend_div_.style.display = ''; +}; + +legend.prototype.deselect = function(e) { + var legendMode = e.dygraph.getOption('legend'); + if (legendMode !== 'always') { + this.legend_div_.style.display = "none"; + } + + // Have to do this every time, since styles might have changed. + var oneEmWidth = calculateEmWidthInDiv(this.legend_div_); + this.one_em_width_ = oneEmWidth; + + var html = legend.generateLegendHTML(e.dygraph, undefined, undefined, oneEmWidth); + this.legend_div_.innerHTML = html; +}; + +legend.prototype.didDrawChart = function(e) { + this.deselect(e); +}; + +// Right edge should be flush with the right edge of the charting area (which +// may not be the same as the right edge of the div, if we have two y-axes. +// TODO(danvk): is any of this really necessary? Could just set "right" in "activate". +/** + * Position the labels div so that: + * - its right edge is flush with the right edge of the charting area + * - its top edge is flush with the top edge of the charting area + * @private + */ +legend.prototype.predraw = function(e) { + // Don't touch a user-specified labelsDiv. + if (!this.is_generated_div_) return; + + // TODO(danvk): only use real APIs for this. + e.dygraph.graphDiv.appendChild(this.legend_div_); + var area = e.dygraph.plotter_.area; + var labelsDivWidth = e.dygraph.getOption("labelsDivWidth"); + this.legend_div_.style.left = area.x + area.w - labelsDivWidth - 1 + "px"; + this.legend_div_.style.top = area.y + "px"; + this.legend_div_.style.width = labelsDivWidth + "px"; +}; + +/** + * Called when dygraph.destroy() is called. + * You should null out any references and detach any DOM elements. + */ +legend.prototype.destroy = function() { + this.legend_div_ = null; +}; + +/** + * @private + * Generates HTML for the legend which is displayed when hovering over the + * chart. If no selected points are specified, a default legend is returned + * (this may just be the empty string). + * @param { Number } [x] The x-value of the selected points. + * @param { [Object] } [sel_points] List of selected points for the given + * x-value. Should have properties like 'name', 'yval' and 'canvasy'. + * @param { Number } [oneEmWidth] The pixel width for 1em in the legend. Only + * relevant when displaying a legend with no selection (i.e. {legend: + * 'always'}) and with dashed lines. + */ +legend.generateLegendHTML = function(g, x, sel_points, oneEmWidth) { + // TODO(danvk): deprecate this option in place of {legend: 'never'} + if (g.getOption('showLabelsOnHighlight') !== true) return ''; + + // If no points are selected, we display a default legend. Traditionally, + // this has been blank. But a better default would be a conventional legend, + // which provides essential information for a non-interactive chart. + var html, sepLines, i, dash, strokePattern; + var labels = g.getLabels(); + + if (typeof(x) === 'undefined') { + if (g.getOption('legend') != 'always') { + return ''; + } + + sepLines = g.getOption('labelsSeparateLines'); + html = ''; + for (i = 1; i < labels.length; i++) { + var series = g.getPropertiesForSeries(labels[i]); + if (!series.visible) continue; + + if (html !== '') html += (sepLines ? '
' : ' '); + strokePattern = g.getOption("strokePattern", labels[i]); + dash = generateLegendDashHTML(strokePattern, series.color, oneEmWidth); + html += "" + + dash + " " + escapeHTML(labels[i]) + ""; + } + return html; + } + + // TODO(danvk): remove this use of a private API + var xOptView = g.optionsViewForAxis_('x'); + var xvf = xOptView('valueFormatter'); + html = xvf(x, xOptView, labels[0], g); + if (html !== '') { + html += ':'; + } + + var yOptViews = []; + var num_axes = g.numAxes(); + for (i = 0; i < num_axes; i++) { + // TODO(danvk): remove this use of a private API + yOptViews[i] = g.optionsViewForAxis_('y' + (i ? 1 + i : '')); + } + var showZeros = g.getOption("labelsShowZeroValues"); + sepLines = g.getOption("labelsSeparateLines"); + var highlightSeries = g.getHighlightSeries(); + for (i = 0; i < sel_points.length; i++) { + var pt = sel_points[i]; + if (pt.yval === 0 && !showZeros) continue; + if (!Dygraph.isOK(pt.canvasy)) continue; + if (sepLines) html += "
"; + + var series = g.getPropertiesForSeries(pt.name); + var yOptView = yOptViews[series.axis - 1]; + var fmtFunc = yOptView('valueFormatter'); + var yval = fmtFunc(pt.yval, yOptView, pt.name, g); + + var cls = (pt.name == highlightSeries) ? " class='highlight'" : ""; + + // TODO(danvk): use a template string here and make it an attribute. + html += "" + " " + + escapeHTML(pt.name) + ": " + yval + ""; + } + return html; +}; + + +/** + * Generates html for the "dash" displayed on the legend when using "legend: always". + * In particular, this works for dashed lines with any stroke pattern. It will + * try to scale the pattern to fit in 1em width. Or if small enough repeat the + * pattern for 1em width. + * + * @param strokePattern The pattern + * @param color The color of the series. + * @param oneEmWidth The width in pixels of 1em in the legend. + * @private + */ +generateLegendDashHTML = function(strokePattern, color, oneEmWidth) { + // IE 7,8 fail at these divs, so they get boring legend, have not tested 9. + var isIE = (/MSIE/.test(navigator.userAgent) && !window.opera); + if (isIE) return "—"; + + // Easy, common case: a solid line + if (!strokePattern || strokePattern.length <= 1) { + return "
"; + } + + var i, j, paddingLeft, marginRight; + var strokePixelLength = 0, segmentLoop = 0; + var normalizedPattern = []; + var loop; + + // Compute the length of the pixels including the first segment twice, + // since we repeat it. + for (i = 0; i <= strokePattern.length; i++) { + strokePixelLength += strokePattern[i%strokePattern.length]; + } + + // See if we can loop the pattern by itself at least twice. + loop = Math.floor(oneEmWidth/(strokePixelLength-strokePattern[0])); + if (loop > 1) { + // This pattern fits at least two times, no scaling just convert to em; + for (i = 0; i < strokePattern.length; i++) { + normalizedPattern[i] = strokePattern[i]/oneEmWidth; + } + // Since we are repeating the pattern, we don't worry about repeating the + // first segment in one draw. + segmentLoop = normalizedPattern.length; + } else { + // If the pattern doesn't fit in the legend we scale it to fit. + loop = 1; + for (i = 0; i < strokePattern.length; i++) { + normalizedPattern[i] = strokePattern[i]/strokePixelLength; + } + // For the scaled patterns we do redraw the first segment. + segmentLoop = normalizedPattern.length+1; + } + + // Now make the pattern. + var dash = ""; + for (j = 0; j < loop; j++) { + for (i = 0; i < segmentLoop; i+=2) { + // The padding is the drawn segment. + paddingLeft = normalizedPattern[i%normalizedPattern.length]; + if (i < strokePattern.length) { + // The margin is the space segment. + marginRight = normalizedPattern[(i+1)%normalizedPattern.length]; + } else { + // The repeated first segment has no right margin. + marginRight = 0; + } + dash += "
"; + } + } + return dash; +}; + + +return legend; +})(); +/** + * @license + * Copyright 2011 Paul Felix (paul.eric.felix@gmail.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ +/*global Dygraph:false,TouchEvent:false */ + +/** + * @fileoverview This file contains the RangeSelector plugin used to provide + * a timeline range selector widget for dygraphs. + */ + +Dygraph.Plugins.RangeSelector = (function() { + +/*global Dygraph:false */ +"use strict"; + +var rangeSelector = function() { + this.isIE_ = /MSIE/.test(navigator.userAgent) && !window.opera; + this.hasTouchInterface_ = typeof(TouchEvent) != 'undefined'; + this.isMobileDevice_ = /mobile|android/gi.test(navigator.appVersion); + this.interfaceCreated_ = false; +}; + +rangeSelector.prototype.toString = function() { + return "RangeSelector Plugin"; +}; + +rangeSelector.prototype.activate = function(dygraph) { + this.dygraph_ = dygraph; + this.isUsingExcanvas_ = dygraph.isUsingExcanvas_; + if (this.getOption_('showRangeSelector')) { + this.createInterface_(); + } + return { + layout: this.reserveSpace_, + predraw: this.renderStaticLayer_, + didDrawChart: this.renderInteractiveLayer_ + }; +}; + +rangeSelector.prototype.destroy = function() { + this.bgcanvas_ = null; + this.fgcanvas_ = null; + this.leftZoomHandle_ = null; + this.rightZoomHandle_ = null; + this.iePanOverlay_ = null; +}; + +//------------------------------------------------------------------ +// Private methods +//------------------------------------------------------------------ + +rangeSelector.prototype.getOption_ = function(name, opt_series) { + return this.dygraph_.getOption(name, opt_series); +}; + +rangeSelector.prototype.setDefaultOption_ = function(name, value) { + this.dygraph_.attrs_[name] = value; +}; + +/** + * @private + * Creates the range selector elements and adds them to the graph. + */ +rangeSelector.prototype.createInterface_ = function() { + this.createCanvases_(); + if (this.isUsingExcanvas_) { + this.createIEPanOverlay_(); + } + this.createZoomHandles_(); + this.initInteraction_(); + + // Range selector and animatedZooms have a bad interaction. See issue 359. + if (this.getOption_('animatedZooms')) { + console.warn('Animated zooms and range selector are not compatible; disabling animatedZooms.'); + this.dygraph_.updateOptions({animatedZooms: false}, true); + } + + this.interfaceCreated_ = true; + this.addToGraph_(); +}; + +/** + * @private + * Adds the range selector to the graph. + */ +rangeSelector.prototype.addToGraph_ = function() { + var graphDiv = this.graphDiv_ = this.dygraph_.graphDiv; + graphDiv.appendChild(this.bgcanvas_); + graphDiv.appendChild(this.fgcanvas_); + graphDiv.appendChild(this.leftZoomHandle_); + graphDiv.appendChild(this.rightZoomHandle_); +}; + +/** + * @private + * Removes the range selector from the graph. + */ +rangeSelector.prototype.removeFromGraph_ = function() { + var graphDiv = this.graphDiv_; + graphDiv.removeChild(this.bgcanvas_); + graphDiv.removeChild(this.fgcanvas_); + graphDiv.removeChild(this.leftZoomHandle_); + graphDiv.removeChild(this.rightZoomHandle_); + this.graphDiv_ = null; +}; + +/** + * @private + * Called by Layout to allow range selector to reserve its space. + */ +rangeSelector.prototype.reserveSpace_ = function(e) { + if (this.getOption_('showRangeSelector')) { + e.reserveSpaceBottom(this.getOption_('rangeSelectorHeight') + 4); + } +}; + +/** + * @private + * Renders the static portion of the range selector at the predraw stage. + */ +rangeSelector.prototype.renderStaticLayer_ = function() { + if (!this.updateVisibility_()) { + return; + } + this.resize_(); + this.drawStaticLayer_(); +}; + +/** + * @private + * Renders the interactive portion of the range selector after the chart has been drawn. + */ +rangeSelector.prototype.renderInteractiveLayer_ = function() { + if (!this.updateVisibility_() || this.isChangingRange_) { + return; + } + this.placeZoomHandles_(); + this.drawInteractiveLayer_(); +}; + +/** + * @private + * Check to see if the range selector is enabled/disabled and update visibility accordingly. + */ +rangeSelector.prototype.updateVisibility_ = function() { + var enabled = this.getOption_('showRangeSelector'); + if (enabled) { + if (!this.interfaceCreated_) { + this.createInterface_(); + } else if (!this.graphDiv_ || !this.graphDiv_.parentNode) { + this.addToGraph_(); + } + } else if (this.graphDiv_) { + this.removeFromGraph_(); + var dygraph = this.dygraph_; + setTimeout(function() { dygraph.width_ = 0; dygraph.resize(); }, 1); + } + return enabled; +}; + +/** + * @private + * Resizes the range selector. + */ +rangeSelector.prototype.resize_ = function() { + function setElementRect(canvas, context, rect) { + var canvasScale = Dygraph.getContextPixelRatio(context); + + canvas.style.top = rect.y + 'px'; + canvas.style.left = rect.x + 'px'; + canvas.width = rect.w * canvasScale; + canvas.height = rect.h * canvasScale; + canvas.style.width = rect.w + 'px'; + canvas.style.height = rect.h + 'px'; + + if(canvasScale != 1) { + context.scale(canvasScale, canvasScale); + } + } + + var plotArea = this.dygraph_.layout_.getPlotArea(); + + var xAxisLabelHeight = 0; + if (this.dygraph_.getOptionForAxis('drawAxis', 'x')) { + xAxisLabelHeight = this.getOption_('xAxisHeight') || (this.getOption_('axisLabelFontSize') + 2 * this.getOption_('axisTickSize')); + } + this.canvasRect_ = { + x: plotArea.x, + y: plotArea.y + plotArea.h + xAxisLabelHeight + 4, + w: plotArea.w, + h: this.getOption_('rangeSelectorHeight') + }; + + setElementRect(this.bgcanvas_, this.bgcanvas_ctx_, this.canvasRect_); + setElementRect(this.fgcanvas_, this.fgcanvas_ctx_, this.canvasRect_); +}; + +/** + * @private + * Creates the background and foreground canvases. + */ +rangeSelector.prototype.createCanvases_ = function() { + this.bgcanvas_ = Dygraph.createCanvas(); + this.bgcanvas_.className = 'dygraph-rangesel-bgcanvas'; + this.bgcanvas_.style.position = 'absolute'; + this.bgcanvas_.style.zIndex = 9; + this.bgcanvas_ctx_ = Dygraph.getContext(this.bgcanvas_); + + this.fgcanvas_ = Dygraph.createCanvas(); + this.fgcanvas_.className = 'dygraph-rangesel-fgcanvas'; + this.fgcanvas_.style.position = 'absolute'; + this.fgcanvas_.style.zIndex = 9; + this.fgcanvas_.style.cursor = 'default'; + this.fgcanvas_ctx_ = Dygraph.getContext(this.fgcanvas_); +}; + +/** + * @private + * Creates overlay divs for IE/Excanvas so that mouse events are handled properly. + */ +rangeSelector.prototype.createIEPanOverlay_ = function() { + this.iePanOverlay_ = document.createElement("div"); + this.iePanOverlay_.style.position = 'absolute'; + this.iePanOverlay_.style.backgroundColor = 'white'; + this.iePanOverlay_.style.filter = 'alpha(opacity=0)'; + this.iePanOverlay_.style.display = 'none'; + this.iePanOverlay_.style.cursor = 'move'; + this.fgcanvas_.appendChild(this.iePanOverlay_); +}; + +/** + * @private + * Creates the zoom handle elements. + */ +rangeSelector.prototype.createZoomHandles_ = function() { + var img = new Image(); + img.className = 'dygraph-rangesel-zoomhandle'; + img.style.position = 'absolute'; + img.style.zIndex = 10; + img.style.visibility = 'hidden'; // Initially hidden so they don't show up in the wrong place. + img.style.cursor = 'col-resize'; + + if (/MSIE 7/.test(navigator.userAgent)) { // IE7 doesn't support embedded src data. + img.width = 7; + img.height = 14; + img.style.backgroundColor = 'white'; + img.style.border = '1px solid #333333'; // Just show box in IE7. + } else { + img.width = 9; + img.height = 16; + img.src = 'data:image/png;base64,' + +'iVBORw0KGgoAAAANSUhEUgAAAAkAAAAQCAYAAADESFVDAAAAAXNSR0IArs4c6QAAAAZiS0dEANAA' + +'zwDP4Z7KegAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9sHGw0cMqdt1UwAAAAZdEVYdENv' + +'bW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAaElEQVQoz+3SsRFAQBCF4Z9WJM8KCDVwownl' + +'6YXsTmCUsyKGkZzcl7zkz3YLkypgAnreFmDEpHkIwVOMfpdi9CEEN2nGpFdwD03yEqDtOgCaun7s' + +'qSTDH32I1pQA2Pb9sZecAxc5r3IAb21d6878xsAAAAAASUVORK5CYII='; + } + + if (this.isMobileDevice_) { + img.width *= 2; + img.height *= 2; + } + + this.leftZoomHandle_ = img; + this.rightZoomHandle_ = img.cloneNode(false); +}; + +/** + * @private + * Sets up the interaction for the range selector. + */ +rangeSelector.prototype.initInteraction_ = function() { + var self = this; + var topElem = document; + var clientXLast = 0; + var handle = null; + var isZooming = false; + var isPanning = false; + var dynamic = !this.isMobileDevice_ && !this.isUsingExcanvas_; + + // We cover iframes during mouse interactions. See comments in + // dygraph-utils.js for more info on why this is a good idea. + var tarp = new Dygraph.IFrameTarp(); + + // functions, defined below. Defining them this way (rather than with + // "function foo() {...}" makes JSHint happy. + var toXDataWindow, onZoomStart, onZoom, onZoomEnd, doZoom, isMouseInPanZone, + onPanStart, onPan, onPanEnd, doPan, onCanvasHover; + + // Touch event functions + var onZoomHandleTouchEvent, onCanvasTouchEvent, addTouchEvents; + + toXDataWindow = function(zoomHandleStatus) { + var xDataLimits = self.dygraph_.xAxisExtremes(); + var fact = (xDataLimits[1] - xDataLimits[0])/self.canvasRect_.w; + var xDataMin = xDataLimits[0] + (zoomHandleStatus.leftHandlePos - self.canvasRect_.x)*fact; + var xDataMax = xDataLimits[0] + (zoomHandleStatus.rightHandlePos - self.canvasRect_.x)*fact; + return [xDataMin, xDataMax]; + }; + + onZoomStart = function(e) { + Dygraph.cancelEvent(e); + isZooming = true; + clientXLast = e.clientX; + handle = e.target ? e.target : e.srcElement; + if (e.type === 'mousedown' || e.type === 'dragstart') { + // These events are removed manually. + Dygraph.addEvent(topElem, 'mousemove', onZoom); + Dygraph.addEvent(topElem, 'mouseup', onZoomEnd); + } + self.fgcanvas_.style.cursor = 'col-resize'; + tarp.cover(); + return true; + }; + + onZoom = function(e) { + if (!isZooming) { + return false; + } + Dygraph.cancelEvent(e); + + var delX = e.clientX - clientXLast; + if (Math.abs(delX) < 4) { + return true; + } + clientXLast = e.clientX; + + // Move handle. + var zoomHandleStatus = self.getZoomHandleStatus_(); + var newPos; + if (handle == self.leftZoomHandle_) { + newPos = zoomHandleStatus.leftHandlePos + delX; + newPos = Math.min(newPos, zoomHandleStatus.rightHandlePos - handle.width - 3); + newPos = Math.max(newPos, self.canvasRect_.x); + } else { + newPos = zoomHandleStatus.rightHandlePos + delX; + newPos = Math.min(newPos, self.canvasRect_.x + self.canvasRect_.w); + newPos = Math.max(newPos, zoomHandleStatus.leftHandlePos + handle.width + 3); + } + var halfHandleWidth = handle.width/2; + handle.style.left = (newPos - halfHandleWidth) + 'px'; + self.drawInteractiveLayer_(); + + // Zoom on the fly (if not using excanvas). + if (dynamic) { + doZoom(); + } + return true; + }; + + onZoomEnd = function(e) { + if (!isZooming) { + return false; + } + isZooming = false; + tarp.uncover(); + Dygraph.removeEvent(topElem, 'mousemove', onZoom); + Dygraph.removeEvent(topElem, 'mouseup', onZoomEnd); + self.fgcanvas_.style.cursor = 'default'; + + // If using excanvas, Zoom now. + if (!dynamic) { + doZoom(); + } + return true; + }; + + doZoom = function() { + try { + var zoomHandleStatus = self.getZoomHandleStatus_(); + self.isChangingRange_ = true; + if (!zoomHandleStatus.isZoomed) { + self.dygraph_.resetZoom(); + } else { + var xDataWindow = toXDataWindow(zoomHandleStatus); + self.dygraph_.doZoomXDates_(xDataWindow[0], xDataWindow[1]); + } + } finally { + self.isChangingRange_ = false; + } + }; + + isMouseInPanZone = function(e) { + if (self.isUsingExcanvas_) { + return e.srcElement == self.iePanOverlay_; + } else { + var rect = self.leftZoomHandle_.getBoundingClientRect(); + var leftHandleClientX = rect.left + rect.width/2; + rect = self.rightZoomHandle_.getBoundingClientRect(); + var rightHandleClientX = rect.left + rect.width/2; + return (e.clientX > leftHandleClientX && e.clientX < rightHandleClientX); + } + }; + + onPanStart = function(e) { + if (!isPanning && isMouseInPanZone(e) && self.getZoomHandleStatus_().isZoomed) { + Dygraph.cancelEvent(e); + isPanning = true; + clientXLast = e.clientX; + if (e.type === 'mousedown') { + // These events are removed manually. + Dygraph.addEvent(topElem, 'mousemove', onPan); + Dygraph.addEvent(topElem, 'mouseup', onPanEnd); + } + return true; + } + return false; + }; + + onPan = function(e) { + if (!isPanning) { + return false; + } + Dygraph.cancelEvent(e); + + var delX = e.clientX - clientXLast; + if (Math.abs(delX) < 4) { + return true; + } + clientXLast = e.clientX; + + // Move range view + var zoomHandleStatus = self.getZoomHandleStatus_(); + var leftHandlePos = zoomHandleStatus.leftHandlePos; + var rightHandlePos = zoomHandleStatus.rightHandlePos; + var rangeSize = rightHandlePos - leftHandlePos; + if (leftHandlePos + delX <= self.canvasRect_.x) { + leftHandlePos = self.canvasRect_.x; + rightHandlePos = leftHandlePos + rangeSize; + } else if (rightHandlePos + delX >= self.canvasRect_.x + self.canvasRect_.w) { + rightHandlePos = self.canvasRect_.x + self.canvasRect_.w; + leftHandlePos = rightHandlePos - rangeSize; + } else { + leftHandlePos += delX; + rightHandlePos += delX; + } + var halfHandleWidth = self.leftZoomHandle_.width/2; + self.leftZoomHandle_.style.left = (leftHandlePos - halfHandleWidth) + 'px'; + self.rightZoomHandle_.style.left = (rightHandlePos - halfHandleWidth) + 'px'; + self.drawInteractiveLayer_(); + + // Do pan on the fly (if not using excanvas). + if (dynamic) { + doPan(); + } + return true; + }; + + onPanEnd = function(e) { + if (!isPanning) { + return false; + } + isPanning = false; + Dygraph.removeEvent(topElem, 'mousemove', onPan); + Dygraph.removeEvent(topElem, 'mouseup', onPanEnd); + // If using excanvas, do pan now. + if (!dynamic) { + doPan(); + } + return true; + }; + + doPan = function() { + try { + self.isChangingRange_ = true; + self.dygraph_.dateWindow_ = toXDataWindow(self.getZoomHandleStatus_()); + self.dygraph_.drawGraph_(false); + } finally { + self.isChangingRange_ = false; + } + }; + + onCanvasHover = function(e) { + if (isZooming || isPanning) { + return; + } + var cursor = isMouseInPanZone(e) ? 'move' : 'default'; + if (cursor != self.fgcanvas_.style.cursor) { + self.fgcanvas_.style.cursor = cursor; + } + }; + + onZoomHandleTouchEvent = function(e) { + if (e.type == 'touchstart' && e.targetTouches.length == 1) { + if (onZoomStart(e.targetTouches[0])) { + Dygraph.cancelEvent(e); + } + } else if (e.type == 'touchmove' && e.targetTouches.length == 1) { + if (onZoom(e.targetTouches[0])) { + Dygraph.cancelEvent(e); + } + } else { + onZoomEnd(e); + } + }; + + onCanvasTouchEvent = function(e) { + if (e.type == 'touchstart' && e.targetTouches.length == 1) { + if (onPanStart(e.targetTouches[0])) { + Dygraph.cancelEvent(e); + } + } else if (e.type == 'touchmove' && e.targetTouches.length == 1) { + if (onPan(e.targetTouches[0])) { + Dygraph.cancelEvent(e); + } + } else { + onPanEnd(e); + } + }; + + addTouchEvents = function(elem, fn) { + var types = ['touchstart', 'touchend', 'touchmove', 'touchcancel']; + for (var i = 0; i < types.length; i++) { + self.dygraph_.addAndTrackEvent(elem, types[i], fn); + } + }; + + this.setDefaultOption_('interactionModel', Dygraph.Interaction.dragIsPanInteractionModel); + this.setDefaultOption_('panEdgeFraction', 0.0001); + + var dragStartEvent = window.opera ? 'mousedown' : 'dragstart'; + this.dygraph_.addAndTrackEvent(this.leftZoomHandle_, dragStartEvent, onZoomStart); + this.dygraph_.addAndTrackEvent(this.rightZoomHandle_, dragStartEvent, onZoomStart); + + if (this.isUsingExcanvas_) { + this.dygraph_.addAndTrackEvent(this.iePanOverlay_, 'mousedown', onPanStart); + } else { + this.dygraph_.addAndTrackEvent(this.fgcanvas_, 'mousedown', onPanStart); + this.dygraph_.addAndTrackEvent(this.fgcanvas_, 'mousemove', onCanvasHover); + } + + // Touch events + if (this.hasTouchInterface_) { + addTouchEvents(this.leftZoomHandle_, onZoomHandleTouchEvent); + addTouchEvents(this.rightZoomHandle_, onZoomHandleTouchEvent); + addTouchEvents(this.fgcanvas_, onCanvasTouchEvent); + } +}; + +/** + * @private + * Draws the static layer in the background canvas. + */ +rangeSelector.prototype.drawStaticLayer_ = function() { + var ctx = this.bgcanvas_ctx_; + ctx.clearRect(0, 0, this.canvasRect_.w, this.canvasRect_.h); + try { + this.drawMiniPlot_(); + } catch(ex) { + console.warn(ex); + } + + var margin = 0.5; + this.bgcanvas_ctx_.lineWidth = 1; + ctx.strokeStyle = 'gray'; + ctx.beginPath(); + ctx.moveTo(margin, margin); + ctx.lineTo(margin, this.canvasRect_.h-margin); + ctx.lineTo(this.canvasRect_.w-margin, this.canvasRect_.h-margin); + ctx.lineTo(this.canvasRect_.w-margin, margin); + ctx.stroke(); +}; + + +/** + * @private + * Draws the mini plot in the background canvas. + */ +rangeSelector.prototype.drawMiniPlot_ = function() { + var fillStyle = this.getOption_('rangeSelectorPlotFillColor'); + var strokeStyle = this.getOption_('rangeSelectorPlotStrokeColor'); + if (!fillStyle && !strokeStyle) { + return; + } + + var stepPlot = this.getOption_('stepPlot'); + + var combinedSeriesData = this.computeCombinedSeriesAndLimits_(); + var yRange = combinedSeriesData.yMax - combinedSeriesData.yMin; + + // Draw the mini plot. + var ctx = this.bgcanvas_ctx_; + var margin = 0.5; + + var xExtremes = this.dygraph_.xAxisExtremes(); + var xRange = Math.max(xExtremes[1] - xExtremes[0], 1.e-30); + var xFact = (this.canvasRect_.w - margin)/xRange; + var yFact = (this.canvasRect_.h - margin)/yRange; + var canvasWidth = this.canvasRect_.w - margin; + var canvasHeight = this.canvasRect_.h - margin; + + var prevX = null, prevY = null; + + ctx.beginPath(); + ctx.moveTo(margin, canvasHeight); + for (var i = 0; i < combinedSeriesData.data.length; i++) { + var dataPoint = combinedSeriesData.data[i]; + var x = ((dataPoint[0] !== null) ? ((dataPoint[0] - xExtremes[0])*xFact) : NaN); + var y = ((dataPoint[1] !== null) ? (canvasHeight - (dataPoint[1] - combinedSeriesData.yMin)*yFact) : NaN); + + // Skip points that don't change the x-value. Overly fine-grained points + // can cause major slowdowns with the ctx.fill() call below. + if (!stepPlot && prevX !== null && Math.round(x) == Math.round(prevX)) { + continue; + } + + if (isFinite(x) && isFinite(y)) { + if(prevX === null) { + ctx.lineTo(x, canvasHeight); + } + else if (stepPlot) { + ctx.lineTo(x, prevY); + } + ctx.lineTo(x, y); + prevX = x; + prevY = y; + } + else { + if(prevX !== null) { + if (stepPlot) { + ctx.lineTo(x, prevY); + ctx.lineTo(x, canvasHeight); + } + else { + ctx.lineTo(prevX, canvasHeight); + } + } + prevX = prevY = null; + } + } + ctx.lineTo(canvasWidth, canvasHeight); + ctx.closePath(); + + if (fillStyle) { + var lingrad = this.bgcanvas_ctx_.createLinearGradient(0, 0, 0, canvasHeight); + lingrad.addColorStop(0, 'white'); + lingrad.addColorStop(1, fillStyle); + this.bgcanvas_ctx_.fillStyle = lingrad; + ctx.fill(); + } + + if (strokeStyle) { + this.bgcanvas_ctx_.strokeStyle = strokeStyle; + this.bgcanvas_ctx_.lineWidth = 1.5; + ctx.stroke(); + } +}; + +/** + * @private + * Computes and returns the combined series data along with min/max for the mini plot. + * The combined series consists of averaged values for all series. + * When series have error bars, the error bars are ignored. + * @return {Object} An object containing combined series array, ymin, ymax. + */ +rangeSelector.prototype.computeCombinedSeriesAndLimits_ = function() { + var g = this.dygraph_; + var logscale = this.getOption_('logscale'); + var i; + + // Select series to combine. By default, all series are combined. + var numColumns = g.numColumns(); + var labels = g.getLabels(); + var includeSeries = new Array(numColumns); + var anySet = false; + for (i = 1; i < numColumns; i++) { + var include = this.getOption_('showInRangeSelector', labels[i]); + includeSeries[i] = include; + if (include !== null) anySet = true; // it's set explicitly for this series + } + if (!anySet) { + for (i = 0; i < includeSeries.length; i++) includeSeries[i] = true; + } + + // Create a combined series (average of selected series values). + // TODO(danvk): short-circuit if there's only one series. + var rolledSeries = []; + var dataHandler = g.dataHandler_; + var options = g.attributes_; + for (i = 1; i < g.numColumns(); i++) { + if (!includeSeries[i]) continue; + var series = dataHandler.extractSeries(g.rawData_, i, options); + if (g.rollPeriod() > 1) { + series = dataHandler.rollingAverage(series, g.rollPeriod(), options); + } + + rolledSeries.push(series); + } + + var combinedSeries = []; + for (i = 0; i < rolledSeries[0].length; i++) { + var sum = 0; + var count = 0; + for (var j = 0; j < rolledSeries.length; j++) { + var y = rolledSeries[j][i][1]; + if (y === null || isNaN(y)) continue; + count++; + sum += y; + } + combinedSeries.push([rolledSeries[0][i][0], sum / count]); + } + + // Compute the y range. + var yMin = Number.MAX_VALUE; + var yMax = -Number.MAX_VALUE; + for (i = 0; i < combinedSeries.length; i++) { + var yVal = combinedSeries[i][1]; + if (yVal !== null && isFinite(yVal) && (!logscale || yVal > 0)) { + yMin = Math.min(yMin, yVal); + yMax = Math.max(yMax, yVal); + } + } + + // Convert Y data to log scale if needed. + // Also, expand the Y range to compress the mini plot a little. + var extraPercent = 0.25; + if (logscale) { + yMax = Dygraph.log10(yMax); + yMax += yMax*extraPercent; + yMin = Dygraph.log10(yMin); + for (i = 0; i < combinedSeries.length; i++) { + combinedSeries[i][1] = Dygraph.log10(combinedSeries[i][1]); + } + } else { + var yExtra; + var yRange = yMax - yMin; + if (yRange <= Number.MIN_VALUE) { + yExtra = yMax*extraPercent; + } else { + yExtra = yRange*extraPercent; + } + yMax += yExtra; + yMin -= yExtra; + } + + return {data: combinedSeries, yMin: yMin, yMax: yMax}; +}; + +/** + * @private + * Places the zoom handles in the proper position based on the current X data window. + */ +rangeSelector.prototype.placeZoomHandles_ = function() { + var xExtremes = this.dygraph_.xAxisExtremes(); + var xWindowLimits = this.dygraph_.xAxisRange(); + var xRange = xExtremes[1] - xExtremes[0]; + var leftPercent = Math.max(0, (xWindowLimits[0] - xExtremes[0])/xRange); + var rightPercent = Math.max(0, (xExtremes[1] - xWindowLimits[1])/xRange); + var leftCoord = this.canvasRect_.x + this.canvasRect_.w*leftPercent; + var rightCoord = this.canvasRect_.x + this.canvasRect_.w*(1 - rightPercent); + var handleTop = Math.max(this.canvasRect_.y, this.canvasRect_.y + (this.canvasRect_.h - this.leftZoomHandle_.height)/2); + var halfHandleWidth = this.leftZoomHandle_.width/2; + this.leftZoomHandle_.style.left = (leftCoord - halfHandleWidth) + 'px'; + this.leftZoomHandle_.style.top = handleTop + 'px'; + this.rightZoomHandle_.style.left = (rightCoord - halfHandleWidth) + 'px'; + this.rightZoomHandle_.style.top = this.leftZoomHandle_.style.top; + + this.leftZoomHandle_.style.visibility = 'visible'; + this.rightZoomHandle_.style.visibility = 'visible'; +}; + +/** + * @private + * Draws the interactive layer in the foreground canvas. + */ +rangeSelector.prototype.drawInteractiveLayer_ = function() { + var ctx = this.fgcanvas_ctx_; + ctx.clearRect(0, 0, this.canvasRect_.w, this.canvasRect_.h); + var margin = 1; + var width = this.canvasRect_.w - margin; + var height = this.canvasRect_.h - margin; + var zoomHandleStatus = this.getZoomHandleStatus_(); + + ctx.strokeStyle = 'black'; + if (!zoomHandleStatus.isZoomed) { + ctx.beginPath(); + ctx.moveTo(margin, margin); + ctx.lineTo(margin, height); + ctx.lineTo(width, height); + ctx.lineTo(width, margin); + ctx.stroke(); + if (this.iePanOverlay_) { + this.iePanOverlay_.style.display = 'none'; + } + } else { + var leftHandleCanvasPos = Math.max(margin, zoomHandleStatus.leftHandlePos - this.canvasRect_.x); + var rightHandleCanvasPos = Math.min(width, zoomHandleStatus.rightHandlePos - this.canvasRect_.x); + + ctx.fillStyle = 'rgba(240, 240, 240, 0.6)'; + ctx.fillRect(0, 0, leftHandleCanvasPos, this.canvasRect_.h); + ctx.fillRect(rightHandleCanvasPos, 0, this.canvasRect_.w - rightHandleCanvasPos, this.canvasRect_.h); + + ctx.beginPath(); + ctx.moveTo(margin, margin); + ctx.lineTo(leftHandleCanvasPos, margin); + ctx.lineTo(leftHandleCanvasPos, height); + ctx.lineTo(rightHandleCanvasPos, height); + ctx.lineTo(rightHandleCanvasPos, margin); + ctx.lineTo(width, margin); + ctx.stroke(); + + if (this.isUsingExcanvas_) { + this.iePanOverlay_.style.width = (rightHandleCanvasPos - leftHandleCanvasPos) + 'px'; + this.iePanOverlay_.style.left = leftHandleCanvasPos + 'px'; + this.iePanOverlay_.style.height = height + 'px'; + this.iePanOverlay_.style.display = 'inline'; + } + } +}; + +/** + * @private + * Returns the current zoom handle position information. + * @return {Object} The zoom handle status. + */ +rangeSelector.prototype.getZoomHandleStatus_ = function() { + var halfHandleWidth = this.leftZoomHandle_.width/2; + var leftHandlePos = parseFloat(this.leftZoomHandle_.style.left) + halfHandleWidth; + var rightHandlePos = parseFloat(this.rightZoomHandle_.style.left) + halfHandleWidth; + return { + leftHandlePos: leftHandlePos, + rightHandlePos: rightHandlePos, + isZoomed: (leftHandlePos - 1 > this.canvasRect_.x || rightHandlePos + 1 < this.canvasRect_.x+this.canvasRect_.w) + }; +}; + +return rangeSelector; + +})(); +/*global Dygraph:false */ + +// This file defines the ordering of the plugins. +// +// The ordering is from most-general to most-specific. +// This means that, in an event cascade, plugins which have registered for that +// event will be called in reverse order. +// +// This is most relevant for plugins which register a layout event, e.g. +// Axes, Legend and ChartLabels. + +Dygraph.PLUGINS.push( + Dygraph.Plugins.Legend, + Dygraph.Plugins.Axes, + Dygraph.Plugins.RangeSelector, // Has to be before ChartLabels so that its callbacks are called after ChartLabels' callbacks. + Dygraph.Plugins.ChartLabels, + Dygraph.Plugins.Annotations, + Dygraph.Plugins.Grid +); +/** + * @license + * Copyright 2011 Dan Vanderkam (danvdk@gmail.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +// NOTE: in addition to parsing as JS, this snippet is expected to be valid +// JSON. This assumption cannot be checked in JS, but it will be checked when +// documentation is generated by the generate-documentation.py script. For the +// most part, this just means that you should always use double quotes. +Dygraph.OPTIONS_REFERENCE = // +{ + "xValueParser": { + "default": "parseFloat() or Date.parse()*", + "labels": ["CSV parsing"], + "type": "function(str) -> number", + "description": "A function which parses x-values (i.e. the dependent series). Must return a number, even when the values are dates. In this case, millis since epoch are used. This is used primarily for parsing CSV data. *=Dygraphs is slightly more accepting in the dates which it will parse. See code for details." + }, + "stackedGraph": { + "default": "false", + "labels": ["Data Line display"], + "type": "boolean", + "description": "If set, stack series on top of one another rather than drawing them independently. The first series specified in the input data will wind up on top of the chart and the last will be on bottom. NaN values are drawn as white areas without a line on top, see stackedGraphNaNFill for details." + }, + "stackedGraphNaNFill": { + "default": "all", + "labels": ["Data Line display"], + "type": "string", + "description": "Controls handling of NaN values inside a stacked graph. NaN values are interpolated/extended for stacking purposes, but the actual point value remains NaN in the legend display. Valid option values are \"all\" (interpolate internally, repeat leftmost and rightmost value as needed), \"inside\" (interpolate internally only, use zero outside leftmost and rightmost value), and \"none\" (treat NaN as zero everywhere)." + }, + "pointSize": { + "default": "1", + "labels": ["Data Line display"], + "type": "integer", + "description": "The size of the dot to draw on each point in pixels (see drawPoints). A dot is always drawn when a point is \"isolated\", i.e. there is a missing point on either side of it. This also controls the size of those dots." + }, + "labelsDivStyles": { + "default": "null", + "labels": ["Legend"], + "type": "{}", + "description": "Additional styles to apply to the currently-highlighted points div. For example, { 'fontWeight': 'bold' } will make the labels bold. In general, it is better to use CSS to style the .dygraph-legend class than to use this property." + }, + "drawPoints": { + "default": "false", + "labels": ["Data Line display"], + "type": "boolean", + "description": "Draw a small dot at each point, in addition to a line going through the point. This makes the individual data points easier to see, but can increase visual clutter in the chart. The small dot can be replaced with a custom rendering by supplying a drawPointCallback." + }, + "drawGapEdgePoints": { + "default": "false", + "labels": ["Data Line display"], + "type": "boolean", + "description": "Draw points at the edges of gaps in the data. This improves visibility of small data segments or other data irregularities." + }, + "drawPointCallback": { + "default": "null", + "labels": ["Data Line display"], + "type": "function(g, seriesName, canvasContext, cx, cy, color, pointSize)", + "parameters": [ + [ "g" , "the reference graph" ], + [ "seriesName" , "the name of the series" ], + [ "canvasContext" , "the canvas to draw on" ], + [ "cx" , "center x coordinate" ], + [ "cy" , "center y coordinate" ], + [ "color" , "series color" ], + [ "pointSize" , "the radius of the image." ], + [ "idx" , "the row-index of the point in the data."] + ], + "description": "Draw a custom item when drawPoints is enabled. Default is a small dot matching the series color. This method should constrain drawing to within pointSize pixels from (cx, cy). Also see drawHighlightPointCallback" + }, + "height": { + "default": "320", + "labels": ["Overall display"], + "type": "integer", + "description": "Height, in pixels, of the chart. If the container div has been explicitly sized, this will be ignored." + }, + "zoomCallback": { + "default": "null", + "labels": ["Callbacks"], + "type": "function(minDate, maxDate, yRanges)", + "parameters": [ + [ "minDate" , "milliseconds since epoch" ], + [ "maxDate" , "milliseconds since epoch." ], + [ "yRanges" , "is an array of [bottom, top] pairs, one for each y-axis." ] + ], + "description": "A function to call when the zoom window is changed (either by zooming in or out)." + }, + "pointClickCallback": { + "snippet": "function(e, point){
  alert(point);
}", + "default": "null", + "labels": ["Callbacks", "Interactive Elements"], + "type": "function(e, point)", + "parameters": [ + [ "e" , "the event object for the click" ], + [ "point" , "the point that was clicked See Point properties for details" ] + ], + "description": "A function to call when a data point is clicked. and the point that was clicked." + }, + "color": { + "default": "(see description)", + "labels": ["Data Series Colors"], + "type": "string", + "example": "red", + "description": "A per-series color definition. Used in conjunction with, and overrides, the colors option." + }, + "colors": { + "default": "(see description)", + "labels": ["Data Series Colors"], + "type": "array", + "example": "['red', '#00FF00']", + "description": "List of colors for the data series. These can be of the form \"#AABBCC\" or \"rgb(255,100,200)\" or \"yellow\", etc. If not specified, equally-spaced points around a color wheel are used. Overridden by the 'color' option." + }, + "connectSeparatedPoints": { + "default": "false", + "labels": ["Data Line display"], + "type": "boolean", + "description": "Usually, when Dygraphs encounters a missing value in a data series, it interprets this as a gap and draws it as such. If, instead, the missing values represents an x-value for which only a different series has data, then you'll want to connect the dots by setting this to true. To explicitly include a gap with this option set, use a value of NaN." + }, + "highlightCallback": { + "default": "null", + "labels": ["Callbacks"], + "type": "function(event, x, points, row, seriesName)", + "description": "When set, this callback gets called every time a new point is highlighted.", + "parameters": [ + ["event", "the JavaScript mousemove event"], + ["x", "the x-coordinate of the highlighted points"], + ["points", "an array of highlighted points: [ {name: 'series', yval: y-value}, … ]"], + ["row", "integer index of the highlighted row in the data table, starting from 0"], + ["seriesName", "name of the highlighted series, only present if highlightSeriesOpts is set."] + ] + }, + "drawHighlightPointCallback": { + "default": "null", + "labels": ["Data Line display"], + "type": "function(g, seriesName, canvasContext, cx, cy, color, pointSize)", + "parameters": [ + [ "g" , "the reference graph" ], + [ "seriesName" , "the name of the series" ], + [ "canvasContext" , "the canvas to draw on" ], + [ "cx" , "center x coordinate" ], + [ "cy" , "center y coordinate" ], + [ "color" , "series color" ], + [ "pointSize" , "the radius of the image." ], + [ "idx" , "the row-index of the point in the data."] + ], + "description": "Draw a custom item when a point is highlighted. Default is a small dot matching the series color. This method should constrain drawing to within pointSize pixels from (cx, cy) Also see drawPointCallback" + }, + "highlightSeriesOpts": { + "default": "null", + "labels": ["Interactive Elements"], + "type": "Object", + "description": "When set, the options from this object are applied to the timeseries closest to the mouse pointer for interactive highlighting. See also 'highlightCallback'. Example: highlightSeriesOpts: { strokeWidth: 3 }." + }, + "highlightSeriesBackgroundAlpha": { + "default": "0.5", + "labels": ["Interactive Elements"], + "type": "float", + "description": "Fade the background while highlighting series. 1=fully visible background (disable fading), 0=hiddden background (show highlighted series only)." + }, + "includeZero": { + "default": "false", + "labels": ["Axis display"], + "type": "boolean", + "description": "Usually, dygraphs will use the range of the data plus some padding to set the range of the y-axis. If this option is set, the y-axis will always include zero, typically as the lowest value. This can be used to avoid exaggerating the variance in the data" + }, + "rollPeriod": { + "default": "1", + "labels": ["Error Bars", "Rolling Averages"], + "type": "integer >= 1", + "description": "Number of days over which to average data. Discussed extensively above." + }, + "unhighlightCallback": { + "default": "null", + "labels": ["Callbacks"], + "type": "function(event)", + "parameters": [ + [ "event" , "the mouse event" ] + ], + "description": "When set, this callback gets called every time the user stops highlighting any point by mousing out of the graph." + }, + "axisTickSize": { + "default": "3.0", + "labels": ["Axis display"], + "type": "number", + "description": "The size of the line to display next to each tick mark on x- or y-axes." + }, + "labelsSeparateLines": { + "default": "false", + "labels": ["Legend"], + "type": "boolean", + "description": "Put <br/> between lines in the label string. Often used in conjunction with labelsDiv." + }, + "xValueFormatter": { + "default": "", + "labels": ["Deprecated"], + "type": "", + "description": "Prefer axes: { x: { valueFormatter } }" + }, + "valueFormatter": { + "default": "Depends on the type of your data.", + "labels": ["Legend", "Value display/formatting"], + "type": "function(num or millis, opts, dygraph)", + "description": "Function to provide a custom display format for the values displayed on mouseover. This does not affect the values that appear on tick marks next to the axes. To format those, see axisLabelFormatter. This is usually set on a per-axis basis. For date axes, you can call new Date(millis) to get a Date object. opts is a function you can call to access various options (e.g. opts('labelsKMB'))." + }, + "pixelsPerYLabel": { + "default": "", + "labels": ["Deprecated"], + "type": "integer", + "description": "Prefer axes: { y: { pixelsPerLabel } }" + }, + "annotationMouseOverHandler": { + "default": "null", + "labels": ["Annotations"], + "type": "function(annotation, point, dygraph, event)", + "description": "If provided, this function is called whenever the user mouses over an annotation." + }, + "annotationMouseOutHandler": { + "default": "null", + "labels": ["Annotations"], + "type": "function(annotation, point, dygraph, event)", + "parameters": [ + [ "annotation" , "the annotation left" ], + [ "point" , "the point associated with the annotation" ], + [ "dygraph" , "the reference graph" ], + [ "event" , "the mouse event" ] + ], + "description": "If provided, this function is called whenever the user mouses out of an annotation." + }, + "annotationClickHandler": { + "default": "null", + "labels": ["Annotations"], + "type": "function(annotation, point, dygraph, event)", + "parameters": [ + [ "annotation" , "the annotation left" ], + [ "point" , "the point associated with the annotation" ], + [ "dygraph" , "the reference graph" ], + [ "event" , "the mouse event" ] + ], + "description": "If provided, this function is called whenever the user clicks on an annotation." + }, + "annotationDblClickHandler": { + "default": "null", + "labels": ["Annotations"], + "type": "function(annotation, point, dygraph, event)", + "parameters": [ + [ "annotation" , "the annotation left" ], + [ "point" , "the point associated with the annotation" ], + [ "dygraph" , "the reference graph" ], + [ "event" , "the mouse event" ] + ], + "description": "If provided, this function is called whenever the user double-clicks on an annotation." + }, + "drawCallback": { + "default": "null", + "labels": ["Callbacks"], + "type": "function(dygraph, is_initial)", + "parameters": [ + [ "dygraph" , "The graph being drawn" ], + [ "is_initial" , "True if this is the initial draw, false for subsequent draws." ] + ], + "description": "When set, this callback gets called every time the dygraph is drawn. This includes the initial draw, after zooming and repeatedly while panning." + }, + "labelsKMG2": { + "default": "false", + "labels": ["Value display/formatting"], + "type": "boolean", + "description": "Show k/M/G for kilo/Mega/Giga on y-axis. This is different than labelsKMB in that it uses base 2, not 10." + }, + "delimiter": { + "default": ",", + "labels": ["CSV parsing"], + "type": "string", + "description": "The delimiter to look for when separating fields of a CSV file. Setting this to a tab is not usually necessary, since tab-delimited data is auto-detected." + }, + "axisLabelFontSize": { + "default": "14", + "labels": ["Axis display"], + "type": "integer", + "description": "Size of the font (in pixels) to use in the axis labels, both x- and y-axis." + }, + "underlayCallback": { + "default": "null", + "labels": ["Callbacks"], + "type": "function(context, area, dygraph)", + "parameters": [ + [ "context" , "the canvas drawing context on which to draw" ], + [ "area" , "An object with {x,y,w,h} properties describing the drawing area." ], + [ "dygraph" , "the reference graph" ] + ], + "description": "When set, this callback gets called before the chart is drawn. It details on how to use this." + }, + "width": { + "default": "480", + "labels": ["Overall display"], + "type": "integer", + "description": "Width, in pixels, of the chart. If the container div has been explicitly sized, this will be ignored." + }, + "interactionModel": { + "default": "...", + "labels": ["Interactive Elements"], + "type": "Object", + "description": "TODO(konigsberg): document this" + }, + "ticker": { + "default": "Dygraph.dateTicker or Dygraph.numericTicks", + "labels": ["Axis display"], + "type": "function(min, max, pixels, opts, dygraph, vals) -> [{v: ..., label: ...}, ...]", + "parameters": [ + [ "min" , "" ], + [ "max" , "" ], + [ "pixels" , "" ], + [ "opts" , "" ], + [ "dygraph" , "the reference graph" ], + [ "vals" , "" ] + ], + "description": "This lets you specify an arbitrary function to generate tick marks on an axis. The tick marks are an array of (value, label) pairs. The built-in functions go to great lengths to choose good tick marks so, if you set this option, you'll most likely want to call one of them and modify the result. See dygraph-tickers.js for an extensive discussion. This is set on a per-axis basis." + }, + "xAxisLabelWidth": { + "default": "", + "labels": ["Deprecated"], + "type": "integer", + "description": "Prefer axes: { x: { axisLabelWidth } }" + }, + "xAxisHeight": { + "default": "(null)", + "labels": ["Axis display"], + "type": "integer", + "description": "Height, in pixels, of the x-axis. If not set explicitly, this is computed based on axisLabelFontSize and axisTickSize." + }, + "showLabelsOnHighlight": { + "default": "true", + "labels": ["Interactive Elements", "Legend"], + "type": "boolean", + "description": "Whether to show the legend upon mouseover." + }, + "axis": { + "default": "(none)", + "labels": ["Axis display"], + "type": "string", + "description": "Set to either 'y1' or 'y2' to assign a series to a y-axis (primary or secondary). Must be set per-series." + }, + "pixelsPerXLabel": { + "default": "", + "labels": ["Deprecated"], + "type": "integer", + "description": "Prefer axes { x: { pixelsPerLabel } }" + }, + "pixelsPerLabel": { + "default": "70 (x-axis) or 30 (y-axes)", + "labels": ["Axis display", "Grid"], + "type": "integer", + "description": "Number of pixels to require between each x- and y-label. Larger values will yield a sparser axis with fewer ticks. This is set on a per-axis basis." + }, + "labelsDiv": { + "default": "null", + "labels": ["Legend"], + "type": "DOM element or string", + "example": "document.getElementById('foo')or'foo'", + "description": "Show data labels in an external div, rather than on the graph. This value can either be a div element or a div id." + }, + "fractions": { + "default": "false", + "labels": ["CSV parsing", "Error Bars"], + "type": "boolean", + "description": "When set, attempt to parse each cell in the CSV file as \"a/b\", where a and b are integers. The ratio will be plotted. This allows computation of Wilson confidence intervals (see below)." + }, + "logscale": { + "default": "false", + "labels": ["Axis display"], + "type": "boolean", + "description": "When set for the y-axis or x-axis, the graph shows that axis in log scale. Any values less than or equal to zero are not displayed. Showing log scale with ranges that go below zero will result in an unviewable graph.\n\n Not compatible with showZero. connectSeparatedPoints is ignored. This is ignored for date-based x-axes." + }, + "strokeWidth": { + "default": "1.0", + "labels": ["Data Line display"], + "type": "float", + "example": "0.5, 2.0", + "description": "The width of the lines connecting data points. This can be used to increase the contrast or some graphs." + }, + "strokePattern": { + "default": "null", + "labels": ["Data Line display"], + "type": "array", + "example": "[10, 2, 5, 2]", + "description": "A custom pattern array where the even index is a draw and odd is a space in pixels. If null then it draws a solid line. The array should have a even length as any odd lengthed array could be expressed as a smaller even length array. This is used to create dashed lines." + }, + "strokeBorderWidth": { + "default": "null", + "labels": ["Data Line display"], + "type": "float", + "example": "1.0", + "description": "Draw a border around graph lines to make crossing lines more easily distinguishable. Useful for graphs with many lines." + }, + "strokeBorderColor": { + "default": "white", + "labels": ["Data Line display"], + "type": "string", + "example": "red, #ccffdd", + "description": "Color for the line border used if strokeBorderWidth is set." + }, + "wilsonInterval": { + "default": "true", + "labels": ["Error Bars"], + "type": "boolean", + "description": "Use in conjunction with the \"fractions\" option. Instead of plotting +/- N standard deviations, dygraphs will compute a Wilson confidence interval and plot that. This has more reasonable behavior for ratios close to 0 or 1." + }, + "fillGraph": { + "default": "false", + "labels": ["Data Line display"], + "type": "boolean", + "description": "Should the area underneath the graph be filled? This option is not compatible with error bars. This may be set on a per-series basis." + }, + "highlightCircleSize": { + "default": "3", + "labels": ["Interactive Elements"], + "type": "integer", + "description": "The size in pixels of the dot drawn over highlighted points." + }, + "gridLineColor": { + "default": "rgb(128,128,128)", + "labels": ["Grid"], + "type": "red, blue", + "description": "The color of the gridlines. This may be set on a per-axis basis to define each axis' grid separately." + }, + "gridLinePattern": { + "default": "null", + "labels": ["Grid"], + "type": "array", + "example": "[10, 2, 5, 2]", + "description": "A custom pattern array where the even index is a draw and odd is a space in pixels. If null then it draws a solid line. The array should have a even length as any odd lengthed array could be expressed as a smaller even length array. This is used to create dashed gridlines." + }, + "visibility": { + "default": "[true, true, ...]", + "labels": ["Data Line display"], + "type": "Array of booleans", + "description": "Which series should initially be visible? Once the Dygraph has been constructed, you can access and modify the visibility of each series using the visibility and setVisibility methods." + }, + "valueRange": { + "default": "Full range of the input is shown", + "labels": ["Axis display"], + "type": "Array of two numbers", + "example": "[10, 110]", + "description": "Explicitly set the vertical range of the graph to [low, high]. This may be set on a per-axis basis to define each y-axis separately. If either limit is unspecified, it will be calculated automatically (e.g. [null, 30] to automatically calculate just the lower bound)" + }, + "labelsDivWidth": { + "default": "250", + "labels": ["Legend"], + "type": "integer", + "description": "Width (in pixels) of the div which shows information on the currently-highlighted points." + }, + "colorSaturation": { + "default": "1.0", + "labels": ["Data Series Colors"], + "type": "float (0.0 - 1.0)", + "description": "If colors is not specified, saturation of the automatically-generated data series colors." + }, + "yAxisLabelWidth": { + "default": "", + "labels": ["Deprecated"], + "type": "integer", + "description": "Prefer axes { y: { axisLabelWidth } }" + }, + "hideOverlayOnMouseOut": { + "default": "true", + "labels": ["Interactive Elements", "Legend"], + "type": "boolean", + "description": "Whether to hide the legend when the mouse leaves the chart area." + }, + "yValueFormatter": { + "default": "", + "labels": ["Deprecated"], + "type": "", + "description": "Prefer axes: { y: { valueFormatter } }" + }, + "legend": { + "default": "onmouseover", + "labels": ["Legend"], + "type": "string", + "description": "When to display the legend. By default, it only appears when a user mouses over the chart. Set it to \"always\" to always display a legend of some sort. When set to \"follow\", legend follows highlighted points." + }, + "labelsShowZeroValues": { + "default": "true", + "labels": ["Legend"], + "type": "boolean", + "description": "Show zero value labels in the labelsDiv." + }, + "stepPlot": { + "default": "false", + "labels": ["Data Line display"], + "type": "boolean", + "description": "When set, display the graph as a step plot instead of a line plot. This option may either be set for the whole graph or for single series." + }, + "labelsUTC": { + "default": "false", + "labels": ["Value display/formatting", "Axis display"], + "type": "boolean", + "description": "Show date/time labels according to UTC (instead of local time)." + }, + "labelsKMB": { + "default": "false", + "labels": ["Value display/formatting"], + "type": "boolean", + "description": "Show K/M/B for thousands/millions/billions on y-axis." + }, + "rightGap": { + "default": "5", + "labels": ["Overall display"], + "type": "integer", + "description": "Number of pixels to leave blank at the right edge of the Dygraph. This makes it easier to highlight the right-most data point." + }, + "avoidMinZero": { + "default": "false", + "labels": ["Deprecated"], + "type": "boolean", + "description": "Deprecated, please use yRangePad instead. When set, the heuristic that fixes the Y axis at zero for a data set with the minimum Y value of zero is disabled. \nThis is particularly useful for data sets that contain many zero values, especially for step plots which may otherwise have lines not visible running along the bottom axis." + }, + "drawAxesAtZero": { + "default": "false", + "labels": ["Axis display"], + "type": "boolean", + "description": "When set, draw the X axis at the Y=0 position and the Y axis at the X=0 position if those positions are inside the graph's visible area. Otherwise, draw the axes at the bottom or left graph edge as usual." + }, + "xRangePad": { + "default": "0", + "labels": ["Axis display"], + "type": "float", + "description": "Add the specified amount of extra space (in pixels) around the X-axis value range to ensure points at the edges remain visible." + }, + "yRangePad": { + "default": "null", + "labels": ["Axis display"], + "type": "float", + "description": "If set, add the specified amount of extra space (in pixels) around the Y-axis value range to ensure points at the edges remain visible. If unset, use the traditional Y padding algorithm." + }, + "xAxisLabelFormatter": { + "default": "", + "labels": ["Deprecated"], + "type": "", + "description": "Prefer axes { x: { axisLabelFormatter } }" + }, + "axisLabelFormatter": { + "default": "Depends on the data type", + "labels": ["Axis display"], + "type": "function(number or Date, granularity, opts, dygraph)", + "parameters": [ + [ "number or date" , "Either a number (for a numeric axis) or a Date object (for a date axis)" ], + [ "granularity" , "specifies how fine-grained the axis is. For date axes, this is a reference to the time granularity enumeration, defined in dygraph-tickers.js, e.g. Dygraph.WEEKLY." ], + [ "opts" , "a function which provides access to various options on the dygraph, e.g. opts('labelsKMB')." ], + [ "dygraph" , "the referenced graph" ] + ], + "description": "Function to call to format the tick values that appear along an axis. This is usually set on a per-axis basis." + }, + "clickCallback": { + "snippet": "function(e, date_millis){
  alert(new Date(date_millis));
}", + "default": "null", + "labels": ["Callbacks"], + "type": "function(e, x, points)", + "parameters": [ + [ "e" , "The event object for the click" ], + [ "x" , "The x value that was clicked (for dates, this is milliseconds since epoch)" ], + [ "points" , "The closest points along that date. See Point properties for details." ] + ], + "description": "A function to call when the canvas is clicked." + }, + "yAxisLabelFormatter": { + "default": "", + "labels": ["Deprecated"], + "type": "", + "description": "Prefer axes: { y: { axisLabelFormatter } }" + }, + "labels": { + "default": "[\"X\", \"Y1\", \"Y2\", ...]*", + "labels": ["Legend"], + "type": "array", + "description": "A name for each data series, including the independent (X) series. For CSV files and DataTable objections, this is determined by context. For raw data, this must be specified. If it is not, default values are supplied and a warning is logged." + }, + "dateWindow": { + "default": "Full range of the input is shown", + "labels": ["Axis display"], + "type": "Array of two numbers", + "example": "[
  Date.parse('2006-01-01'),
  (new Date()).valueOf()
]", + "description": "Initially zoom in on a section of the graph. Is of the form [earliest, latest], where earliest/latest are milliseconds since epoch. If the data for the x-axis is numeric, the values in dateWindow must also be numbers." + }, + "showRoller": { + "default": "false", + "labels": ["Interactive Elements", "Rolling Averages"], + "type": "boolean", + "description": "If the rolling average period text box should be shown." + }, + "sigma": { + "default": "2.0", + "labels": ["Error Bars"], + "type": "float", + "description": "When errorBars is set, shade this many standard deviations above/below each point." + }, + "customBars": { + "default": "false", + "labels": ["CSV parsing", "Error Bars"], + "type": "boolean", + "description": "When set, parse each CSV cell as \"low;middle;high\". Error bars will be drawn for each point between low and high, with the series itself going through middle." + }, + "colorValue": { + "default": "1.0", + "labels": ["Data Series Colors"], + "type": "float (0.0 - 1.0)", + "description": "If colors is not specified, value of the data series colors, as in hue/saturation/value. (0.0-1.0, default 0.5)" + }, + "errorBars": { + "default": "false", + "labels": ["CSV parsing", "Error Bars"], + "type": "boolean", + "description": "Does the data contain standard deviations? Setting this to true alters the input format (see above)." + }, + "displayAnnotations": { + "default": "false", + "labels": ["Annotations"], + "type": "boolean", + "description": "Only applies when Dygraphs is used as a GViz chart. Causes string columns following a data series to be interpreted as annotations on points in that series. This is the same format used by Google's AnnotatedTimeLine chart." + }, + "panEdgeFraction": { + "default": "null", + "labels": ["Axis display", "Interactive Elements"], + "type": "float", + "description": "A value representing the farthest a graph may be panned, in percent of the display. For example, a value of 0.1 means that the graph can only be panned 10% pased the edges of the displayed values. null means no bounds." + }, + "title": { + "labels": ["Chart labels"], + "type": "string", + "default": "null", + "description": "Text to display above the chart. You can supply any HTML for this value, not just text. If you wish to style it using CSS, use the 'dygraph-label' or 'dygraph-title' classes." + }, + "titleHeight": { + "default": "18", + "labels": ["Chart labels"], + "type": "integer", + "description": "Height of the chart title, in pixels. This also controls the default font size of the title. If you style the title on your own, this controls how much space is set aside above the chart for the title's div." + }, + "xlabel": { + "labels": ["Chart labels"], + "type": "string", + "default": "null", + "description": "Text to display below the chart's x-axis. You can supply any HTML for this value, not just text. If you wish to style it using CSS, use the 'dygraph-label' or 'dygraph-xlabel' classes." + }, + "xLabelHeight": { + "labels": ["Chart labels"], + "type": "integer", + "default": "18", + "description": "Height of the x-axis label, in pixels. This also controls the default font size of the x-axis label. If you style the label on your own, this controls how much space is set aside below the chart for the x-axis label's div." + }, + "ylabel": { + "labels": ["Chart labels"], + "type": "string", + "default": "null", + "description": "Text to display to the left of the chart's y-axis. You can supply any HTML for this value, not just text. If you wish to style it using CSS, use the 'dygraph-label' or 'dygraph-ylabel' classes. The text will be rotated 90 degrees by default, so CSS rules may behave in unintuitive ways. No additional space is set aside for a y-axis label. If you need more space, increase the width of the y-axis tick labels using the yAxisLabelWidth option. If you need a wider div for the y-axis label, either style it that way with CSS (but remember that it's rotated, so width is controlled by the 'height' property) or set the yLabelWidth option." + }, + "y2label": { + "labels": ["Chart labels"], + "type": "string", + "default": "null", + "description": "Text to display to the right of the chart's secondary y-axis. This label is only displayed if a secondary y-axis is present. See this test for an example of how to do this. The comments for the 'ylabel' option generally apply here as well. This label gets a 'dygraph-y2label' instead of a 'dygraph-ylabel' class." + }, + "yLabelWidth": { + "labels": ["Chart labels"], + "type": "integer", + "default": "18", + "description": "Width of the div which contains the y-axis label. Since the y-axis label appears rotated 90 degrees, this actually affects the height of its div." + }, + "isZoomedIgnoreProgrammaticZoom" : { + "default": "false", + "labels": ["Zooming"], + "type": "boolean", + "description" : "When this option is passed to updateOptions() along with either the dateWindow or valueRange options, the zoom flags are not changed to reflect a zoomed state. This is primarily useful for when the display area of a chart is changed programmatically and also where manual zooming is allowed and use is made of the isZoomed method to determine this." + }, + "drawXGrid": { + "default": "true", + "labels": ["Grid","Deprecated"], + "type": "boolean", + "description" : "Use the per-axis option drawGrid instead. Whether to display vertical gridlines under the chart." + }, + "drawYGrid": { + "default": "true", + "labels": ["Grid","Deprecated"], + "type": "boolean", + "description" : "Use the per-axis option drawGrid instead. Whether to display horizontal gridlines under the chart." + }, + "drawGrid": { + "default": "true for x and y, false for y2", + "labels": ["Grid"], + "type": "boolean", + "description" : "Whether to display gridlines in the chart. This may be set on a per-axis basis to define the visibility of each axis' grid separately." + }, + "independentTicks": { + "default": "true for y, false for y2", + "labels": ["Axis display", "Grid"], + "type": "boolean", + "description" : "Only valid for y and y2, has no effect on x: This option defines whether the y axes should align their ticks or if they should be independent. Possible combinations: 1.) y=true, y2=false (default): y is the primary axis and the y2 ticks are aligned to the the ones of y. (only 1 grid) 2.) y=false, y2=true: y2 is the primary axis and the y ticks are aligned to the the ones of y2. (only 1 grid) 3.) y=true, y2=true: Both axis are independent and have their own ticks. (2 grids) 4.) y=false, y2=false: Invalid configuration causes an error." + }, + "drawXAxis": { + "default": "true", + "labels": ["Axis display"], + "type": "boolean", + "description" : "Deprecated. Use axes : { x : { drawAxis } }." + }, + "drawYAxis": { + "default": "true", + "labels": ["Axis display"], + "type": "boolean", + "description" : "Deprecated. Use axes : { y : { drawAxis } }." + }, + "drawAxis": { + "default": "true for x and y, false for y2", + "labels": ["Axis display"], + "type": "boolean", + "description" : "Whether to draw the specified axis. This may be set on a per-axis basis to define the visibility of each axis separately. Setting this to false also prevents axis ticks from being drawn and reclaims the space for the chart grid/lines." + }, + "gridLineWidth": { + "default": "0.3", + "labels": ["Grid"], + "type": "float", + "description" : "Thickness (in pixels) of the gridlines drawn under the chart. The vertical/horizontal gridlines can be turned off entirely by using the drawXGrid and drawYGrid options. This may be set on a per-axis basis to define each axis' grid separately." + }, + "axisLineWidth": { + "default": "0.3", + "labels": ["Axis display"], + "type": "float", + "description" : "Thickness (in pixels) of the x- and y-axis lines." + }, + "axisLineColor": { + "default": "black", + "labels": ["Axis display"], + "type": "string", + "description" : "Color of the x- and y-axis lines. Accepts any value which the HTML canvas strokeStyle attribute understands, e.g. 'black' or 'rgb(0, 100, 255)'." + }, + "fillAlpha": { + "default": "0.15", + "labels": ["Error Bars", "Data Series Colors"], + "type": "float (0.0 - 1.0)", + "description" : "Error bars (or custom bars) for each series are drawn in the same color as the series, but with partial transparency. This sets the transparency. A value of 0.0 means that the error bars will not be drawn, whereas a value of 1.0 means that the error bars will be as dark as the line for the series itself. This can be used to produce chart lines whose thickness varies at each point." + }, + "axisLabelColor": { + "default": "black", + "labels": ["Axis display"], + "type": "string", + "description" : "Color for x- and y-axis labels. This is a CSS color string." + }, + "axisLabelWidth": { + "default": "50 (y-axis), 60 (x-axis)", + "labels": ["Axis display", "Chart labels"], + "type": "integer", + "description" : "Width (in pixels) of the containing divs for x- and y-axis labels. For the y-axis, this also controls the width of the y-axis. Note that for the x-axis, this is independent from pixelsPerLabel, which controls the spacing between labels." + }, + "sigFigs" : { + "default": "null", + "labels": ["Value display/formatting"], + "type": "integer", + "description": "By default, dygraphs displays numbers with a fixed number of digits after the decimal point. If you'd prefer to have a fixed number of significant figures, set this option to that number of sig figs. A value of 2, for instance, would cause 1 to be display as 1.0 and 1234 to be displayed as 1.23e+3." + }, + "digitsAfterDecimal" : { + "default": "2", + "labels": ["Value display/formatting"], + "type": "integer", + "description": "Unless it's run in scientific mode (see the sigFigs option), dygraphs displays numbers with digitsAfterDecimal digits after the decimal point. Trailing zeros are not displayed, so with a value of 2 you'll get '0', '0.1', '0.12', '123.45' but not '123.456' (it will be rounded to '123.46'). Numbers with absolute value less than 0.1^digitsAfterDecimal (i.e. those which would show up as '0.00') will be displayed in scientific notation." + }, + "maxNumberWidth" : { + "default": "6", + "labels": ["Value display/formatting"], + "type": "integer", + "description": "When displaying numbers in normal (not scientific) mode, large numbers will be displayed with many trailing zeros (e.g. 100000000 instead of 1e9). This can lead to unwieldy y-axis labels. If there are more than maxNumberWidth digits to the left of the decimal in a number, dygraphs will switch to scientific notation, even when not operating in scientific mode. If you'd like to see all those digits, set this to something large, like 20 or 30." + }, + "file": { + "default": "(set when constructed)", + "labels": ["Data"], + "type": "string (URL of CSV or CSV), GViz DataTable or 2D Array", + "description": "Sets the data being displayed in the chart. This can only be set when calling updateOptions; it cannot be set from the constructor. For a full description of valid data formats, see the Data Formats page." + }, + "timingName": { + "default": "null", + "labels": [ "Debugging" ], + "type": "string", + "description": "Set this option to log timing information. The value of the option will be logged along with the timimg, so that you can distinguish multiple dygraphs on the same page." + }, + "showRangeSelector": { + "default": "false", + "labels": ["Interactive Elements"], + "type": "boolean", + "description": "Show or hide the range selector widget." + }, + "rangeSelectorHeight": { + "default": "40", + "labels": ["Interactive Elements"], + "type": "integer", + "description": "Height, in pixels, of the range selector widget. This option can only be specified at Dygraph creation time." + }, + "rangeSelectorPlotStrokeColor": { + "default": "#808FAB", + "labels": ["Interactive Elements"], + "type": "string", + "description": "The range selector mini plot stroke color. This can be of the form \"#AABBCC\" or \"rgb(255,100,200)\" or \"yellow\". You can also specify null or \"\" to turn off stroke." + }, + "rangeSelectorPlotFillColor": { + "default": "#A7B1C4", + "labels": ["Interactive Elements"], + "type": "string", + "description": "The range selector mini plot fill color. This can be of the form \"#AABBCC\" or \"rgb(255,100,200)\" or \"yellow\". You can also specify null or \"\" to turn off fill." + }, + "showInRangeSelector": { + "default": "null", + "labels": ["Interactive Elements"], + "type": "boolean", + "description": "Mark this series for inclusion in the range selector. The mini plot curve will be an average of all such series. If this is not specified for any series, the default behavior is to average all the series. Setting it for one series will result in that series being charted alone in the range selector." + }, + "animatedZooms": { + "default": "false", + "labels": ["Interactive Elements"], + "type": "boolean", + "description": "Set this option to animate the transition between zoom windows. Applies to programmatic and interactive zooms. Note that if you also set a drawCallback, it will be called several times on each zoom. If you set a zoomCallback, it will only be called after the animation is complete." + }, + "plotter": { + "default": "[DygraphCanvasRenderer.Plotters.fillPlotter, DygraphCanvasRenderer.Plotters.errorPlotter, DygraphCanvasRenderer.Plotters.linePlotter]", + "labels": ["Data Line display"], + "type": "array or function", + "description": "A function (or array of functions) which plot each data series on the chart. TODO(danvk): more details! May be set per-series." + }, + "axes": { + "default": "null", + "labels": ["Configuration"], + "type": "Object", + "description": "Defines per-axis options. Valid keys are 'x', 'y' and 'y2'. Only some options may be set on a per-axis basis. If an option may be set in this way, it will be noted on this page. See also documentation on per-series and per-axis options." + }, + "series": { + "default": "null", + "labels": ["Series"], + "type": "Object", + "description": "Defines per-series options. Its keys match the y-axis label names, and the values are dictionaries themselves that contain options specific to that series. When this option is missing, it falls back on the old-style of per-series options comingled with global options." + }, + "plugins": { + "default": "[]", + "labels": ["Configuration"], + "type": "Array", + "description": "Defines per-graph plugins. Useful for per-graph customization" + }, + "dataHandler": { + "default": "(depends on data)", + "labels": ["Data"], + "type": "Dygraph.DataHandler", + "description": "Custom DataHandler. This is an advanced customization. See http://bit.ly/151E7Aq." + } +} +; //
+// NOTE: in addition to parsing as JS, this snippet is expected to be valid +// JSON. This assumption cannot be checked in JS, but it will be checked when +// documentation is generated by the generate-documentation.py script. For the +// most part, this just means that you should always use double quotes. + +// Do a quick sanity check on the options reference. +(function() { + "use strict"; + var warn = function(msg) { if (window.console) window.console.warn(msg); }; + var flds = ['type', 'default', 'description']; + var valid_cats = [ + 'Annotations', + 'Axis display', + 'Chart labels', + 'CSV parsing', + 'Callbacks', + 'Data', + 'Data Line display', + 'Data Series Colors', + 'Error Bars', + 'Grid', + 'Interactive Elements', + 'Legend', + 'Overall display', + 'Rolling Averages', + 'Series', + 'Value display/formatting', + 'Zooming', + 'Debugging', + 'Configuration', + 'Deprecated' + ]; + var i; + var cats = {}; + for (i = 0; i < valid_cats.length; i++) cats[valid_cats[i]] = true; + + for (var k in Dygraph.OPTIONS_REFERENCE) { + if (!Dygraph.OPTIONS_REFERENCE.hasOwnProperty(k)) continue; + var op = Dygraph.OPTIONS_REFERENCE[k]; + for (i = 0; i < flds.length; i++) { + if (!op.hasOwnProperty(flds[i])) { + warn('Option ' + k + ' missing "' + flds[i] + '" property'); + } else if (typeof(op[flds[i]]) != 'string') { + warn(k + '.' + flds[i] + ' must be of type string'); + } + } + var labels = op.labels; + if (typeof(labels) !== 'object') { + warn('Option "' + k + '" is missing a "labels": [...] option'); + } else { + for (i = 0; i < labels.length; i++) { + if (!cats.hasOwnProperty(labels[i])) { + warn('Option "' + k + '" has label "' + labels[i] + + '", which is invalid.'); + } + } + } + } +})(); +/** + * @license + * Copyright 2013 David Eberlein (david.eberlein@ch.sauter-bc.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +/** + * @fileoverview This file contains the managment of data handlers + * @author David Eberlein (david.eberlein@ch.sauter-bc.com) + * + * The idea is to define a common, generic data format that works for all data + * structures supported by dygraphs. To make this possible, the DataHandler + * interface is introduced. This makes it possible, that dygraph itself can work + * with the same logic for every data type independent of the actual format and + * the DataHandler takes care of the data format specific jobs. + * DataHandlers are implemented for all data types supported by Dygraphs and + * return Dygraphs compliant formats. + * By default the correct DataHandler is chosen based on the options set. + * Optionally the user may use his own DataHandler (similar to the plugin + * system). + * + * + * The unified data format returend by each handler is defined as so: + * series[n][point] = [x,y,(extras)] + * + * This format contains the common basis that is needed to draw a simple line + * series extended by optional extras for more complex graphing types. It + * contains a primitive x value as first array entry, a primitive y value as + * second array entry and an optional extras object for additional data needed. + * + * x must always be a number. + * y must always be a number, NaN of type number or null. + * extras is optional and must be interpreted by the DataHandler. It may be of + * any type. + * + * In practice this might look something like this: + * default: [x, yVal] + * errorBar / customBar: [x, yVal, [yTopVariance, yBottomVariance] ] + * + */ +/*global Dygraph:false */ +/*global DygraphLayout:false */ + +/** + * + * The data handler is responsible for all data specific operations. All of the + * series data it receives and returns is always in the unified data format. + * Initially the unified data is created by the extractSeries method + * @constructor + */ +Dygraph.DataHandler = function () { +}; + +/** + * A collection of functions to create and retrieve data handlers. + * @type {Object.} + */ +Dygraph.DataHandlers = {}; + +(function() { + +"use strict"; + +var handler = Dygraph.DataHandler; + +/** + * X-value array index constant for unified data samples. + * @const + * @type {number} + */ +handler.X = 0; + +/** + * Y-value array index constant for unified data samples. + * @const + * @type {number} + */ +handler.Y = 1; + +/** + * Extras-value array index constant for unified data samples. + * @const + * @type {number} + */ +handler.EXTRAS = 2; + +/** + * Extracts one series from the raw data (a 2D array) into an array of the + * unified data format. + * This is where undesirable points (i.e. negative values on log scales and + * missing values through which we wish to connect lines) are dropped. + * TODO(danvk): the "missing values" bit above doesn't seem right. + * + * @param {!Array.} rawData The raw data passed into dygraphs where + * rawData[i] = [x,ySeries1,...,ySeriesN]. + * @param {!number} seriesIndex Index of the series to extract. All other + * series should be ignored. + * @param {!DygraphOptions} options Dygraph options. + * @return {Array.<[!number,?number,?]>} The series in the unified data format + * where series[i] = [x,y,{extras}]. + */ +handler.prototype.extractSeries = function(rawData, seriesIndex, options) { +}; + +/** + * Converts a series to a Point array. The resulting point array must be + * returned in increasing order of idx property. + * + * @param {!Array.<[!number,?number,?]>} series The series in the unified + * data format where series[i] = [x,y,{extras}]. + * @param {!string} setName Name of the series. + * @param {!number} boundaryIdStart Index offset of the first point, equal to the + * number of skipped points left of the date window minimum (if any). + * @return {!Array.} List of points for this series. + */ +handler.prototype.seriesToPoints = function(series, setName, boundaryIdStart) { + // TODO(bhs): these loops are a hot-spot for high-point-count charts. In + // fact, + // on chrome+linux, they are 6 times more expensive than iterating through + // the + // points and drawing the lines. The brunt of the cost comes from allocating + // the |point| structures. + var points = []; + for ( var i = 0; i < series.length; ++i) { + var item = series[i]; + var yraw = item[1]; + var yval = yraw === null ? null : handler.parseFloat(yraw); + var point = { + x : NaN, + y : NaN, + xval : handler.parseFloat(item[0]), + yval : yval, + name : setName, // TODO(danvk): is this really necessary? + idx : i + boundaryIdStart + }; + points.push(point); + } + this.onPointsCreated_(series, points); + return points; +}; + +/** + * Callback called for each series after the series points have been generated + * which will later be used by the plotters to draw the graph. + * Here data may be added to the seriesPoints which is needed by the plotters. + * The indexes of series and points are in sync meaning the original data + * sample for series[i] is points[i]. + * + * @param {!Array.<[!number,?number,?]>} series The series in the unified + * data format where series[i] = [x,y,{extras}]. + * @param {!Array.} points The corresponding points passed + * to the plotter. + * @protected + */ +handler.prototype.onPointsCreated_ = function(series, points) { +}; + +/** + * Calculates the rolling average of a data set. + * + * @param {!Array.<[!number,?number,?]>} series The series in the unified + * data format where series[i] = [x,y,{extras}]. + * @param {!number} rollPeriod The number of points over which to average the data + * @param {!DygraphOptions} options The dygraph options. + * @return {!Array.<[!number,?number,?]>} the rolled series. + */ +handler.prototype.rollingAverage = function(series, rollPeriod, options) { +}; + +/** + * Computes the range of the data series (including confidence intervals). + * + * @param {!Array.<[!number,?number,?]>} series The series in the unified + * data format where series[i] = [x, y, {extras}]. + * @param {!Array.} dateWindow The x-value range to display with + * the format: [min, max]. + * @param {!DygraphOptions} options The dygraph options. + * @return {Array.} The low and high extremes of the series in the + * given window with the format: [low, high]. + */ +handler.prototype.getExtremeYValues = function(series, dateWindow, options) { +}; + +/** + * Callback called for each series after the layouting data has been + * calculated before the series is drawn. Here normalized positioning data + * should be calculated for the extras of each point. + * + * @param {!Array.} points The points passed to + * the plotter. + * @param {!Object} axis The axis on which the series will be plotted. + * @param {!boolean} logscale Weather or not to use a logscale. + */ +handler.prototype.onLineEvaluated = function(points, axis, logscale) { +}; + +/** + * Helper method that computes the y value of a line defined by the points p1 + * and p2 and a given x value. + * + * @param {!Array.} p1 left point ([x,y]). + * @param {!Array.} p2 right point ([x,y]). + * @param {!number} xValue The x value to compute the y-intersection for. + * @return {number} corresponding y value to x on the line defined by p1 and p2. + * @private + */ +handler.prototype.computeYInterpolation_ = function(p1, p2, xValue) { + var deltaY = p2[1] - p1[1]; + var deltaX = p2[0] - p1[0]; + var gradient = deltaY / deltaX; + var growth = (xValue - p1[0]) * gradient; + return p1[1] + growth; +}; + +/** + * Helper method that returns the first and the last index of the given series + * that lie inside the given dateWindow. + * + * @param {!Array.<[!number,?number,?]>} series The series in the unified + * data format where series[i] = [x,y,{extras}]. + * @param {!Array.} dateWindow The x-value range to display with + * the format: [min,max]. + * @return {!Array.<[!number,?number,?]>} The samples of the series that + * are in the given date window. + * @private + */ +handler.prototype.getIndexesInWindow_ = function(series, dateWindow) { + var firstIdx = 0, lastIdx = series.length - 1; + if (dateWindow) { + var idx = 0; + var low = dateWindow[0]; + var high = dateWindow[1]; + + // Start from each side of the array to minimize the performance + // needed. + while (idx < series.length - 1 && series[idx][0] < low) { + firstIdx++; + idx++; + } + idx = series.length - 1; + while (idx > 0 && series[idx][0] > high) { + lastIdx--; + idx--; + } + } + if (firstIdx <= lastIdx) { + return [ firstIdx, lastIdx ]; + } else { + return [ 0, series.length - 1 ]; + } +}; + +/** + * Optimized replacement for parseFloat, which was way too slow when almost + * all values were type number, with few edge cases, none of which were strings. + * @param {?number} val + * @return {number} + * @protected + */ +handler.parseFloat = function(val) { + // parseFloat(null) is NaN + if (val === null) { + return NaN; + } + + // Assume it's a number or NaN. If it's something else, I'll be shocked. + return val; +}; + +})(); +/** + * @license + * Copyright 2013 David Eberlein (david.eberlein@ch.sauter-bc.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +/** + * @fileoverview DataHandler default implementation used for simple line charts. + * @author David Eberlein (david.eberlein@ch.sauter-bc.com) + */ + +(function() { + +/*global Dygraph:false */ +"use strict"; + +/** + * @constructor + * @extends Dygraph.DataHandler + */ +Dygraph.DataHandlers.DefaultHandler = function() { +}; + +var DefaultHandler = Dygraph.DataHandlers.DefaultHandler; +DefaultHandler.prototype = new Dygraph.DataHandler(); + +/** @inheritDoc */ +DefaultHandler.prototype.extractSeries = function(rawData, i, options) { + // TODO(danvk): pre-allocate series here. + var series = []; + var logScale = options.get('logscale'); + for ( var j = 0; j < rawData.length; j++) { + var x = rawData[j][0]; + var point = rawData[j][i]; + if (logScale) { + // On the log scale, points less than zero do not exist. + // This will create a gap in the chart. + if (point <= 0) { + point = null; + } + } + series.push([ x, point ]); + } + return series; +}; + +/** @inheritDoc */ +DefaultHandler.prototype.rollingAverage = function(originalData, rollPeriod, + options) { + rollPeriod = Math.min(rollPeriod, originalData.length); + var rollingData = []; + + var i, j, y, sum, num_ok; + // Calculate the rolling average for the first rollPeriod - 1 points + // where + // there is not enough data to roll over the full number of points + if (rollPeriod == 1) { + return originalData; + } + for (i = 0; i < originalData.length; i++) { + sum = 0; + num_ok = 0; + for (j = Math.max(0, i - rollPeriod + 1); j < i + 1; j++) { + y = originalData[j][1]; + if (y === null || isNaN(y)) + continue; + num_ok++; + sum += originalData[j][1]; + } + if (num_ok) { + rollingData[i] = [ originalData[i][0], sum / num_ok ]; + } else { + rollingData[i] = [ originalData[i][0], null ]; + } + } + + return rollingData; +}; + +/** @inheritDoc */ +DefaultHandler.prototype.getExtremeYValues = function(series, dateWindow, + options) { + var minY = null, maxY = null, y; + var firstIdx = 0, lastIdx = series.length - 1; + + for ( var j = firstIdx; j <= lastIdx; j++) { + y = series[j][1]; + if (y === null || isNaN(y)) + continue; + if (maxY === null || y > maxY) { + maxY = y; + } + if (minY === null || y < minY) { + minY = y; + } + } + return [ minY, maxY ]; +}; + +})(); +/** + * @license + * Copyright 2013 David Eberlein (david.eberlein@ch.sauter-bc.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +/** + * @fileoverview DataHandler implementation for the fractions option. + * @author David Eberlein (david.eberlein@ch.sauter-bc.com) + */ + +(function() { + +/*global Dygraph:false */ +"use strict"; + +/** + * @extends Dygraph.DataHandlers.DefaultHandler + * @constructor + */ +Dygraph.DataHandlers.DefaultFractionHandler = function() { +}; + +var DefaultFractionHandler = Dygraph.DataHandlers.DefaultFractionHandler; +DefaultFractionHandler.prototype = new Dygraph.DataHandlers.DefaultHandler(); + +DefaultFractionHandler.prototype.extractSeries = function(rawData, i, options) { + // TODO(danvk): pre-allocate series here. + var series = []; + var x, y, point, num, den, value; + var mult = 100.0; + var logScale = options.get('logscale'); + for ( var j = 0; j < rawData.length; j++) { + x = rawData[j][0]; + point = rawData[j][i]; + if (logScale && point !== null) { + // On the log scale, points less than zero do not exist. + // This will create a gap in the chart. + if (point[0] <= 0 || point[1] <= 0) { + point = null; + } + } + // Extract to the unified data format. + if (point !== null) { + num = point[0]; + den = point[1]; + if (num !== null && !isNaN(num)) { + value = den ? num / den : 0.0; + y = mult * value; + // preserve original values in extras for further filtering + series.push([ x, y, [ num, den ] ]); + } else { + series.push([ x, num, [ num, den ] ]); + } + } else { + series.push([ x, null, [ null, null ] ]); + } + } + return series; +}; + +DefaultFractionHandler.prototype.rollingAverage = function(originalData, rollPeriod, + options) { + rollPeriod = Math.min(rollPeriod, originalData.length); + var rollingData = []; + + var i; + var num = 0; + var den = 0; // numerator/denominator + var mult = 100.0; + for (i = 0; i < originalData.length; i++) { + num += originalData[i][2][0]; + den += originalData[i][2][1]; + if (i - rollPeriod >= 0) { + num -= originalData[i - rollPeriod][2][0]; + den -= originalData[i - rollPeriod][2][1]; + } + + var date = originalData[i][0]; + var value = den ? num / den : 0.0; + rollingData[i] = [ date, mult * value ]; + } + + return rollingData; +}; + +})(); +/** + * @license + * Copyright 2013 David Eberlein (david.eberlein@ch.sauter-bc.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +/** + * @fileoverview DataHandler base implementation for the "bar" + * data formats. This implementation must be extended and the + * extractSeries and rollingAverage must be implemented. + * @author David Eberlein (david.eberlein@ch.sauter-bc.com) + */ + +(function() { + +/*global Dygraph:false */ +/*global DygraphLayout:false */ +"use strict"; + +/** + * @constructor + * @extends {Dygraph.DataHandler} + */ +Dygraph.DataHandlers.BarsHandler = function() { + Dygraph.DataHandler.call(this); +}; +Dygraph.DataHandlers.BarsHandler.prototype = new Dygraph.DataHandler(); + +// alias for the rest of the implementation +var BarsHandler = Dygraph.DataHandlers.BarsHandler; + +// TODO(danvk): figure out why the jsdoc has to be copy/pasted from superclass. +// (I get closure compiler errors if this isn't here.) +/** + * @override + * @param {!Array.} rawData The raw data passed into dygraphs where + * rawData[i] = [x,ySeries1,...,ySeriesN]. + * @param {!number} seriesIndex Index of the series to extract. All other + * series should be ignored. + * @param {!DygraphOptions} options Dygraph options. + * @return {Array.<[!number,?number,?]>} The series in the unified data format + * where series[i] = [x,y,{extras}]. + */ +BarsHandler.prototype.extractSeries = function(rawData, seriesIndex, options) { + // Not implemented here must be extended +}; + +/** + * @override + * @param {!Array.<[!number,?number,?]>} series The series in the unified + * data format where series[i] = [x,y,{extras}]. + * @param {!number} rollPeriod The number of points over which to average the data + * @param {!DygraphOptions} options The dygraph options. + * TODO(danvk): be more specific than "Array" here. + * @return {!Array.<[!number,?number,?]>} the rolled series. + */ +BarsHandler.prototype.rollingAverage = + function(series, rollPeriod, options) { + // Not implemented here, must be extended. +}; + +/** @inheritDoc */ +BarsHandler.prototype.onPointsCreated_ = function(series, points) { + for (var i = 0; i < series.length; ++i) { + var item = series[i]; + var point = points[i]; + point.y_top = NaN; + point.y_bottom = NaN; + point.yval_minus = Dygraph.DataHandler.parseFloat(item[2][0]); + point.yval_plus = Dygraph.DataHandler.parseFloat(item[2][1]); + } +}; + +/** @inheritDoc */ +BarsHandler.prototype.getExtremeYValues = function(series, dateWindow, options) { + var minY = null, maxY = null, y; + + var firstIdx = 0; + var lastIdx = series.length - 1; + + for ( var j = firstIdx; j <= lastIdx; j++) { + y = series[j][1]; + if (y === null || isNaN(y)) continue; + + var low = series[j][2][0]; + var high = series[j][2][1]; + + if (low > y) low = y; // this can happen with custom bars, + if (high < y) high = y; // e.g. in tests/custom-bars.html + + if (maxY === null || high > maxY) maxY = high; + if (minY === null || low < minY) minY = low; + } + + return [ minY, maxY ]; +}; + +/** @inheritDoc */ +BarsHandler.prototype.onLineEvaluated = function(points, axis, logscale) { + var point; + for (var j = 0; j < points.length; j++) { + // Copy over the error terms + point = points[j]; + point.y_top = DygraphLayout.calcYNormal_(axis, point.yval_minus, logscale); + point.y_bottom = DygraphLayout.calcYNormal_(axis, point.yval_plus, logscale); + } +}; + +})(); +/** + * @license + * Copyright 2013 David Eberlein (david.eberlein@ch.sauter-bc.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +/** + * @fileoverview DataHandler implementation for the custom bars option. + * @author David Eberlein (david.eberlein@ch.sauter-bc.com) + */ + +(function() { + +/*global Dygraph:false */ +"use strict"; + +/** + * @constructor + * @extends Dygraph.DataHandlers.BarsHandler + */ +Dygraph.DataHandlers.CustomBarsHandler = function() { +}; + +var CustomBarsHandler = Dygraph.DataHandlers.CustomBarsHandler; +CustomBarsHandler.prototype = new Dygraph.DataHandlers.BarsHandler(); + +/** @inheritDoc */ +CustomBarsHandler.prototype.extractSeries = function(rawData, i, options) { + // TODO(danvk): pre-allocate series here. + var series = []; + var x, y, point; + var logScale = options.get('logscale'); + for ( var j = 0; j < rawData.length; j++) { + x = rawData[j][0]; + point = rawData[j][i]; + if (logScale && point !== null) { + // On the log scale, points less than zero do not exist. + // This will create a gap in the chart. + if (point[0] <= 0 || point[1] <= 0 || point[2] <= 0) { + point = null; + } + } + // Extract to the unified data format. + if (point !== null) { + y = point[1]; + if (y !== null && !isNaN(y)) { + series.push([ x, y, [ point[0], point[2] ] ]); + } else { + series.push([ x, y, [ y, y ] ]); + } + } else { + series.push([ x, null, [ null, null ] ]); + } + } + return series; +}; + +/** @inheritDoc */ +CustomBarsHandler.prototype.rollingAverage = + function(originalData, rollPeriod, options) { + rollPeriod = Math.min(rollPeriod, originalData.length); + var rollingData = []; + var y, low, high, mid,count, i, extremes; + + low = 0; + mid = 0; + high = 0; + count = 0; + for (i = 0; i < originalData.length; i++) { + y = originalData[i][1]; + extremes = originalData[i][2]; + rollingData[i] = originalData[i]; + + if (y !== null && !isNaN(y)) { + low += extremes[0]; + mid += y; + high += extremes[1]; + count += 1; + } + if (i - rollPeriod >= 0) { + var prev = originalData[i - rollPeriod]; + if (prev[1] !== null && !isNaN(prev[1])) { + low -= prev[2][0]; + mid -= prev[1]; + high -= prev[2][1]; + count -= 1; + } + } + if (count) { + rollingData[i] = [ + originalData[i][0], + 1.0 * mid / count, + [ 1.0 * low / count, + 1.0 * high / count ] ]; + } else { + rollingData[i] = [ originalData[i][0], null, [ null, null ] ]; + } + } + + return rollingData; +}; + +})(); +/** + * @license + * Copyright 2013 David Eberlein (david.eberlein@ch.sauter-bc.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +/** + * @fileoverview DataHandler implementation for the error bars option. + * @author David Eberlein (david.eberlein@ch.sauter-bc.com) + */ + +(function() { + +/*global Dygraph:false */ +"use strict"; + +/** + * @constructor + * @extends Dygraph.DataHandlers.BarsHandler + */ +Dygraph.DataHandlers.ErrorBarsHandler = function() { +}; + +var ErrorBarsHandler = Dygraph.DataHandlers.ErrorBarsHandler; +ErrorBarsHandler.prototype = new Dygraph.DataHandlers.BarsHandler(); + +/** @inheritDoc */ +ErrorBarsHandler.prototype.extractSeries = function(rawData, i, options) { + // TODO(danvk): pre-allocate series here. + var series = []; + var x, y, variance, point; + var sigma = options.get("sigma"); + var logScale = options.get('logscale'); + for ( var j = 0; j < rawData.length; j++) { + x = rawData[j][0]; + point = rawData[j][i]; + if (logScale && point !== null) { + // On the log scale, points less than zero do not exist. + // This will create a gap in the chart. + if (point[0] <= 0 || point[0] - sigma * point[1] <= 0) { + point = null; + } + } + // Extract to the unified data format. + if (point !== null) { + y = point[0]; + if (y !== null && !isNaN(y)) { + variance = sigma * point[1]; + // preserve original error value in extras for further + // filtering + series.push([ x, y, [ y - variance, y + variance, point[1] ] ]); + } else { + series.push([ x, y, [ y, y, y ] ]); + } + } else { + series.push([ x, null, [ null, null, null ] ]); + } + } + return series; +}; + +/** @inheritDoc */ +ErrorBarsHandler.prototype.rollingAverage = + function(originalData, rollPeriod, options) { + rollPeriod = Math.min(rollPeriod, originalData.length); + var rollingData = []; + var sigma = options.get("sigma"); + + var i, j, y, v, sum, num_ok, stddev, variance, value; + + // Calculate the rolling average for the first rollPeriod - 1 points + // where there is not enough data to roll over the full number of points + for (i = 0; i < originalData.length; i++) { + sum = 0; + variance = 0; + num_ok = 0; + for (j = Math.max(0, i - rollPeriod + 1); j < i + 1; j++) { + y = originalData[j][1]; + if (y === null || isNaN(y)) + continue; + num_ok++; + sum += y; + variance += Math.pow(originalData[j][2][2], 2); + } + if (num_ok) { + stddev = Math.sqrt(variance) / num_ok; + value = sum / num_ok; + rollingData[i] = [ originalData[i][0], value, + [value - sigma * stddev, value + sigma * stddev] ]; + } else { + // This explicitly preserves NaNs to aid with "independent + // series". + // See testRollingAveragePreservesNaNs. + v = (rollPeriod == 1) ? originalData[i][1] : null; + rollingData[i] = [ originalData[i][0], v, [ v, v ] ]; + } + } + + return rollingData; +}; + +})(); +/** + * @license + * Copyright 2013 David Eberlein (david.eberlein@ch.sauter-bc.com) + * MIT-licensed (http://opensource.org/licenses/MIT) + */ + +/** + * @fileoverview DataHandler implementation for the combination + * of error bars and fractions options. + * @author David Eberlein (david.eberlein@ch.sauter-bc.com) + */ + +(function() { + +/*global Dygraph:false */ +"use strict"; + +/** + * @constructor + * @extends Dygraph.DataHandlers.BarsHandler + */ +Dygraph.DataHandlers.FractionsBarsHandler = function() { +}; + +var FractionsBarsHandler = Dygraph.DataHandlers.FractionsBarsHandler; +FractionsBarsHandler.prototype = new Dygraph.DataHandlers.BarsHandler(); + +/** @inheritDoc */ +FractionsBarsHandler.prototype.extractSeries = function(rawData, i, options) { + // TODO(danvk): pre-allocate series here. + var series = []; + var x, y, point, num, den, value, stddev, variance; + var mult = 100.0; + var sigma = options.get("sigma"); + var logScale = options.get('logscale'); + for ( var j = 0; j < rawData.length; j++) { + x = rawData[j][0]; + point = rawData[j][i]; + if (logScale && point !== null) { + // On the log scale, points less than zero do not exist. + // This will create a gap in the chart. + if (point[0] <= 0 || point[1] <= 0) { + point = null; + } + } + // Extract to the unified data format. + if (point !== null) { + num = point[0]; + den = point[1]; + if (num !== null && !isNaN(num)) { + value = den ? num / den : 0.0; + stddev = den ? sigma * Math.sqrt(value * (1 - value) / den) : 1.0; + variance = mult * stddev; + y = mult * value; + // preserve original values in extras for further filtering + series.push([ x, y, [ y - variance, y + variance, num, den ] ]); + } else { + series.push([ x, num, [ num, num, num, den ] ]); + } + } else { + series.push([ x, null, [ null, null, null, null ] ]); + } + } + return series; +}; + +/** @inheritDoc */ +FractionsBarsHandler.prototype.rollingAverage = + function(originalData, rollPeriod, options) { + rollPeriod = Math.min(rollPeriod, originalData.length); + var rollingData = []; + var sigma = options.get("sigma"); + var wilsonInterval = options.get("wilsonInterval"); + + var low, high, i, stddev; + var num = 0; + var den = 0; // numerator/denominator + var mult = 100.0; + for (i = 0; i < originalData.length; i++) { + num += originalData[i][2][2]; + den += originalData[i][2][3]; + if (i - rollPeriod >= 0) { + num -= originalData[i - rollPeriod][2][2]; + den -= originalData[i - rollPeriod][2][3]; + } + + var date = originalData[i][0]; + var value = den ? num / den : 0.0; + if (wilsonInterval) { + // For more details on this confidence interval, see: + // http://en.wikipedia.org/wiki/Binomial_confidence_interval + if (den) { + var p = value < 0 ? 0 : value, n = den; + var pm = sigma * Math.sqrt(p * (1 - p) / n + sigma * sigma / (4 * n * n)); + var denom = 1 + sigma * sigma / den; + low = (p + sigma * sigma / (2 * den) - pm) / denom; + high = (p + sigma * sigma / (2 * den) + pm) / denom; + rollingData[i] = [ date, p * mult, + [ low * mult, high * mult ] ]; + } else { + rollingData[i] = [ date, 0, [ 0, 0 ] ]; + } + } else { + stddev = den ? sigma * Math.sqrt(value * (1 - value) / den) : 1.0; + rollingData[i] = [ date, mult * value, + [ mult * (value - stddev), mult * (value + stddev) ] ]; + } + } + + return rollingData; +}; + +})(); diff --git a/js/ie-emulation-modes-warning.js b/js/ie-emulation-modes-warning.js new file mode 100644 index 0000000..896ed62 --- /dev/null +++ b/js/ie-emulation-modes-warning.js @@ -0,0 +1,51 @@ +// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT +// IT'S JUST JUNK FOR OUR DOCS! +// ++++++++++++++++++++++++++++++++++++++++++ +/*! + * Copyright 2014 Twitter, Inc. + * + * Licensed under the Creative Commons Attribution 3.0 Unported License. For + * details, see http://creativecommons.org/licenses/by/3.0/. + */ +// Intended to prevent false-positive bug reports about Bootstrap not working properly in old versions of IE due to folks testing using IE's unreliable emulation modes. +(function () { + 'use strict'; + + function emulatedIEMajorVersion() { + var groups = /MSIE ([0-9.]+)/.exec(window.navigator.userAgent) + if (groups === null) { + return null + } + var ieVersionNum = parseInt(groups[1], 10) + var ieMajorVersion = Math.floor(ieVersionNum) + return ieMajorVersion + } + + function actualNonEmulatedIEMajorVersion() { + // Detects the actual version of IE in use, even if it's in an older-IE emulation mode. + // IE JavaScript conditional compilation docs: http://msdn.microsoft.com/en-us/library/ie/121hztk3(v=vs.94).aspx + // @cc_on docs: http://msdn.microsoft.com/en-us/library/ie/8ka90k2e(v=vs.94).aspx + var jscriptVersion = new Function('/*@cc_on return @_jscript_version; @*/')() // jshint ignore:line + if (jscriptVersion === undefined) { + return 11 // IE11+ not in emulation mode + } + if (jscriptVersion < 9) { + return 8 // IE8 (or lower; haven't tested on IE<8) + } + return jscriptVersion // IE9 or IE10 in any mode, or IE11 in non-IE11 mode + } + + var ua = window.navigator.userAgent + if (ua.indexOf('Opera') > -1 || ua.indexOf('Presto') > -1) { + return // Opera, which might pretend to be IE + } + var emulated = emulatedIEMajorVersion() + if (emulated === null) { + return // Not IE + } + var nonEmulated = actualNonEmulatedIEMajorVersion() + + if (emulated !== nonEmulated) { + window.alert('WARNING: You appear to be using IE' + nonEmulated + ' in IE' + emulated + ' emulation mode.\nIE emulation modes can behave significantly differently from ACTUAL older versions of IE.\nPLEASE DON\'T FILE BOOTSTRAP BUGS based on testing in IE emulation modes!') + } +})(); diff --git a/js/ie10-viewport-bug-workaround.js b/js/ie10-viewport-bug-workaround.js new file mode 100644 index 0000000..7f53b61 --- /dev/null +++ b/js/ie10-viewport-bug-workaround.js @@ -0,0 +1,22 @@ +/*! + * IE10 viewport hack for Surface/desktop Windows 8 bug + * Copyright 2014 Twitter, Inc. + * Licensed under the Creative Commons Attribution 3.0 Unported License. For + * details, see http://creativecommons.org/licenses/by/3.0/. + */ + +// See the Getting Started docs for more information: +// http://getbootstrap.com/getting-started/#support-ie10-width + +(function () { + 'use strict'; + if (navigator.userAgent.match(/IEMobile\/10\.0/)) { + var msViewportStyle = document.createElement('style') + msViewportStyle.appendChild( + document.createTextNode( + '@-ms-viewport{width:auto!important}' + ) + ) + document.querySelector('head').appendChild(msViewportStyle) + } +})(); diff --git a/js/index_user_scripts.js b/js/index_user_scripts.js new file mode 100644 index 0000000..80d8207 --- /dev/null +++ b/js/index_user_scripts.js @@ -0,0 +1,95 @@ +(function() +{ + "use strict"; + /* + hook up event handlers + */ + function register_event_handlers() + { + + + /* button .uib_w_2 */ + $(document).on("click", ".uib_w_2", function(evt) + { + var x = $("#inp1").val().split(/[\s,;\t\r\n]+/); + wave.sigData = new Float64Array(x.length); + wave.sigLength = x.length; + var i; + for(i = 0;i < x.length;i++) { + wave.sigData[i] = parseFloat(x[i]); + } + alert(wave.sigData[2]); + displayPage(); + }); + + /* button .uib_w_4 */ + $(document).on("click", ".uib_w_4", function(evt) + { + var fileinput = document.getElementById('finp1'); + var finp1 = fileinput.files[0]; + var reader = new FileReader(); + + reader.onload = function(e) { + var x = reader.result.split(/[\s,;\t\r\n]+/); + wave.sigData = new Float64Array(x.length); + wave.sigLength = x.length; + var i; + for(i = 0;i < x.length;i++) { + wave.sigData[i] = parseFloat(x[i]); + } + alert(wave.sigData[0]); + displayPage(); + } + + reader.readAsText(finp1); + + }); + + } + document.addEventListener("app.Ready", register_event_handlers, false); +})(); + +$(document).ready(function(){ + $('#testsig1').change(function(){ + var value = $(this).val(); + var urlx = null; + if (value == "ECG") { + urlx = "https://raw.githubusercontent.com/rafat/rafat.github.io/master/sites/wavelib/data/ecg.txt"; + } else if (value == "Heavisine") { + urlx = "https://raw.githubusercontent.com/rafat/rafat.github.io/master/sites/wavelib/data/heavisine.txt"; + } else if (value == "Piecewise Regular 256") { + urlx = "https://raw.githubusercontent.com/rafat/rafat.github.io/master/sites/wavelib/data/pieceregular.txt"; + } else if (value == "Piecewise Regular 2048") { + urlx = "https://raw.githubusercontent.com/rafat/rafat.github.io/master/sites/wavelib/data/pieceregular2048.txt"; + } else if (value == "Piecewise Polynomial") { + urlx = "https://raw.githubusercontent.com/rafat/rafat.github.io/master/sites/wavelib/data/piecepoly.txt"; + } else if (value == "Noisy Bumps") { + urlx = "https://raw.githubusercontent.com/rafat/rafat.github.io/master/sites/wavelib/data/noisybumps.txt"; + } else if (value == "Noisy Heavisine") { + urlx = "https://raw.githubusercontent.com/rafat/rafat.github.io/master/sites/wavelib/data/noisyheavisine.txt"; + } else { + alert("Please Select A Signal To Proceed."); + } + + console.log(urlx); + $.ajax({ + type: "GET", + url: urlx, + success: function(data) { + var x = data.split(/[\s,;\t\r\n]+/); + wave.sigData = new Float64Array(x.length); + wave.sigLength = x.length; + var i; + for(i = 0;i < x.length;i++) { + wave.sigData[i] = parseFloat(x[i]); + } + console.log(wave.sigLength); + alert(wave.sigData[0]); + displayPage(); + }, + error: function() { + alert("Signal cannot be loaded. Please try again.") + } +}); + }); +}); \ No newline at end of file diff --git a/js/ngfile.js b/js/ngfile.js new file mode 100644 index 0000000..4985992 --- /dev/null +++ b/js/ngfile.js @@ -0,0 +1,430 @@ +var app = angular.module('ngmain', ['ngRoute']); + +app.config(function($routeProvider){ + $routeProvider + //the timeline display + .when('/', { + templateUrl: 'front.html', + controller: 'mainController' + }) + .when('/display', { + templateUrl: 'display.html', + controller: 'displayController' + }) + .when('/about', { + templateUrl: 'about.html', + controller: 'mainController' + }) + .when('/demos', { + templateUrl: 'demos.html', + controller: 'mainController' + }) + + +}); + +app.factory('wave', function () { + var wave = {}; + + return wave; +}); + +/* +app.directive("fileread", [function () { + return { + scope: { + fileread: "=" + }, + link: function (scope, element, attributes) { + element.bind("change", function (changeEvent) { + var reader = new FileReader(); + reader.onload = function (loadEvent) { + scope.$apply(function () { + scope.fileread = loadEvent.target.result; + }); + } + reader.readAsDataURL(changeEvent.target.files[0]); + }); + } + } +}]);*/ +app.controller('mainController', function ($scope, $http, wave) { + + + $scope.dataInput = function () { + var x = $scope.inp1.valueOf().split(/[\s,;\t\r\n]+/); + wave.sigData = new Float64Array(x.length); + wave.sigLength = x.length; + //console.log(wave.sigLength); + + var i; + for (i = 0; i < x.length; i++) { + wave.sigData[i] = parseFloat(x[i]); + } + //alert(wave.sigData[0]); + location.href = '#/display'; + } + + $scope.fileInput = function () { + var fileinput = document.getElementById('finp1'); + var finp1 = fileinput.files[0]; + var reader = new FileReader(); + var temp = 3.14159; + + + reader.onload = function (e) { + var x = reader.result.split(/[\s,;\t\r\n]+/); + wave.sigData = new Float64Array(x.length); + + var i; + var j = 0; + + for (i = 0; i < x.length; i++) { + temp = parseFloat(x[i]); + if (!isNaN(temp)) { + wave.sigData[j] = temp; + j = j + 1; + } + } + wave.sigLength = j; + location.href = '#/display'; + } + + reader.readAsText(finp1); + } + + $scope.testInput = function () { + var value = $scope.tvalue; + var urlx = null; + var data; + var temp = 3.14159; + + if (value == "ECG") { + urlx = "https://raw.githubusercontent.com/rafat/rafat.github.io/master/sites/wavelib/data/ecg.txt"; + } else if (value == "Heavisine") { + urlx = "https://raw.githubusercontent.com/rafat/rafat.github.io/master/sites/wavelib/data/heavisine.txt"; + } else if (value == "Piecewise Regular 256") { + urlx = "https://raw.githubusercontent.com/rafat/rafat.github.io/master/sites/wavelib/data/pieceregular.txt"; + } else if (value == "Piecewise Regular 2048") { + urlx = "https://raw.githubusercontent.com/rafat/rafat.github.io/master/sites/wavelib/data/pieceregular2048.txt"; + } else if (value == "Piecewise Polynomial") { + urlx = "https://raw.githubusercontent.com/rafat/rafat.github.io/master/sites/wavelib/data/piecepoly.txt"; + } else if (value == "Noisy Bumps") { + urlx = "https://raw.githubusercontent.com/rafat/rafat.github.io/master/sites/wavelib/data/noisybumps.txt"; + } else if (value == "Noisy Heavisine") { + urlx = "https://raw.githubusercontent.com/rafat/rafat.github.io/master/sites/wavelib/data/noisyheavisine.txt"; + } else { + alert("Please Select A Signal To Proceed."); + } + + + $http({ method: 'GET', url: urlx }). + then(function (response) { + $scope.status = response.status; + data = response.data; + + var x = data.split(/[\s,;\t\r\n]+/); + wave.sigData = new Float64Array(x.length); + + var i; + var j = 0; + + for (i = 0; i < x.length; i++) { + temp = parseFloat(x[i]); + if (!isNaN(temp)) { + wave.sigData[j] = temp; + j = j + 1; + } + } + + wave.sigLength = j; + + location.href = '#/display'; + }, function (response) { + $scope.data = response.data || "Request failed"; + $scope.status = response.status; + }); + } + +}); + +app.controller('siteController', function ($scope) { + +}); + +app.controller('frontController', function ($scope) { + +}); + +app.controller('displayController', function ($scope, $http, wave) { + //console.log(wave.sigLength); + var lbl = []; + $scope.MaxIter = 0; + $scope.selected = {}; + $scope.wdisplays = []; + for (i = 0; i < wave.sigLength; ++i) { + lbl[i] = [i, wave.sigData[i]]; + //console.log(lbl[i]); + } + + g = new Dygraph(document.getElementById("graph1"), + lbl, + { + legend: 'always', + color: '#3399ff', + animatedZooms: true, + title: 'Input' + } + ); + /* + $http.get('data/wavedb.json').success(function (data) { + $scope.wavedb = data; + });console + */ + $scope.wavedb = [ + { + "id": "0", + "family": "haar", + "wavelets": [ + { "wavelet": "haar", "filtlength": "2" } + ] + }, { + "id": "1", + "family": "daubechies", + "wavelets": [ + { "wavelet": "db1", "filtlength": "2" }, + { "wavelet": "db2", "filtlength": "4" }, + { "wavelet": "db3", "filtlength": "6" }, + { "wavelet": "db4", "filtlength": "8" }, + { "wavelet": "db5", "filtlength": "10" }, + { "wavelet": "db6", "filtlength": "12" }, + { "wavelet": "db7", "filtlength": "14" }, + { "wavelet": "db8", "filtlength": "16" }, + { "wavelet": "db9", "filtlength": "18" }, + { "wavelet": "db10", "filtlength": "20" }, + { "wavelet": "db11", "filtlength": "22" }, + { "wavelet": "db12", "filtlength": "24" }, + { "wavelet": "db13", "filtlength": "26" }, + { "wavelet": "db14", "filtlength": "28" }, + { "wavelet": "db15", "filtlength": "30" } + ] + }, { + "id": "2", + "family": "biorthogonal", + "wavelets": [ + { "wavelet": "bior1.1", "filtlength": "2" }, + { "wavelet": "bior1.3", "filtlength": "6" }, + { "wavelet": "bior1.5", "filtlength": "10" }, + { "wavelet": "bior2.2", "filtlength": "6" }, + { "wavelet": "bior2.4", "filtlength": "10" }, + { "wavelet": "bior2.6", "filtlength": "14" }, + { "wavelet": "bior2.8", "filtlength": "18" }, + { "wavelet": "bior3.1", "filtlength": "4" }, + { "wavelet": "bior3.3", "filtlength": "8" }, + { "wavelet": "bior3.5", "filtlength": "12" }, + { "wavelet": "bior3.7", "filtlength": "16" }, + { "wavelet": "bior3.9", "filtlength": "20" }, + { "wavelet": "bior4.4", "filtlength": "10" }, + { "wavelet": "bior5.5", "filtlength": "12" }, + { "wavelet": "bior6.8", "filtlength": "18" } + ] + }, { + "id": "3", + "family": "coiflets", + "wavelets": [ + { "wavelet": "coif1", "filtlength": "6" }, + { "wavelet": "coif2", "filtlength": "12" }, + { "wavelet": "coif3", "filtlength": "18" }, + { "wavelet": "coif4", "filtlength": "24" }, + { "wavelet": "coif5", "filtlength": "30" } + ] + }, { + "id": "4", + "family": "symmlets", + "wavelets": [ + { "wavelet": "sym2", "filtlength": "4" }, + { "wavelet": "sym3", "filtlength": "6" }, + { "wavelet": "sym4", "filtlength": "8" }, + { "wavelet": "sym5", "filtlength": "10" }, + { "wavelet": "sym6", "filtlength": "12" }, + { "wavelet": "sym7", "filtlength": "14" }, + { "wavelet": "sym8", "filtlength": "16" }, + { "wavelet": "sym9", "filtlength": "18" }, + { "wavelet": "sym10", "filtlength": "20" } + ] + } + + ]; + + $scope.methods = [ + { + "id": "0", + "method": "DWT (Symmetric)" + }, { + "id": "1", + "method": "DWT (Periodic)" + }, { + "id": "2", + "method": "SWT" + }, { + "id": "3", + "method": "MODWT" + } + ]; + + $scope.levels = []; + + + $scope.getMaxIter = function () { + var flength = $scope.selected.wavelet.filtlength; + var slength = wave.sigLength; + $scope.MaxIter = Math.floor(Math.log(slength / (flength - 1)) / Math.log(2.0)); + + $scope.levels = []; + for (var i = 0; i < $scope.MaxIter; i++) { + $scope.levels[i] = i + 1; + } + } + + $scope.waveTest = function () { + var method; + var ext = "NULL"; + if ($scope.selected.method.id == "0") { + method = "dwt"; + ext = "sym"; + } else if ($scope.selected.method.id == "1") { + method = "dwt"; + ext = "per"; + } else if ($scope.selected.method.id == "2") { + method = "swt"; + } else if ($scope.selected.method.id == "3") { + method = "modwt"; + } + + console.log(method); + + var N = wave.sigLength; + var flength = $scope.selected.wavelet.filtlength; + var J = $scope.selected.level; + + wave.length = new Int32Array(J + 2); + wave.lenlength = J + 2; + wave.J = J; + //wave.output = []; + //wave.filters = []; + wave.wname = $scope.selected.wavelet.wavelet; + + var outlength = Module.ccall('wtoutputlength', 'number', ['number', 'string', 'number', 'number', 'string'], [N, method, flength, J, ext]); + wave.outLength = outlength; + + //console.log(wave.sigData, N, wave.wname, method, J, ext, wave.output, wave.length, wave.lenlength, wave.filters, flength); + + //wave.filters = new Float64Array(4*filtlength); + + var wave_transform = Module.cwrap('wave_transform', 'null', ['number', 'number', 'string', 'string', 'number', 'string', 'number', 'number', 'number']); + //[wave.sigData, N, wave.wname, method, J, ext, wave.output, wave.length, wave.lenlength, wave.filters, flength]); + + //input signal on heap + var inpdata = wave.sigLength * wave.sigData.BYTES_PER_ELEMENT; + var inpPtr = Module._malloc(inpdata); + var inpHeap = new Uint8Array(Module.HEAPU8.buffer, inpPtr, inpdata); + inpHeap.set(new Uint8Array(wave.sigData.buffer)); + + //output on heap + var outdata = outlength * wave.sigData.BYTES_PER_ELEMENT; + var outPtr = Module._malloc(outdata); + var outHeap = new Uint8Array(Module.HEAPU8.buffer, outPtr, outdata); + //inpHeap.set(new Uint8Array(wave.sigData.buffer)); + + //filters + var filtdata = 4 * flength * wave.sigData.BYTES_PER_ELEMENT; + var filtPtr = Module._malloc(filtdata); + var filtHeap = new Uint8Array(Module.HEAPU8.buffer, filtPtr, filtdata); + //inpHeap.set(new Uint8Array(wave.sigData.buffer)); + + //length vector + var lendata = (J + 2) * wave.length.BYTES_PER_ELEMENT; + var lenPtr = Module._malloc(lendata); + var lenHeap = new Uint8Array(Module.HEAPU8.buffer, lenPtr, lendata); + lenHeap.set(new Uint8Array(wave.length.buffer)); + + wave_transform(inpHeap.byteOffset, N, wave.wname, method, J, ext, outHeap.byteOffset, lenHeap.byteOffset, filtHeap.byteOffset); + + wave.output = new Float64Array(outHeap.buffer, outHeap.byteOffset, outlength); + wave.filter = new Float64Array(filtHeap.buffer, filtHeap.byteOffset, 4 * length); + wave.length = new Int32Array(lenHeap.buffer, lenHeap.byteOffset, J + 2); + + console.log(wave.length); + + Module._free(inpHeap.byteOffset); + Module._free(outHeap.byteOffset); + Module._free(filtHeap.byteOffset); + Module._free(lenHeap.byteOffset); + + $scope.wdisplays = new Array(J + 3); + $scope.wdisplays[0] = "Input Signal"; + $scope.wdisplays[1] = "Full Decomposition"; + $scope.wdisplays[2] = "Approx at Level " + J; + + for (var i = 3; i < J + 3; i++) { + $scope.wdisplays[i] = "Details at Level " + (J + 3 - i); + } + + var lbl = []; + for (var i = 0; i < wave.outLength; ++i) { + lbl[i] = [i, wave.output[i]]; + } + + g = new Dygraph(document.getElementById("graph1"), + lbl, + { + legend: 'always', + color: '#3399ff', + animatedZooms: true, + title: 'Input' + } + ); + + } + + $scope.updateGraph = function () { + console.log($scope.selected.wdisplay); + var lbl = []; + if ($scope.selected.wdisplay == 0) { + for (var i = 0; i < wave.sigLength; ++i) { + lbl[i] = [i, wave.sigData[i]]; + } + } else if ($scope.selected.wdisplay == 1) { + for (var i = 0; i < wave.outLength; ++i) { + lbl[i] = [i, wave.output[i]]; + } + } else if ($scope.selected.wdisplay == 2) { + for (var i = 0; i < wave.length[0]; ++i) { + lbl[i] = [i, wave.output[i]]; + } + } else { + var k = parseInt($scope.selected.wdisplay) - 2; + var start_index = 0; + for (var i = 0; i < k; i++) { + start_index += wave.length[i]; + } + var end_index = start_index + wave.length[k]; + for (var i = 0; i < end_index - start_index; ++i) { + lbl[i] = [i, wave.output[start_index + i]]; + } + } + + g = new Dygraph(document.getElementById("graph1"), + lbl, + { + legend: 'always', + color: '#3399ff', + animatedZooms: true, + title: 'Input' + } + ); + } + + + +}); diff --git a/js/wavebak.js b/js/wavebak.js new file mode 100644 index 0000000..43fd048 --- /dev/null +++ b/js/wavebak.js @@ -0,0 +1,30708 @@ +// The Module object: Our interface to the outside world. We import +// and export values on it, and do the work to get that through +// closure compiler if necessary. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(Module) { ..generated code.. } +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to do an eval in order to handle the closure compiler +// case, where this code here is minified but Module was defined +// elsewhere (e.g. case 4 above). We also need to check if Module +// already exists (e.g. case 3 above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module; +if (!Module) Module = (typeof Module !== 'undefined' ? Module : null) || {}; + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {}; +for (var key in Module) { + if (Module.hasOwnProperty(key)) { + moduleOverrides[key] = Module[key]; + } +} + +// The environment setup code below is customized to use Module. +// *** Environment setup code *** +var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function'; +var ENVIRONMENT_IS_WEB = typeof window === 'object'; +var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + // Expose functionality in the same simple way that the shells work + // Note that we pollute the global namespace here, otherwise we break in node + if (!Module['print']) Module['print'] = function print(x) { + process['stdout'].write(x + '\n'); + }; + if (!Module['printErr']) Module['printErr'] = function printErr(x) { + process['stderr'].write(x + '\n'); + }; + + var nodeFS = require('fs'); + var nodePath = require('path'); + + Module['read'] = function read(filename, binary) { + filename = nodePath['normalize'](filename); + var ret = nodeFS['readFileSync'](filename); + // The path is absolute if the normalized version is the same as the resolved. + if (!ret && filename != nodePath['resolve'](filename)) { + filename = path.join(__dirname, '..', 'src', filename); + ret = nodeFS['readFileSync'](filename); + } + if (ret && !binary) ret = ret.toString(); + return ret; + }; + + Module['readBinary'] = function readBinary(filename) { return Module['read'](filename, true) }; + + Module['load'] = function load(f) { + globalEval(read(f)); + }; + + Module['thisProgram'] = process['argv'][1].replace(/\\/g, '/'); + Module['arguments'] = process['argv'].slice(2); + + if (typeof module !== 'undefined') { + module['exports'] = Module; + } + + process['on']('uncaughtException', function(ex) { + // suppress ExitStatus exceptions from showing an error + if (!(ex instanceof ExitStatus)) { + throw ex; + } + }); +} +else if (ENVIRONMENT_IS_SHELL) { + if (!Module['print']) Module['print'] = print; + if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not present in v8 or older sm + + if (typeof read != 'undefined') { + Module['read'] = read; + } else { + Module['read'] = function read() { throw 'no read() available (jsc?)' }; + } + + Module['readBinary'] = function readBinary(f) { + if (typeof readbuffer === 'function') { + return new Uint8Array(readbuffer(f)); + } + var data = read(f, 'binary'); + assert(typeof data === 'object'); + return data; + }; + + if (typeof scriptArgs != 'undefined') { + Module['arguments'] = scriptArgs; + } else if (typeof arguments != 'undefined') { + Module['arguments'] = arguments; + } + + this['Module'] = Module; + +} +else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + Module['read'] = function read(url) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.send(null); + return xhr.responseText; + }; + + if (typeof arguments != 'undefined') { + Module['arguments'] = arguments; + } + + if (typeof console !== 'undefined') { + if (!Module['print']) Module['print'] = function print(x) { + console.log(x); + }; + if (!Module['printErr']) Module['printErr'] = function printErr(x) { + console.log(x); + }; + } else { + // Probably a worker, and without console.log. We can do very little here... + var TRY_USE_DUMP = false; + if (!Module['print']) Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== "undefined") ? (function(x) { + dump(x); + }) : (function(x) { + // self.postMessage(x); // enable this if you want stdout to be sent as messages + })); + } + + if (ENVIRONMENT_IS_WEB) { + window['Module'] = Module; + } else { + Module['load'] = importScripts; + } +} +else { + // Unreachable because SHELL is dependant on the others + throw 'Unknown runtime environment. Where are we?'; +} + +function globalEval(x) { + eval.call(null, x); +} +if (!Module['load'] && Module['read']) { + Module['load'] = function load(f) { + globalEval(Module['read'](f)); + }; +} +if (!Module['print']) { + Module['print'] = function(){}; +} +if (!Module['printErr']) { + Module['printErr'] = Module['print']; +} +if (!Module['arguments']) { + Module['arguments'] = []; +} +if (!Module['thisProgram']) { + Module['thisProgram'] = './this.program'; +} + +// *** Environment setup code *** + +// Closure helpers +Module.print = Module['print']; +Module.printErr = Module['printErr']; + +// Callbacks +Module['preRun'] = []; +Module['postRun'] = []; + +// Merge back in the overrides +for (var key in moduleOverrides) { + if (moduleOverrides.hasOwnProperty(key)) { + Module[key] = moduleOverrides[key]; + } +} + + + +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +//======================================== +// Runtime code shared with compiler +//======================================== + +var Runtime = { + setTempRet0: function (value) { + tempRet0 = value; + }, + getTempRet0: function () { + return tempRet0; + }, + stackSave: function () { + return STACKTOP; + }, + stackRestore: function (stackTop) { + STACKTOP = stackTop; + }, + getNativeTypeSize: function (type) { + switch (type) { + case 'i1': case 'i8': return 1; + case 'i16': return 2; + case 'i32': return 4; + case 'i64': return 8; + case 'float': return 4; + case 'double': return 8; + default: { + if (type[type.length-1] === '*') { + return Runtime.QUANTUM_SIZE; // A pointer + } else if (type[0] === 'i') { + var bits = parseInt(type.substr(1)); + assert(bits % 8 === 0); + return bits/8; + } else { + return 0; + } + } + } + }, + getNativeFieldSize: function (type) { + return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE); + }, + STACK_ALIGN: 16, + getAlignSize: function (type, size, vararg) { + // we align i64s and doubles on 64-bit boundaries, unlike x86 + if (!vararg && (type == 'i64' || type == 'double')) return 8; + if (!type) return Math.min(size, 8); // align structures internally to 64 bits + return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE); + }, + dynCall: function (sig, ptr, args) { + if (args && args.length) { + assert(args.length == sig.length-1); + if (!args.splice) args = Array.prototype.slice.call(args); + args.splice(0, 0, ptr); + assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \'' + sig + '\''); + return Module['dynCall_' + sig].apply(null, args); + } else { + assert(sig.length == 1); + assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \'' + sig + '\''); + return Module['dynCall_' + sig].call(null, ptr); + } + }, + functionPointers: [], + addFunction: function (func) { + for (var i = 0; i < Runtime.functionPointers.length; i++) { + if (!Runtime.functionPointers[i]) { + Runtime.functionPointers[i] = func; + return 2*(1 + i); + } + } + throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.'; + }, + removeFunction: function (index) { + Runtime.functionPointers[(index-2)/2] = null; + }, + getAsmConst: function (code, numArgs) { + // code is a constant string on the heap, so we can cache these + if (!Runtime.asmConstCache) Runtime.asmConstCache = {}; + var func = Runtime.asmConstCache[code]; + if (func) return func; + var args = []; + for (var i = 0; i < numArgs; i++) { + args.push(String.fromCharCode(36) + i); // $0, $1 etc + } + var source = Pointer_stringify(code); + if (source[0] === '"') { + // tolerate EM_ASM("..code..") even though EM_ASM(..code..) is correct + if (source.indexOf('"', 1) === source.length-1) { + source = source.substr(1, source.length-2); + } else { + // something invalid happened, e.g. EM_ASM("..code($0)..", input) + abort('invalid EM_ASM input |' + source + '|. Please use EM_ASM(..code..) (no quotes) or EM_ASM({ ..code($0).. }, input) (to input values)'); + } + } + try { + // Module is the only 'upvar', which we provide directly. We also provide FS for legacy support. + var evalled = eval('(function(Module, FS) { return function(' + args.join(',') + '){ ' + source + ' } })')(Module, typeof FS !== 'undefined' ? FS : null); + } catch(e) { + Module.printErr('error in executing inline EM_ASM code: ' + e + ' on: \n\n' + source + '\n\nwith args |' + args + '| (make sure to use the right one out of EM_ASM, EM_ASM_ARGS, etc.)'); + throw e; + } + return Runtime.asmConstCache[code] = evalled; + }, + warnOnce: function (text) { + if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {}; + if (!Runtime.warnOnce.shown[text]) { + Runtime.warnOnce.shown[text] = 1; + Module.printErr(text); + } + }, + funcWrappers: {}, + getFuncWrapper: function (func, sig) { + assert(sig); + if (!Runtime.funcWrappers[sig]) { + Runtime.funcWrappers[sig] = {}; + } + var sigCache = Runtime.funcWrappers[sig]; + if (!sigCache[func]) { + sigCache[func] = function dynCall_wrapper() { + return Runtime.dynCall(sig, func, arguments); + }; + } + return sigCache[func]; + }, + UTF8Processor: function () { + var buffer = []; + var needed = 0; + this.processCChar = function (code) { + code = code & 0xFF; + + if (buffer.length == 0) { + if ((code & 0x80) == 0x00) { // 0xxxxxxx + return String.fromCharCode(code); + } + buffer.push(code); + if ((code & 0xE0) == 0xC0) { // 110xxxxx + needed = 1; + } else if ((code & 0xF0) == 0xE0) { // 1110xxxx + needed = 2; + } else { // 11110xxx + needed = 3; + } + return ''; + } + + if (needed) { + buffer.push(code); + needed--; + if (needed > 0) return ''; + } + + var c1 = buffer[0]; + var c2 = buffer[1]; + var c3 = buffer[2]; + var c4 = buffer[3]; + var ret; + if (buffer.length == 2) { + ret = String.fromCharCode(((c1 & 0x1F) << 6) | (c2 & 0x3F)); + } else if (buffer.length == 3) { + ret = String.fromCharCode(((c1 & 0x0F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F)); + } else { + // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + var codePoint = ((c1 & 0x07) << 18) | ((c2 & 0x3F) << 12) | + ((c3 & 0x3F) << 6) | (c4 & 0x3F); + ret = String.fromCharCode( + (((codePoint - 0x10000) / 0x400)|0) + 0xD800, + (codePoint - 0x10000) % 0x400 + 0xDC00); + } + buffer.length = 0; + return ret; + } + this.processJSString = function processJSString(string) { + /* TODO: use TextEncoder when present, + var encoder = new TextEncoder(); + encoder['encoding'] = "utf-8"; + var utf8Array = encoder['encode'](aMsg.data); + */ + string = unescape(encodeURIComponent(string)); + var ret = []; + for (var i = 0; i < string.length; i++) { + ret.push(string.charCodeAt(i)); + } + return ret; + } + }, + getCompilerSetting: function (name) { + throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work'; + }, + stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)|0;STACKTOP = (((STACKTOP)+15)&-16);(assert((((STACKTOP|0) < (STACK_MAX|0))|0))|0); return ret; }, + staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + (assert(!staticSealed),size))|0;STATICTOP = (((STATICTOP)+15)&-16); return ret; }, + dynamicAlloc: function (size) { var ret = DYNAMICTOP;DYNAMICTOP = (DYNAMICTOP + (assert(DYNAMICTOP > 0),size))|0;DYNAMICTOP = (((DYNAMICTOP)+15)&-16); if (DYNAMICTOP >= TOTAL_MEMORY) enlargeMemory();; return ret; }, + alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quantum ? quantum : 16))*(quantum ? quantum : 16); return ret; }, + makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0))); return ret; }, + GLOBAL_BASE: 8, + QUANTUM_SIZE: 4, + __dummy__: 0 +} + + +Module['Runtime'] = Runtime; + + + + + + + + + +//======================================== +// Runtime essentials +//======================================== + +var __THREW__ = 0; // Used in checking for thrown exceptions. + +var ABORT = false; // whether we are quitting the application. no code should run after this. set in exit() and abort() +var EXITSTATUS = 0; + +var undef = 0; +// tempInt is used for 32-bit signed values or smaller. tempBigInt is used +// for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt +var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD, tempDouble, tempFloat; +var tempI64, tempI64b; +var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9; + +function assert(condition, text) { + if (!condition) { + abort('Assertion failed: ' + text); + } +} + +var globalScope = this; + +// Returns the C function with a specified identifier (for C++, you need to do manual name mangling) +function getCFunc(ident) { + var func = Module['_' + ident]; // closure exported function + if (!func) { + try { + func = eval('_' + ident); // explicit lookup + } catch(e) {} + } + assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)'); + return func; +} + +var cwrap, ccall; +(function(){ + var stack = 0; + var JSfuncs = { + 'stackSave' : function() { + stack = Runtime.stackSave(); + }, + 'stackRestore' : function() { + Runtime.stackRestore(stack); + }, + // type conversion from js to c + 'arrayToC' : function(arr) { + var ret = Runtime.stackAlloc(arr.length); + writeArrayToMemory(arr, ret); + return ret; + }, + 'stringToC' : function(str) { + var ret = 0; + if (str !== null && str !== undefined && str !== 0) { // null string + // at most 4 bytes per UTF-8 code point, +1 for the trailing '\0' + ret = Runtime.stackAlloc((str.length << 2) + 1); + writeStringToMemory(str, ret); + } + return ret; + } + }; + // For fast lookup of conversion functions + var toC = {'string' : JSfuncs['stringToC'], 'array' : JSfuncs['arrayToC']}; + + // C calling interface. + ccall = function ccallFunc(ident, returnType, argTypes, args) { + var func = getCFunc(ident); + var cArgs = []; + assert(returnType !== 'array', 'Return type should not be "array".'); + if (args) { + for (var i = 0; i < args.length; i++) { + var converter = toC[argTypes[i]]; + if (converter) { + if (stack === 0) stack = Runtime.stackSave(); + cArgs[i] = converter(args[i]); + } else { + cArgs[i] = args[i]; + } + } + } + var ret = func.apply(null, cArgs); + if (returnType === 'string') ret = Pointer_stringify(ret); + if (stack !== 0) JSfuncs['stackRestore'](); + return ret; + } + + var sourceRegex = /^function\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/; + function parseJSFunc(jsfunc) { + // Match the body and the return value of a javascript function source + var parsed = jsfunc.toString().match(sourceRegex).slice(1); + return {arguments : parsed[0], body : parsed[1], returnValue: parsed[2]} + } + var JSsource = {}; + for (var fun in JSfuncs) { + if (JSfuncs.hasOwnProperty(fun)) { + // Elements of toCsource are arrays of three items: + // the code, and the return value + JSsource[fun] = parseJSFunc(JSfuncs[fun]); + } + } + + + cwrap = function cwrap(ident, returnType, argTypes) { + argTypes = argTypes || []; + var cfunc = getCFunc(ident); + // When the function takes numbers and returns a number, we can just return + // the original function + var numericArgs = argTypes.every(function(type){ return type === 'number'}); + var numericRet = (returnType !== 'string'); + if ( numericRet && numericArgs) { + return cfunc; + } + // Creation of the arguments list (["$1","$2",...,"$nargs"]) + var argNames = argTypes.map(function(x,i){return '$'+i}); + var funcstr = "(function(" + argNames.join(',') + ") {"; + var nargs = argTypes.length; + if (!numericArgs) { + // Generate the code needed to convert the arguments from javascript + // values to pointers + funcstr += JSsource['stackSave'].body + ';'; + for (var i = 0; i < nargs; i++) { + var arg = argNames[i], type = argTypes[i]; + if (type === 'number') continue; + var convertCode = JSsource[type + 'ToC']; // [code, return] + funcstr += 'var ' + convertCode.arguments + ' = ' + arg + ';'; + funcstr += convertCode.body + ';'; + funcstr += arg + '=' + convertCode.returnValue + ';'; + } + } + + // When the code is compressed, the name of cfunc is not literally 'cfunc' anymore + var cfuncname = parseJSFunc(function(){return cfunc}).returnValue; + // Call the function + funcstr += 'var ret = ' + cfuncname + '(' + argNames.join(',') + ');'; + if (!numericRet) { // Return type can only by 'string' or 'number' + // Convert the result to a string + var strgfy = parseJSFunc(function(){return Pointer_stringify}).returnValue; + funcstr += 'ret = ' + strgfy + '(ret);'; + } + if (!numericArgs) { + // If we had a stack, restore it + funcstr += JSsource['stackRestore'].body + ';'; + } + funcstr += 'return ret})'; + return eval(funcstr); + }; +})(); +Module["cwrap"] = cwrap; +Module["ccall"] = ccall; + + +function setValue(ptr, value, type, noSafe) { + type = type || 'i8'; + if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit + switch(type) { + case 'i1': HEAP8[((ptr)>>0)]=value; break; + case 'i8': HEAP8[((ptr)>>0)]=value; break; + case 'i16': HEAP16[((ptr)>>1)]=value; break; + case 'i32': HEAP32[((ptr)>>2)]=value; break; + case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break; + case 'float': HEAPF32[((ptr)>>2)]=value; break; + case 'double': HEAPF64[((ptr)>>3)]=value; break; + default: abort('invalid type for setValue: ' + type); + } +} +Module['setValue'] = setValue; + + +function getValue(ptr, type, noSafe) { + type = type || 'i8'; + if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit + switch(type) { + case 'i1': return HEAP8[((ptr)>>0)]; + case 'i8': return HEAP8[((ptr)>>0)]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP32[((ptr)>>2)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + default: abort('invalid type for setValue: ' + type); + } + return null; +} +Module['getValue'] = getValue; + +var ALLOC_NORMAL = 0; // Tries to use _malloc() +var ALLOC_STACK = 1; // Lives for the duration of the current function call +var ALLOC_STATIC = 2; // Cannot be freed +var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk +var ALLOC_NONE = 4; // Do not allocate +Module['ALLOC_NORMAL'] = ALLOC_NORMAL; +Module['ALLOC_STACK'] = ALLOC_STACK; +Module['ALLOC_STATIC'] = ALLOC_STATIC; +Module['ALLOC_DYNAMIC'] = ALLOC_DYNAMIC; +Module['ALLOC_NONE'] = ALLOC_NONE; + +// allocate(): This is for internal use. You can use it yourself as well, but the interface +// is a little tricky (see docs right below). The reason is that it is optimized +// for multiple syntaxes to save space in generated code. So you should +// normally not use allocate(), and instead allocate memory using _malloc(), +// initialize it with setValue(), and so forth. +// @slab: An array of data, or a number. If a number, then the size of the block to allocate, +// in *bytes* (note that this is sometimes confusing: the next parameter does not +// affect this!) +// @types: Either an array of types, one for each byte (or 0 if no type at that position), +// or a single type which is used for the entire block. This only matters if there +// is initial data - if @slab is a number, then this does not matter at all and is +// ignored. +// @allocator: How to allocate memory, see ALLOC_* +function allocate(slab, types, allocator, ptr) { + var zeroinit, size; + if (typeof slab === 'number') { + zeroinit = true; + size = slab; + } else { + zeroinit = false; + size = slab.length; + } + + var singleType = typeof types === 'string' ? types : null; + + var ret; + if (allocator == ALLOC_NONE) { + ret = ptr; + } else { + ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length)); + } + + if (zeroinit) { + var ptr = ret, stop; + assert((ret & 3) == 0); + stop = ret + (size & ~3); + for (; ptr < stop; ptr += 4) { + HEAP32[((ptr)>>2)]=0; + } + stop = ret + size; + while (ptr < stop) { + HEAP8[((ptr++)>>0)]=0; + } + return ret; + } + + if (singleType === 'i8') { + if (slab.subarray || slab.slice) { + HEAPU8.set(slab, ret); + } else { + HEAPU8.set(new Uint8Array(slab), ret); + } + return ret; + } + + var i = 0, type, typeSize, previousType; + while (i < size) { + var curr = slab[i]; + + if (typeof curr === 'function') { + curr = Runtime.getFunctionIndex(curr); + } + + type = singleType || types[i]; + if (type === 0) { + i++; + continue; + } + assert(type, 'Must know what type to store in allocate!'); + + if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later + + setValue(ret+i, curr, type); + + // no need to look up size unless type changes, so cache it + if (previousType !== type) { + typeSize = Runtime.getNativeTypeSize(type); + previousType = type; + } + i += typeSize; + } + + return ret; +} +Module['allocate'] = allocate; + +function Pointer_stringify(ptr, /* optional */ length) { + // TODO: use TextDecoder + // Find the length, and check for UTF while doing so + var hasUtf = false; + var t; + var i = 0; + while (1) { + assert(ptr + i < TOTAL_MEMORY); + t = HEAPU8[(((ptr)+(i))>>0)]; + if (t >= 128) hasUtf = true; + else if (t == 0 && !length) break; + i++; + if (length && i == length) break; + } + if (!length) length = i; + + var ret = ''; + + if (!hasUtf) { + var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack + var curr; + while (length > 0) { + curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK))); + ret = ret ? ret + curr : curr; + ptr += MAX_CHUNK; + length -= MAX_CHUNK; + } + return ret; + } + + var utf8 = new Runtime.UTF8Processor(); + for (i = 0; i < length; i++) { + assert(ptr + i < TOTAL_MEMORY); + t = HEAPU8[(((ptr)+(i))>>0)]; + ret += utf8.processCChar(t); + } + return ret; +} +Module['Pointer_stringify'] = Pointer_stringify; + +function UTF16ToString(ptr) { + var i = 0; + + var str = ''; + while (1) { + var codeUnit = HEAP16[(((ptr)+(i*2))>>1)]; + if (codeUnit == 0) + return str; + ++i; + // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through. + str += String.fromCharCode(codeUnit); + } +} +Module['UTF16ToString'] = UTF16ToString; + + +function stringToUTF16(str, outPtr) { + for(var i = 0; i < str.length; ++i) { + // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP. + var codeUnit = str.charCodeAt(i); // possibly a lead surrogate + HEAP16[(((outPtr)+(i*2))>>1)]=codeUnit; + } + // Null-terminate the pointer to the HEAP. + HEAP16[(((outPtr)+(str.length*2))>>1)]=0; +} +Module['stringToUTF16'] = stringToUTF16; + + +function UTF32ToString(ptr) { + var i = 0; + + var str = ''; + while (1) { + var utf32 = HEAP32[(((ptr)+(i*4))>>2)]; + if (utf32 == 0) + return str; + ++i; + // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing. + if (utf32 >= 0x10000) { + var ch = utf32 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } else { + str += String.fromCharCode(utf32); + } + } +} +Module['UTF32ToString'] = UTF32ToString; + + +function stringToUTF32(str, outPtr) { + var iChar = 0; + for(var iCodeUnit = 0; iCodeUnit < str.length; ++iCodeUnit) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. + var codeUnit = str.charCodeAt(iCodeUnit); // possibly a lead surrogate + if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) { + var trailSurrogate = str.charCodeAt(++iCodeUnit); + codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF); + } + HEAP32[(((outPtr)+(iChar*4))>>2)]=codeUnit; + ++iChar; + } + // Null-terminate the pointer to the HEAP. + HEAP32[(((outPtr)+(iChar*4))>>2)]=0; +} +Module['stringToUTF32'] = stringToUTF32; + +function demangle(func) { + var hasLibcxxabi = !!Module['___cxa_demangle']; + if (hasLibcxxabi) { + try { + var buf = _malloc(func.length); + writeStringToMemory(func.substr(1), buf); + var status = _malloc(4); + var ret = Module['___cxa_demangle'](buf, 0, 0, status); + if (getValue(status, 'i32') === 0 && ret) { + return Pointer_stringify(ret); + } + // otherwise, libcxxabi failed, we can try ours which may return a partial result + } catch(e) { + // failure when using libcxxabi, we can try ours which may return a partial result + } finally { + if (buf) _free(buf); + if (status) _free(status); + if (ret) _free(ret); + } + } + var i = 3; + // params, etc. + var basicTypes = { + 'v': 'void', + 'b': 'bool', + 'c': 'char', + 's': 'short', + 'i': 'int', + 'l': 'long', + 'f': 'float', + 'd': 'double', + 'w': 'wchar_t', + 'a': 'signed char', + 'h': 'unsigned char', + 't': 'unsigned short', + 'j': 'unsigned int', + 'm': 'unsigned long', + 'x': 'long long', + 'y': 'unsigned long long', + 'z': '...' + }; + var subs = []; + var first = true; + function dump(x) { + //return; + if (x) Module.print(x); + Module.print(func); + var pre = ''; + for (var a = 0; a < i; a++) pre += ' '; + Module.print (pre + '^'); + } + function parseNested() { + i++; + if (func[i] === 'K') i++; // ignore const + var parts = []; + while (func[i] !== 'E') { + if (func[i] === 'S') { // substitution + i++; + var next = func.indexOf('_', i); + var num = func.substring(i, next) || 0; + parts.push(subs[num] || '?'); + i = next+1; + continue; + } + if (func[i] === 'C') { // constructor + parts.push(parts[parts.length-1]); + i += 2; + continue; + } + var size = parseInt(func.substr(i)); + var pre = size.toString().length; + if (!size || !pre) { i--; break; } // counter i++ below us + var curr = func.substr(i + pre, size); + parts.push(curr); + subs.push(curr); + i += pre + size; + } + i++; // skip E + return parts; + } + function parse(rawList, limit, allowVoid) { // main parser + limit = limit || Infinity; + var ret = '', list = []; + function flushList() { + return '(' + list.join(', ') + ')'; + } + var name; + if (func[i] === 'N') { + // namespaced N-E + name = parseNested().join('::'); + limit--; + if (limit === 0) return rawList ? [name] : name; + } else { + // not namespaced + if (func[i] === 'K' || (first && func[i] === 'L')) i++; // ignore const and first 'L' + var size = parseInt(func.substr(i)); + if (size) { + var pre = size.toString().length; + name = func.substr(i + pre, size); + i += pre + size; + } + } + first = false; + if (func[i] === 'I') { + i++; + var iList = parse(true); + var iRet = parse(true, 1, true); + ret += iRet[0] + ' ' + name + '<' + iList.join(', ') + '>'; + } else { + ret = name; + } + paramLoop: while (i < func.length && limit-- > 0) { + //dump('paramLoop'); + var c = func[i++]; + if (c in basicTypes) { + list.push(basicTypes[c]); + } else { + switch (c) { + case 'P': list.push(parse(true, 1, true)[0] + '*'); break; // pointer + case 'R': list.push(parse(true, 1, true)[0] + '&'); break; // reference + case 'L': { // literal + i++; // skip basic type + var end = func.indexOf('E', i); + var size = end - i; + list.push(func.substr(i, size)); + i += size + 2; // size + 'EE' + break; + } + case 'A': { // array + var size = parseInt(func.substr(i)); + i += size.toString().length; + if (func[i] !== '_') throw '?'; + i++; // skip _ + list.push(parse(true, 1, true)[0] + ' [' + size + ']'); + break; + } + case 'E': break paramLoop; + default: ret += '?' + c; break paramLoop; + } + } + } + if (!allowVoid && list.length === 1 && list[0] === 'void') list = []; // avoid (void) + if (rawList) { + if (ret) { + list.push(ret + '?'); + } + return list; + } else { + return ret + flushList(); + } + } + var final = func; + try { + // Special-case the entry point, since its name differs from other name mangling. + if (func == 'Object._main' || func == '_main') { + return 'main()'; + } + if (typeof func === 'number') func = Pointer_stringify(func); + if (func[0] !== '_') return func; + if (func[1] !== '_') return func; // C function + if (func[2] !== 'Z') return func; + switch (func[3]) { + case 'n': return 'operator new()'; + case 'd': return 'operator delete()'; + } + final = parse(); + } catch(e) { + final += '?'; + } + if (final.indexOf('?') >= 0 && !hasLibcxxabi) { + Runtime.warnOnce('warning: a problem occurred in builtin C++ name demangling; build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling'); + } + return final; +} + +function demangleAll(text) { + return text.replace(/__Z[\w\d_]+/g, function(x) { var y = demangle(x); return x === y ? x : (x + ' [' + y + ']') }); +} + +function jsStackTrace() { + var err = new Error(); + if (!err.stack) { + // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown, + // so try that as a special-case. + try { + throw new Error(0); + } catch(e) { + err = e; + } + if (!err.stack) { + return '(no stack trace available)'; + } + } + return err.stack.toString(); +} + +function stackTrace() { + return demangleAll(jsStackTrace()); +} +Module['stackTrace'] = stackTrace; + +// Memory management + +var PAGE_SIZE = 4096; +function alignMemoryPage(x) { + return (x+4095)&-4096; +} + +var HEAP; +var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; + +var STATIC_BASE = 0, STATICTOP = 0, staticSealed = false; // static area +var STACK_BASE = 0, STACKTOP = 0, STACK_MAX = 0; // stack area +var DYNAMIC_BASE = 0, DYNAMICTOP = 0; // dynamic area handled by sbrk + +function enlargeMemory() { + abort('Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value ' + TOTAL_MEMORY + ', (2) compile with ALLOW_MEMORY_GROWTH which adjusts the size at runtime but prevents some optimizations, or (3) set Module.TOTAL_MEMORY before the program runs.'); +} + + +var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880; +var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 16777216; +var FAST_MEMORY = Module['FAST_MEMORY'] || 2097152; + +var totalMemory = 64*1024; +while (totalMemory < TOTAL_MEMORY || totalMemory < 2*TOTAL_STACK) { + if (totalMemory < 16*1024*1024) { + totalMemory *= 2; + } else { + totalMemory += 16*1024*1024 + } +} +if (totalMemory !== TOTAL_MEMORY) { + Module.printErr('increasing TOTAL_MEMORY to ' + totalMemory + ' to be more reasonable'); + TOTAL_MEMORY = totalMemory; +} + +// Initialize the runtime's memory +// check for full engine support (use string 'subarray' to avoid closure compiler confusion) +assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && !!(new Int32Array(1)['subarray']) && !!(new Int32Array(1)['set']), + 'JS engine does not provide full typed array support'); + +var buffer = new ArrayBuffer(TOTAL_MEMORY); +HEAP8 = new Int8Array(buffer); +HEAP16 = new Int16Array(buffer); +HEAP32 = new Int32Array(buffer); +HEAPU8 = new Uint8Array(buffer); +HEAPU16 = new Uint16Array(buffer); +HEAPU32 = new Uint32Array(buffer); +HEAPF32 = new Float32Array(buffer); +HEAPF64 = new Float64Array(buffer); + +// Endianness check (note: assumes compiler arch was little-endian) +HEAP32[0] = 255; +assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, 'Typed arrays 2 must be run on a little-endian system'); + +Module['HEAP'] = HEAP; +Module['HEAP8'] = HEAP8; +Module['HEAP16'] = HEAP16; +Module['HEAP32'] = HEAP32; +Module['HEAPU8'] = HEAPU8; +Module['HEAPU16'] = HEAPU16; +Module['HEAPU32'] = HEAPU32; +Module['HEAPF32'] = HEAPF32; +Module['HEAPF64'] = HEAPF64; + +function callRuntimeCallbacks(callbacks) { + while(callbacks.length > 0) { + var callback = callbacks.shift(); + if (typeof callback == 'function') { + callback(); + continue; + } + var func = callback.func; + if (typeof func === 'number') { + if (callback.arg === undefined) { + Runtime.dynCall('v', func); + } else { + Runtime.dynCall('vi', func, [callback.arg]); + } + } else { + func(callback.arg === undefined ? null : callback.arg); + } + } +} + +var __ATPRERUN__ = []; // functions called before the runtime is initialized +var __ATINIT__ = []; // functions called during startup +var __ATMAIN__ = []; // functions called when main() is to be run +var __ATEXIT__ = []; // functions called during shutdown +var __ATPOSTRUN__ = []; // functions called after the runtime has exited + +var runtimeInitialized = false; +var runtimeExited = false; + +function preRun() { + // compatibility - merge in anything from Module['preRun'] at this time + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + callRuntimeCallbacks(__ATPRERUN__); +} + +function ensureInitRuntime() { + if (runtimeInitialized) return; + runtimeInitialized = true; + callRuntimeCallbacks(__ATINIT__); +} + +function preMain() { + callRuntimeCallbacks(__ATMAIN__); +} + +function exitRuntime() { + if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + Module.printErr('Exiting runtime. Any attempt to access the compiled C code may fail from now. If you want to keep the runtime alive, set Module["noExitRuntime"] = true or build with -s NO_EXIT_RUNTIME=1'); + } + callRuntimeCallbacks(__ATEXIT__); + runtimeExited = true; +} + +function postRun() { + // compatibility - merge in anything from Module['postRun'] at this time + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + callRuntimeCallbacks(__ATPOSTRUN__); +} + +function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); +} +Module['addOnPreRun'] = Module.addOnPreRun = addOnPreRun; + +function addOnInit(cb) { + __ATINIT__.unshift(cb); +} +Module['addOnInit'] = Module.addOnInit = addOnInit; + +function addOnPreMain(cb) { + __ATMAIN__.unshift(cb); +} +Module['addOnPreMain'] = Module.addOnPreMain = addOnPreMain; + +function addOnExit(cb) { + __ATEXIT__.unshift(cb); +} +Module['addOnExit'] = Module.addOnExit = addOnExit; + +function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); +} +Module['addOnPostRun'] = Module.addOnPostRun = addOnPostRun; + +// Tools + + +function intArrayFromString(stringy, dontAddNull, length /* optional */) { + var ret = (new Runtime.UTF8Processor()).processJSString(stringy); + if (length) { + ret.length = length; + } + if (!dontAddNull) { + ret.push(0); + } + return ret; +} +Module['intArrayFromString'] = intArrayFromString; + +function intArrayToString(array) { + var ret = []; + for (var i = 0; i < array.length; i++) { + var chr = array[i]; + if (chr > 0xFF) { + assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.'); + chr &= 0xFF; + } + ret.push(String.fromCharCode(chr)); + } + return ret.join(''); +} +Module['intArrayToString'] = intArrayToString; + +function writeStringToMemory(string, buffer, dontAddNull) { + var array = intArrayFromString(string, dontAddNull); + var i = 0; + while (i < array.length) { + var chr = array[i]; + HEAP8[(((buffer)+(i))>>0)]=chr; + i = i + 1; + } +} +Module['writeStringToMemory'] = writeStringToMemory; + +function writeArrayToMemory(array, buffer) { + for (var i = 0; i < array.length; i++) { + HEAP8[(((buffer)+(i))>>0)]=array[i]; + } +} +Module['writeArrayToMemory'] = writeArrayToMemory; + +function writeAsciiToMemory(str, buffer, dontAddNull) { + for (var i = 0; i < str.length; i++) { + assert(str.charCodeAt(i) === str.charCodeAt(i)&0xff); + HEAP8[(((buffer)+(i))>>0)]=str.charCodeAt(i); + } + if (!dontAddNull) HEAP8[(((buffer)+(str.length))>>0)]=0; +} +Module['writeAsciiToMemory'] = writeAsciiToMemory; + +function unSign(value, bits, ignore) { + if (value >= 0) { + return value; + } + return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts + : Math.pow(2, bits) + value; +} +function reSign(value, bits, ignore) { + if (value <= 0) { + return value; + } + var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32 + : Math.pow(2, bits-1); + if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that + // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors + // TODO: In i64 mode 1, resign the two parts separately and safely + value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts + } + return value; +} + +// check for imul support, and also for correctness ( https://bugs.webkit.org/show_bug.cgi?id=126345 ) +if (!Math['imul'] || Math['imul'](0xffffffff, 5) !== -5) Math['imul'] = function imul(a, b) { + var ah = a >>> 16; + var al = a & 0xffff; + var bh = b >>> 16; + var bl = b & 0xffff; + return (al*bl + ((ah*bl + al*bh) << 16))|0; +}; +Math.imul = Math['imul']; + + +var Math_abs = Math.abs; +var Math_cos = Math.cos; +var Math_sin = Math.sin; +var Math_tan = Math.tan; +var Math_acos = Math.acos; +var Math_asin = Math.asin; +var Math_atan = Math.atan; +var Math_atan2 = Math.atan2; +var Math_exp = Math.exp; +var Math_log = Math.log; +var Math_sqrt = Math.sqrt; +var Math_ceil = Math.ceil; +var Math_floor = Math.floor; +var Math_pow = Math.pow; +var Math_imul = Math.imul; +var Math_fround = Math.fround; +var Math_min = Math.min; + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// PRE_RUN_ADDITIONS (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var runDependencyWatcher = null; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; + +function addRunDependency(id) { + runDependencies++; + if (Module['monitorRunDependencies']) { + Module['monitorRunDependencies'](runDependencies); + } + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval !== 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(function() { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + Module.printErr('still waiting on run dependencies:'); + } + Module.printErr('dependency: ' + dep); + } + if (shown) { + Module.printErr('(end of list)'); + } + }, 10000); + } + } else { + Module.printErr('warning: run dependency added without ID'); + } +} +Module['addRunDependency'] = addRunDependency; +function removeRunDependency(id) { + runDependencies--; + if (Module['monitorRunDependencies']) { + Module['monitorRunDependencies'](runDependencies); + } + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + Module.printErr('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} +Module['removeRunDependency'] = removeRunDependency; + +Module["preloadedImages"] = {}; // maps url to image data +Module["preloadedAudios"] = {}; // maps url to audio data + + +var memoryInitializer = null; + +// === Body === + + + + + +STATIC_BASE = 8; + +STATICTOP = STATIC_BASE + Runtime.alignMemory(18203); + /* global initializers */ __ATINIT__.push(); + + +/* memory initializer */ allocate([104,97,97,114,0,0,0,0,100,98,49,0,0,0,0,0,100,98,50,0,0,0,0,0,100,98,51,0,0,0,0,0,100,98,52,0,0,0,0,0,100,98,53,0,0,0,0,0,100,98,54,0,0,0,0,0,100,98,55,0,0,0,0,0,100,98,56,0,0,0,0,0,100,98,57,0,0,0,0,0,100,98,49,48,0,0,0,0,100,98,49,50,0,0,0,0,100,98,49,51,0,0,0,0,100,98,49,49,0,0,0,0,100,98,49,52,0,0,0,0,100,98,49,53,0,0,0,0,98,105,111,114,49,46,49,0,98,105,111,114,49,46,51,0,98,105,111,114,49,46,53,0,98,105,111,114,50,46,50,0,98,105,111,114,50,46,52,0,98,105,111,114,50,46,54,0,98,105,111,114,50,46,56,0,98,105,111,114,51,46,49,0,98,105,111,114,51,46,53,0,98,105,111,114,51,46,55,0,98,105,111,114,51,46,57,0,98,105,111,114,52,46,52,0,98,105,111,114,53,46,53,0,98,105,111,114,54,46,56,0,99,111,105,102,49,0,0,0,99,111,105,102,50,0,0,0,99,111,105,102,51,0,0,0,99,111,105,102,52,0,0,0,99,111,105,102,53,0,0,0,115,121,109,50,0,0,0,0,115,121,109,51,0,0,0,0,115,121,109,52,0,0,0,0,115,121,109,53,0,0,0,0,115,121,109,54,0,0,0,0,115,121,109,55,0,0,0,0,115,121,109,56,0,0,0,0,115,121,109,57,0,0,0,0,115,121,109,49,48,0,0,0,10,32,70,105,108,116,101,114,32,78,111,116,32,105,110,32,68,97,116,97,98,97,115,101,32,10,0,0,0,0,0,0,27,13,224,45,144,160,230,63,27,13,224,45,144,160,230,63,27,13,224,45,144,160,230,191,27,13,224,45,144,160,230,63,27,13,224,45,144,160,230,63,27,13,224,45,144,160,230,63,27,13,224,45,144,160,230,63,27,13,224,45,144,160,230,191,221,214,146,193,125,144,192,191,19,91,107,11,191,176,204,63,132,241,227,214,189,196,234,63,17,202,72,71,221,232,222,63,17,202,72,71,221,232,222,191,132,241,227,214,189,196,234,63,19,91,107,11,191,176,204,191,221,214,146,193,125,144,192,191,17,202,72,71,221,232,222,63,132,241,227,214,189,196,234,63,19,91,107,11,191,176,204,63,221,214,146,193,125,144,192,191,221,214,146,193,125,144,192,191,19,91,107,11,191,176,204,191,132,241,227,214,189,196,234,63,17,202,72,71,221,232,222,191,150,140,182,48,23,180,133,191,130,72,104,199,10,214,160,63,133,99,101,25,226,148,159,63,0,231,197,183,193,240,199,191,150,231,219,249,198,167,156,191,199,218,61,221,44,48,228,63,30,202,69,234,5,224,230,63,241,88,241,42,5,125,205,63,241,88,241,42,5,125,205,191,30,202,69,234,5,224,230,63,199,218,61,221,44,48,228,191,150,231,219,249,198,167,156,191,0,231,197,183,193,240,199,63,133,99,101,25,226,148,159,63,130,72,104,199,10,214,160,191,150,140,182,48,23,180,133,191,241,88,241,42,5,125,205,63,30,202,69,234,5,224,230,63,199,218,61,221,44,48,228,63,150,231,219,249,198,167,156,191,0,231,197,183,193,240,199,191,133,99,101,25,226,148,159,63,130,72,104,199,10,214,160,63,150,140,182,48,23,180,133,191,150,140,182,48,23,180,133,191,130,72,104,199,10,214,160,191,133,99,101,25,226,148,159,63,0,231,197,183,193,240,199,63,150,231,219,249,198,167,156,191,199,218,61,221,44,48,228,191,30,202,69,234,5,224,230,63,241,88,241,42,5,125,205,191,163,158,61,224,133,83,107,63,121,171,40,243,239,195,137,191,29,180,125,69,173,144,121,191,34,27,37,181,185,219,179,63,166,184,169,72,102,130,160,191,115,249,247,211,132,3,207,191,48,222,190,115,3,184,193,63,40,113,59,20,137,45,231,63,3,186,196,194,145,82,227,63,130,175,167,65,60,126,196,63,130,175,167,65,60,126,196,191,3,186,196,194,145,82,227,63,40,113,59,20,137,45,231,191,48,222,190,115,3,184,193,63,115,249,247,211,132,3,207,63,166,184,169,72,102,130,160,191,34,27,37,181,185,219,179,191,29,180,125,69,173,144,121,191,121,171,40,243,239,195,137,63,163,158,61,224,133,83,107,63,130,175,167,65,60,126,196,63,3,186,196,194,145,82,227,63,40,113,59,20,137,45,231,63,48,222,190,115,3,184,193,63,115,249,247,211,132,3,207,191,166,184,169,72,102,130,160,191,34,27,37,181,185,219,179,63,29,180,125,69,173,144,121,191,121,171,40,243,239,195,137,191,163,158,61,224,133,83,107,63,163,158,61,224,133,83,107,63,121,171,40,243,239,195,137,63,29,180,125,69,173,144,121,191,34,27,37,181,185,219,179,191,166,184,169,72,102,130,160,191,115,249,247,211,132,3,207,63,48,222,190,115,3,184,193,63,40,113,59,20,137,45,231,191,3,186,196,194,145,82,227,63,130,175,167,65,60,126,196,191,179,95,100,59,135,166,81,191,121,200,99,76,81,145,115,63,236,13,249,17,247,37,66,63,175,27,6,100,133,43,160,191,104,223,95,61,244,46,156,63,187,210,77,127,221,245,184,63,131,11,39,98,51,156,192,191,216,240,104,210,61,246,204,191,86,50,169,207,15,45,212,63,178,209,59,250,73,9,232,63,230,52,69,246,234,167,223,63,19,49,220,36,239,141,188,63,19,49,220,36,239,141,188,191,230,52,69,246,234,167,223,63,178,209,59,250,73,9,232,191,86,50,169,207,15,45,212,63,216,240,104,210,61,246,204,63,131,11,39,98,51,156,192,191,187,210,77,127,221,245,184,191,104,223,95,61,244,46,156,63,175,27,6,100,133,43,160,63,236,13,249,17,247,37,66,63,121,200,99,76,81,145,115,191,179,95,100,59,135,166,81,191,19,49,220,36,239,141,188,63,230,52,69,246,234,167,223,63,178,209,59,250,73,9,232,63,86,50,169,207,15,45,212,63,216,240,104,210,61,246,204,191,131,11,39,98,51,156,192,191,187,210,77,127,221,245,184,63,104,223,95,61,244,46,156,63,175,27,6,100,133,43,160,191,236,13,249,17,247,37,66,63,121,200,99,76,81,145,115,63,179,95,100,59,135,166,81,191,179,95,100,59,135,166,81,191,121,200,99,76,81,145,115,191,236,13,249,17,247,37,66,63,175,27,6,100,133,43,160,63,104,223,95,61,244,46,156,63,187,210,77,127,221,245,184,191,131,11,39,98,51,156,192,191,216,240,104,210,61,246,204,63,86,50,169,207,15,45,212,63,178,209,59,250,73,9,232,191,230,52,69,246,234,167,223,63,19,49,220,36,239,141,188,191,196,135,1,52,85,46,55,63,169,212,199,249,160,132,93,191,214,232,90,88,31,39,60,63,168,75,164,130,86,180,137,63,174,111,1,169,234,248,144,191,46,81,207,238,168,120,163,191,125,245,242,39,7,163,180,63,249,191,167,44,82,65,178,63,130,212,213,187,55,173,204,191,97,106,73,14,131,107,194,191,129,89,41,186,233,16,222,63,64,205,148,210,12,85,231,63,89,75,48,116,230,96,217,63,169,197,56,186,28,238,179,63,169,197,56,186,28,238,179,191,89,75,48,116,230,96,217,63,64,205,148,210,12,85,231,191,129,89,41,186,233,16,222,63,97,106,73,14,131,107,194,63,130,212,213,187,55,173,204,191,249,191,167,44,82,65,178,191,125,245,242,39,7,163,180,63,46,81,207,238,168,120,163,63,174,111,1,169,234,248,144,191,168,75,164,130,86,180,137,191,213,232,90,88,31,39,60,63,169,212,199,249,160,132,93,63,196,135,1,52,85,46,55,63,169,197,56,186,28,238,179,63,89,75,48,116,230,96,217,63,64,205,148,210,12,85,231,63,129,89,41,186,233,16,222,63,97,106,73,14,131,107,194,191,130,212,213,187,55,173,204,191,249,191,167,44,82,65,178,63,125,245,242,39,7,163,180,63,46,81,207,238,168,120,163,191,174,111,1,169,234,248,144,191,168,75,164,130,86,180,137,63,214,232,90,88,31,39,60,63,169,212,199,249,160,132,93,191,196,135,1,52,85,46,55,63,196,135,1,52,85,46,55,63,169,212,199,249,160,132,93,63,214,232,90,88,31,39,60,63,166,75,164,130,86,180,137,191,174,111,1,169,234,248,144,191,46,81,207,238,168,120,163,63,125,245,242,39,7,163,180,63,249,191,167,44,82,65,178,191,130,212,213,187,55,173,204,191,97,106,73,14,131,107,194,63,129,89,41,186,233,16,222,63,64,205,148,210,12,85,231,191,89,75,48,116,230,96,217,63,169,197,56,186,28,238,179,191,28,87,4,200,187,203,30,191,201,85,239,141,20,34,70,63,150,170,45,23,80,172,57,191,151,5,51,109,239,242,115,191,130,135,50,223,120,233,129,63,202,39,88,205,21,162,140,63,220,23,139,81,188,146,166,191,48,66,8,15,66,201,145,191,224,144,99,177,203,122,192,63,58,57,14,203,249,246,62,63,113,19,37,135,79,45,210,191,100,39,153,69,129,53,144,191,118,117,219,190,57,187,226,63,209,80,146,89,196,158,229,63,204,206,180,144,22,6,212,63,65,252,162,173,100,220,171,63,65,252,162,173,100,220,171,191,204,206,180,144,22,6,212,63,209,80,146,89,196,158,229,191,118,117,219,190,57,187,226,63,100,39,153,69,129,53,144,63,113,19,37,135,79,45,210,191,58,57,14,203,249,246,62,191,224,144,99,177,203,122,192,63,48,66,8,15,66,201,145,63,220,23,139,81,188,146,166,191,202,39,88,205,21,162,140,191,130,135,50,223,120,233,129,63,151,5,51,109,239,242,115,63,150,170,45,23,80,172,57,191,201,85,239,141,20,34,70,191,28,87,4,200,187,203,30,191,65,252,162,173,100,220,171,63,204,206,180,144,22,6,212,63,209,80,146,89,196,158,229,63,118,117,219,190,57,187,226,63,100,39,153,69,129,53,144,191,113,19,37,135,79,45,210,191,58,57,14,203,249,246,62,63,224,144,99,177,203,122,192,63,48,66,8,15,66,201,145,191,220,23,139,81,188,146,166,191,202,39,88,205,21,162,140,63,130,135,50,223,120,233,129,63,151,5,51,109,239,242,115,191,150,170,45,23,80,172,57,191,201,85,239,141,20,34,70,63,28,87,4,200,187,203,30,191,28,87,4,200,187,203,30,191,201,85,239,141,20,34,70,191,150,170,45,23,80,172,57,191,151,5,51,109,239,242,115,63,130,135,50,223,120,233,129,63,202,39,88,205,21,162,140,191,220,23,139,81,188,146,166,191,48,66,8,15,66,201,145,63,224,144,99,177,203,122,192,63,58,57,14,203,249,246,62,191,113,19,37,135,79,45,210,191,100,39,153,69,129,53,144,63,118,117,219,190,57,187,226,63,209,80,146,89,196,158,229,191,204,206,180,144,22,6,212,63,65,252,162,173,100,220,171,191,76,208,217,158,27,161,4,63,124,52,19,168,61,131,48,191,172,38,198,164,118,50,46,63,245,191,245,187,151,69,94,63,132,235,169,100,123,137,113,191,183,193,122,159,163,88,115,191,12,208,4,190,249,229,150,63,82,246,227,166,49,114,48,63,75,85,242,148,98,80,177,191,218,7,99,148,141,118,159,63,126,16,66,30,98,3,195,63,157,74,218,188,142,202,184,191,87,132,251,102,255,196,210,191,96,96,2,168,156,12,193,63,89,250,230,1,129,8,229,63,111,205,1,6,182,90,227,63,228,139,153,128,249,53,207,63,49,74,63,229,243,126,163,63,49,74,63,229,243,126,163,191,228,139,153,128,249,53,207,63,111,205,1,6,182,90,227,191,89,250,230,1,129,8,229,63,96,96,2,168,156,12,193,191,87,132,251,102,255,196,210,191,157,74,218,188,142,202,184,63,126,16,66,30,98,3,195,63,218,7,99,148,141,118,159,191,75,85,242,148,98,80,177,191,82,246,227,166,49,114,48,191,12,208,4,190,249,229,150,63,183,193,122,159,163,88,115,63,132,235,169,100,123,137,113,191,245,191,245,187,151,69,94,191,172,38,198,164,118,50,46,63,124,52,19,168,61,131,48,63,76,208,217,158,27,161,4,63,49,74,63,229,243,126,163,63,228,139,153,128,249,53,207,63,111,205,1,6,182,90,227,63,89,250,230,1,129,8,229,63,96,96,2,168,156,12,193,63,87,132,251,102,255,196,210,191,157,74,218,188,142,202,184,191,126,16,66,30,98,3,195,63,218,7,99,148,141,118,159,63,75,85,242,148,98,80,177,191,82,246,227,166,49,114,48,63,12,208,4,190,249,229,150,63,183,193,122,159,163,88,115,191,132,235,169,100,123,137,113,191,245,191,245,187,151,69,94,63,172,38,198,164,118,50,46,63,124,52,19,168,61,131,48,191,76,208,217,158,27,161,4,63,76,208,217,158,27,161,4,63,124,52,19,168,61,131,48,63,172,38,198,164,118,50,46,63,245,191,245,187,151,69,94,191,132,235,169,100,123,137,113,191,183,193,122,159,163,88,115,63,12,208,4,190,249,229,150,63,82,246,227,166,49,114,48,191,75,85,242,148,98,80,177,191,218,7,99,148,141,118,159,191,126,16,66,30,98,3,195,63,157,74,218,188,142,202,184,63,87,132,251,102,255,196,210,191,96,96,2,168,156,12,193,191,89,250,230,1,129,8,229,63,111,205,1,6,182,90,227,191,228,139,153,128,249,53,207,63,49,74,63,229,243,126,163,191,68,139,229,45,42,209,235,190,140,192,147,27,161,136,24,63,205,110,68,85,245,135,30,191,47,165,146,9,98,121,70,191,151,183,162,114,96,82,96,63,60,21,170,135,135,220,86,63,139,248,115,109,70,251,133,191,85,57,227,179,125,139,109,63,175,169,202,105,64,1,161,63,204,121,21,213,29,42,158,191,207,3,52,7,227,70,178,191,124,19,160,129,155,210,183,63,100,167,160,119,163,77,192,63,45,58,28,124,196,20,201,191,137,157,192,182,247,250,207,191,199,234,35,73,186,254,209,63,223,179,98,64,219,7,230,63,26,220,27,7,213,222,224,63,30,131,25,105,45,22,200,63,234,55,222,73,101,79,155,63,234,55,222,73,101,79,155,191,30,131,25,105,45,22,200,63,26,220,27,7,213,222,224,191,223,179,98,64,219,7,230,63,199,234,35,73,186,254,209,191,137,157,192,182,247,250,207,191,45,58,28,124,196,20,201,63,100,167,160,119,163,77,192,63,124,19,160,129,155,210,183,191,207,3,52,7,227,70,178,191,204,121,21,213,29,42,158,63,175,169,202,105,64,1,161,63,85,57,227,179,125,139,109,191,139,248,115,109,70,251,133,191,60,21,170,135,135,220,86,191,151,183,162,114,96,82,96,63,47,165,146,9,98,121,70,63,205,110,68,85,245,135,30,191,140,192,147,27,161,136,24,191,68,139,229,45,42,209,235,190,234,55,222,73,101,79,155,63,30,131,25,105,45,22,200,63,26,220,27,7,213,222,224,63,223,179,98,64,219,7,230,63,199,234,35,73,186,254,209,63,137,157,192,182,247,250,207,191,45,58,28,124,196,20,201,191,100,167,160,119,163,77,192,63,124,19,160,129,155,210,183,63,207,3,52,7,227,70,178,191,204,121,21,213,29,42,158,191,175,169,202,105,64,1,161,63,85,57,227,179,125,139,109,63,139,248,115,109,70,251,133,191,60,21,170,135,135,220,86,63,151,183,162,114,96,82,96,63,47,165,146,9,98,121,70,191,205,110,68,85,245,135,30,191,140,192,147,27,161,136,24,63,68,139,229,45,42,209,235,190,68,139,229,45,42,209,235,190,140,192,147,27,161,136,24,191,205,110,68,85,245,135,30,191,47,165,146,9,98,121,70,63,151,183,162,114,96,82,96,63,60,21,170,135,135,220,86,191,139,248,115,109,70,251,133,191,85,57,227,179,125,139,109,191,175,169,202,105,64,1,161,63,204,121,21,213,29,42,158,63,207,3,52,7,227,70,178,191,124,19,160,129,155,210,183,191,100,167,160,119,163,77,192,63,45,58,28,124,196,20,201,63,137,157,192,182,247,250,207,191,199,234,35,73,186,254,209,191,223,179,98,64,219,7,230,63,26,220,27,7,213,222,224,191,30,131,25,105,45,22,200,63,234,55,222,73,101,79,155,191,155,194,125,45,80,167,185,190,203,65,12,241,146,203,234,62,31,63,246,86,74,107,249,190,148,180,184,4,105,51,23,191,164,11,190,49,132,120,57,63,15,4,204,36,199,115,219,62,193,192,110,24,192,218,97,191,108,209,248,209,171,107,98,63,22,165,255,75,132,125,123,63,131,40,62,98,74,76,138,191,107,52,63,81,23,6,137,191,125,80,57,190,141,69,165,63,167,82,28,157,17,56,134,63,152,48,25,130,198,175,184,191,228,89,141,135,234,243,117,63,170,221,86,126,117,91,199,63,57,174,243,240,150,89,152,191,175,90,164,141,68,60,212,191,12,135,217,193,74,235,166,191,241,120,41,92,36,130,224,63,219,110,142,157,197,7,229,63,35,64,46,39,150,38,216,63,205,247,130,6,137,12,188,63,182,249,210,120,153,218,138,63,182,249,210,120,153,218,138,191,205,247,130,6,137,12,188,63,35,64,46,39,150,38,216,191,219,110,142,157,197,7,229,63,241,120,41,92,36,130,224,191,12,135,217,193,74,235,166,191,175,90,164,141,68,60,212,63,57,174,243,240,150,89,152,191,170,221,86,126,117,91,199,191,228,89,141,135,234,243,117,63,152,48,25,130,198,175,184,63,167,82,28,157,17,56,134,63,125,80,57,190,141,69,165,191,107,52,63,81,23,6,137,191,131,40,62,98,74,76,138,63,22,165,255,75,132,125,123,63,108,209,248,209,171,107,98,191,193,192,110,24,192,218,97,191,15,4,204,36,199,115,219,190,164,11,190,49,132,120,57,63,148,180,184,4,105,51,23,63,31,63,246,86,74,107,249,190,203,65,12,241,146,203,234,190,155,194,125,45,80,167,185,190,182,249,210,120,153,218,138,63,205,247,130,6,137,12,188,63,35,64,46,39,150,38,216,63,219,110,142,157,197,7,229,63,241,120,41,92,36,130,224,63,12,135,217,193,74,235,166,191,175,90,164,141,68,60,212,191,57,174,243,240,150,89,152,191,170,221,86,126,117,91,199,63,228,89,141,135,234,243,117,63,152,48,25,130,198,175,184,191,167,82,28,157,17,56,134,63,125,80,57,190,141,69,165,63,107,52,63,81,23,6,137,191,131,40,62,98,74,76,138,191,22,165,255,75,132,125,123,63,108,209,248,209,171,107,98,63,193,192,110,24,192,218,97,191,15,4,204,36,199,115,219,62,164,11,190,49,132,120,57,63,148,180,184,4,105,51,23,191,31,63,246,86,74,107,249,190,203,65,12,241,146,203,234,62,155,194,125,45,80,167,185,190,155,194,125,45,80,167,185,190,203,65,12,241,146,203,234,190,31,63,246,86,74,107,249,190,148,180,184,4,105,51,23,63,164,11,190,49,132,120,57,63,15,4,204,36,199,115,219,190,193,192,110,24,192,218,97,191,108,209,248,209,171,107,98,191,22,165,255,75,132,125,123,63,131,40,62,98,74,76,138,63,107,52,63,81,23,6,137,191,125,80,57,190,141,69,165,191,167,82,28,157,17,56,134,63,152,48,25,130,198,175,184,63,228,89,141,135,234,243,117,63,170,221,86,126,117,91,199,191,57,174,243,240,150,89,152,191,175,90,164,141,68,60,212,63,12,135,217,193,74,235,166,191,241,120,41,92,36,130,224,191,219,110,142,157,197,7,229,63,35,64,46,39,150,38,216,191,205,247,130,6,137,12,188,63,182,249,210,120,153,218,138,191,99,163,141,219,249,131,161,62,237,189,195,164,8,183,211,190,193,215,140,2,248,229,229,62,43,66,85,134,154,21,0,63,172,100,0,54,207,164,37,191,155,21,127,132,109,210,9,63,39,76,226,30,235,140,78,63,143,44,31,27,86,142,85,191,200,125,172,205,37,160,102,191,45,36,23,115,9,184,125,63,104,155,26,3,141,18,112,63,118,181,69,146,67,103,152,191,117,171,227,223,41,127,99,63,70,9,82,68,80,190,172,63,60,153,35,222,198,31,155,191,232,232,200,67,53,22,187,191,205,127,85,4,200,172,178,63,48,28,200,121,18,249,198,63,247,212,106,184,66,228,191,191,93,197,111,32,132,40,212,191,20,15,41,81,178,68,182,63,51,164,190,240,46,216,226,63,128,52,24,0,197,141,227,63,175,175,9,108,191,247,211,63,16,61,138,252,100,54,181,63,8,126,211,116,145,216,130,63,8,126,211,116,145,216,130,191,16,61,138,252,100,54,181,63,175,175,9,108,191,247,211,191,128,52,24,0,197,141,227,63,51,164,190,240,46,216,226,191,20,15,41,81,178,68,182,63,93,197,111,32,132,40,212,63,247,212,106,184,66,228,191,191,48,28,200,121,18,249,198,191,205,127,85,4,200,172,178,63,232,232,200,67,53,22,187,63,60,153,35,222,198,31,155,191,70,9,82,68,80,190,172,191,117,171,227,223,41,127,99,63,118,181,69,146,67,103,152,63,104,155,26,3,141,18,112,63,45,36,23,115,9,184,125,191,200,125,172,205,37,160,102,191,143,44,31,27,86,142,85,63,39,76,226,30,235,140,78,63,155,21,127,132,109,210,9,191,172,100,0,54,207,164,37,191,43,66,85,134,154,21,0,191,193,215,140,2,248,229,229,62,237,189,195,164,8,183,211,62,99,163,141,219,249,131,161,62,8,126,211,116,145,216,130,63,16,61,138,252,100,54,181,63,175,175,9,108,191,247,211,63,128,52,24,0,197,141,227,63,51,164,190,240,46,216,226,63,20,15,41,81,178,68,182,63,93,197,111,32,132,40,212,191,247,212,106,184,66,228,191,191,48,28,200,121,18,249,198,63,205,127,85,4,200,172,178,63,232,232,200,67,53,22,187,191,60,153,35,222,198,31,155,191,70,9,82,68,80,190,172,63,117,171,227,223,41,127,99,63,118,181,69,146,67,103,152,191,104,155,26,3,141,18,112,63,45,36,23,115,9,184,125,63,200,125,172,205,37,160,102,191,143,44,31,27,86,142,85,191,39,76,226,30,235,140,78,63,155,21,127,132,109,210,9,63,172,100,0,54,207,164,37,191,43,66,85,134,154,21,0,63,193,215,140,2,248,229,229,62,237,189,195,164,8,183,211,190,99,163,141,219,249,131,161,62,99,163,141,219,249,131,161,62,237,189,195,164,8,183,211,62,193,215,140,2,248,229,229,62,43,66,85,134,154,21,0,191,172,100,0,54,207,164,37,191,155,21,127,132,109,210,9,191,39,76,226,30,235,140,78,63,143,44,31,27,86,142,85,63,200,125,172,205,37,160,102,191,45,36,23,115,9,184,125,191,104,155,26,3,141,18,112,63,118,181,69,146,67,103,152,63,117,171,227,223,41,127,99,63,70,9,82,68,80,190,172,191,60,153,35,222,198,31,155,191,232,232,200,67,53,22,187,63,205,127,85,4,200,172,178,63,48,28,200,121,18,249,198,191,247,212,106,184,66,228,191,191,93,197,111,32,132,40,212,63,20,15,41,81,178,68,182,63,51,164,190,240,46,216,226,191,128,52,24,0,197,141,227,63,175,175,9,108,191,247,211,191,16,61,138,252,100,54,181,63,8,126,211,116,145,216,130,191,189,12,225,180,176,217,210,62,218,61,187,254,160,40,2,191,3,59,25,93,176,138,12,63,248,109,188,240,21,84,48,63,56,173,253,211,56,67,77,191,91,18,132,60,84,57,52,191,124,248,117,10,210,47,116,63,13,107,52,243,73,94,107,191,88,131,104,90,151,119,143,191,190,138,149,106,81,87,149,63,43,128,106,39,39,11,160,63,21,254,190,219,33,2,177,191,128,149,74,126,56,204,167,191,201,167,11,63,10,45,195,63,185,79,106,139,59,232,176,63,254,202,168,137,255,140,209,191,185,244,43,107,111,197,196,191,89,231,239,204,159,93,218,63,5,18,50,100,37,241,229,63,205,200,152,97,40,203,220,63,30,20,35,196,201,112,194,63,216,95,7,22,153,36,147,63,216,95,7,22,153,36,147,191,30,20,35,196,201,112,194,63,205,200,152,97,40,203,220,191,5,18,50,100,37,241,229,63,89,231,239,204,159,93,218,191,185,244,43,107,111,197,196,191,254,202,168,137,255,140,209,63,185,79,106,139,59,232,176,63,201,167,11,63,10,45,195,191,128,149,74,126,56,204,167,191,21,254,190,219,33,2,177,63,43,128,106,39,39,11,160,63,190,138,149,106,81,87,149,191,88,131,104,90,151,119,143,191,13,107,52,243,73,94,107,63,124,248,117,10,210,47,116,63,91,18,132,60,84,57,52,63,56,173,253,211,56,67,77,191,248,109,188,240,21,84,48,191,3,59,25,93,176,138,12,63,218,61,187,254,160,40,2,63,189,12,225,180,176,217,210,62,216,95,7,22,153,36,147,63,30,20,35,196,201,112,194,63,205,200,152,97,40,203,220,63,5,18,50,100,37,241,229,63,89,231,239,204,159,93,218,63,185,244,43,107,111,197,196,191,254,202,168,137,255,140,209,191,185,79,106,139,59,232,176,63,201,167,11,63,10,45,195,63,128,149,74,126,56,204,167,191,21,254,190,219,33,2,177,191,43,128,106,39,39,11,160,63,190,138,149,106,81,87,149,63,88,131,104,90,151,119,143,191,13,107,52,243,73,94,107,191,124,248,117,10,210,47,116,63,91,18,132,60,84,57,52,191,56,173,253,211,56,67,77,191,248,109,188,240,21,84,48,63,3,59,25,93,176,138,12,63,218,61,187,254,160,40,2,191,189,12,225,180,176,217,210,62,189,12,225,180,176,217,210,62,218,61,187,254,160,40,2,63,3,59,25,93,176,138,12,63,248,109,188,240,21,84,48,191,56,173,253,211,56,67,77,191,91,18,132,60,84,57,52,63,124,248,117,10,210,47,116,63,13,107,52,243,73,94,107,63,88,131,104,90,151,119,143,191,190,138,149,106,81,87,149,191,43,128,106,39,39,11,160,63,21,254,190,219,33,2,177,63,128,149,74,126,56,204,167,191,201,167,11,63,10,45,195,191,185,79,106,139,59,232,176,63,254,202,168,137,255,140,209,63,185,244,43,107,111,197,196,191,89,231,239,204,159,93,218,191,5,18,50,100,37,241,229,63,205,200,152,97,40,203,220,191,30,20,35,196,201,112,194,63,216,95,7,22,153,36,147,191,47,103,196,240,144,252,135,190,36,54,19,180,203,240,188,62,236,178,63,229,104,105,210,190,219,88,79,54,191,173,229,190,218,15,232,162,18,6,18,63,229,0,2,60,63,231,5,191,73,212,16,144,246,89,57,191,251,135,229,217,79,51,71,63,200,198,110,31,14,101,81,63,200,9,68,33,71,137,111,191,158,12,200,19,189,115,72,191,78,161,125,186,96,49,138,63,47,79,146,97,206,255,118,191,102,128,188,166,232,232,158,191,108,113,33,169,3,161,155,63,97,244,157,101,10,72,172,63,133,219,243,71,8,81,178,191,85,60,170,214,36,53,182,191,212,196,3,252,40,235,193,63,58,113,188,50,239,182,193,63,94,75,96,208,133,232,203,191,30,2,175,97,88,99,209,191,246,82,66,174,102,253,203,63,2,50,49,220,176,50,228,63,9,110,161,34,223,188,225,63,32,240,98,127,119,79,208,63,146,176,92,15,70,238,175,63,28,93,227,172,2,119,122,63,28,93,227,172,2,119,122,191,146,176,92,15,70,238,175,63,32,240,98,127,119,79,208,191,9,110,161,34,223,188,225,63,2,50,49,220,176,50,228,191,246,82,66,174,102,253,203,63,30,2,175,97,88,99,209,63,94,75,96,208,133,232,203,191,58,113,188,50,239,182,193,191,212,196,3,252,40,235,193,63,85,60,170,214,36,53,182,63,133,219,243,71,8,81,178,191,97,244,157,101,10,72,172,191,108,113,33,169,3,161,155,63,102,128,188,166,232,232,158,63,47,79,146,97,206,255,118,191,78,161,125,186,96,49,138,191,158,12,200,19,189,115,72,191,200,9,68,33,71,137,111,63,200,198,110,31,14,101,81,63,251,135,229,217,79,51,71,191,73,212,16,144,246,89,57,191,229,0,2,60,63,231,5,63,218,15,232,162,18,6,18,63,219,88,79,54,191,173,229,62,236,178,63,229,104,105,210,190,36,54,19,180,203,240,188,190,47,103,196,240,144,252,135,190,28,93,227,172,2,119,122,63,146,176,92,15,70,238,175,63,32,240,98,127,119,79,208,63,9,110,161,34,223,188,225,63,2,50,49,220,176,50,228,63,246,82,66,174,102,253,203,63,30,2,175,97,88,99,209,191,94,75,96,208,133,232,203,191,58,113,188,50,239,182,193,63,212,196,3,252,40,235,193,63,85,60,170,214,36,53,182,191,133,219,243,71,8,81,178,191,97,244,157,101,10,72,172,63,108,113,33,169,3,161,155,63,102,128,188,166,232,232,158,191,47,79,146,97,206,255,118,191,78,161,125,186,96,49,138,63,158,12,200,19,189,115,72,191,200,9,68,33,71,137,111,191,200,198,110,31,14,101,81,63,251,135,229,217,79,51,71,63,73,212,16,144,246,89,57,191,229,0,2,60,63,231,5,191,218,15,232,162,18,6,18,63,219,88,79,54,191,173,229,190,236,178,63,229,104,105,210,190,36,54,19,180,203,240,188,62,47,103,196,240,144,252,135,190,47,103,196,240,144,252,135,190,36,54,19,180,203,240,188,190,236,178,63,229,104,105,210,190,219,88,79,54,191,173,229,62,218,15,232,162,18,6,18,63,229,0,2,60,63,231,5,63,73,212,16,144,246,89,57,191,251,135,229,217,79,51,71,191,200,198,110,31,14,101,81,63,200,9,68,33,71,137,111,63,158,12,200,19,189,115,72,191,78,161,125,186,96,49,138,191,47,79,146,97,206,255,118,191,102,128,188,166,232,232,158,63,108,113,33,169,3,161,155,63,97,244,157,101,10,72,172,191,133,219,243,71,8,81,178,191,85,60,170,214,36,53,182,63,212,196,3,252,40,235,193,63,58,113,188,50,239,182,193,191,94,75,96,208,133,232,203,191,30,2,175,97,88,99,209,63,246,82,66,174,102,253,203,63,2,50,49,220,176,50,228,191,9,110,161,34,223,188,225,63,32,240,98,127,119,79,208,191,146,176,92,15,70,238,175,63,28,93,227,172,2,119,122,191,21,106,51,22,208,118,112,62,121,183,28,29,41,50,165,190,149,63,228,223,88,99,190,62,102,40,84,193,245,53,204,62,54,110,244,101,249,127,253,190,123,191,32,202,172,11,251,62,225,82,203,166,4,111,36,63,131,214,30,247,128,144,55,191,168,160,36,127,254,121,56,191,84,216,61,60,228,214,95,63,85,12,92,113,0,176,47,191,114,177,47,252,225,146,122,191,55,49,153,91,201,228,116,63,132,112,0,53,81,228,142,63,105,120,160,211,58,79,149,191,140,29,42,151,170,98,154,191,224,99,111,66,50,12,172,63,253,152,119,82,88,88,161,63,149,47,46,242,107,114,188,191,197,227,32,6,32,79,164,191,116,24,13,63,186,86,200,63,45,197,120,51,98,182,176,63,215,216,40,110,13,125,210,191,136,81,137,202,233,186,200,191,190,121,194,176,55,178,213,63,44,41,165,81,128,170,228,63,227,51,29,105,71,135,223,63,205,123,2,111,253,94,202,63,244,155,188,16,192,238,167,63,242,102,162,88,0,151,114,63,242,102,162,88,0,151,114,191,244,155,188,16,192,238,167,63,205,123,2,111,253,94,202,191,227,51,29,105,71,135,223,63,44,41,165,81,128,170,228,191,190,121,194,176,55,178,213,63,136,81,137,202,233,186,200,63,215,216,40,110,13,125,210,191,45,197,120,51,98,182,176,191,116,24,13,63,186,86,200,63,197,227,32,6,32,79,164,63,149,47,46,242,107,114,188,191,253,152,119,82,88,88,161,191,224,99,111,66,50,12,172,63,140,29,42,151,170,98,154,63,105,120,160,211,58,79,149,191,132,112,0,53,81,228,142,191,55,49,153,91,201,228,116,63,114,177,47,252,225,146,122,63,85,12,92,113,0,176,47,191,84,216,61,60,228,214,95,191,168,160,36,127,254,121,56,191,131,214,30,247,128,144,55,63,225,82,203,166,4,111,36,63,123,191,32,202,172,11,251,190,54,110,244,101,249,127,253,190,102,40,84,193,245,53,204,190,149,63,228,223,88,99,190,62,121,183,28,29,41,50,165,62,21,106,51,22,208,118,112,62,242,102,162,88,0,151,114,63,244,155,188,16,192,238,167,63,205,123,2,111,253,94,202,63,227,51,29,105,71,135,223,63,44,41,165,81,128,170,228,63,190,121,194,176,55,178,213,63,136,81,137,202,233,186,200,191,215,216,40,110,13,125,210,191,45,197,120,51,98,182,176,63,116,24,13,63,186,86,200,63,197,227,32,6,32,79,164,191,149,47,46,242,107,114,188,191,253,152,119,82,88,88,161,63,224,99,111,66,50,12,172,63,140,29,42,151,170,98,154,191,105,120,160,211,58,79,149,191,132,112,0,53,81,228,142,63,55,49,153,91,201,228,116,63,114,177,47,252,225,146,122,191,85,12,92,113,0,176,47,191,84,216,61,60,228,214,95,63,168,160,36,127,254,121,56,191,131,214,30,247,128,144,55,191,225,82,203,166,4,111,36,63,123,191,32,202,172,11,251,62,54,110,244,101,249,127,253,190,102,40,84,193,245,53,204,62,149,63,228,223,88,99,190,62,121,183,28,29,41,50,165,190,21,106,51,22,208,118,112,62,21,106,51,22,208,118,112,62,121,183,28,29,41,50,165,62,149,63,228,223,88,99,190,62,102,40,84,193,245,53,204,190,54,110,244,101,249,127,253,190,123,191,32,202,172,11,251,190,225,82,203,166,4,111,36,63,131,214,30,247,128,144,55,63,168,160,36,127,254,121,56,191,84,216,61,60,228,214,95,191,85,12,92,113,0,176,47,191,114,177,47,252,225,146,122,63,55,49,153,91,201,228,116,63,132,112,0,53,81,228,142,191,105,120,160,211,58,79,149,191,140,29,42,151,170,98,154,63,224,99,111,66,50,12,172,63,253,152,119,82,88,88,161,191,149,47,46,242,107,114,188,191,197,227,32,6,32,79,164,63,116,24,13,63,186,86,200,63,45,197,120,51,98,182,176,191,215,216,40,110,13,125,210,191,136,81,137,202,233,186,200,63,190,121,194,176,55,178,213,63,44,41,165,81,128,170,228,191,227,51,29,105,71,135,223,63,205,123,2,111,253,94,202,191,244,155,188,16,192,238,167,63,242,102,162,88,0,151,114,191,205,59,127,102,158,160,230,63,205,59,127,102,158,160,230,63,205,59,127,102,158,160,230,191,205,59,127,102,158,160,230,63,205,59,127,102,158,160,230,63,205,59,127,102,158,160,230,63,205,59,127,102,158,160,230,63,205,59,127,102,158,160,230,191,218,108,223,204,118,248,144,63,218,108,223,204,118,248,144,191,58,242,238,204,217,28,191,191,58,242,238,204,217,28,191,63,205,59,127,102,158,160,230,63,205,59,127,102,158,160,230,63,58,242,238,204,217,28,191,63,58,242,238,204,217,28,191,191,218,108,223,204,118,248,144,191,218,108,223,204,118,248,144,63,218,108,223,204,118,248,144,63,218,108,223,204,118,248,144,63,58,242,238,204,217,28,191,191,58,242,238,204,217,28,191,191,205,59,127,102,158,160,230,63,205,59,127,102,158,160,230,191,58,242,238,204,217,28,191,63,58,242,238,204,217,28,191,63,218,108,223,204,118,248,144,191,218,108,223,204,118,248,144,191,0,0,0,0,0,0,0,0,218,108,223,204,118,248,160,63,218,108,223,204,118,248,176,191,205,59,127,102,158,160,198,191,3,23,183,25,188,222,218,63,24,236,34,192,222,209,239,63,3,23,183,25,188,222,218,63,205,59,127,102,158,160,198,191,218,108,223,204,118,248,176,191,218,108,223,204,118,248,160,63,0,0,0,0,0,0,0,0,218,108,223,204,118,248,160,191,218,108,223,204,118,248,176,191,205,59,127,102,158,160,198,63,3,23,183,25,188,222,218,63,24,236,34,192,222,209,239,191,3,23,183,25,188,222,218,63,205,59,127,102,158,160,198,63,218,108,223,204,118,248,176,191,218,108,223,204,118,248,160,191,0,0,0,0,0,0,0,0,192,10,31,0,198,72,124,191,192,10,31,0,198,72,140,63,138,47,231,76,168,10,168,63,226,16,235,12,193,147,187,191,119,67,126,54,88,190,197,191,175,7,185,121,72,163,220,63,194,243,33,144,152,239,238,63,175,7,185,121,72,163,220,63,119,67,126,54,88,190,197,191,226,16,235,12,193,147,187,191,138,47,231,76,168,10,168,63,192,10,31,0,198,72,140,63,192,10,31,0,198,72,124,191,0,0,0,0,0,0,0,0,192,10,31,0,198,72,124,63,192,10,31,0,198,72,140,63,138,47,231,76,168,10,168,191,226,16,235,12,193,147,187,191,119,67,126,54,88,190,197,63,175,7,185,121,72,163,220,63,194,243,33,144,152,239,238,191,175,7,185,121,72,163,220,63,119,67,126,54,88,190,197,63,226,16,235,12,193,147,187,191,138,47,231,76,168,10,168,191,192,10,31,0,198,72,140,63,192,10,31,0,198,72,124,63,0,0,0,0,0,0,0,0,104,41,27,64,173,191,88,63,104,41,27,64,173,191,104,191,20,26,29,160,57,132,138,191,65,127,32,72,47,156,157,63,183,148,234,244,157,34,171,63,68,90,121,227,212,68,193,191,44,106,125,204,90,248,196,191,78,23,58,62,197,154,221,63,243,107,225,45,218,115,238,63,78,23,58,62,197,154,221,63,44,106,125,204,90,248,196,191,68,90,121,227,212,68,193,191,183,148,234,244,157,34,171,63,65,127,32,72,47,156,157,63,20,26,29,160,57,132,138,191,104,41,27,64,173,191,104,191,104,41,27,64,173,191,88,63,0,0,0,0,0,0,0,0,104,41,27,64,173,191,88,191,104,41,27,64,173,191,104,191,20,26,29,160,57,132,138,63,65,127,32,72,47,156,157,63,183,148,234,244,157,34,171,191,68,90,121,227,212,68,193,191,44,106,125,204,90,248,196,63,78,23,58,62,197,154,221,63,243,107,225,45,218,115,238,191,78,23,58,62,197,154,221,63,44,106,125,204,90,248,196,63,68,90,121,227,212,68,193,191,183,148,234,244,157,34,171,191,65,127,32,72,47,156,157,63,20,26,29,160,57,132,138,63,104,41,27,64,173,191,104,191,104,41,27,64,173,191,88,191,205,59,127,102,158,160,214,191,218,108,223,204,118,248,240,63,218,108,223,204,118,248,240,63,205,59,127,102,158,160,214,191,205,59,127,102,158,160,198,191,218,108,223,204,118,248,224,63,218,108,223,204,118,248,224,191,205,59,127,102,158,160,198,63,205,59,127,102,158,160,198,63,218,108,223,204,118,248,224,63,218,108,223,204,118,248,224,63,205,59,127,102,158,160,198,63,205,59,127,102,158,160,214,191,218,108,223,204,118,248,240,191,218,108,223,204,118,248,240,63,205,59,127,102,158,160,214,63,98,105,111,114,51,46,51,0,218,108,223,204,118,248,176,63,71,35,79,51,178,116,201,191,83,84,175,153,138,204,195,191,24,236,34,192,222,209,239,63,24,236,34,192,222,209,239,63,83,84,175,153,138,204,195,191,71,35,79,51,178,116,201,191,218,108,223,204,118,248,176,63,218,108,223,204,118,248,176,63,71,35,79,51,178,116,201,63,83,84,175,153,138,204,195,191,24,236,34,192,222,209,239,191,24,236,34,192,222,209,239,63,83,84,175,153,138,204,195,63,71,35,79,51,178,116,201,191,218,108,223,204,118,248,176,191,192,10,31,0,198,72,140,191,16,72,23,128,148,54,165,63,3,23,183,25,188,222,170,63,81,107,172,9,184,37,209,191,151,96,71,179,128,98,178,191,194,243,33,144,152,239,238,63,194,243,33,144,152,239,238,63,151,96,71,179,128,98,178,191,81,107,172,9,184,37,209,191,3,23,183,25,188,222,170,63,16,72,23,128,148,54,165,63,192,10,31,0,198,72,140,191,192,10,31,0,198,72,140,191,16,72,23,128,148,54,165,191,3,23,183,25,188,222,170,63,81,107,172,9,184,37,209,63,151,96,71,179,128,98,178,191,194,243,33,144,152,239,238,191,194,243,33,144,152,239,238,63,151,96,71,179,128,98,178,63,81,107,172,9,184,37,209,191,3,23,183,25,188,222,170,191,16,72,23,128,148,54,165,63,192,10,31,0,198,72,140,63,104,41,27,64,173,191,104,63,14,95,20,240,193,143,130,191,141,234,18,168,88,60,145,191,68,250,20,206,45,29,179,63,230,52,171,77,224,10,160,63,224,192,46,237,48,70,211,191,183,148,234,244,157,34,155,191,243,107,225,45,218,115,238,63,243,107,225,45,218,115,238,63,183,148,234,244,157,34,155,191,224,192,46,237,48,70,211,191,230,52,171,77,224,10,160,63,68,250,20,206,45,29,179,63,141,234,18,168,88,60,145,191,14,95,20,240,193,143,130,191,104,41,27,64,173,191,104,63,104,41,27,64,173,191,104,63,14,95,20,240,193,143,130,63,141,234,18,168,88,60,145,191,68,250,20,206,45,29,179,191,230,52,171,77,224,10,160,63,224,192,46,237,48,70,211,63,183,148,234,244,157,34,155,191,243,107,225,45,218,115,238,191,243,107,225,45,218,115,238,63,183,148,234,244,157,34,155,63,224,192,46,237,48,70,211,191,230,52,171,77,224,10,160,191,68,250,20,206,45,29,179,63,141,234,18,168,88,60,145,63,14,95,20,240,193,143,130,191,104,41,27,64,173,191,104,191,222,62,229,236,27,70,70,191,38,239,171,241,148,180,96,63,71,140,227,24,33,186,116,63,237,248,227,205,31,29,149,191,99,133,236,84,42,231,140,191,242,115,181,168,229,96,185,63,147,165,27,88,208,48,137,63,80,74,35,116,6,126,212,191,98,110,18,144,53,203,96,63,151,73,36,204,228,37,238,63,151,73,36,204,228,37,238,63,98,110,18,144,53,203,96,63,80,74,35,116,6,126,212,191,147,165,27,88,208,48,137,63,242,115,181,168,229,96,185,63,99,133,236,84,42,231,140,191,237,248,227,205,31,29,149,191,71,140,227,24,33,186,116,63,38,239,171,241,148,180,96,63,222,62,229,236,27,70,70,191,222,62,229,236,27,70,70,191,38,239,171,241,148,180,96,191,71,140,227,24,33,186,116,63,237,248,227,205,31,29,149,63,99,133,236,84,42,231,140,191,242,115,181,168,229,96,185,191,147,165,27,88,208,48,137,63,80,74,35,116,6,126,212,63,98,110,18,144,53,203,96,63,151,73,36,204,228,37,238,191,151,73,36,204,228,37,238,63,98,110,18,144,53,203,96,191,80,74,35,116,6,126,212,191,147,165,27,88,208,48,137,191,242,115,181,168,229,96,185,63,99,133,236,84,42,231,140,63,237,248,227,205,31,29,149,191,71,140,227,24,33,186,116,191,38,239,171,241,148,180,96,63,222,62,229,236,27,70,70,63,0,0,0,0,0,0,0,0,119,22,134,86,64,94,163,63,120,245,36,129,254,107,152,191,204,221,29,135,225,81,188,191,37,139,145,78,94,39,216,63,113,240,117,189,78,73,235,63,37,139,145,78,94,39,216,63,204,221,29,135,225,81,188,191,120,245,36,129,254,107,152,191,119,22,134,86,64,94,163,63,0,0,0,0,0,0,0,0,68,236,53,198,158,133,176,191,56,107,217,75,62,213,164,63,252,157,12,24,6,194,218,63,22,130,250,47,70,59,233,191,252,157,12,24,6,194,218,63,56,107,217,75,62,213,164,63,68,236,53,198,158,133,176,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,236,53,198,158,133,176,191,56,107,217,75,62,213,164,191,252,157,12,24,6,194,218,63,22,130,250,47,70,59,233,63,252,157,12,24,6,194,218,63,56,107,217,75,62,213,164,191,68,236,53,198,158,133,176,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,119,22,134,86,64,94,163,191,120,245,36,129,254,107,152,191,204,221,29,135,225,81,188,63,37,139,145,78,94,39,216,63,113,240,117,189,78,73,235,191,37,139,145,78,94,39,216,63,204,221,29,135,225,81,188,63,120,245,36,129,254,107,152,191,119,22,134,86,64,94,163,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,99,23,13,181,221,81,164,63,222,199,75,21,25,71,128,63,40,30,147,124,173,226,171,191,142,221,212,157,101,30,214,63,166,252,111,95,184,146,231,63,142,221,212,157,101,30,214,63,40,30,147,124,173,226,171,191,222,199,75,21,25,71,128,63,99,23,13,181,221,81,164,63,0,0,0,0,0,0,0,0,10,60,79,248,48,143,139,191,6,236,164,83,193,19,102,191,175,252,35,243,153,127,193,63], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE); +/* memory initializer */ allocate([52,2,92,129,236,239,183,191,69,192,78,216,241,131,222,191,51,134,125,9,193,200,236,63,69,192,78,216,241,131,222,191,52,2,92,129,236,239,183,191,175,252,35,243,153,127,193,63,6,236,164,83,193,19,102,191,10,60,79,248,48,143,139,191,0,0,0,0,0,0,0,0,10,60,79,248,48,143,139,63,6,236,164,83,193,19,102,191,175,252,35,243,153,127,193,191,52,2,92,129,236,239,183,191,69,192,78,216,241,131,222,63,51,134,125,9,193,200,236,63,69,192,78,216,241,131,222,63,52,2,92,129,236,239,183,191,175,252,35,243,153,127,193,191,6,236,164,83,193,19,102,191,10,60,79,248,48,143,139,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,99,23,13,181,221,81,164,63,222,199,75,21,25,71,128,191,40,30,147,124,173,226,171,191,142,221,212,157,101,30,214,191,166,252,111,95,184,146,231,63,142,221,212,157,101,30,214,191,40,30,147,124,173,226,171,191,222,199,75,21,25,71,128,191,99,23,13,181,221,81,164,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,168,110,120,56,70,95,63,183,178,116,20,25,93,95,191,13,34,71,138,254,101,145,191,199,28,140,60,38,113,136,63,185,179,14,84,151,118,169,63,43,54,240,241,132,199,179,191,70,233,230,146,67,20,184,191,101,92,43,138,83,238,218,63,223,35,227,16,246,109,234,63,101,92,43,138,83,238,218,63,70,233,230,146,67,20,184,191,43,54,240,241,132,199,179,191,185,179,14,84,151,118,169,63,199,28,140,60,38,113,136,63,13,34,71,138,254,101,145,191,183,178,116,20,25,93,95,191,120,168,110,120,56,70,95,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,219,31,132,220,134,139,141,63,120,106,23,163,35,161,141,191,175,39,10,4,32,39,180,191,92,90,123,155,28,171,164,63,121,164,157,48,10,190,218,63,4,236,213,220,248,72,232,191,121,164,157,48,10,190,218,63,92,90,123,155,28,171,164,63,175,39,10,4,32,39,180,191,120,106,23,163,35,161,141,191,219,31,132,220,134,139,141,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,219,31,132,220,134,139,141,63,120,106,23,163,35,161,141,63,175,39,10,4,32,39,180,191,92,90,123,155,28,171,164,191,121,164,157,48,10,190,218,63,4,236,213,220,248,72,232,63,121,164,157,48,10,190,218,63,92,90,123,155,28,171,164,191,175,39,10,4,32,39,180,191,120,106,23,163,35,161,141,63,219,31,132,220,134,139,141,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,168,110,120,56,70,95,191,183,178,116,20,25,93,95,191,13,34,71,138,254,101,145,63,199,28,140,60,38,113,136,63,185,179,14,84,151,118,169,191,43,54,240,241,132,199,179,191,70,233,230,146,67,20,184,63,101,92,43,138,83,238,218,63,223,35,227,16,246,109,234,191,101,92,43,138,83,238,218,63,70,233,230,146,67,20,184,63,43,54,240,241,132,199,179,191,185,179,14,84,151,118,169,191,199,28,140,60,38,113,136,63,13,34,71,138,254,101,145,63,183,178,116,20,25,93,95,191,120,168,110,120,56,70,95,191,20,109,200,38,104,156,71,191,85,242,76,158,23,223,93,191,229,230,134,16,4,252,118,63,221,234,74,112,157,63,152,63,171,197,175,40,48,110,174,191,255,228,142,191,193,148,179,191,174,161,86,131,54,176,218,63,54,152,93,255,212,1,234,63,30,207,105,255,6,182,216,63,240,197,45,231,83,63,177,191,246,20,209,102,228,58,165,191,72,174,183,136,215,199,144,63,72,174,183,136,215,199,144,191,246,20,209,102,228,58,165,191,240,197,45,231,83,63,177,63,30,207,105,255,6,182,216,63,54,152,93,255,212,1,234,191,174,161,86,131,54,176,218,63,255,228,142,191,193,148,179,63,171,197,175,40,48,110,174,191,221,234,74,112,157,63,152,191,229,230,134,16,4,252,118,63,85,242,76,158,23,223,93,63,20,109,200,38,104,156,71,191,72,174,183,136,215,199,144,63,246,20,209,102,228,58,165,191,240,197,45,231,83,63,177,191,30,207,105,255,6,182,216,63,54,152,93,255,212,1,234,63,174,161,86,131,54,176,218,63,255,228,142,191,193,148,179,191,171,197,175,40,48,110,174,191,221,234,74,112,157,63,152,63,229,230,134,16,4,252,118,63,85,242,76,158,23,223,93,191,20,109,200,38,104,156,71,191,20,109,200,38,104,156,71,191,85,242,76,158,23,223,93,63,229,230,134,16,4,252,118,63,221,234,74,112,157,63,152,191,171,197,175,40,48,110,174,191,255,228,142,191,193,148,179,63,174,161,86,131,54,176,218,63,54,152,93,255,212,1,234,191,30,207,105,255,6,182,216,63,240,197,45,231,83,63,177,63,246,20,209,102,228,58,165,191,72,174,183,136,215,199,144,191,166,34,106,36,231,35,2,191,111,157,182,220,155,155,18,191,52,227,181,152,210,141,62,63,203,137,182,164,54,79,82,63,132,68,214,168,39,23,101,191,181,231,71,23,198,114,130,191,66,219,83,83,253,66,144,63,50,103,173,82,50,177,161,63,215,100,82,53,189,17,181,191,27,173,182,29,121,97,178,191,202,196,122,245,69,108,219,63,120,147,111,125,159,102,233,63,170,104,60,26,107,238,217,63,97,13,42,162,144,75,175,191,156,115,243,143,109,214,176,191,210,149,186,203,251,3,152,63,181,29,34,210,164,224,127,63,212,5,20,182,146,19,111,191,212,5,20,182,146,19,111,63,181,29,34,210,164,224,127,63,210,149,186,203,251,3,152,191,156,115,243,143,109,214,176,191,97,13,42,162,144,75,175,63,170,104,60,26,107,238,217,63,120,147,111,125,159,102,233,191,202,196,122,245,69,108,219,63,27,173,182,29,121,97,178,63,215,100,82,53,189,17,181,191,50,103,173,82,50,177,161,191,66,219,83,83,253,66,144,63,181,231,71,23,198,114,130,63,132,68,214,168,39,23,101,191,203,137,182,164,54,79,82,191,52,227,181,152,210,141,62,63,111,157,182,220,155,155,18,63,166,34,106,36,231,35,2,191,212,5,20,182,146,19,111,191,181,29,34,210,164,224,127,63,210,149,186,203,251,3,152,63,156,115,243,143,109,214,176,191,97,13,42,162,144,75,175,191,170,104,60,26,107,238,217,63,120,147,111,125,159,102,233,63,202,196,122,245,69,108,219,63,27,173,182,29,121,97,178,191,215,100,82,53,189,17,181,191,50,103,173,82,50,177,161,63,66,219,83,83,253,66,144,63,181,231,71,23,198,114,130,191,132,68,214,168,39,23,101,191,203,137,182,164,54,79,82,63,52,227,181,152,210,141,62,63,111,157,182,220,155,155,18,191,166,34,106,36,231,35,2,191,166,34,106,36,231,35,2,191,111,157,182,220,155,155,18,63,52,227,181,152,210,141,62,63,203,137,182,164,54,79,82,191,132,68,214,168,39,23,101,191,181,231,71,23,198,114,130,63,66,219,83,83,253,66,144,63,50,103,173,82,50,177,161,191,215,100,82,53,189,17,181,191,27,173,182,29,121,97,178,63,202,196,122,245,69,108,219,63,120,147,111,125,159,102,233,191,170,104,60,26,107,238,217,63,97,13,42,162,144,75,175,63,156,115,243,143,109,214,176,191,210,149,186,203,251,3,152,191,181,29,34,210,164,224,127,63,212,5,20,182,146,19,111,63,208,82,44,196,115,242,189,190,52,102,97,41,28,88,203,190,174,255,46,93,154,95,0,63,155,78,4,117,128,87,16,63,161,215,98,51,166,9,49,191,235,251,62,113,16,77,67,191,136,1,36,132,88,192,84,63,238,46,121,243,84,187,110,63,122,127,83,196,36,45,119,191,102,171,108,11,84,39,143,191,202,102,85,25,42,175,153,63,213,8,52,92,164,35,164,63,203,29,190,35,231,161,184,191,101,251,249,134,127,14,177,191,115,8,158,44,251,204,219,63,253,196,62,240,25,8,233,63,128,197,124,182,105,148,218,63,112,107,124,101,42,182,172,191,57,27,98,249,228,205,180,191,22,143,53,218,154,82,155,63,9,105,61,147,96,116,144,63,158,26,13,130,3,23,126,191,115,81,206,185,149,178,90,191,76,103,29,3,69,61,77,63,76,103,29,3,69,61,77,191,115,81,206,185,149,178,90,191,158,26,13,130,3,23,126,63,9,105,61,147,96,116,144,63,22,143,53,218,154,82,155,191,57,27,98,249,228,205,180,191,112,107,124,101,42,182,172,63,128,197,124,182,105,148,218,63,253,196,62,240,25,8,233,191,115,8,158,44,251,204,219,63,101,251,249,134,127,14,177,63,203,29,190,35,231,161,184,191,213,8,52,92,164,35,164,191,202,102,85,25,42,175,153,63,102,171,108,11,84,39,143,63,122,127,83,196,36,45,119,191,238,46,121,243,84,187,110,191,136,1,36,132,88,192,84,63,235,251,62,113,16,77,67,63,161,215,98,51,166,9,49,191,155,78,4,117,128,87,16,191,174,255,46,93,154,95,0,63,52,102,97,41,28,88,203,62,208,82,44,196,115,242,189,190,76,103,29,3,69,61,77,63,115,81,206,185,149,178,90,191,158,26,13,130,3,23,126,191,9,105,61,147,96,116,144,63,22,143,53,218,154,82,155,63,57,27,98,249,228,205,180,191,112,107,124,101,42,182,172,191,128,197,124,182,105,148,218,63,253,196,62,240,25,8,233,63,115,8,158,44,251,204,219,63,101,251,249,134,127,14,177,191,203,29,190,35,231,161,184,191,213,8,52,92,164,35,164,63,202,102,85,25,42,175,153,63,102,171,108,11,84,39,143,191,122,127,83,196,36,45,119,191,238,46,121,243,84,187,110,63,136,1,36,132,88,192,84,63,235,251,62,113,16,77,67,191,161,215,98,51,166,9,49,191,155,78,4,117,128,87,16,63,174,255,46,93,154,95,0,63,52,102,97,41,28,88,203,190,208,82,44,196,115,242,189,190,208,82,44,196,115,242,189,190,52,102,97,41,28,88,203,62,174,255,46,93,154,95,0,63,155,78,4,117,128,87,16,191,161,215,98,51,166,9,49,191,235,251,62,113,16,77,67,63,136,1,36,132,88,192,84,63,238,46,121,243,84,187,110,191,122,127,83,196,36,45,119,191,102,171,108,11,84,39,143,63,202,102,85,25,42,175,153,63,213,8,52,92,164,35,164,191,203,29,190,35,231,161,184,191,101,251,249,134,127,14,177,63,115,8,158,44,251,204,219,63,253,196,62,240,25,8,233,191,128,197,124,182,105,148,218,63,112,107,124,101,42,182,172,63,57,27,98,249,228,205,180,191,22,143,53,218,154,82,155,191,9,105,61,147,96,116,144,63,158,26,13,130,3,23,126,63,115,81,206,185,149,178,90,191,76,103,29,3,69,61,77,191,145,163,132,249,123,140,121,190,103,207,249,50,75,121,134,190,165,76,134,19,229,79,193,62,53,254,56,101,28,84,207,62,130,181,46,125,181,89,246,190,74,233,216,111,158,172,5,191,179,137,142,72,199,107,34,63,146,103,207,4,19,207,51,63,47,251,220,159,8,233,68,191,49,72,241,77,142,62,91,191,225,36,193,75,39,239,99,63,204,20,137,52,195,180,123,63,42,53,22,73,178,196,130,191,16,151,19,137,110,60,148,191,153,240,47,197,230,187,160,63,158,253,132,242,219,35,165,63,67,146,174,77,233,6,187,191,193,2,203,136,45,195,175,191,13,29,149,7,14,8,220,63,221,79,170,253,250,198,232,63,193,128,181,211,240,250,218,63,44,12,165,199,102,165,170,191,193,173,51,223,17,136,183,191,146,77,228,108,20,216,156,63,227,85,107,207,78,248,151,63,27,133,91,147,159,191,132,191,104,158,3,95,103,9,113,191,71,33,121,189,23,216,97,63,92,34,113,251,34,128,55,63,217,25,201,138,64,204,43,191,217,25,201,138,64,204,43,63,92,34,113,251,34,128,55,63,71,33,121,189,23,216,97,191,104,158,3,95,103,9,113,191,27,133,91,147,159,191,132,63,227,85,107,207,78,248,151,63,146,77,228,108,20,216,156,191,193,173,51,223,17,136,183,191,44,12,165,199,102,165,170,63,193,128,181,211,240,250,218,63,221,79,170,253,250,198,232,191,13,29,149,7,14,8,220,63,193,2,203,136,45,195,175,63,67,146,174,77,233,6,187,191,158,253,132,242,219,35,165,191,153,240,47,197,230,187,160,63,16,151,19,137,110,60,148,63,42,53,22,73,178,196,130,191,204,20,137,52,195,180,123,191,225,36,193,75,39,239,99,63,49,72,241,77,142,62,91,63,47,251,220,159,8,233,68,191,146,103,207,4,19,207,51,191,179,137,142,72,199,107,34,63,74,233,216,111,158,172,5,63,130,181,46,125,181,89,246,190,53,254,56,101,28,84,207,190,165,76,134,19,229,79,193,62,103,207,249,50,75,121,134,62,145,163,132,249,123,140,121,190,217,25,201,138,64,204,43,191,92,34,113,251,34,128,55,63,71,33,121,189,23,216,97,63,104,158,3,95,103,9,113,191,27,133,91,147,159,191,132,191,227,85,107,207,78,248,151,63,146,77,228,108,20,216,156,63,193,173,51,223,17,136,183,191,44,12,165,199,102,165,170,191,193,128,181,211,240,250,218,63,221,79,170,253,250,198,232,63,13,29,149,7,14,8,220,63,193,2,203,136,45,195,175,191,67,146,174,77,233,6,187,191,158,253,132,242,219,35,165,63,153,240,47,197,230,187,160,63,16,151,19,137,110,60,148,191,42,53,22,73,178,196,130,191,204,20,137,52,195,180,123,63,225,36,193,75,39,239,99,63,49,72,241,77,142,62,91,191,47,251,220,159,8,233,68,191,146,103,207,4,19,207,51,63,179,137,142,72,199,107,34,63,74,233,216,111,158,172,5,191,130,181,46,125,181,89,246,190,53,254,56,101,28,84,207,62,165,76,134,19,229,79,193,62,103,207,249,50,75,121,134,190,145,163,132,249,123,140,121,190,145,163,132,249,123,140,121,190,103,207,249,50,75,121,134,62,165,76,134,19,229,79,193,62,53,254,56,101,28,84,207,190,130,181,46,125,181,89,246,190,74,233,216,111,158,172,5,63,179,137,142,72,199,107,34,63,146,103,207,4,19,207,51,191,47,251,220,159,8,233,68,191,49,72,241,77,142,62,91,63,225,36,193,75,39,239,99,63,204,20,137,52,195,180,123,191,42,53,22,73,178,196,130,191,16,151,19,137,110,60,148,63,153,240,47,197,230,187,160,63,158,253,132,242,219,35,165,191,67,146,174,77,233,6,187,191,193,2,203,136,45,195,175,63,13,29,149,7,14,8,220,63,221,79,170,253,250,198,232,191,193,128,181,211,240,250,218,63,44,12,165,199,102,165,170,63,193,173,51,223,17,136,183,191,146,77,228,108,20,216,156,191,227,85,107,207,78,248,151,63,27,133,91,147,159,191,132,63,104,158,3,95,103,9,113,191,71,33,121,189,23,216,97,191,92,34,113,251,34,128,55,63,217,25,201,138,64,204,43,63,221,214,146,193,125,144,192,191,19,91,107,11,191,176,204,63,132,241,227,214,189,196,234,63,17,202,72,71,221,232,222,63,17,202,72,71,221,232,222,191,132,241,227,214,189,196,234,63,19,91,107,11,191,176,204,191,221,214,146,193,125,144,192,191,17,202,72,71,221,232,222,63,132,241,227,214,189,196,234,63,19,91,107,11,191,176,204,63,221,214,146,193,125,144,192,191,221,214,146,193,125,144,192,191,19,91,107,11,191,176,204,191,132,241,227,214,189,196,234,63,17,202,72,71,221,232,222,191,234,144,45,195,97,101,179,191,187,53,40,152,198,88,158,191,78,243,214,247,251,216,223,63,191,24,177,84,58,184,233,63,178,238,190,36,26,16,211,63,253,94,201,182,115,102,185,191,194,191,133,217,27,208,137,191,23,72,138,214,139,127,160,63,23,72,138,214,139,127,160,191,194,191,133,217,27,208,137,191,253,94,201,182,115,102,185,63,178,238,190,36,26,16,211,63,191,24,177,84,58,184,233,191,78,243,214,247,251,216,223,63,187,53,40,152,198,88,158,63,234,144,45,195,97,101,179,191,23,72,138,214,139,127,160,63,194,191,133,217,27,208,137,191,253,94,201,182,115,102,185,191,178,238,190,36,26,16,211,63,191,24,177,84,58,184,233,63,78,243,214,247,251,216,223,63,187,53,40,152,198,88,158,191,234,144,45,195,97,101,179,191,234,144,45,195,97,101,179,191,187,53,40,152,198,88,158,63,78,243,214,247,251,216,223,63,191,24,177,84,58,184,233,191,178,238,190,36,26,16,211,63,253,94,201,182,115,102,185,63,194,191,133,217,27,208,137,191,23,72,138,214,139,127,160,191,96,214,144,42,51,253,155,63,91,171,123,128,91,58,158,63,147,130,208,129,103,9,164,191,141,0,171,191,219,133,201,63,89,129,126,226,39,38,231,63,193,245,76,64,142,73,228,63,18,163,54,117,36,0,145,63,115,12,29,158,38,113,198,191,130,124,22,28,184,155,149,191,72,204,100,57,0,2,148,63,72,204,100,57,0,2,148,191,130,124,22,28,184,155,149,191,115,12,29,158,38,113,198,63,18,163,54,117,36,0,145,63,193,245,76,64,142,73,228,191,89,129,126,226,39,38,231,63,141,0,171,191,219,133,201,191,147,130,208,129,103,9,164,191,91,171,123,128,91,58,158,191,96,214,144,42,51,253,155,63,72,204,100,57,0,2,148,63,130,124,22,28,184,155,149,191,115,12,29,158,38,113,198,191,18,163,54,117,36,0,145,63,193,245,76,64,142,73,228,63,89,129,126,226,39,38,231,63,141,0,171,191,219,133,201,63,147,130,208,129,103,9,164,191,91,171,123,128,91,58,158,63,96,214,144,42,51,253,155,63,96,214,144,42,51,253,155,63,91,171,123,128,91,58,158,191,147,130,208,129,103,9,164,191,141,0,171,191,219,133,201,191,89,129,126,226,39,38,231,63,193,245,76,64,142,73,228,191,18,163,54,117,36,0,145,63,115,12,29,158,38,113,198,63,130,124,22,28,184,155,149,191,72,204,100,57,0,2,148,191,110,203,68,142,48,140,143,63,249,22,186,199,141,152,108,63,167,4,162,148,153,52,190,191,131,12,214,20,81,188,168,191,16,61,197,230,117,109,223,63,140,174,182,49,91,52,233,63,243,72,171,185,162,160,213,63,72,143,212,104,95,152,178,191,158,141,86,78,212,144,149,191,14,249,215,172,46,230,166,63,46,185,82,41,82,246,92,63,183,57,68,178,162,243,127,191,183,57,68,178,162,243,127,63,46,185,82,41,82,246,92,63,14,249,215,172,46,230,166,191,158,141,86,78,212,144,149,191,72,143,212,104,95,152,178,63,243,72,171,185,162,160,213,63,140,174,182,49,91,52,233,191,16,61,197,230,117,109,223,63,131,12,214,20,81,188,168,63,167,4,162,148,153,52,190,191,249,22,186,199,141,152,108,191,110,203,68,142,48,140,143,63,183,57,68,178,162,243,127,191,46,185,82,41,82,246,92,63,14,249,215,172,46,230,166,63,158,141,86,78,212,144,149,191,72,143,212,104,95,152,178,191,243,72,171,185,162,160,213,63,140,174,182,49,91,52,233,63,16,61,197,230,117,109,223,63,131,12,214,20,81,188,168,191,167,4,162,148,153,52,190,191,249,22,186,199,141,152,108,63,110,203,68,142,48,140,143,63,110,203,68,142,48,140,143,63,249,22,186,199,141,152,108,191,167,4,162,148,153,52,190,191,131,12,214,20,81,188,168,63,16,61,197,230,117,109,223,63,140,174,182,49,91,52,233,191,243,72,171,185,162,160,213,63,72,143,212,104,95,152,178,63,158,141,86,78,212,144,149,191,14,249,215,172,46,230,166,191,46,185,82,41,82,246,92,63,183,57,68,178,162,243,127,63,229,213,170,59,44,248,101,63,123,71,247,245,12,41,81,191,246,216,223,238,15,225,137,191,64,29,70,108,117,63,159,63,150,202,57,98,106,97,177,63,192,69,245,58,253,94,169,191,107,5,204,208,30,220,145,63,191,108,39,53,191,39,225,63,74,15,18,121,134,145,232,63,179,223,65,107,232,120,210,63,30,125,204,102,17,237,193,191,247,98,45,23,82,153,187,191,115,175,39,233,11,109,112,63,217,136,56,89,123,7,133,63,217,136,56,89,123,7,133,191,115,175,39,233,11,109,112,63,247,98,45,23,82,153,187,63,30,125,204,102,17,237,193,191,179,223,65,107,232,120,210,191,74,15,18,121,134,145,232,63,191,108,39,53,191,39,225,191,107,5,204,208,30,220,145,63,192,69,245,58,253,94,169,63,150,202,57,98,106,97,177,63,64,29,70,108,117,63,159,191,246,216,223,238,15,225,137,191,123,71,247,245,12,41,81,63,229,213,170,59,44,248,101,63,217,136,56,89,123,7,133,63,115,175,39,233,11,109,112,63,247,98,45,23,82,153,187,191,30,125,204,102,17,237,193,191,179,223,65,107,232,120,210,63,74,15,18,121,134,145,232,63,191,108,39,53,191,39,225,63,107,5,204,208,30,220,145,63,192,69,245,58,253,94,169,191,150,202,57,98,106,97,177,63,64,29,70,108,117,63,159,63,246,216,223,238,15,225,137,191,123,71,247,245,12,41,81,191,229,213,170,59,44,248,101,63,229,213,170,59,44,248,101,63,123,71,247,245,12,41,81,63,246,216,223,238,15,225,137,191,64,29,70,108,117,63,159,191,150,202,57,98,106,97,177,63,192,69,245,58,253,94,169,63,107,5,204,208,30,220,145,63,191,108,39,53,191,39,225,191,74,15,18,121,134,145,232,63,179,223,65,107,232,120,210,191,30,125,204,102,17,237,193,191,247,98,45,23,82,153,187,63,115,175,39,233,11,109,112,63,217,136,56,89,123,7,133,191,107,102,131,188,112,181,107,191,231,128,76,81,188,195,65,191,94,60,48,171,86,58,160,63,179,124,62,84,7,41,127,63,173,2,182,49,119,87,194,191,177,145,159,194,56,95,175,191,244,49,241,181,152,206,222,63,209,17,79,167,180,222,232,63,144,10,231,24,4,83,215,63,209,253,171,23,165,152,170,191,243,87,74,45,78,223,155,191,252,127,110,39,130,40,169,63,205,208,210,42,136,51,111,63,231,194,120,36,74,159,142,191,108,96,58,180,41,218,51,191,3,113,178,183,6,247,94,63,3,113,178,183,6,247,94,191,108,96,58,180,41,218,51,191,231,194,120,36,74,159,142,63,205,208,210,42,136,51,111,63,252,127,110,39,130,40,169,191,243,87,74,45,78,223,155,191,209,253,171,23,165,152,170,63,144,10,231,24,4,83,215,63,209,17,79,167,180,222,232,191,244,49,241,181,152,206,222,63,177,145,159,194,56,95,175,63,173,2,182,49,119,87,194,191,179,124,62,84,7,41,127,191,94,60,48,171,86,58,160,63,231,128,76,81,188,195,65,63,107,102,131,188,112,181,107,191,3,113,178,183,6,247,94,63,108,96,58,180,41,218,51,191,231,194,120,36,74,159,142,191,205,208,210,42,136,51,111,63,252,127,110,39,130,40,169,63,243,87,74,45,78,223,155,191,209,253,171,23,165,152,170,191,144,10,231,24,4,83,215,63,209,17,79,167,180,222,232,63,244,49,241,181,152,206,222,63,177,145,159,194,56,95,175,191,173,2,182,49,119,87,194,191,179,124,62,84,7,41,127,63,94,60,48,171,86,58,160,63,231,128,76,81,188,195,65,191,107,102,131,188,112,181,107,191,107,102,131,188,112,181,107,191,231,128,76,81,188,195,65,63,94,60,48,171,86,58,160,63,179,124,62,84,7,41,127,191,173,2,182,49,119,87,194,191,177,145,159,194,56,95,175,63,244,49,241,181,152,206,222,63,209,17,79,167,180,222,232,191,144,10,231,24,4,83,215,63,209,253,171,23,165,152,170,63,243,87,74,45,78,223,155,191,252,127,110,39,130,40,169,191,205,208,210,42,136,51,111,63,231,194,120,36,74,159,142,63,108,96,58,180,41,218,51,191,3,113,178,183,6,247,94,191,152,155,145,151,221,243,86,63,191,118,14,83,25,79,68,63,103,156,156,92,85,46,139,191,119,80,150,46,26,156,135,191,47,46,227,72,69,243,158,63,0,166,222,180,112,30,67,63,141,167,172,103,118,240,171,191,197,148,230,183,183,143,206,63,24,190,139,77,3,249,230,63,45,245,51,144,60,193,227,63,25,190,30,77,60,15,162,63,16,195,248,213,188,132,200,191,179,151,184,164,223,171,146,191,182,77,186,245,168,200,175,63,252,146,52,193,206,36,130,63,196,245,148,90,83,5,133,191,189,132,8,25,55,2,63,191,158,78,190,45,196,133,81,63,158,78,190,45,196,133,81,191,189,132,8,25,55,2,63,191,196,245,148,90,83,5,133,63,252,146,52,193,206,36,130,63,182,77,186,245,168,200,175,191,179,151,184,164,223,171,146,191,16,195,248,213,188,132,200,63,25,190,30,77,60,15,162,63,45,245,51,144,60,193,227,191,24,190,139,77,3,249,230,63,197,148,230,183,183,143,206,191,141,167,172,103,118,240,171,191,0,166,222,180,112,30,67,191,47,46,227,72,69,243,158,63,119,80,150,46,26,156,135,63,103,156,156,92,85,46,139,191,191,118,14,83,25,79,68,191,152,155,145,151,221,243,86,63,158,78,190,45,196,133,81,63,189,132,8,25,55,2,63,191,196,245,148,90,83,5,133,191,252,146,52,193,206,36,130,63,182,77,186,245,168,200,175,63,179,151,184,164,223,171,146,191,16,195,248,213,188,132,200,191,25,190,30,77,60,15,162,63,45,245,51,144,60,193,227,63,24,190,139,77,3,249,230,63,197,148,230,183,183,143,206,63,141,167,172,103,118,240,171,191,0,166,222,180,112,30,67,63,47,46,227,72,69,243,158,63,119,80,150,46,26,156,135,191,103,156,156,92,85,46,139,191,191,118,14,83,25,79,68,63,152,155,145,151,221,243,86,63,152,155,145,151,221,243,86,63,191,118,14,83,25,79,68,191,103,156,156,92,85,46,139,191,119,80,150,46,26,156,135,63,47,46,227,72,69,243,158,63,0,166,222,180,112,30,67,191,141,167,172,103,118,240,171,191,197,148,230,183,183,143,206,191,24,190,139,77,3,249,230,63,45,245,51,144,60,193,227,191,25,190,30,77,60,15,162,63,16,195,248,213,188,132,200,63,179,151,184,164,223,171,146,191,182,77,186,245,168,200,175,191,252,146,52,193,206,36,130,63,196,245,148,90,83,5,133,63,189,132,8,25,55,2,63,191,158,78,190,45,196,133,81,191,0,254,174,152,145,60,73,63,191,4,210,197,204,17,25,63,143,109,81,142,135,178,129,191,148,66,210,144,66,2,88,191,207,120,252,108,198,131,167,63,201,2,3,149,237,198,135,63,134,219,218,251,78,106,196,191,98,171,28,15,58,37,178,191,191,14,21,13,46,48,222,63,133,97,94,131,211,159,232,63,26,55,135,30,158,144,216,63,216,112,72,36,223,49,162,191,218,227,54,48,0,97,160,191,0,211,18,228,240,152,169,63,44,119,96,202,242,156,119,63,128,68,57,227,236,215,148,191,188,46,84,167,115,91,74,191,91,26,87,165,74,208,114,63,47,118,33,233,64,231,13,63,49,206,95,215,68,26,62,191,49,206,95,215,68,26,62,63,47,118,33,233,64,231,13,63,91,26,87,165,74,208,114,191,188,46,84,167,115,91,74,191,128,68,57,227,236,215,148,63,44,119,96,202,242,156,119,63,0,211,18,228,240,152,169,191,218,227,54,48,0,97,160,191,216,112,72,36,223,49,162,63,26,55,135,30,158,144,216,63,133,97,94,131,211,159,232,191,191,14,21,13,46,48,222,63,98,171,28,15,58,37,178,63,134,219,218,251,78,106,196,191,201,2,3,149,237,198,135,191,207,120,252,108,198,131,167,63,148,66,210,144,66,2,88,63,143,109,81,142,135,178,129,191,191,4,210,197,204,17,25,191,0,254,174,152,145,60,73,63,49,206,95,215,68,26,62,191,47,118,33,233,64,231,13,63,91,26,87,165,74,208,114,63,188,46,84,167,115,91,74,191,128,68,57,227,236,215,148,191,44,119,96,202,242,156,119,63,0,211,18,228,240,152,169,63,218,227,54,48,0,97,160,191,216,112,72,36,223,49,162,191,26,55,135,30,158,144,216,63,133,97,94,131,211,159,232,63,191,14,21,13,46,48,222,63,98,171,28,15,58,37,178,191,134,219,218,251,78,106,196,191,201,2,3,149,237,198,135,63,207,120,252,108,198,131,167,63,148,66,210,144,66,2,88,191,143,109,81,142,135,178,129,191,191,4,210,197,204,17,25,63,0,254,174,152,145,60,73,63,0,254,174,152,145,60,73,63,191,4,210,197,204,17,25,191,143,109,81,142,135,178,129,191,148,66,210,144,66,2,88,63,207,120,252,108,198,131,167,63,201,2,3,149,237,198,135,191,134,219,218,251,78,106,196,191,98,171,28,15,58,37,178,63,191,14,21,13,46,48,222,63,133,97,94,131,211,159,232,191,26,55,135,30,158,144,216,63,216,112,72,36,223,49,162,63,218,227,54,48,0,97,160,191,0,211,18,228,240,152,169,191,44,119,96,202,242,156,119,63,128,68,57,227,236,215,148,63,188,46,84,167,115,91,74,191,91,26,87,165,74,208,114,191,47,118,33,233,64,231,13,63,49,206,95,215,68,26,62,63,10,32,84,104,101,32,68,101,99,111,109,112,111,115,105,116,105,111,110,32,73,116,101,114,97,116,105,111,110,115,32,67,97,110,110,111,116,32,69,120,99,101,101,100,32,49,48,48,46,32,69,120,105,116,105,110,103,32,10,0,0,0,0,0,10,32,69,114,114,111,114,32,45,32,84,104,101,32,83,105,103,110,97,108,32,67,97,110,32,111,110,108,121,32,98,101,32,105,116,101,114,97,116,101,100,32,37,100,32,116,105,109,101,115,32,117,115,105,110,103,32,116,104,105,115,32,119,97,118,101,108,101,116,46,32,69,120,105,116,105,110,103,10,0,115,121,109,0,0,0,0,0,100,119,116,0,0,0,0,0,68,87,84,0,0,0,0,0,115,119,116,0,0,0,0,0,83,87,84,0,0,0,0,0,10,32,70,111,114,32,83,87,84,32,116,104,101,32,115,105,103,110,97,108,32,108,101,110,103,116,104,32,109,117,115,116,32,98,101,32,97,32,109,117,108,116,105,112,108,101,32,111,102,32,50,94,74,46,32,10,0,0,0,0,0,0,0,0,112,101,114,0,0,0,0,0,109,111,100,119,116,0,0,0,77,79,68,87,84,0,0,0,100,98,0,0,0,0,0,0,99,111,105,102,0,0,0,0,10,32,77,79,68,87,84,32,105,115,32,111,110,108,121,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,111,114,116,104,111,103,111,110,97,108,32,119,97,118,101,108,101,116,32,102,97,109,105,108,105,101,115,32,45,32,100,98,44,32,115,121,109,32,97,110,100,32,99,111,105,102,32,10,0,0,0,0,0,0,0,0,100,105,114,101,99,116,0,0,102,102,116,0,0,0,0,0,70,70,84,0,0,0,0,0,83,105,103,110,97,108,32,101,120,116,101,110,115,105,111,110,32,99,97,110,32,98,101,32,101,105,116,104,101,114,32,112,101,114,32,111,114,32,115,121,109,0,0,0,0,0,0,0,68,101,99,111,109,112,111,115,105,116,105,111,110,32,70,105,108,116,101,114,115,32,109,117,115,116,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,108,101,110,103,116,104,46,0,0,0,0,0,0,0,0,83,87,84,32,79,110,108,121,32,97,99,99,101,112,116,115,32,116,119,111,32,109,101,116,104,111,100,115,32,45,32,100,105,114,101,99,116,32,97,110,100,32,102,102,116,0,0,0,67,111,110,118,111,108,117,116,105,111,110,32,79,110,108,121,32,97,99,99,101,112,116,115,32,116,119,111,32,109,101,116,104,111,100,115,32,45,32,100,105,114,101,99,116,32,97,110,100,32,102,102,116,0,0,0,100,119,116,0,0,0,0,0,68,87,84,0,0,0,0,0,112,101,114,0,0,0,0,0,115,121,109,0,0,0,0,0,115,119,116,0,0,0,0,0,83,87,84,0,0,0,0,0,109,111,100,119,116,0,0,0,77,79,68,87,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+10240); + + + + +var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8); + +assert(tempDoublePtr % 8 == 0); + +function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much + + HEAP8[tempDoublePtr] = HEAP8[ptr]; + + HEAP8[tempDoublePtr+1] = HEAP8[ptr+1]; + + HEAP8[tempDoublePtr+2] = HEAP8[ptr+2]; + + HEAP8[tempDoublePtr+3] = HEAP8[ptr+3]; + +} + +function copyTempDouble(ptr) { + + HEAP8[tempDoublePtr] = HEAP8[ptr]; + + HEAP8[tempDoublePtr+1] = HEAP8[ptr+1]; + + HEAP8[tempDoublePtr+2] = HEAP8[ptr+2]; + + HEAP8[tempDoublePtr+3] = HEAP8[ptr+3]; + + HEAP8[tempDoublePtr+4] = HEAP8[ptr+4]; + + HEAP8[tempDoublePtr+5] = HEAP8[ptr+5]; + + HEAP8[tempDoublePtr+6] = HEAP8[ptr+6]; + + HEAP8[tempDoublePtr+7] = HEAP8[ptr+7]; + +} + + + + + var ___errno_state=0;function ___setErrNo(value) { + // For convenient setting and returning of errno. + HEAP32[((___errno_state)>>2)]=value; + return value; + } + + var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _sysconf(name) { + // long sysconf(int name); + // http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html + switch(name) { + case 30: return PAGE_SIZE; + case 132: + case 133: + case 12: + case 137: + case 138: + case 15: + case 235: + case 16: + case 17: + case 18: + case 19: + case 20: + case 149: + case 13: + case 10: + case 236: + case 153: + case 9: + case 21: + case 22: + case 159: + case 154: + case 14: + case 77: + case 78: + case 139: + case 80: + case 81: + case 79: + case 82: + case 68: + case 67: + case 164: + case 11: + case 29: + case 47: + case 48: + case 95: + case 52: + case 51: + case 46: + return 200809; + case 27: + case 246: + case 127: + case 128: + case 23: + case 24: + case 160: + case 161: + case 181: + case 182: + case 242: + case 183: + case 184: + case 243: + case 244: + case 245: + case 165: + case 178: + case 179: + case 49: + case 50: + case 168: + case 169: + case 175: + case 170: + case 171: + case 172: + case 97: + case 76: + case 32: + case 173: + case 35: + return -1; + case 176: + case 177: + case 7: + case 155: + case 8: + case 157: + case 125: + case 126: + case 92: + case 93: + case 129: + case 130: + case 131: + case 94: + case 91: + return 1; + case 74: + case 60: + case 69: + case 70: + case 4: + return 1024; + case 31: + case 42: + case 72: + return 32; + case 87: + case 26: + case 33: + return 2147483647; + case 34: + case 1: + return 47839; + case 38: + case 36: + return 99; + case 43: + case 37: + return 2048; + case 0: return 2097152; + case 3: return 65536; + case 28: return 32768; + case 44: return 32767; + case 75: return 16384; + case 39: return 1000; + case 89: return 700; + case 71: return 256; + case 40: return 255; + case 2: return 100; + case 180: return 64; + case 25: return 20; + case 5: return 16; + case 6: return 6; + case 73: return 4; + case 84: { + if (typeof navigator === 'object') return navigator['hardwareConcurrency'] || 1; + return 1; + } + } + ___setErrNo(ERRNO_CODES.EINVAL); + return -1; + } + + + Module["_memset"] = _memset; + + var _ceil=Math_ceil; + + function _abort() { + Module['abort'](); + } + + + + + + var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"}; + + var PATH={splitPath:function (filename) { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + },normalizeArray:function (parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + return parts; + },normalize:function (path) { + var isAbsolute = path.charAt(0) === '/', + trailingSlash = path.substr(-1) === '/'; + // Normalize the path + path = PATH.normalizeArray(path.split('/').filter(function(p) { + return !!p; + }), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + },dirname:function (path) { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + return root + dir; + },basename:function (path) { + // EMSCRIPTEN return '/'' for '/', not an empty string + if (path === '/') return '/'; + var lastSlash = path.lastIndexOf('/'); + if (lastSlash === -1) return path; + return path.substr(lastSlash+1); + },extname:function (path) { + return PATH.splitPath(path)[3]; + },join:function () { + var paths = Array.prototype.slice.call(arguments, 0); + return PATH.normalize(paths.join('/')); + },join2:function (l, r) { + return PATH.normalize(l + '/' + r); + },resolve:function () { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + },relative:function (from, to) { + from = PATH.resolve(from).substr(1); + to = PATH.resolve(to).substr(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }}; + + var TTY={ttys:[],init:function () { + // https://github.com/kripken/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process['stdin']['setEncoding']('utf8'); + // } + },shutdown:function () { + // https://github.com/kripken/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process['stdin']['pause'](); + // } + },register:function (dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + },stream_ops:{open:function (stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(ERRNO_CODES.ENODEV); + } + stream.tty = tty; + stream.seekable = false; + },close:function (stream) { + // flush any pending line data + if (stream.tty.output.length) { + stream.tty.ops.put_char(stream.tty, 10); + } + },read:function (stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(ERRNO_CODES.ENXIO); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES.EIO); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.timestamp = Date.now(); + } + return bytesRead; + },write:function (stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(ERRNO_CODES.ENXIO); + } + for (var i = 0; i < length; i++) { + try { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES.EIO); + } + } + if (length) { + stream.node.timestamp = Date.now(); + } + return i; + }},default_tty_ops:{get_char:function (tty) { + if (!tty.input.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + result = process['stdin']['read'](); + if (!result) { + if (process['stdin']['_readableState'] && process['stdin']['_readableState']['ended']) { + return null; // EOF + } + return undefined; // no data available + } + } else if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + // Browser. + result = window.prompt('Input: '); // returns null on cancel + if (result !== null) { + result += '\n'; + } + } else if (typeof readline == 'function') { + // Command line. + result = readline(); + if (result !== null) { + result += '\n'; + } + } + if (!result) { + return null; + } + tty.input = intArrayFromString(result, true); + } + return tty.input.shift(); + },put_char:function (tty, val) { + if (val === null || val === 10) { + Module['print'](tty.output.join('')); + tty.output = []; + } else { + tty.output.push(TTY.utf8.processCChar(val)); + } + }},default_tty1_ops:{put_char:function (tty, val) { + if (val === null || val === 10) { + Module['printErr'](tty.output.join('')); + tty.output = []; + } else { + tty.output.push(TTY.utf8.processCChar(val)); + } + }}}; + + var MEMFS={ops_table:null,mount:function (mount) { + return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0); + },createNode:function (parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + if (!MEMFS.ops_table) { + MEMFS.ops_table = { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + allocate: MEMFS.stream_ops.allocate, + mmap: MEMFS.stream_ops.mmap + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + }, + }; + } + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.buffer.byteLength which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.timestamp = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + } + return node; + },getFileDataAsRegularArray:function (node) { + if (node.contents && node.contents.subarray) { + var arr = []; + for (var i = 0; i < node.usedBytes; ++i) arr.push(node.contents[i]); + return arr; // Returns a copy of the original data. + } + return node.contents; // No-op, the file contents are already in a JS array. Return as-is. + },getFileDataAsTypedArray:function (node) { + if (node.contents && node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + },expandFileStorage:function (node, newCapacity) { + + // If we are asked to expand the size of a file that already exists, revert to using a standard JS array to store the file + // instead of a typed array. This makes resizing the array more flexible because we can just .push() elements at the back to + // increase the size. + if (node.contents && node.contents.subarray && newCapacity > node.contents.length) { + node.contents = MEMFS.getFileDataAsRegularArray(node); + node.usedBytes = node.contents.length; // We might be writing to a lazy-loaded file which had overridden this property, so force-reset it. + } + + if (!node.contents || node.contents.subarray) { // Keep using a typed array if creating a new storage, or if old one was a typed array as well. + var prevCapacity = node.contents ? node.contents.buffer.byteLength : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) | 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + return; + } + // Not using a typed array to back the file storage. Use a standard JS array instead. + if (!node.contents && newCapacity > 0) node.contents = []; + while (node.contents.length < newCapacity) node.contents.push(0); + },resizeFileStorage:function (node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + return; + } + + if (!node.contents || node.contents.subarray) { // Resize a typed array if that is being used as the backing store. + var oldContents = node.contents; + node.contents = new Uint8Array(new ArrayBuffer(newSize)); // Allocate new storage. + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + return; + } + // Backing with a JS array. + if (!node.contents) node.contents = []; + if (node.contents.length > newSize) node.contents.length = newSize; + else while (node.contents.length < newSize) node.contents.push(0); + node.usedBytes = newSize; + },node_ops:{getattr:function (node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.timestamp); + attr.mtime = new Date(node.timestamp); + attr.ctime = new Date(node.timestamp); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + },setattr:function (node, attr) { + if (attr.mode !== undefined) { + node.mode = attr.mode; + } + if (attr.timestamp !== undefined) { + node.timestamp = attr.timestamp; + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + },lookup:function (parent, name) { + throw FS.genericErrors[ERRNO_CODES.ENOENT]; + },mknod:function (parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + },rename:function (old_node, new_dir, new_name) { + // if we're overwriting a directory at new_name, make sure it's empty. + if (FS.isDir(old_node.mode)) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + } + if (new_node) { + for (var i in new_node.contents) { + throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY); + } + } + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + old_node.name = new_name; + new_dir.contents[new_name] = old_node; + old_node.parent = new_dir; + },unlink:function (parent, name) { + delete parent.contents[name]; + },rmdir:function (parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY); + } + delete parent.contents[name]; + },readdir:function (node) { + var entries = ['.', '..'] + for (var key in node.contents) { + if (!node.contents.hasOwnProperty(key)) { + continue; + } + entries.push(key); + } + return entries; + },symlink:function (parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0); + node.link = oldpath; + return node; + },readlink:function (node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + return node.link; + }},stream_ops:{read:function (stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + if (size > 8 && contents.subarray) { // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else + { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + },write:function (stream, buffer, offset, length, position, canOwn) { + if (!length) return 0; + var node = stream.node; + node.timestamp = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? + if (canOwn) { // Can we just reuse the buffer we are given? + assert(position === 0, 'canOwn must imply no weird position inside the file'); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = new Uint8Array(buffer.subarray(offset, offset + length)); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) node.contents.set(buffer.subarray(offset, offset + length), position); // Use typed array write if available. + else + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + node.usedBytes = Math.max(node.usedBytes, position+length); + return length; + },llseek:function (stream, offset, whence) { + var position = offset; + if (whence === 1) { // SEEK_CUR. + position += stream.position; + } else if (whence === 2) { // SEEK_END. + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + stream.ungotten = []; + stream.position = position; + return position; + },allocate:function (stream, offset, length) { + MEMFS.expandFileStorage(stream.node, offset + length); + stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length); + },mmap:function (stream, buffer, offset, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.ENODEV); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if ( !(flags & 2) && + (contents.buffer === buffer || contents.buffer === buffer.buffer) ) { + // We can't emulate MAP_SHARED when the file is not backed by the buffer + // we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < stream.node.usedBytes) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + allocated = true; + ptr = _malloc(length); + if (!ptr) { + throw new FS.ErrnoError(ERRNO_CODES.ENOMEM); + } + buffer.set(contents, ptr); + } + return { ptr: ptr, allocated: allocated }; + }}}; + + var IDBFS={dbs:{},indexedDB:function () { + if (typeof indexedDB !== 'undefined') return indexedDB; + var ret = null; + if (typeof window === 'object') ret = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; + assert(ret, 'IDBFS used, but indexedDB not supported'); + return ret; + },DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function (mount) { + // reuse all of the core MEMFS functionality + return MEMFS.mount.apply(null, arguments); + },syncfs:function (mount, populate, callback) { + IDBFS.getLocalSet(mount, function(err, local) { + if (err) return callback(err); + + IDBFS.getRemoteSet(mount, function(err, remote) { + if (err) return callback(err); + + var src = populate ? remote : local; + var dst = populate ? local : remote; + + IDBFS.reconcile(src, dst, callback); + }); + }); + },getDB:function (name, callback) { + // check the cache first + var db = IDBFS.dbs[name]; + if (db) { + return callback(null, db); + } + + var req; + try { + req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION); + } catch (e) { + return callback(e); + } + req.onupgradeneeded = function(e) { + var db = e.target.result; + var transaction = e.target.transaction; + + var fileStore; + + if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) { + fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME); + } else { + fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME); + } + + fileStore.createIndex('timestamp', 'timestamp', { unique: false }); + }; + req.onsuccess = function() { + db = req.result; + + // add to the cache + IDBFS.dbs[name] = db; + callback(null, db); + }; + req.onerror = function() { + callback(this.error); + }; + },getLocalSet:function (mount, callback) { + var entries = {}; + + function isRealDir(p) { + return p !== '.' && p !== '..'; + }; + function toAbsolute(root) { + return function(p) { + return PATH.join2(root, p); + } + }; + + var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint)); + + while (check.length) { + var path = check.pop(); + var stat; + + try { + stat = FS.stat(path); + } catch (e) { + return callback(e); + } + + if (FS.isDir(stat.mode)) { + check.push.apply(check, FS.readdir(path).filter(isRealDir).map(toAbsolute(path))); + } + + entries[path] = { timestamp: stat.mtime }; + } + + return callback(null, { type: 'local', entries: entries }); + },getRemoteSet:function (mount, callback) { + var entries = {}; + + IDBFS.getDB(mount.mountpoint, function(err, db) { + if (err) return callback(err); + + var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly'); + transaction.onerror = function() { callback(this.error); }; + + var store = transaction.objectStore(IDBFS.DB_STORE_NAME); + var index = store.index('timestamp'); + + index.openKeyCursor().onsuccess = function(event) { + var cursor = event.target.result; + + if (!cursor) { + return callback(null, { type: 'remote', db: db, entries: entries }); + } + + entries[cursor.primaryKey] = { timestamp: cursor.key }; + + cursor.continue(); + }; + }); + },loadLocalEntry:function (path, callback) { + var stat, node; + + try { + var lookup = FS.lookupPath(path); + node = lookup.node; + stat = FS.stat(path); + } catch (e) { + return callback(e); + } + + if (FS.isDir(stat.mode)) { + return callback(null, { timestamp: stat.mtime, mode: stat.mode }); + } else if (FS.isFile(stat.mode)) { + // Performance consideration: storing a normal JavaScript array to a IndexedDB is much slower than storing a typed array. + // Therefore always convert the file contents to a typed array first before writing the data to IndexedDB. + node.contents = MEMFS.getFileDataAsTypedArray(node); + return callback(null, { timestamp: stat.mtime, mode: stat.mode, contents: node.contents }); + } else { + return callback(new Error('node type not supported')); + } + },storeLocalEntry:function (path, entry, callback) { + try { + if (FS.isDir(entry.mode)) { + FS.mkdir(path, entry.mode); + } else if (FS.isFile(entry.mode)) { + FS.writeFile(path, entry.contents, { encoding: 'binary', canOwn: true }); + } else { + return callback(new Error('node type not supported')); + } + + FS.chmod(path, entry.mode); + FS.utime(path, entry.timestamp, entry.timestamp); + } catch (e) { + return callback(e); + } + + callback(null); + },removeLocalEntry:function (path, callback) { + try { + var lookup = FS.lookupPath(path); + var stat = FS.stat(path); + + if (FS.isDir(stat.mode)) { + FS.rmdir(path); + } else if (FS.isFile(stat.mode)) { + FS.unlink(path); + } + } catch (e) { + return callback(e); + } + + callback(null); + },loadRemoteEntry:function (store, path, callback) { + var req = store.get(path); + req.onsuccess = function(event) { callback(null, event.target.result); }; + req.onerror = function() { callback(this.error); }; + },storeRemoteEntry:function (store, path, entry, callback) { + var req = store.put(entry, path); + req.onsuccess = function() { callback(null); }; + req.onerror = function() { callback(this.error); }; + },removeRemoteEntry:function (store, path, callback) { + var req = store.delete(path); + req.onsuccess = function() { callback(null); }; + req.onerror = function() { callback(this.error); }; + },reconcile:function (src, dst, callback) { + var total = 0; + + var create = []; + Object.keys(src.entries).forEach(function (key) { + var e = src.entries[key]; + var e2 = dst.entries[key]; + if (!e2 || e.timestamp > e2.timestamp) { + create.push(key); + total++; + } + }); + + var remove = []; + Object.keys(dst.entries).forEach(function (key) { + var e = dst.entries[key]; + var e2 = src.entries[key]; + if (!e2) { + remove.push(key); + total++; + } + }); + + if (!total) { + return callback(null); + } + + var errored = false; + var completed = 0; + var db = src.type === 'remote' ? src.db : dst.db; + var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite'); + var store = transaction.objectStore(IDBFS.DB_STORE_NAME); + + function done(err) { + if (err) { + if (!done.errored) { + done.errored = true; + return callback(err); + } + return; + } + if (++completed >= total) { + return callback(null); + } + }; + + transaction.onerror = function() { done(this.error); }; + + // sort paths in ascending order so directory entries are created + // before the files inside them + create.sort().forEach(function (path) { + if (dst.type === 'local') { + IDBFS.loadRemoteEntry(store, path, function (err, entry) { + if (err) return done(err); + IDBFS.storeLocalEntry(path, entry, done); + }); + } else { + IDBFS.loadLocalEntry(path, function (err, entry) { + if (err) return done(err); + IDBFS.storeRemoteEntry(store, path, entry, done); + }); + } + }); + + // sort paths in descending order so files are deleted before their + // parent directories + remove.sort().reverse().forEach(function(path) { + if (dst.type === 'local') { + IDBFS.removeLocalEntry(path, done); + } else { + IDBFS.removeRemoteEntry(store, path, done); + } + }); + }}; + + var NODEFS={isWindows:false,staticInit:function () { + NODEFS.isWindows = !!process.platform.match(/^win/); + },mount:function (mount) { + assert(ENVIRONMENT_IS_NODE); + return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0); + },createNode:function (parent, name, mode, dev) { + if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + var node = FS.createNode(parent, name, mode); + node.node_ops = NODEFS.node_ops; + node.stream_ops = NODEFS.stream_ops; + return node; + },getMode:function (path) { + var stat; + try { + stat = fs.lstatSync(path); + if (NODEFS.isWindows) { + // On Windows, directories return permission bits 'rw-rw-rw-', even though they have 'rwxrwxrwx', so + // propagate write bits to execute bits. + stat.mode = stat.mode | ((stat.mode & 146) >> 1); + } + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + return stat.mode; + },realPath:function (node) { + var parts = []; + while (node.parent !== node) { + parts.push(node.name); + node = node.parent; + } + parts.push(node.mount.opts.root); + parts.reverse(); + return PATH.join.apply(null, parts); + },flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:function (flags) { + if (flags in NODEFS.flagsToPermissionStringMap) { + return NODEFS.flagsToPermissionStringMap[flags]; + } else { + return flags; + } + },node_ops:{getattr:function (node) { + var path = NODEFS.realPath(node); + var stat; + try { + stat = fs.lstatSync(path); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + // node.js v0.10.20 doesn't report blksize and blocks on Windows. Fake them with default blksize of 4096. + // See http://support.microsoft.com/kb/140365 + if (NODEFS.isWindows && !stat.blksize) { + stat.blksize = 4096; + } + if (NODEFS.isWindows && !stat.blocks) { + stat.blocks = (stat.size+stat.blksize-1)/stat.blksize|0; + } + return { + dev: stat.dev, + ino: stat.ino, + mode: stat.mode, + nlink: stat.nlink, + uid: stat.uid, + gid: stat.gid, + rdev: stat.rdev, + size: stat.size, + atime: stat.atime, + mtime: stat.mtime, + ctime: stat.ctime, + blksize: stat.blksize, + blocks: stat.blocks + }; + },setattr:function (node, attr) { + var path = NODEFS.realPath(node); + try { + if (attr.mode !== undefined) { + fs.chmodSync(path, attr.mode); + // update the common node structure mode as well + node.mode = attr.mode; + } + if (attr.timestamp !== undefined) { + var date = new Date(attr.timestamp); + fs.utimesSync(path, date, date); + } + if (attr.size !== undefined) { + fs.truncateSync(path, attr.size); + } + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + },lookup:function (parent, name) { + var path = PATH.join2(NODEFS.realPath(parent), name); + var mode = NODEFS.getMode(path); + return NODEFS.createNode(parent, name, mode); + },mknod:function (parent, name, mode, dev) { + var node = NODEFS.createNode(parent, name, mode, dev); + // create the backing node for this in the fs root as well + var path = NODEFS.realPath(node); + try { + if (FS.isDir(node.mode)) { + fs.mkdirSync(path, node.mode); + } else { + fs.writeFileSync(path, '', { mode: node.mode }); + } + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + return node; + },rename:function (oldNode, newDir, newName) { + var oldPath = NODEFS.realPath(oldNode); + var newPath = PATH.join2(NODEFS.realPath(newDir), newName); + try { + fs.renameSync(oldPath, newPath); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + },unlink:function (parent, name) { + var path = PATH.join2(NODEFS.realPath(parent), name); + try { + fs.unlinkSync(path); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + },rmdir:function (parent, name) { + var path = PATH.join2(NODEFS.realPath(parent), name); + try { + fs.rmdirSync(path); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + },readdir:function (node) { + var path = NODEFS.realPath(node); + try { + return fs.readdirSync(path); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + },symlink:function (parent, newName, oldPath) { + var newPath = PATH.join2(NODEFS.realPath(parent), newName); + try { + fs.symlinkSync(oldPath, newPath); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + },readlink:function (node) { + var path = NODEFS.realPath(node); + try { + return fs.readlinkSync(path); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + }},stream_ops:{open:function (stream) { + var path = NODEFS.realPath(stream.node); + try { + if (FS.isFile(stream.node.mode)) { + stream.nfd = fs.openSync(path, NODEFS.flagsToPermissionString(stream.flags)); + } + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + },close:function (stream) { + try { + if (FS.isFile(stream.node.mode) && stream.nfd) { + fs.closeSync(stream.nfd); + } + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + },read:function (stream, buffer, offset, length, position) { + // FIXME this is terrible. + var nbuffer = new Buffer(length); + var res; + try { + res = fs.readSync(stream.nfd, nbuffer, 0, length, position); + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + if (res > 0) { + for (var i = 0; i < res; i++) { + buffer[offset + i] = nbuffer[i]; + } + } + return res; + },write:function (stream, buffer, offset, length, position) { + // FIXME this is terrible. + var nbuffer = new Buffer(buffer.subarray(offset, offset + length)); + var res; + try { + res = fs.writeSync(stream.nfd, nbuffer, 0, length, position); + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + return res; + },llseek:function (stream, offset, whence) { + var position = offset; + if (whence === 1) { // SEEK_CUR. + position += stream.position; + } else if (whence === 2) { // SEEK_END. + if (FS.isFile(stream.node.mode)) { + try { + var stat = fs.fstatSync(stream.nfd); + position += stat.size; + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + } + } + + if (position < 0) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + + stream.position = position; + return position; + }}}; + + var _stdin=allocate(1, "i32*", ALLOC_STATIC); + + var _stdout=allocate(1, "i32*", ALLOC_STATIC); + + var _stderr=allocate(1, "i32*", ALLOC_STATIC); + + function _fflush(stream) { + // int fflush(FILE *stream); + // http://pubs.opengroup.org/onlinepubs/000095399/functions/fflush.html + // we don't currently perform any user-space buffering of data + }var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},handleFSError:function (e) { + if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace(); + return ___setErrNo(e.errno); + },lookupPath:function (path, opts) { + path = PATH.resolve(FS.cwd(), path); + opts = opts || {}; + + if (!path) return { path: '', node: null }; + + var defaults = { + follow_mount: true, + recurse_count: 0 + }; + for (var key in defaults) { + if (opts[key] === undefined) { + opts[key] = defaults[key]; + } + } + + if (opts.recurse_count > 8) { // max recursive lookup of 8 + throw new FS.ErrnoError(ERRNO_CODES.ELOOP); + } + + // split the path + var parts = PATH.normalizeArray(path.split('/').filter(function(p) { + return !!p; + }), false); + + // start at the root + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } + + current = FS.lookupNode(current, parts[i]); + current_path = PATH.join2(current_path, parts[i]); + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current)) { + if (!islast || (islast && opts.follow_mount)) { + current = current.mounted.root; + } + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (!islast || opts.follow) { + var count = 0; + while (FS.isLink(current.mode)) { + var link = FS.readlink(current_path); + current_path = PATH.resolve(PATH.dirname(current_path), link); + + var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count }); + current = lookup.node; + + if (count++ > 40) { // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + throw new FS.ErrnoError(ERRNO_CODES.ELOOP); + } + } + } + } + + return { path: current_path, node: current }; + },getPath:function (node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path; + } + path = path ? node.name + '/' + path : node.name; + node = node.parent; + } + },hashName:function (parentid, name) { + var hash = 0; + + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + },hashAddNode:function (node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + },hashRemoveNode:function (node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + },lookupNode:function (parent, name) { + var err = FS.mayLookup(parent); + if (err) { + throw new FS.ErrnoError(err, parent); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + },createNode:function (parent, name, mode, rdev) { + if (!FS.FSNode) { + FS.FSNode = function(parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.mounted = null; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.node_ops = {}; + this.stream_ops = {}; + this.rdev = rdev; + }; + + FS.FSNode.prototype = {}; + + // compatibility + var readMode = 292 | 73; + var writeMode = 146; + + // NOTE we must use Object.defineProperties instead of individual calls to + // Object.defineProperty in order to make closure compiler happy + Object.defineProperties(FS.FSNode.prototype, { + read: { + get: function() { return (this.mode & readMode) === readMode; }, + set: function(val) { val ? this.mode |= readMode : this.mode &= ~readMode; } + }, + write: { + get: function() { return (this.mode & writeMode) === writeMode; }, + set: function(val) { val ? this.mode |= writeMode : this.mode &= ~writeMode; } + }, + isFolder: { + get: function() { return FS.isDir(this.mode); }, + }, + isDevice: { + get: function() { return FS.isChrdev(this.mode); }, + }, + }); + } + + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + },destroyNode:function (node) { + FS.hashRemoveNode(node); + },isRoot:function (node) { + return node === node.parent; + },isMountpoint:function (node) { + return !!node.mounted; + },isFile:function (mode) { + return (mode & 61440) === 32768; + },isDir:function (mode) { + return (mode & 61440) === 16384; + },isLink:function (mode) { + return (mode & 61440) === 40960; + },isChrdev:function (mode) { + return (mode & 61440) === 8192; + },isBlkdev:function (mode) { + return (mode & 61440) === 24576; + },isFIFO:function (mode) { + return (mode & 61440) === 4096; + },isSocket:function (mode) { + return (mode & 49152) === 49152; + },flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function (str) { + var flags = FS.flagModes[str]; + if (typeof flags === 'undefined') { + throw new Error('Unknown file open mode: ' + str); + } + return flags; + },flagsToPermissionString:function (flag) { + var accmode = flag & 2097155; + var perms = ['r', 'w', 'rw'][accmode]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + },nodePermissions:function (node, perms) { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.indexOf('r') !== -1 && !(node.mode & 292)) { + return ERRNO_CODES.EACCES; + } else if (perms.indexOf('w') !== -1 && !(node.mode & 146)) { + return ERRNO_CODES.EACCES; + } else if (perms.indexOf('x') !== -1 && !(node.mode & 73)) { + return ERRNO_CODES.EACCES; + } + return 0; + },mayLookup:function (dir) { + var err = FS.nodePermissions(dir, 'x'); + if (err) return err; + if (!dir.node_ops.lookup) return ERRNO_CODES.EACCES; + return 0; + },mayCreate:function (dir, name) { + try { + var node = FS.lookupNode(dir, name); + return ERRNO_CODES.EEXIST; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + },mayDelete:function (dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var err = FS.nodePermissions(dir, 'wx'); + if (err) { + return err; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return ERRNO_CODES.ENOTDIR; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return ERRNO_CODES.EBUSY; + } + } else { + if (FS.isDir(node.mode)) { + return ERRNO_CODES.EISDIR; + } + } + return 0; + },mayOpen:function (node, flags) { + if (!node) { + return ERRNO_CODES.ENOENT; + } + if (FS.isLink(node.mode)) { + return ERRNO_CODES.ELOOP; + } else if (FS.isDir(node.mode)) { + if ((flags & 2097155) !== 0 || // opening for write + (flags & 512)) { + return ERRNO_CODES.EISDIR; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + },MAX_OPEN_FDS:4096,nextfd:function (fd_start, fd_end) { + fd_start = fd_start || 0; + fd_end = fd_end || FS.MAX_OPEN_FDS; + for (var fd = fd_start; fd <= fd_end; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(ERRNO_CODES.EMFILE); + },getStream:function (fd) { + return FS.streams[fd]; + },createStream:function (stream, fd_start, fd_end) { + if (!FS.FSStream) { + FS.FSStream = function(){}; + FS.FSStream.prototype = {}; + // compatibility + Object.defineProperties(FS.FSStream.prototype, { + object: { + get: function() { return this.node; }, + set: function(val) { this.node = val; } + }, + isRead: { + get: function() { return (this.flags & 2097155) !== 1; } + }, + isWrite: { + get: function() { return (this.flags & 2097155) !== 0; } + }, + isAppend: { + get: function() { return (this.flags & 1024); } + } + }); + } + // clone it, so we can return an instance of FSStream + var newStream = new FS.FSStream(); + for (var p in stream) { + newStream[p] = stream[p]; + } + stream = newStream; + var fd = FS.nextfd(fd_start, fd_end); + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + },closeStream:function (fd) { + FS.streams[fd] = null; + },getStreamFromPtr:function (ptr) { + return FS.streams[ptr - 1]; + },getPtrForStream:function (stream) { + return stream ? stream.fd + 1 : 0; + },chrdev_stream_ops:{open:function (stream) { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + },llseek:function () { + throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); + }},major:function (dev) { + return ((dev) >> 8); + },minor:function (dev) { + return ((dev) & 0xff); + },makedev:function (ma, mi) { + return ((ma) << 8 | (mi)); + },registerDevice:function (dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + },getDevice:function (dev) { + return FS.devices[dev]; + },getMounts:function (mount) { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push.apply(check, m.mounts); + } + + return mounts; + },syncfs:function (populate, callback) { + if (typeof(populate) === 'function') { + callback = populate; + populate = false; + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function done(err) { + if (err) { + if (!done.errored) { + done.errored = true; + return callback(err); + } + return; + } + if (++completed >= mounts.length) { + callback(null); + } + }; + + // sync all mounts + mounts.forEach(function (mount) { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + },mount:function (type, opts, mountpoint) { + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(ERRNO_CODES.EBUSY); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(ERRNO_CODES.EBUSY); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR); + } + } + + var mount = { + type: type, + opts: opts, + mountpoint: mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + },unmount:function (mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach(function (hash) { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.indexOf(current.mount) !== -1) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + },lookup:function (parent, name) { + return parent.node_ops.lookup(parent, name); + },mknod:function (path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name || name === '.' || name === '..') { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + var err = FS.mayCreate(parent, name); + if (err) { + throw new FS.ErrnoError(err); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + return parent.node_ops.mknod(parent, name, mode, dev); + },create:function (path, mode) { + mode = mode !== undefined ? mode : 438 /* 0666 */; + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + },mkdir:function (path, mode) { + mode = mode !== undefined ? mode : 511 /* 0777 */; + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + },mkdev:function (path, mode, dev) { + if (typeof(dev) === 'undefined') { + dev = mode; + mode = 438 /* 0666 */; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + },symlink:function (oldpath, newpath) { + if (!PATH.resolve(oldpath)) { + throw new FS.ErrnoError(ERRNO_CODES.ENOENT); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(ERRNO_CODES.ENOENT); + } + var newname = PATH.basename(newpath); + var err = FS.mayCreate(parent, newname); + if (err) { + throw new FS.ErrnoError(err); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + return parent.node_ops.symlink(parent, newname, oldpath); + },rename:function (old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + try { + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES.EBUSY); + } + if (!old_dir || !new_dir) throw new FS.ErrnoError(ERRNO_CODES.ENOENT); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(ERRNO_CODES.EXDEV); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + // new path should not be an ancestor of the old path + relative = PATH.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var err = FS.mayDelete(old_dir, old_name, isdir); + if (err) { + throw new FS.ErrnoError(err); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + err = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (err) { + throw new FS.ErrnoError(err); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(ERRNO_CODES.EBUSY); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + err = FS.nodePermissions(old_dir, 'w'); + if (err) { + throw new FS.ErrnoError(err); + } + } + try { + if (FS.trackingDelegate['willMovePath']) { + FS.trackingDelegate['willMovePath'](old_path, new_path); + } + } catch(e) { + console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: " + e.message); + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + try { + if (FS.trackingDelegate['onMovePath']) FS.trackingDelegate['onMovePath'](old_path, new_path); + } catch(e) { + console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: " + e.message); + } + },rmdir:function (path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var err = FS.mayDelete(parent, name, true); + if (err) { + throw new FS.ErrnoError(err); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(ERRNO_CODES.EBUSY); + } + try { + if (FS.trackingDelegate['willDeletePath']) { + FS.trackingDelegate['willDeletePath'](path); + } + } catch(e) { + console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: " + e.message); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + try { + if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path); + } catch(e) { + console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: " + e.message); + } + },readdir:function (path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + if (!node.node_ops.readdir) { + throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR); + } + return node.node_ops.readdir(node); + },unlink:function (path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var err = FS.mayDelete(parent, name, false); + if (err) { + // POSIX says unlink should set EPERM, not EISDIR + if (err === ERRNO_CODES.EISDIR) err = ERRNO_CODES.EPERM; + throw new FS.ErrnoError(err); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(ERRNO_CODES.EBUSY); + } + try { + if (FS.trackingDelegate['willDeletePath']) { + FS.trackingDelegate['willDeletePath'](path); + } + } catch(e) { + console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: " + e.message); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + try { + if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path); + } catch(e) { + console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: " + e.message); + } + },readlink:function (path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(ERRNO_CODES.ENOENT); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + return link.node_ops.readlink(link); + },stat:function (path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + if (!node) { + throw new FS.ErrnoError(ERRNO_CODES.ENOENT); + } + if (!node.node_ops.getattr) { + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + return node.node_ops.getattr(node); + },lstat:function (path) { + return FS.stat(path, true); + },chmod:function (path, mode, dontFollow) { + var node; + if (typeof path === 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + node.node_ops.setattr(node, { + mode: (mode & 4095) | (node.mode & ~4095), + timestamp: Date.now() + }); + },lchmod:function (path, mode) { + FS.chmod(path, mode, true); + },fchmod:function (fd, mode) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(ERRNO_CODES.EBADF); + } + FS.chmod(stream.node, mode); + },chown:function (path, uid, gid, dontFollow) { + var node; + if (typeof path === 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + node.node_ops.setattr(node, { + timestamp: Date.now() + // we ignore the uid / gid for now + }); + },lchown:function (path, uid, gid) { + FS.chown(path, uid, gid, true); + },fchown:function (fd, uid, gid) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(ERRNO_CODES.EBADF); + } + FS.chown(stream.node, uid, gid); + },truncate:function (path, len) { + if (len < 0) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + var node; + if (typeof path === 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.EISDIR); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + var err = FS.nodePermissions(node, 'w'); + if (err) { + throw new FS.ErrnoError(err); + } + node.node_ops.setattr(node, { + size: len, + timestamp: Date.now() + }); + },ftruncate:function (fd, len) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(ERRNO_CODES.EBADF); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + FS.truncate(stream.node, len); + },utime:function (path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + node.node_ops.setattr(node, { + timestamp: Math.max(atime, mtime) + }); + },open:function (path, flags, mode, fd_start, fd_end) { + if (path === "") { + throw new FS.ErrnoError(ERRNO_CODES.ENOENT); + } + flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags; + mode = typeof mode === 'undefined' ? 438 /* 0666 */ : mode; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + if (typeof path === 'object') { + node = path; + } else { + path = PATH.normalize(path); + try { + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072) + }); + node = lookup.node; + } catch (e) { + // ignore + } + } + // perhaps we need to create the node + var created = false; + if ((flags & 64)) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if ((flags & 128)) { + throw new FS.ErrnoError(ERRNO_CODES.EEXIST); + } + } else { + // node doesn't exist, try to create it + node = FS.mknod(path, mode, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(ERRNO_CODES.ENOENT); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var err = FS.mayOpen(node, flags); + if (err) { + throw new FS.ErrnoError(err); + } + } + // do truncation if necessary + if ((flags & 512)) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512); + + // register the stream with the filesystem + var stream = FS.createStream({ + node: node, + path: FS.getPath(node), // we want the absolute path to the node + flags: flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }, fd_start, fd_end); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!FS.readFiles) FS.readFiles = {}; + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + Module['printErr']('read file: ' + path); + } + } + try { + if (FS.trackingDelegate['onOpenFile']) { + var trackingFlags = 0; + if ((flags & 2097155) !== 1) { + trackingFlags |= FS.tracking.openFlags.READ; + } + if ((flags & 2097155) !== 0) { + trackingFlags |= FS.tracking.openFlags.WRITE; + } + FS.trackingDelegate['onOpenFile'](path, trackingFlags); + } + } catch(e) { + console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: " + e.message); + } + return stream; + },close:function (stream) { + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + },llseek:function (stream, offset, whence) { + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); + } + return stream.stream_ops.llseek(stream, offset, whence); + },read:function (stream, buffer, offset, length, position) { + if (length < 0 || position < 0) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(ERRNO_CODES.EBADF); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.EISDIR); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + var seeking = true; + if (typeof position === 'undefined') { + position = stream.position; + seeking = false; + } else if (!stream.seekable) { + throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + },write:function (stream, buffer, offset, length, position, canOwn) { + if (length < 0 || position < 0) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(ERRNO_CODES.EBADF); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.EISDIR); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + if (stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = true; + if (typeof position === 'undefined') { + position = stream.position; + seeking = false; + } else if (!stream.seekable) { + throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + try { + if (stream.path && FS.trackingDelegate['onWriteToFile']) FS.trackingDelegate['onWriteToFile'](stream.path); + } catch(e) { + console.log("FS.trackingDelegate['onWriteToFile']('"+path+"') threw an exception: " + e.message); + } + return bytesWritten; + },allocate:function (stream, offset, length) { + if (offset < 0 || length <= 0) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(ERRNO_CODES.EBADF); + } + if (!FS.isFile(stream.node.mode) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.ENODEV); + } + if (!stream.stream_ops.allocate) { + throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP); + } + stream.stream_ops.allocate(stream, offset, length); + },mmap:function (stream, buffer, offset, length, position, prot, flags) { + // TODO if PROT is PROT_WRITE, make sure we have write access + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(ERRNO_CODES.EACCES); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(ERRNO_CODES.ENODEV); + } + return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags); + },ioctl:function (stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(ERRNO_CODES.ENOTTY); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + },readFile:function (path, opts) { + opts = opts || {}; + opts.flags = opts.flags || 'r'; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error('Invalid encoding type "' + opts.encoding + '"'); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = ''; + var utf8 = new Runtime.UTF8Processor(); + for (var i = 0; i < length; i++) { + ret += utf8.processCChar(buf[i]); + } + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + },writeFile:function (path, data, opts) { + opts = opts || {}; + opts.flags = opts.flags || 'w'; + opts.encoding = opts.encoding || 'utf8'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error('Invalid encoding type "' + opts.encoding + '"'); + } + var stream = FS.open(path, opts.flags, opts.mode); + if (opts.encoding === 'utf8') { + var utf8 = new Runtime.UTF8Processor(); + var buf = new Uint8Array(utf8.processJSString(data)); + FS.write(stream, buf, 0, buf.length, 0, opts.canOwn); + } else if (opts.encoding === 'binary') { + FS.write(stream, data, 0, data.length, 0, opts.canOwn); + } + FS.close(stream); + },cwd:function () { + return FS.currentPath; + },chdir:function (path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR); + } + var err = FS.nodePermissions(lookup.node, 'x'); + if (err) { + throw new FS.ErrnoError(err); + } + FS.currentPath = lookup.path; + },createDefaultDirectories:function () { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + },createDefaultDevices:function () { + // create /dev + FS.mkdir('/dev'); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: function() { return 0; }, + write: function() { return 0; } + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using Module['printErr'] + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + // setup /dev/[u]random + var random_device; + if (typeof crypto !== 'undefined') { + // for modern web browsers + var randomBuffer = new Uint8Array(1); + random_device = function() { crypto.getRandomValues(randomBuffer); return randomBuffer[0]; }; + } else if (ENVIRONMENT_IS_NODE) { + // for nodejs + random_device = function() { return require('crypto').randomBytes(1)[0]; }; + } else { + // default for ES5 platforms + random_device = function() { return (Math.random()*256)|0; }; + } + FS.createDevice('/dev', 'random', random_device); + FS.createDevice('/dev', 'urandom', random_device); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + },createStandardStreams:function () { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (Module['stdin']) { + FS.createDevice('/dev', 'stdin', Module['stdin']); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (Module['stdout']) { + FS.createDevice('/dev', 'stdout', null, Module['stdout']); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (Module['stderr']) { + FS.createDevice('/dev', 'stderr', null, Module['stderr']); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open('/dev/stdin', 'r'); + HEAP32[((_stdin)>>2)]=FS.getPtrForStream(stdin); + assert(stdin.fd === 0, 'invalid handle for stdin (' + stdin.fd + ')'); + + var stdout = FS.open('/dev/stdout', 'w'); + HEAP32[((_stdout)>>2)]=FS.getPtrForStream(stdout); + assert(stdout.fd === 1, 'invalid handle for stdout (' + stdout.fd + ')'); + + var stderr = FS.open('/dev/stderr', 'w'); + HEAP32[((_stderr)>>2)]=FS.getPtrForStream(stderr); + assert(stderr.fd === 2, 'invalid handle for stderr (' + stderr.fd + ')'); + },ensureErrnoError:function () { + if (FS.ErrnoError) return; + FS.ErrnoError = function ErrnoError(errno, node) { + this.node = node; + this.setErrno = function(errno) { + this.errno = errno; + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + }; + this.setErrno(errno); + this.message = ERRNO_MESSAGES[errno]; + if (this.stack) this.stack = demangleAll(this.stack); + }; + FS.ErrnoError.prototype = new Error(); + FS.ErrnoError.prototype.constructor = FS.ErrnoError; + // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info) + [ERRNO_CODES.ENOENT].forEach(function(code) { + FS.genericErrors[code] = new FS.ErrnoError(code); + FS.genericErrors[code].stack = ''; + }); + },staticInit:function () { + FS.ensureErrnoError(); + + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + },init:function (input, output, error) { + assert(!FS.init.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)'); + FS.init.initialized = true; + + FS.ensureErrnoError(); + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + Module['stdin'] = input || Module['stdin']; + Module['stdout'] = output || Module['stdout']; + Module['stderr'] = error || Module['stderr']; + + FS.createStandardStreams(); + },quit:function () { + FS.init.initialized = false; + for (var i = 0; i < FS.streams.length; i++) { + var stream = FS.streams[i]; + if (!stream) { + continue; + } + FS.close(stream); + } + },getMode:function (canRead, canWrite) { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + },joinPath:function (parts, forceRelative) { + var path = PATH.join.apply(null, parts); + if (forceRelative && path[0] == '/') path = path.substr(1); + return path; + },absolutePath:function (relative, base) { + return PATH.resolve(base, relative); + },standardizePath:function (path) { + return PATH.normalize(path); + },findObject:function (path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (ret.exists) { + return ret.object; + } else { + ___setErrNo(ret.error); + return null; + } + },analyzePath:function (path, dontResolveLastLink) { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + },createFolder:function (parent, name, canRead, canWrite) { + var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); + var mode = FS.getMode(canRead, canWrite); + return FS.mkdir(path, mode); + },createPath:function (parent, path, canRead, canWrite) { + parent = typeof parent === 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + // ignore EEXIST + } + parent = current; + } + return current; + },createFile:function (parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); + var mode = FS.getMode(canRead, canWrite); + return FS.create(path, mode); + },createDataFile:function (parent, name, data, canRead, canWrite, canOwn) { + var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent; + var mode = FS.getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data === 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 'w'); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + return node; + },createDevice:function (parent, name, input, output) { + var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); + var mode = FS.getMode(!!input, !!output); + if (!FS.createDevice.major) FS.createDevice.major = 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open: function(stream) { + stream.seekable = false; + }, + close: function(stream) { + // flush any pending line data + if (output && output.buffer && output.buffer.length) { + output(10); + } + }, + read: function(stream, buffer, offset, length, pos /* ignored */) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES.EIO); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.timestamp = Date.now(); + } + return bytesRead; + }, + write: function(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES.EIO); + } + } + if (length) { + stream.node.timestamp = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + },createLink:function (parent, name, target, canRead, canWrite) { + var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); + return FS.symlink(target, path); + },forceLoadFile:function (obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + var success = true; + if (typeof XMLHttpRequest !== 'undefined') { + 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."); + } else if (Module['read']) { + // Command-line. + try { + // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as + // read() will try to parse UTF8. + obj.contents = intArrayFromString(Module['read'](obj.url), true); + obj.usedBytes = obj.contents.length; + } catch (e) { + success = false; + } + } else { + throw new Error('Cannot load without read() or XMLHttpRequest.'); + } + if (!success) ___setErrNo(ERRNO_CODES.EIO); + return success; + },createLazyFile:function (parent, name, url, canRead, canWrite) { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse. + function LazyUint8Array() { + this.lengthKnown = false; + this.chunks = []; // Loaded chunks. Index is the chunk number + } + LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + } + LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) { + this.getter = getter; + } + LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var chunkSize = 1024*1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (function(from, to) { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(xhr.response || []); + } else { + return intArrayFromString(xhr.responseText || '', true); + } + }); + var lazyArray = this; + lazyArray.setDataGetter(function(chunkNum) { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block + if (typeof(lazyArray.chunks[chunkNum]) === "undefined") { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!"); + return lazyArray.chunks[chunkNum]; + }); + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + } + if (typeof XMLHttpRequest !== 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + Object.defineProperty(lazyArray, "length", { + get: function() { + if(!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + }); + Object.defineProperty(lazyArray, "chunkSize", { + get: function() { + if(!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + }); + + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperty(node, "usedBytes", { + get: function() { return this.contents.length; } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach(function(key) { + var fn = node.stream_ops[key]; + stream_ops[key] = function forceLoadLazyFile() { + if (!FS.forceLoadFile(node)) { + throw new FS.ErrnoError(ERRNO_CODES.EIO); + } + return fn.apply(null, arguments); + }; + }); + // use a custom read function + stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) { + if (!FS.forceLoadFile(node)) { + throw new FS.ErrnoError(ERRNO_CODES.EIO); + } + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + if (contents.slice) { // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + }; + node.stream_ops = stream_ops; + return node; + },createPreloadedFile:function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn) { + Browser.init(); + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH.resolve(PATH.join2(parent, name)) : parent; + function processData(byteArray) { + function finish(byteArray) { + if (!dontCreateFile) { + FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + if (onload) onload(); + removeRunDependency('cp ' + fullname); + } + var handled = false; + Module['preloadPlugins'].forEach(function(plugin) { + if (handled) return; + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, function() { + if (onerror) onerror(); + removeRunDependency('cp ' + fullname); + }); + handled = true; + } + }); + if (!handled) finish(byteArray); + } + addRunDependency('cp ' + fullname); + if (typeof url == 'string') { + Browser.asyncLoad(url, function(byteArray) { + processData(byteArray); + }, onerror); + } else { + processData(url); + } + },indexedDB:function () { + return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; + },DB_NAME:function () { + return 'EM_FS_' + window.location.pathname; + },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function (paths, onload, onerror) { + onload = onload || function(){}; + onerror = onerror || function(){}; + var indexedDB = FS.indexedDB(); + try { + var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); + } catch (e) { + return onerror(e); + } + openRequest.onupgradeneeded = function openRequest_onupgradeneeded() { + console.log('creating db'); + var db = openRequest.result; + db.createObjectStore(FS.DB_STORE_NAME); + }; + openRequest.onsuccess = function openRequest_onsuccess() { + var db = openRequest.result; + var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite'); + var files = transaction.objectStore(FS.DB_STORE_NAME); + var ok = 0, fail = 0, total = paths.length; + function finish() { + if (fail == 0) onload(); else onerror(); + } + paths.forEach(function(path) { + var putRequest = files.put(FS.analyzePath(path).object.contents, path); + putRequest.onsuccess = function putRequest_onsuccess() { ok++; if (ok + fail == total) finish() }; + putRequest.onerror = function putRequest_onerror() { fail++; if (ok + fail == total) finish() }; + }); + transaction.onerror = onerror; + }; + openRequest.onerror = onerror; + },loadFilesFromDB:function (paths, onload, onerror) { + onload = onload || function(){}; + onerror = onerror || function(){}; + var indexedDB = FS.indexedDB(); + try { + var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); + } catch (e) { + return onerror(e); + } + openRequest.onupgradeneeded = onerror; // no database to load from + openRequest.onsuccess = function openRequest_onsuccess() { + var db = openRequest.result; + try { + var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly'); + } catch(e) { + onerror(e); + return; + } + var files = transaction.objectStore(FS.DB_STORE_NAME); + var ok = 0, fail = 0, total = paths.length; + function finish() { + if (fail == 0) onload(); else onerror(); + } + paths.forEach(function(path) { + var getRequest = files.get(path); + getRequest.onsuccess = function getRequest_onsuccess() { + if (FS.analyzePath(path).exists) { + FS.unlink(path); + } + FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true); + ok++; + if (ok + fail == total) finish(); + }; + getRequest.onerror = function getRequest_onerror() { fail++; if (ok + fail == total) finish() }; + }); + transaction.onerror = onerror; + }; + openRequest.onerror = onerror; + }}; + + + + + function _mkport() { throw 'TODO' }var SOCKFS={mount:function (mount) { + // If Module['websocket'] has already been defined (e.g. for configuring + // the subprotocol/url) use that, if not initialise it to a new object. + Module['websocket'] = (Module['websocket'] && + ('object' === typeof Module['websocket'])) ? Module['websocket'] : {}; + + // Add the Event registration mechanism to the exported websocket configuration + // object so we can register network callbacks from native JavaScript too. + // For more documentation see system/include/emscripten/emscripten.h + Module['websocket']._callbacks = {}; + Module['websocket']['on'] = function(event, callback) { + if ('function' === typeof callback) { + this._callbacks[event] = callback; + } + return this; + }; + + Module['websocket'].emit = function(event, param) { + if ('function' === typeof this._callbacks[event]) { + this._callbacks[event].call(this, param); + } + }; + + // If debug is enabled register simple default logging callbacks for each Event. + + return FS.createNode(null, '/', 16384 | 511 /* 0777 */, 0); + },createSocket:function (family, type, protocol) { + var streaming = type == 1; + if (protocol) { + assert(streaming == (protocol == 6)); // if SOCK_STREAM, must be tcp + } + + // create our internal socket structure + var sock = { + family: family, + type: type, + protocol: protocol, + server: null, + error: null, // Used in getsockopt for SOL_SOCKET/SO_ERROR test + peers: {}, + pending: [], + recv_queue: [], + sock_ops: SOCKFS.websocket_sock_ops + }; + + // create the filesystem node to store the socket structure + var name = SOCKFS.nextname(); + var node = FS.createNode(SOCKFS.root, name, 49152, 0); + node.sock = sock; + + // and the wrapping stream that enables library functions such + // as read and write to indirectly interact with the socket + var stream = FS.createStream({ + path: name, + node: node, + flags: FS.modeStringToFlags('r+'), + seekable: false, + stream_ops: SOCKFS.stream_ops + }); + + // map the new stream to the socket structure (sockets have a 1:1 + // relationship with a stream) + sock.stream = stream; + + return sock; + },getSocket:function (fd) { + var stream = FS.getStream(fd); + if (!stream || !FS.isSocket(stream.node.mode)) { + return null; + } + return stream.node.sock; + },stream_ops:{poll:function (stream) { + var sock = stream.node.sock; + return sock.sock_ops.poll(sock); + },ioctl:function (stream, request, varargs) { + var sock = stream.node.sock; + return sock.sock_ops.ioctl(sock, request, varargs); + },read:function (stream, buffer, offset, length, position /* ignored */) { + var sock = stream.node.sock; + var msg = sock.sock_ops.recvmsg(sock, length); + if (!msg) { + // socket is closed + return 0; + } + buffer.set(msg.buffer, offset); + return msg.buffer.length; + },write:function (stream, buffer, offset, length, position /* ignored */) { + var sock = stream.node.sock; + return sock.sock_ops.sendmsg(sock, buffer, offset, length); + },close:function (stream) { + var sock = stream.node.sock; + sock.sock_ops.close(sock); + }},nextname:function () { + if (!SOCKFS.nextname.current) { + SOCKFS.nextname.current = 0; + } + return 'socket[' + (SOCKFS.nextname.current++) + ']'; + },websocket_sock_ops:{createPeer:function (sock, addr, port) { + var ws; + + if (typeof addr === 'object') { + ws = addr; + addr = null; + port = null; + } + + if (ws) { + // for sockets that've already connected (e.g. we're the server) + // we can inspect the _socket property for the address + if (ws._socket) { + addr = ws._socket.remoteAddress; + port = ws._socket.remotePort; + } + // if we're just now initializing a connection to the remote, + // inspect the url property + else { + var result = /ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url); + if (!result) { + throw new Error('WebSocket URL must be in the format ws(s)://address:port'); + } + addr = result[1]; + port = parseInt(result[2], 10); + } + } else { + // create the actual websocket object and connect + try { + // runtimeConfig gets set to true if WebSocket runtime configuration is available. + var runtimeConfig = (Module['websocket'] && ('object' === typeof Module['websocket'])); + + // The default value is 'ws://' the replace is needed because the compiler replaces '//' comments with '#' + // comments without checking context, so we'd end up with ws:#, the replace swaps the '#' for '//' again. + var url = 'ws:#'.replace('#', '//'); + + if (runtimeConfig) { + if ('string' === typeof Module['websocket']['url']) { + url = Module['websocket']['url']; // Fetch runtime WebSocket URL config. + } + } + + if (url === 'ws://' || url === 'wss://') { // Is the supplied URL config just a prefix, if so complete it. + var parts = addr.split('/'); + url = url + parts[0] + ":" + port + "/" + parts.slice(1).join('/'); + } + + // Make the WebSocket subprotocol (Sec-WebSocket-Protocol) default to binary if no configuration is set. + var subProtocols = 'binary'; // The default value is 'binary' + + if (runtimeConfig) { + if ('string' === typeof Module['websocket']['subprotocol']) { + subProtocols = Module['websocket']['subprotocol']; // Fetch runtime WebSocket subprotocol config. + } + } + + // The regex trims the string (removes spaces at the beginning and end, then splits the string by + // , into an Array. Whitespace removal is important for Websockify and ws. + subProtocols = subProtocols.replace(/^ +| +$/g,"").split(/ *, */); + + // The node ws library API for specifying optional subprotocol is slightly different than the browser's. + var opts = ENVIRONMENT_IS_NODE ? {'protocol': subProtocols.toString()} : subProtocols; + + // If node we use the ws library. + var WebSocket = ENVIRONMENT_IS_NODE ? require('ws') : window['WebSocket']; + ws = new WebSocket(url, opts); + ws.binaryType = 'arraybuffer'; + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES.EHOSTUNREACH); + } + } + + + var peer = { + addr: addr, + port: port, + socket: ws, + dgram_send_queue: [] + }; + + SOCKFS.websocket_sock_ops.addPeer(sock, peer); + SOCKFS.websocket_sock_ops.handlePeerEvents(sock, peer); + + // if this is a bound dgram socket, send the port number first to allow + // us to override the ephemeral port reported to us by remotePort on the + // remote end. + if (sock.type === 2 && typeof sock.sport !== 'undefined') { + peer.dgram_send_queue.push(new Uint8Array([ + 255, 255, 255, 255, + 'p'.charCodeAt(0), 'o'.charCodeAt(0), 'r'.charCodeAt(0), 't'.charCodeAt(0), + ((sock.sport & 0xff00) >> 8) , (sock.sport & 0xff) + ])); + } + + return peer; + },getPeer:function (sock, addr, port) { + return sock.peers[addr + ':' + port]; + },addPeer:function (sock, peer) { + sock.peers[peer.addr + ':' + peer.port] = peer; + },removePeer:function (sock, peer) { + delete sock.peers[peer.addr + ':' + peer.port]; + },handlePeerEvents:function (sock, peer) { + var first = true; + + var handleOpen = function () { + + Module['websocket'].emit('open', sock.stream.fd); + + try { + var queued = peer.dgram_send_queue.shift(); + while (queued) { + peer.socket.send(queued); + queued = peer.dgram_send_queue.shift(); + } + } catch (e) { + // not much we can do here in the way of proper error handling as we've already + // lied and said this data was sent. shut it down. + peer.socket.close(); + } + }; + + function handleMessage(data) { + assert(typeof data !== 'string' && data.byteLength !== undefined); // must receive an ArrayBuffer + data = new Uint8Array(data); // make a typed array view on the array buffer + + + // if this is the port message, override the peer's port with it + var wasfirst = first; + first = false; + if (wasfirst && + data.length === 10 && + data[0] === 255 && data[1] === 255 && data[2] === 255 && data[3] === 255 && + data[4] === 'p'.charCodeAt(0) && data[5] === 'o'.charCodeAt(0) && data[6] === 'r'.charCodeAt(0) && data[7] === 't'.charCodeAt(0)) { + // update the peer's port and it's key in the peer map + var newport = ((data[8] << 8) | data[9]); + SOCKFS.websocket_sock_ops.removePeer(sock, peer); + peer.port = newport; + SOCKFS.websocket_sock_ops.addPeer(sock, peer); + return; + } + + sock.recv_queue.push({ addr: peer.addr, port: peer.port, data: data }); + Module['websocket'].emit('message', sock.stream.fd); + }; + + if (ENVIRONMENT_IS_NODE) { + peer.socket.on('open', handleOpen); + peer.socket.on('message', function(data, flags) { + if (!flags.binary) { + return; + } + handleMessage((new Uint8Array(data)).buffer); // copy from node Buffer -> ArrayBuffer + }); + peer.socket.on('close', function() { + Module['websocket'].emit('close', sock.stream.fd); + }); + peer.socket.on('error', function(error) { + // Although the ws library may pass errors that may be more descriptive than + // ECONNREFUSED they are not necessarily the expected error code e.g. + // ENOTFOUND on getaddrinfo seems to be node.js specific, so using ECONNREFUSED + // is still probably the most useful thing to do. + sock.error = ERRNO_CODES.ECONNREFUSED; // Used in getsockopt for SOL_SOCKET/SO_ERROR test. + Module['websocket'].emit('error', [sock.stream.fd, sock.error, 'ECONNREFUSED: Connection refused']); + // don't throw + }); + } else { + peer.socket.onopen = handleOpen; + peer.socket.onclose = function() { + Module['websocket'].emit('close', sock.stream.fd); + }; + peer.socket.onmessage = function peer_socket_onmessage(event) { + handleMessage(event.data); + }; + peer.socket.onerror = function(error) { + // The WebSocket spec only allows a 'simple event' to be thrown on error, + // so we only really know as much as ECONNREFUSED. + sock.error = ERRNO_CODES.ECONNREFUSED; // Used in getsockopt for SOL_SOCKET/SO_ERROR test. + Module['websocket'].emit('error', [sock.stream.fd, sock.error, 'ECONNREFUSED: Connection refused']); + }; + } + },poll:function (sock) { + if (sock.type === 1 && sock.server) { + // listen sockets should only say they're available for reading + // if there are pending clients. + return sock.pending.length ? (64 | 1) : 0; + } + + var mask = 0; + var dest = sock.type === 1 ? // we only care about the socket state for connection-based sockets + SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport) : + null; + + if (sock.recv_queue.length || + !dest || // connection-less sockets are always ready to read + (dest && dest.socket.readyState === dest.socket.CLOSING) || + (dest && dest.socket.readyState === dest.socket.CLOSED)) { // let recv return 0 once closed + mask |= (64 | 1); + } + + if (!dest || // connection-less sockets are always ready to write + (dest && dest.socket.readyState === dest.socket.OPEN)) { + mask |= 4; + } + + if ((dest && dest.socket.readyState === dest.socket.CLOSING) || + (dest && dest.socket.readyState === dest.socket.CLOSED)) { + mask |= 16; + } + + return mask; + },ioctl:function (sock, request, arg) { + switch (request) { + case 21531: + var bytes = 0; + if (sock.recv_queue.length) { + bytes = sock.recv_queue[0].data.length; + } + HEAP32[((arg)>>2)]=bytes; + return 0; + default: + return ERRNO_CODES.EINVAL; + } + },close:function (sock) { + // if we've spawned a listen server, close it + if (sock.server) { + try { + sock.server.close(); + } catch (e) { + } + sock.server = null; + } + // close any peer connections + var peers = Object.keys(sock.peers); + for (var i = 0; i < peers.length; i++) { + var peer = sock.peers[peers[i]]; + try { + peer.socket.close(); + } catch (e) { + } + SOCKFS.websocket_sock_ops.removePeer(sock, peer); + } + return 0; + },bind:function (sock, addr, port) { + if (typeof sock.saddr !== 'undefined' || typeof sock.sport !== 'undefined') { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already bound + } + sock.saddr = addr; + sock.sport = port || _mkport(); + // in order to emulate dgram sockets, we need to launch a listen server when + // binding on a connection-less socket + // note: this is only required on the server side + if (sock.type === 2) { + // close the existing server if it exists + if (sock.server) { + sock.server.close(); + sock.server = null; + } + // swallow error operation not supported error that occurs when binding in the + // browser where this isn't supported + try { + sock.sock_ops.listen(sock, 0); + } catch (e) { + if (!(e instanceof FS.ErrnoError)) throw e; + if (e.errno !== ERRNO_CODES.EOPNOTSUPP) throw e; + } + } + },connect:function (sock, addr, port) { + if (sock.server) { + throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP); + } + + // TODO autobind + // if (!sock.addr && sock.type == 2) { + // } + + // early out if we're already connected / in the middle of connecting + if (typeof sock.daddr !== 'undefined' && typeof sock.dport !== 'undefined') { + var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport); + if (dest) { + if (dest.socket.readyState === dest.socket.CONNECTING) { + throw new FS.ErrnoError(ERRNO_CODES.EALREADY); + } else { + throw new FS.ErrnoError(ERRNO_CODES.EISCONN); + } + } + } + + // add the socket to our peer list and set our + // destination address / port to match + var peer = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port); + sock.daddr = peer.addr; + sock.dport = peer.port; + + // always "fail" in non-blocking mode + throw new FS.ErrnoError(ERRNO_CODES.EINPROGRESS); + },listen:function (sock, backlog) { + if (!ENVIRONMENT_IS_NODE) { + throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP); + } + if (sock.server) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already listening + } + var WebSocketServer = require('ws').Server; + var host = sock.saddr; + sock.server = new WebSocketServer({ + host: host, + port: sock.sport + // TODO support backlog + }); + Module['websocket'].emit('listen', sock.stream.fd); // Send Event with listen fd. + + sock.server.on('connection', function(ws) { + if (sock.type === 1) { + var newsock = SOCKFS.createSocket(sock.family, sock.type, sock.protocol); + + // create a peer on the new socket + var peer = SOCKFS.websocket_sock_ops.createPeer(newsock, ws); + newsock.daddr = peer.addr; + newsock.dport = peer.port; + + // push to queue for accept to pick up + sock.pending.push(newsock); + Module['websocket'].emit('connection', newsock.stream.fd); + } else { + // create a peer on the listen socket so calling sendto + // with the listen socket and an address will resolve + // to the correct client + SOCKFS.websocket_sock_ops.createPeer(sock, ws); + Module['websocket'].emit('connection', sock.stream.fd); + } + }); + sock.server.on('closed', function() { + Module['websocket'].emit('close', sock.stream.fd); + sock.server = null; + }); + sock.server.on('error', function(error) { + // Although the ws library may pass errors that may be more descriptive than + // ECONNREFUSED they are not necessarily the expected error code e.g. + // ENOTFOUND on getaddrinfo seems to be node.js specific, so using EHOSTUNREACH + // is still probably the most useful thing to do. This error shouldn't + // occur in a well written app as errors should get trapped in the compiled + // app's own getaddrinfo call. + sock.error = ERRNO_CODES.EHOSTUNREACH; // Used in getsockopt for SOL_SOCKET/SO_ERROR test. + Module['websocket'].emit('error', [sock.stream.fd, sock.error, 'EHOSTUNREACH: Host is unreachable']); + // don't throw + }); + },accept:function (listensock) { + if (!listensock.server) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + var newsock = listensock.pending.shift(); + newsock.stream.flags = listensock.stream.flags; + return newsock; + },getname:function (sock, peer) { + var addr, port; + if (peer) { + if (sock.daddr === undefined || sock.dport === undefined) { + throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); + } + addr = sock.daddr; + port = sock.dport; + } else { + // TODO saddr and sport will be set for bind()'d UDP sockets, but what + // should we be returning for TCP sockets that've been connect()'d? + addr = sock.saddr || 0; + port = sock.sport || 0; + } + return { addr: addr, port: port }; + },sendmsg:function (sock, buffer, offset, length, addr, port) { + if (sock.type === 2) { + // connection-less sockets will honor the message address, + // and otherwise fall back to the bound destination address + if (addr === undefined || port === undefined) { + addr = sock.daddr; + port = sock.dport; + } + // if there was no address to fall back to, error out + if (addr === undefined || port === undefined) { + throw new FS.ErrnoError(ERRNO_CODES.EDESTADDRREQ); + } + } else { + // connection-based sockets will only use the bound + addr = sock.daddr; + port = sock.dport; + } + + // find the peer for the destination address + var dest = SOCKFS.websocket_sock_ops.getPeer(sock, addr, port); + + // early out if not connected with a connection-based socket + if (sock.type === 1) { + if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) { + throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); + } else if (dest.socket.readyState === dest.socket.CONNECTING) { + throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); + } + } + + // create a copy of the incoming data to send, as the WebSocket API + // doesn't work entirely with an ArrayBufferView, it'll just send + // the entire underlying buffer + var data; + if (buffer instanceof Array || buffer instanceof ArrayBuffer) { + data = buffer.slice(offset, offset + length); + } else { // ArrayBufferView + data = buffer.buffer.slice(buffer.byteOffset + offset, buffer.byteOffset + offset + length); + } + + // if we're emulating a connection-less dgram socket and don't have + // a cached connection, queue the buffer to send upon connect and + // lie, saying the data was sent now. + if (sock.type === 2) { + if (!dest || dest.socket.readyState !== dest.socket.OPEN) { + // if we're not connected, open a new connection + if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) { + dest = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port); + } + dest.dgram_send_queue.push(data); + return length; + } + } + + try { + // send the actual data + dest.socket.send(data); + return length; + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + },recvmsg:function (sock, length) { + // http://pubs.opengroup.org/onlinepubs/7908799/xns/recvmsg.html + if (sock.type === 1 && sock.server) { + // tcp servers should not be recv()'ing on the listen socket + throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); + } + + var queued = sock.recv_queue.shift(); + if (!queued) { + if (sock.type === 1) { + var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport); + + if (!dest) { + // if we have a destination address but are not connected, error out + throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); + } + else if (dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) { + // return null if the socket has closed + return null; + } + else { + // else, our socket is in a valid state but truly has nothing available + throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); + } + } else { + throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); + } + } + + // queued.data will be an ArrayBuffer if it's unadulterated, but if it's + // requeued TCP data it'll be an ArrayBufferView + var queuedLength = queued.data.byteLength || queued.data.length; + var queuedOffset = queued.data.byteOffset || 0; + var queuedBuffer = queued.data.buffer || queued.data; + var bytesRead = Math.min(length, queuedLength); + var res = { + buffer: new Uint8Array(queuedBuffer, queuedOffset, bytesRead), + addr: queued.addr, + port: queued.port + }; + + + // push back any unread data for TCP connections + if (sock.type === 1 && bytesRead < queuedLength) { + var bytesRemaining = queuedLength - bytesRead; + queued.data = new Uint8Array(queuedBuffer, queuedOffset + bytesRead, bytesRemaining); + sock.recv_queue.unshift(queued); + } + + return res; + }}};function _send(fd, buf, len, flags) { + var sock = SOCKFS.getSocket(fd); + if (!sock) { + ___setErrNo(ERRNO_CODES.EBADF); + return -1; + } + // TODO honor flags + return _write(fd, buf, len); + } + + function _pwrite(fildes, buf, nbyte, offset) { + // ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset); + // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html + var stream = FS.getStream(fildes); + if (!stream) { + ___setErrNo(ERRNO_CODES.EBADF); + return -1; + } + try { + var slab = HEAP8; + return FS.write(stream, slab, buf, nbyte, offset); + } catch (e) { + FS.handleFSError(e); + return -1; + } + }function _write(fildes, buf, nbyte) { + // ssize_t write(int fildes, const void *buf, size_t nbyte); + // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html + var stream = FS.getStream(fildes); + if (!stream) { + ___setErrNo(ERRNO_CODES.EBADF); + return -1; + } + + + try { + var slab = HEAP8; + return FS.write(stream, slab, buf, nbyte); + } catch (e) { + FS.handleFSError(e); + return -1; + } + } + + function _fileno(stream) { + // int fileno(FILE *stream); + // http://pubs.opengroup.org/onlinepubs/000095399/functions/fileno.html + stream = FS.getStreamFromPtr(stream); + if (!stream) return -1; + return stream.fd; + }function _fwrite(ptr, size, nitems, stream) { + // size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream); + // http://pubs.opengroup.org/onlinepubs/000095399/functions/fwrite.html + var bytesToWrite = nitems * size; + if (bytesToWrite == 0) return 0; + var fd = _fileno(stream); + var bytesWritten = _write(fd, ptr, bytesToWrite); + if (bytesWritten == -1) { + var streamObj = FS.getStreamFromPtr(stream); + if (streamObj) streamObj.error = true; + return 0; + } else { + return (bytesWritten / size)|0; + } + } + + + + Module["_strlen"] = _strlen; + + function __reallyNegative(x) { + return x < 0 || (x === 0 && (1/x) === -Infinity); + }function __formatString(format, varargs) { + var textIndex = format; + var argIndex = 0; + function getNextArg(type) { + // NOTE: Explicitly ignoring type safety. Otherwise this fails: + // int x = 4; printf("%c\n", (char)x); + var ret; + if (type === 'double') { + ret = (HEAP32[((tempDoublePtr)>>2)]=HEAP32[(((varargs)+(argIndex))>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[(((varargs)+((argIndex)+(4)))>>2)],(+(HEAPF64[(tempDoublePtr)>>3]))); + } else if (type == 'i64') { + ret = [HEAP32[(((varargs)+(argIndex))>>2)], + HEAP32[(((varargs)+(argIndex+4))>>2)]]; + + } else { + type = 'i32'; // varargs are always i32, i64, or double + ret = HEAP32[(((varargs)+(argIndex))>>2)]; + } + argIndex += Runtime.getNativeFieldSize(type); + return ret; + } + + var ret = []; + var curr, next, currArg; + while(1) { + var startTextIndex = textIndex; + curr = HEAP8[((textIndex)>>0)]; + if (curr === 0) break; + next = HEAP8[((textIndex+1)>>0)]; + if (curr == 37) { + // Handle flags. + var flagAlwaysSigned = false; + var flagLeftAlign = false; + var flagAlternative = false; + var flagZeroPad = false; + var flagPadSign = false; + flagsLoop: while (1) { + switch (next) { + case 43: + flagAlwaysSigned = true; + break; + case 45: + flagLeftAlign = true; + break; + case 35: + flagAlternative = true; + break; + case 48: + if (flagZeroPad) { + break flagsLoop; + } else { + flagZeroPad = true; + break; + } + case 32: + flagPadSign = true; + break; + default: + break flagsLoop; + } + textIndex++; + next = HEAP8[((textIndex+1)>>0)]; + } + + // Handle width. + var width = 0; + if (next == 42) { + width = getNextArg('i32'); + textIndex++; + next = HEAP8[((textIndex+1)>>0)]; + } else { + while (next >= 48 && next <= 57) { + width = width * 10 + (next - 48); + textIndex++; + next = HEAP8[((textIndex+1)>>0)]; + } + } + + // Handle precision. + var precisionSet = false, precision = -1; + if (next == 46) { + precision = 0; + precisionSet = true; + textIndex++; + next = HEAP8[((textIndex+1)>>0)]; + if (next == 42) { + precision = getNextArg('i32'); + textIndex++; + } else { + while(1) { + var precisionChr = HEAP8[((textIndex+1)>>0)]; + if (precisionChr < 48 || + precisionChr > 57) break; + precision = precision * 10 + (precisionChr - 48); + textIndex++; + } + } + next = HEAP8[((textIndex+1)>>0)]; + } + if (precision < 0) { + precision = 6; // Standard default. + precisionSet = false; + } + + // Handle integer sizes. WARNING: These assume a 32-bit architecture! + var argSize; + switch (String.fromCharCode(next)) { + case 'h': + var nextNext = HEAP8[((textIndex+2)>>0)]; + if (nextNext == 104) { + textIndex++; + argSize = 1; // char (actually i32 in varargs) + } else { + argSize = 2; // short (actually i32 in varargs) + } + break; + case 'l': + var nextNext = HEAP8[((textIndex+2)>>0)]; + if (nextNext == 108) { + textIndex++; + argSize = 8; // long long + } else { + argSize = 4; // long + } + break; + case 'L': // long long + case 'q': // int64_t + case 'j': // intmax_t + argSize = 8; + break; + case 'z': // size_t + case 't': // ptrdiff_t + case 'I': // signed ptrdiff_t or unsigned size_t + argSize = 4; + break; + default: + argSize = null; + } + if (argSize) textIndex++; + next = HEAP8[((textIndex+1)>>0)]; + + // Handle type specifier. + switch (String.fromCharCode(next)) { + case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': { + // Integer. + var signed = next == 100 || next == 105; + argSize = argSize || 4; + var currArg = getNextArg('i' + (argSize * 8)); + var origArg = currArg; + var argText; + // Flatten i64-1 [low, high] into a (slightly rounded) double + if (argSize == 8) { + currArg = Runtime.makeBigInt(currArg[0], currArg[1], next == 117); + } + // Truncate to requested size. + if (argSize <= 4) { + var limit = Math.pow(256, argSize) - 1; + currArg = (signed ? reSign : unSign)(currArg & limit, argSize * 8); + } + // Format the number. + var currAbsArg = Math.abs(currArg); + var prefix = ''; + if (next == 100 || next == 105) { + if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], null); else + argText = reSign(currArg, 8 * argSize, 1).toString(10); + } else if (next == 117) { + if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], true); else + argText = unSign(currArg, 8 * argSize, 1).toString(10); + currArg = Math.abs(currArg); + } else if (next == 111) { + argText = (flagAlternative ? '0' : '') + currAbsArg.toString(8); + } else if (next == 120 || next == 88) { + prefix = (flagAlternative && currArg != 0) ? '0x' : ''; + if (argSize == 8 && i64Math) { + if (origArg[1]) { + argText = (origArg[1]>>>0).toString(16); + var lower = (origArg[0]>>>0).toString(16); + while (lower.length < 8) lower = '0' + lower; + argText += lower; + } else { + argText = (origArg[0]>>>0).toString(16); + } + } else + if (currArg < 0) { + // Represent negative numbers in hex as 2's complement. + currArg = -currArg; + argText = (currAbsArg - 1).toString(16); + var buffer = []; + for (var i = 0; i < argText.length; i++) { + buffer.push((0xF - parseInt(argText[i], 16)).toString(16)); + } + argText = buffer.join(''); + while (argText.length < argSize * 2) argText = 'f' + argText; + } else { + argText = currAbsArg.toString(16); + } + if (next == 88) { + prefix = prefix.toUpperCase(); + argText = argText.toUpperCase(); + } + } else if (next == 112) { + if (currAbsArg === 0) { + argText = '(nil)'; + } else { + prefix = '0x'; + argText = currAbsArg.toString(16); + } + } + if (precisionSet) { + while (argText.length < precision) { + argText = '0' + argText; + } + } + + // Add sign if needed + if (currArg >= 0) { + if (flagAlwaysSigned) { + prefix = '+' + prefix; + } else if (flagPadSign) { + prefix = ' ' + prefix; + } + } + + // Move sign to prefix so we zero-pad after the sign + if (argText.charAt(0) == '-') { + prefix = '-' + prefix; + argText = argText.substr(1); + } + + // Add padding. + while (prefix.length + argText.length < width) { + if (flagLeftAlign) { + argText += ' '; + } else { + if (flagZeroPad) { + argText = '0' + argText; + } else { + prefix = ' ' + prefix; + } + } + } + + // Insert the result into the buffer. + argText = prefix + argText; + argText.split('').forEach(function(chr) { + ret.push(chr.charCodeAt(0)); + }); + break; + } + case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': { + // Float. + var currArg = getNextArg('double'); + var argText; + if (isNaN(currArg)) { + argText = 'nan'; + flagZeroPad = false; + } else if (!isFinite(currArg)) { + argText = (currArg < 0 ? '-' : '') + 'inf'; + flagZeroPad = false; + } else { + var isGeneral = false; + var effectivePrecision = Math.min(precision, 20); + + // Convert g/G to f/F or e/E, as per: + // http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html + if (next == 103 || next == 71) { + isGeneral = true; + precision = precision || 1; + var exponent = parseInt(currArg.toExponential(effectivePrecision).split('e')[1], 10); + if (precision > exponent && exponent >= -4) { + next = ((next == 103) ? 'f' : 'F').charCodeAt(0); + precision -= exponent + 1; + } else { + next = ((next == 103) ? 'e' : 'E').charCodeAt(0); + precision--; + } + effectivePrecision = Math.min(precision, 20); + } + + if (next == 101 || next == 69) { + argText = currArg.toExponential(effectivePrecision); + // Make sure the exponent has at least 2 digits. + if (/[eE][-+]\d$/.test(argText)) { + argText = argText.slice(0, -1) + '0' + argText.slice(-1); + } + } else if (next == 102 || next == 70) { + argText = currArg.toFixed(effectivePrecision); + if (currArg === 0 && __reallyNegative(currArg)) { + argText = '-' + argText; + } + } + + var parts = argText.split('e'); + if (isGeneral && !flagAlternative) { + // Discard trailing zeros and periods. + while (parts[0].length > 1 && parts[0].indexOf('.') != -1 && + (parts[0].slice(-1) == '0' || parts[0].slice(-1) == '.')) { + parts[0] = parts[0].slice(0, -1); + } + } else { + // Make sure we have a period in alternative mode. + if (flagAlternative && argText.indexOf('.') == -1) parts[0] += '.'; + // Zero pad until required precision. + while (precision > effectivePrecision++) parts[0] += '0'; + } + argText = parts[0] + (parts.length > 1 ? 'e' + parts[1] : ''); + + // Capitalize 'E' if needed. + if (next == 69) argText = argText.toUpperCase(); + + // Add sign. + if (currArg >= 0) { + if (flagAlwaysSigned) { + argText = '+' + argText; + } else if (flagPadSign) { + argText = ' ' + argText; + } + } + } + + // Add padding. + while (argText.length < width) { + if (flagLeftAlign) { + argText += ' '; + } else { + if (flagZeroPad && (argText[0] == '-' || argText[0] == '+')) { + argText = argText[0] + '0' + argText.slice(1); + } else { + argText = (flagZeroPad ? '0' : ' ') + argText; + } + } + } + + // Adjust case. + if (next < 97) argText = argText.toUpperCase(); + + // Insert the result into the buffer. + argText.split('').forEach(function(chr) { + ret.push(chr.charCodeAt(0)); + }); + break; + } + case 's': { + // String. + var arg = getNextArg('i8*'); + var argLength = arg ? _strlen(arg) : '(null)'.length; + if (precisionSet) argLength = Math.min(argLength, precision); + if (!flagLeftAlign) { + while (argLength < width--) { + ret.push(32); + } + } + if (arg) { + for (var i = 0; i < argLength; i++) { + ret.push(HEAPU8[((arg++)>>0)]); + } + } else { + ret = ret.concat(intArrayFromString('(null)'.substr(0, argLength), true)); + } + if (flagLeftAlign) { + while (argLength < width--) { + ret.push(32); + } + } + break; + } + case 'c': { + // Character. + if (flagLeftAlign) ret.push(getNextArg('i8')); + while (--width > 0) { + ret.push(32); + } + if (!flagLeftAlign) ret.push(getNextArg('i8')); + break; + } + case 'n': { + // Write the length written so far to the next parameter. + var ptr = getNextArg('i32*'); + HEAP32[((ptr)>>2)]=ret.length; + break; + } + case '%': { + // Literal percent sign. + ret.push(curr); + break; + } + default: { + // Unknown specifiers remain untouched. + for (var i = startTextIndex; i < textIndex + 2; i++) { + ret.push(HEAP8[((i)>>0)]); + } + } + } + textIndex += 2; + // TODO: Support a/A (hex float) and m (last error) specifiers. + // TODO: Support %1${specifier} for arg selection. + } else { + ret.push(curr); + textIndex += 1; + } + } + return ret; + }function _fprintf(stream, format, varargs) { + // int fprintf(FILE *restrict stream, const char *restrict format, ...); + // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html + var result = __formatString(format, varargs); + var stack = Runtime.stackSave(); + var ret = _fwrite(allocate(result, 'i8', ALLOC_STACK), 1, result.length, stream); + Runtime.stackRestore(stack); + return ret; + }function _printf(format, varargs) { + // int printf(const char *restrict format, ...); + // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html + var stdout = HEAP32[((_stdout)>>2)]; + return _fprintf(stdout, format, varargs); + } + + + + function _emscripten_memcpy_big(dest, src, num) { + HEAPU8.set(HEAPU8.subarray(src, src+num), dest); + return dest; + } + Module["_memcpy"] = _memcpy; + + var _log=Math_log; + + var _cos=Math_cos; + + var _llvm_pow_f64=Math_pow; + + function _sbrk(bytes) { + // Implement a Linux-like 'memory area' for our 'process'. + // Changes the size of the memory area by |bytes|; returns the + // address of the previous top ('break') of the memory area + // We control the "dynamic" memory - DYNAMIC_BASE to DYNAMICTOP + var self = _sbrk; + if (!self.called) { + DYNAMICTOP = alignMemoryPage(DYNAMICTOP); // make sure we start out aligned + self.called = true; + assert(Runtime.dynamicAlloc); + self.alloc = Runtime.dynamicAlloc; + Runtime.dynamicAlloc = function() { abort('cannot dynamically allocate, sbrk now has control') }; + } + var ret = DYNAMICTOP; + if (bytes != 0) self.alloc(bytes); + return ret; // Previous break location. + } + + function ___errno_location() { + return ___errno_state; + } + + var _sqrt=Math_sqrt; + + + Module["_strcpy"] = _strcpy; + + + function __exit(status) { + // void _exit(int status); + // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html + Module['exit'](status); + }function _exit(status) { + __exit(status); + } + + function _time(ptr) { + var ret = (Date.now()/1000)|0; + if (ptr) { + HEAP32[((ptr)>>2)]=ret; + } + return ret; + } + + var Browser={mainLoop:{scheduler:null,method:"",shouldPause:false,paused:false,queue:[],pause:function () { + Browser.mainLoop.shouldPause = true; + },resume:function () { + if (Browser.mainLoop.paused) { + Browser.mainLoop.paused = false; + Browser.mainLoop.scheduler(); + } + Browser.mainLoop.shouldPause = false; + },updateStatus:function () { + if (Module['setStatus']) { + var message = Module['statusMessage'] || 'Please wait...'; + var remaining = Browser.mainLoop.remainingBlockers; + var expected = Browser.mainLoop.expectedBlockers; + if (remaining) { + if (remaining < expected) { + Module['setStatus'](message + ' (' + (expected - remaining) + '/' + expected + ')'); + } else { + Module['setStatus'](message); + } + } else { + Module['setStatus'](''); + } + } + },runIter:function (func) { + if (ABORT) return; + if (Module['preMainLoop']) { + var preRet = Module['preMainLoop'](); + if (preRet === false) { + return; // |return false| skips a frame + } + } + try { + func(); + } catch (e) { + if (e instanceof ExitStatus) { + return; + } else { + if (e && typeof e === 'object' && e.stack) Module.printErr('exception thrown: ' + [e, e.stack]); + throw e; + } + } + if (Module['postMainLoop']) Module['postMainLoop'](); + }},isFullScreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function () { + if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; // needs to exist even in workers + + if (Browser.initted) return; + Browser.initted = true; + + try { + new Blob(); + Browser.hasBlobConstructor = true; + } catch(e) { + Browser.hasBlobConstructor = false; + console.log("warning: no blob constructor, cannot create blobs with mimetypes"); + } + Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null)); + Browser.URLObject = typeof window != "undefined" ? (window.URL ? window.URL : window.webkitURL) : undefined; + if (!Module.noImageDecoding && typeof Browser.URLObject === 'undefined') { + console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."); + Module.noImageDecoding = true; + } + + // Support for plugins that can process preloaded files. You can add more of these to + // your app by creating and appending to Module.preloadPlugins. + // + // Each plugin is asked if it can handle a file based on the file's name. If it can, + // it is given the file's raw data. When it is done, it calls a callback with the file's + // (possibly modified) data. For example, a plugin might decompress a file, or it + // might create some side data structure for use later (like an Image element, etc.). + + var imagePlugin = {}; + imagePlugin['canHandle'] = function imagePlugin_canHandle(name) { + return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name); + }; + imagePlugin['handle'] = function imagePlugin_handle(byteArray, name, onload, onerror) { + var b = null; + if (Browser.hasBlobConstructor) { + try { + b = new Blob([byteArray], { type: Browser.getMimetype(name) }); + if (b.size !== byteArray.length) { // Safari bug #118630 + // Safari's Blob can only take an ArrayBuffer + b = new Blob([(new Uint8Array(byteArray)).buffer], { type: Browser.getMimetype(name) }); + } + } catch(e) { + Runtime.warnOnce('Blob constructor present but fails: ' + e + '; falling back to blob builder'); + } + } + if (!b) { + var bb = new Browser.BlobBuilder(); + bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range + b = bb.getBlob(); + } + var url = Browser.URLObject.createObjectURL(b); + assert(typeof url == 'string', 'createObjectURL must return a url as a string'); + var img = new Image(); + img.onload = function img_onload() { + assert(img.complete, 'Image ' + name + ' could not be decoded'); + var canvas = document.createElement('canvas'); + canvas.width = img.width; + canvas.height = img.height; + var ctx = canvas.getContext('2d'); + ctx.drawImage(img, 0, 0); + Module["preloadedImages"][name] = canvas; + Browser.URLObject.revokeObjectURL(url); + if (onload) onload(byteArray); + }; + img.onerror = function img_onerror(event) { + console.log('Image ' + url + ' could not be decoded'); + if (onerror) onerror(); + }; + img.src = url; + }; + Module['preloadPlugins'].push(imagePlugin); + + var audioPlugin = {}; + audioPlugin['canHandle'] = function audioPlugin_canHandle(name) { + return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wav': 1, '.mp3': 1 }; + }; + audioPlugin['handle'] = function audioPlugin_handle(byteArray, name, onload, onerror) { + var done = false; + function finish(audio) { + if (done) return; + done = true; + Module["preloadedAudios"][name] = audio; + if (onload) onload(byteArray); + } + function fail() { + if (done) return; + done = true; + Module["preloadedAudios"][name] = new Audio(); // empty shim + if (onerror) onerror(); + } + if (Browser.hasBlobConstructor) { + try { + var b = new Blob([byteArray], { type: Browser.getMimetype(name) }); + } catch(e) { + return fail(); + } + var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this! + assert(typeof url == 'string', 'createObjectURL must return a url as a string'); + var audio = new Audio(); + audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926 + audio.onerror = function audio_onerror(event) { + if (done) return; + console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach'); + function encode64(data) { + var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + var PAD = '='; + var ret = ''; + var leftchar = 0; + var leftbits = 0; + for (var i = 0; i < data.length; i++) { + leftchar = (leftchar << 8) | data[i]; + leftbits += 8; + while (leftbits >= 6) { + var curr = (leftchar >> (leftbits-6)) & 0x3f; + leftbits -= 6; + ret += BASE[curr]; + } + } + if (leftbits == 2) { + ret += BASE[(leftchar&3) << 4]; + ret += PAD + PAD; + } else if (leftbits == 4) { + ret += BASE[(leftchar&0xf) << 2]; + ret += PAD; + } + return ret; + } + audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encode64(byteArray); + finish(audio); // we don't wait for confirmation this worked - but it's worth trying + }; + audio.src = url; + // workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror + Browser.safeSetTimeout(function() { + finish(audio); // try to use it even though it is not necessarily ready to play + }, 10000); + } else { + return fail(); + } + }; + Module['preloadPlugins'].push(audioPlugin); + + // Canvas event setup + + var canvas = Module['canvas']; + function pointerLockChange() { + Browser.pointerLock = document['pointerLockElement'] === canvas || + document['mozPointerLockElement'] === canvas || + document['webkitPointerLockElement'] === canvas || + document['msPointerLockElement'] === canvas; + } + if (canvas) { + // forced aspect ratio can be enabled by defining 'forcedAspectRatio' on Module + // Module['forcedAspectRatio'] = 4 / 3; + + canvas.requestPointerLock = canvas['requestPointerLock'] || + canvas['mozRequestPointerLock'] || + canvas['webkitRequestPointerLock'] || + canvas['msRequestPointerLock'] || + function(){}; + canvas.exitPointerLock = document['exitPointerLock'] || + document['mozExitPointerLock'] || + document['webkitExitPointerLock'] || + document['msExitPointerLock'] || + function(){}; // no-op if function does not exist + canvas.exitPointerLock = canvas.exitPointerLock.bind(document); + + + document.addEventListener('pointerlockchange', pointerLockChange, false); + document.addEventListener('mozpointerlockchange', pointerLockChange, false); + document.addEventListener('webkitpointerlockchange', pointerLockChange, false); + document.addEventListener('mspointerlockchange', pointerLockChange, false); + + if (Module['elementPointerLock']) { + canvas.addEventListener("click", function(ev) { + if (!Browser.pointerLock && canvas.requestPointerLock) { + canvas.requestPointerLock(); + ev.preventDefault(); + } + }, false); + } + } + },createContext:function (canvas, useWebGL, setInModule, webGLContextAttributes) { + if (useWebGL && Module.ctx && canvas == Module.canvas) return Module.ctx; // no need to recreate GL context if it's already been created for this canvas. + + var ctx; + var contextHandle; + if (useWebGL) { + // For GLES2/desktop GL compatibility, adjust a few defaults to be different to WebGL defaults, so that they align better with the desktop defaults. + var contextAttributes = { + antialias: false, + alpha: false + }; + + if (webGLContextAttributes) { + for (var attribute in webGLContextAttributes) { + contextAttributes[attribute] = webGLContextAttributes[attribute]; + } + } + + contextHandle = GL.createContext(canvas, contextAttributes); + if (contextHandle) { + ctx = GL.getContext(contextHandle).GLctx; + } + // Set the background of the WebGL canvas to black + canvas.style.backgroundColor = "black"; + } else { + ctx = canvas.getContext('2d'); + } + + if (!ctx) return null; + + if (setInModule) { + if (!useWebGL) assert(typeof GLctx === 'undefined', 'cannot set in module if GLctx is used, but we are a non-GL context that would replace it'); + + Module.ctx = ctx; + if (useWebGL) GL.makeContextCurrent(contextHandle); + Module.useWebGL = useWebGL; + Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() }); + Browser.init(); + } + return ctx; + },destroyContext:function (canvas, useWebGL, setInModule) {},fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:function (lockPointer, resizeCanvas) { + Browser.lockPointer = lockPointer; + Browser.resizeCanvas = resizeCanvas; + if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = true; + if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false; + + var canvas = Module['canvas']; + function fullScreenChange() { + Browser.isFullScreen = false; + var canvasContainer = canvas.parentNode; + if ((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] || + document['mozFullScreenElement'] || document['mozFullscreenElement'] || + document['fullScreenElement'] || document['fullscreenElement'] || + document['msFullScreenElement'] || document['msFullscreenElement'] || + document['webkitCurrentFullScreenElement']) === canvasContainer) { + canvas.cancelFullScreen = document['cancelFullScreen'] || + document['mozCancelFullScreen'] || + document['webkitCancelFullScreen'] || + document['msExitFullscreen'] || + document['exitFullscreen'] || + function() {}; + canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document); + if (Browser.lockPointer) canvas.requestPointerLock(); + Browser.isFullScreen = true; + if (Browser.resizeCanvas) Browser.setFullScreenCanvasSize(); + } else { + + // remove the full screen specific parent of the canvas again to restore the HTML structure from before going full screen + canvasContainer.parentNode.insertBefore(canvas, canvasContainer); + canvasContainer.parentNode.removeChild(canvasContainer); + + if (Browser.resizeCanvas) Browser.setWindowedCanvasSize(); + } + if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullScreen); + Browser.updateCanvasDimensions(canvas); + } + + if (!Browser.fullScreenHandlersInstalled) { + Browser.fullScreenHandlersInstalled = true; + document.addEventListener('fullscreenchange', fullScreenChange, false); + document.addEventListener('mozfullscreenchange', fullScreenChange, false); + document.addEventListener('webkitfullscreenchange', fullScreenChange, false); + document.addEventListener('MSFullscreenChange', fullScreenChange, false); + } + + // create a new parent to ensure the canvas has no siblings. this allows browsers to optimize full screen performance when its parent is the full screen root + var canvasContainer = document.createElement("div"); + canvas.parentNode.insertBefore(canvasContainer, canvas); + canvasContainer.appendChild(canvas); + + // use parent of canvas as full screen root to allow aspect ratio correction (Firefox stretches the root to screen size) + canvasContainer.requestFullScreen = canvasContainer['requestFullScreen'] || + canvasContainer['mozRequestFullScreen'] || + canvasContainer['msRequestFullscreen'] || + (canvasContainer['webkitRequestFullScreen'] ? function() { canvasContainer['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null); + canvasContainer.requestFullScreen(); + },nextRAF:0,fakeRequestAnimationFrame:function (func) { + // try to keep 60fps between calls to here + var now = Date.now(); + if (Browser.nextRAF === 0) { + Browser.nextRAF = now + 1000/60; + } else { + while (now + 2 >= Browser.nextRAF) { // fudge a little, to avoid timer jitter causing us to do lots of delay:0 + Browser.nextRAF += 1000/60; + } + } + var delay = Math.max(Browser.nextRAF - now, 0); + setTimeout(func, delay); + },requestAnimationFrame:function requestAnimationFrame(func) { + if (typeof window === 'undefined') { // Provide fallback to setTimeout if window is undefined (e.g. in Node.js) + Browser.fakeRequestAnimationFrame(func); + } else { + if (!window.requestAnimationFrame) { + window.requestAnimationFrame = window['requestAnimationFrame'] || + window['mozRequestAnimationFrame'] || + window['webkitRequestAnimationFrame'] || + window['msRequestAnimationFrame'] || + window['oRequestAnimationFrame'] || + Browser.fakeRequestAnimationFrame; + } + window.requestAnimationFrame(func); + } + },safeCallback:function (func) { + return function() { + if (!ABORT) return func.apply(null, arguments); + }; + },safeRequestAnimationFrame:function (func) { + return Browser.requestAnimationFrame(function() { + if (!ABORT) func(); + }); + },safeSetTimeout:function (func, timeout) { + Module['noExitRuntime'] = true; + return setTimeout(function() { + if (!ABORT) func(); + }, timeout); + },safeSetInterval:function (func, timeout) { + Module['noExitRuntime'] = true; + return setInterval(function() { + if (!ABORT) func(); + }, timeout); + },getMimetype:function (name) { + return { + 'jpg': 'image/jpeg', + 'jpeg': 'image/jpeg', + 'png': 'image/png', + 'bmp': 'image/bmp', + 'ogg': 'audio/ogg', + 'wav': 'audio/wav', + 'mp3': 'audio/mpeg' + }[name.substr(name.lastIndexOf('.')+1)]; + },getUserMedia:function (func) { + if(!window.getUserMedia) { + window.getUserMedia = navigator['getUserMedia'] || + navigator['mozGetUserMedia']; + } + window.getUserMedia(func); + },getMovementX:function (event) { + return event['movementX'] || + event['mozMovementX'] || + event['webkitMovementX'] || + 0; + },getMovementY:function (event) { + return event['movementY'] || + event['mozMovementY'] || + event['webkitMovementY'] || + 0; + },getMouseWheelDelta:function (event) { + var delta = 0; + switch (event.type) { + case 'DOMMouseScroll': + delta = event.detail; + break; + case 'mousewheel': + delta = event.wheelDelta; + break; + case 'wheel': + delta = event['deltaY']; + break; + default: + throw 'unrecognized mouse wheel event: ' + event.type; + } + return delta; + },mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function (event) { // event should be mousemove, mousedown or mouseup + if (Browser.pointerLock) { + // When the pointer is locked, calculate the coordinates + // based on the movement of the mouse. + // Workaround for Firefox bug 764498 + if (event.type != 'mousemove' && + ('mozMovementX' in event)) { + Browser.mouseMovementX = Browser.mouseMovementY = 0; + } else { + Browser.mouseMovementX = Browser.getMovementX(event); + Browser.mouseMovementY = Browser.getMovementY(event); + } + + // check if SDL is available + if (typeof SDL != "undefined") { + Browser.mouseX = SDL.mouseX + Browser.mouseMovementX; + Browser.mouseY = SDL.mouseY + Browser.mouseMovementY; + } else { + // just add the mouse delta to the current absolut mouse position + // FIXME: ideally this should be clamped against the canvas size and zero + Browser.mouseX += Browser.mouseMovementX; + Browser.mouseY += Browser.mouseMovementY; + } + } else { + // Otherwise, calculate the movement based on the changes + // in the coordinates. + var rect = Module["canvas"].getBoundingClientRect(); + var cw = Module["canvas"].width; + var ch = Module["canvas"].height; + + // Neither .scrollX or .pageXOffset are defined in a spec, but + // we prefer .scrollX because it is currently in a spec draft. + // (see: http://www.w3.org/TR/2013/WD-cssom-view-20131217/) + var scrollX = ((typeof window.scrollX !== 'undefined') ? window.scrollX : window.pageXOffset); + var scrollY = ((typeof window.scrollY !== 'undefined') ? window.scrollY : window.pageYOffset); + // If this assert lands, it's likely because the browser doesn't support scrollX or pageXOffset + // and we have no viable fallback. + assert((typeof scrollX !== 'undefined') && (typeof scrollY !== 'undefined'), 'Unable to retrieve scroll position, mouse positions likely broken.'); + + if (event.type === 'touchstart' || event.type === 'touchend' || event.type === 'touchmove') { + var touch = event.touch; + if (touch === undefined) { + return; // the "touch" property is only defined in SDL + + } + var adjustedX = touch.pageX - (scrollX + rect.left); + var adjustedY = touch.pageY - (scrollY + rect.top); + + adjustedX = adjustedX * (cw / rect.width); + adjustedY = adjustedY * (ch / rect.height); + + var coords = { x: adjustedX, y: adjustedY }; + + if (event.type === 'touchstart') { + Browser.lastTouches[touch.identifier] = coords; + Browser.touches[touch.identifier] = coords; + } else if (event.type === 'touchend' || event.type === 'touchmove') { + Browser.lastTouches[touch.identifier] = Browser.touches[touch.identifier]; + Browser.touches[touch.identifier] = { x: adjustedX, y: adjustedY }; + } + return; + } + + var x = event.pageX - (scrollX + rect.left); + var y = event.pageY - (scrollY + rect.top); + + // the canvas might be CSS-scaled compared to its backbuffer; + // SDL-using content will want mouse coordinates in terms + // of backbuffer units. + x = x * (cw / rect.width); + y = y * (ch / rect.height); + + Browser.mouseMovementX = x - Browser.mouseX; + Browser.mouseMovementY = y - Browser.mouseY; + Browser.mouseX = x; + Browser.mouseY = y; + } + },xhrLoad:function (url, onload, onerror) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = function xhr_onload() { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + onload(xhr.response); + } else { + onerror(); + } + }; + xhr.onerror = onerror; + xhr.send(null); + },asyncLoad:function (url, onload, onerror, noRunDep) { + Browser.xhrLoad(url, function(arrayBuffer) { + assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).'); + onload(new Uint8Array(arrayBuffer)); + if (!noRunDep) removeRunDependency('al ' + url); + }, function(event) { + if (onerror) { + onerror(); + } else { + throw 'Loading data file "' + url + '" failed.'; + } + }); + if (!noRunDep) addRunDependency('al ' + url); + },resizeListeners:[],updateResizeListeners:function () { + var canvas = Module['canvas']; + Browser.resizeListeners.forEach(function(listener) { + listener(canvas.width, canvas.height); + }); + },setCanvasSize:function (width, height, noUpdates) { + var canvas = Module['canvas']; + Browser.updateCanvasDimensions(canvas, width, height); + if (!noUpdates) Browser.updateResizeListeners(); + },windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:function () { + // check if SDL is available + if (typeof SDL != "undefined") { + var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]; + flags = flags | 0x00800000; // set SDL_FULLSCREEN flag + HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags + } + Browser.updateResizeListeners(); + },setWindowedCanvasSize:function () { + // check if SDL is available + if (typeof SDL != "undefined") { + var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]; + flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag + HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags + } + Browser.updateResizeListeners(); + },updateCanvasDimensions:function (canvas, wNative, hNative) { + if (wNative && hNative) { + canvas.widthNative = wNative; + canvas.heightNative = hNative; + } else { + wNative = canvas.widthNative; + hNative = canvas.heightNative; + } + var w = wNative; + var h = hNative; + if (Module['forcedAspectRatio'] && Module['forcedAspectRatio'] > 0) { + if (w/h < Module['forcedAspectRatio']) { + w = Math.round(h * Module['forcedAspectRatio']); + } else { + h = Math.round(w / Module['forcedAspectRatio']); + } + } + if (((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] || + document['mozFullScreenElement'] || document['mozFullscreenElement'] || + document['fullScreenElement'] || document['fullscreenElement'] || + document['msFullScreenElement'] || document['msFullscreenElement'] || + document['webkitCurrentFullScreenElement']) === canvas.parentNode) && (typeof screen != 'undefined')) { + var factor = Math.min(screen.width / w, screen.height / h); + w = Math.round(w * factor); + h = Math.round(h * factor); + } + if (Browser.resizeCanvas) { + if (canvas.width != w) canvas.width = w; + if (canvas.height != h) canvas.height = h; + if (typeof canvas.style != 'undefined') { + canvas.style.removeProperty( "width"); + canvas.style.removeProperty("height"); + } + } else { + if (canvas.width != wNative) canvas.width = wNative; + if (canvas.height != hNative) canvas.height = hNative; + if (typeof canvas.style != 'undefined') { + if (w != wNative || h != hNative) { + canvas.style.setProperty( "width", w + "px", "important"); + canvas.style.setProperty("height", h + "px", "important"); + } else { + canvas.style.removeProperty( "width"); + canvas.style.removeProperty("height"); + } + } + } + },wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function () { + var handle = Browser.nextWgetRequestHandle; + Browser.nextWgetRequestHandle++; + return handle; + }}; + + function _log10(x) { + return Math.log(x) / Math.LN10; + } + + var _sin=Math_sin; +___errno_state = Runtime.staticAlloc(4); HEAP32[((___errno_state)>>2)]=0; +FS.staticInit();__ATINIT__.unshift({ func: function() { if (!Module["noFSInit"] && !FS.init.initialized) FS.init() } });__ATMAIN__.push({ func: function() { FS.ignorePermissions = false } });__ATEXIT__.push({ func: function() { FS.quit() } });Module["FS_createFolder"] = FS.createFolder;Module["FS_createPath"] = FS.createPath;Module["FS_createDataFile"] = FS.createDataFile;Module["FS_createPreloadedFile"] = FS.createPreloadedFile;Module["FS_createLazyFile"] = FS.createLazyFile;Module["FS_createLink"] = FS.createLink;Module["FS_createDevice"] = FS.createDevice; +__ATINIT__.unshift({ func: function() { TTY.init() } });__ATEXIT__.push({ func: function() { TTY.shutdown() } });TTY.utf8 = new Runtime.UTF8Processor(); +if (ENVIRONMENT_IS_NODE) { var fs = require("fs"); NODEFS.staticInit(); } +__ATINIT__.push({ func: function() { SOCKFS.root = FS.mount(SOCKFS, {}, null); } }); +Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, resizeCanvas) { Browser.requestFullScreen(lockPointer, resizeCanvas) }; + Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) { Browser.requestAnimationFrame(func) }; + Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) { Browser.setCanvasSize(width, height, noUpdates) }; + Module["pauseMainLoop"] = function Module_pauseMainLoop() { Browser.mainLoop.pause() }; + Module["resumeMainLoop"] = function Module_resumeMainLoop() { Browser.mainLoop.resume() }; + Module["getUserMedia"] = function Module_getUserMedia() { Browser.getUserMedia() } +STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP); + +staticSealed = true; // seal the static portion of memory + +STACK_MAX = STACK_BASE + TOTAL_STACK; + +DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX); + +assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack"); + + + var Math_min = Math.min; + // EMSCRIPTEN_START_ASM + var asm = (function(global, env, buffer) { + 'almost asm'; + + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + + + var STACKTOP=env.STACKTOP|0; + var STACK_MAX=env.STACK_MAX|0; + var tempDoublePtr=env.tempDoublePtr|0; + var ABORT=env.ABORT|0; + + var __THREW__ = 0; + var threwValue = 0; + var setjmpId = 0; + var undef = 0; + var nan = +env.NaN, inf = +env.Infinity; + var tempInt = 0, tempBigInt = 0, tempBigIntP = 0, tempBigIntS = 0, tempBigIntR = 0.0, tempBigIntI = 0, tempBigIntD = 0, tempValue = 0, tempDouble = 0.0; + + var tempRet0 = 0; + var tempRet1 = 0; + var tempRet2 = 0; + var tempRet3 = 0; + var tempRet4 = 0; + var tempRet5 = 0; + var tempRet6 = 0; + var tempRet7 = 0; + var tempRet8 = 0; + var tempRet9 = 0; + var Math_floor=global.Math.floor; + var Math_abs=global.Math.abs; + var Math_sqrt=global.Math.sqrt; + var Math_pow=global.Math.pow; + var Math_cos=global.Math.cos; + var Math_sin=global.Math.sin; + var Math_tan=global.Math.tan; + var Math_acos=global.Math.acos; + var Math_asin=global.Math.asin; + var Math_atan=global.Math.atan; + var Math_atan2=global.Math.atan2; + var Math_exp=global.Math.exp; + var Math_log=global.Math.log; + var Math_ceil=global.Math.ceil; + var Math_imul=global.Math.imul; + var abort=env.abort; + var assert=env.assert; + var Math_min=env.min; + var _sin=env._sin; + var _llvm_pow_f64=env._llvm_pow_f64; + var _send=env._send; + var __reallyNegative=env.__reallyNegative; + var _fflush=env._fflush; + var _pwrite=env._pwrite; + var ___setErrNo=env.___setErrNo; + var _sbrk=env._sbrk; + var _emscripten_memcpy_big=env._emscripten_memcpy_big; + var _fileno=env._fileno; + var __exit=env.__exit; + var _cos=env._cos; + var _printf=env._printf; + var _log=env._log; + var _write=env._write; + var ___errno_location=env.___errno_location; + var _mkport=env._mkport; + var _sysconf=env._sysconf; + var _abort=env._abort; + var _fwrite=env._fwrite; + var _time=env._time; + var _fprintf=env._fprintf; + var _ceil=env._ceil; + var __formatString=env.__formatString; + var _log10=env._log10; + var _sqrt=env._sqrt; + var _exit=env._exit; + var tempFloat = 0.0; + + // EMSCRIPTEN_START_FUNCS + function stackAlloc(size) { + size = size|0; + var ret = 0; + ret = STACKTOP; + STACKTOP = (STACKTOP + size)|0; + STACKTOP = (STACKTOP + 15)&-16; +if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + + return ret|0; + } + function stackSave() { + return STACKTOP|0; + } + function stackRestore(top) { + top = top|0; + STACKTOP = top; + } + + function setThrew(threw, value) { + threw = threw|0; + value = value|0; + if ((__THREW__|0) == 0) { + __THREW__ = threw; + threwValue = value; + } + } + function copyTempFloat(ptr) { + ptr = ptr|0; + HEAP8[tempDoublePtr>>0] = HEAP8[ptr>>0]; + HEAP8[tempDoublePtr+1>>0] = HEAP8[ptr+1>>0]; + HEAP8[tempDoublePtr+2>>0] = HEAP8[ptr+2>>0]; + HEAP8[tempDoublePtr+3>>0] = HEAP8[ptr+3>>0]; + } + function copyTempDouble(ptr) { + ptr = ptr|0; + HEAP8[tempDoublePtr>>0] = HEAP8[ptr>>0]; + HEAP8[tempDoublePtr+1>>0] = HEAP8[ptr+1>>0]; + HEAP8[tempDoublePtr+2>>0] = HEAP8[ptr+2>>0]; + HEAP8[tempDoublePtr+3>>0] = HEAP8[ptr+3>>0]; + HEAP8[tempDoublePtr+4>>0] = HEAP8[ptr+4>>0]; + HEAP8[tempDoublePtr+5>>0] = HEAP8[ptr+5>>0]; + HEAP8[tempDoublePtr+6>>0] = HEAP8[ptr+6>>0]; + HEAP8[tempDoublePtr+7>>0] = HEAP8[ptr+7>>0]; + } + function setTempRet0(value) { + value = value|0; + tempRet0 = value; + } + function getTempRet0() { + return tempRet0|0; + } + +function _fft_init($N,$sgn) { + $N = $N|0; + $sgn = $sgn|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0.0, $3 = 0, $30 = 0.0, $31 = 0.0, $32 = 0.0, $33 = 0.0, $34 = 0.0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0; + var $81 = 0.0, $82 = 0.0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $K = 0, $M = 0, $ct = 0, $obj = 0, $out = 0, $twi_len = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $N; + $1 = $sgn; + $obj = 0; + $2 = $0; + $3 = (_dividebyN($2)|0); + $out = $3; + $4 = $out; + $5 = ($4|0)==(1); + if ($5) { + $6 = $0; + $7 = (($6) - 1)|0; + $8 = $7<<4; + $9 = (288 + ($8))|0; + $10 = (_malloc($9)|0); + $obj = $10; + $11 = $0; + $12 = $obj; + $13 = (($12) + 8|0); + $14 = (_factors($11,$13)|0); + $15 = $obj; + $16 = (($15) + 264|0); + HEAP32[$16>>2] = $14; + $17 = $obj; + $18 = (($17) + 272|0); + $19 = $0; + $20 = $obj; + $21 = (($20) + 8|0); + $22 = $obj; + $23 = (($22) + 264|0); + $24 = HEAP32[$23>>2]|0; + _longvectorN($18,$19,$21,$24); + $25 = $0; + $twi_len = $25; + $26 = $obj; + $27 = (($26) + 268|0); + HEAP32[$27>>2] = 0; + } else { + $28 = $0; + $29 = (+($28|0)); + $30 = (+_log10((+$29))); + $31 = (+_log10(2.0)); + $32 = $30 / $31; + $33 = (+Math_ceil((+$32))); + $34 = (+Math_pow(2.0,(+$33))); + $35 = (~~(($34))); + $K = $35; + $36 = $K; + $37 = $0; + $38 = $37<<1; + $39 = (($38) - 2)|0; + $40 = ($36|0)<($39|0); + if ($40) { + $41 = $K; + $42 = $41<<1; + $M = $42; + } else { + $43 = $K; + $M = $43; + } + $44 = $M; + $45 = (($44) - 1)|0; + $46 = $45<<4; + $47 = (288 + ($46))|0; + $48 = (_malloc($47)|0); + $obj = $48; + $49 = $M; + $50 = $obj; + $51 = (($50) + 8|0); + $52 = (_factors($49,$51)|0); + $53 = $obj; + $54 = (($53) + 264|0); + HEAP32[$54>>2] = $52; + $55 = $obj; + $56 = (($55) + 272|0); + $57 = $M; + $58 = $obj; + $59 = (($58) + 8|0); + $60 = $obj; + $61 = (($60) + 264|0); + $62 = HEAP32[$61>>2]|0; + _longvectorN($56,$57,$59,$62); + $63 = $obj; + $64 = (($63) + 268|0); + HEAP32[$64>>2] = 1; + $65 = $M; + $twi_len = $65; + } + $66 = $0; + $67 = $obj; + HEAP32[$67>>2] = $66; + $68 = $1; + $69 = $obj; + $70 = (($69) + 4|0); + HEAP32[$70>>2] = $68; + $71 = $1; + $72 = ($71|0)==(-1); + if (!($72)) { + $90 = $obj; + STACKTOP = sp;return ($90|0); + } + $ct = 0; + while(1) { + $73 = $ct; + $74 = $twi_len; + $75 = ($73|0)<($74|0); + if (!($75)) { + break; + } + $76 = $obj; + $77 = (($76) + 272|0); + $78 = $ct; + $79 = (($77) + ($78<<4)|0); + $80 = (($79) + 8|0); + $81 = +HEAPF64[$80>>3]; + $82 = -$81; + $83 = $obj; + $84 = (($83) + 272|0); + $85 = $ct; + $86 = (($84) + ($85<<4)|0); + $87 = (($86) + 8|0); + HEAPF64[$87>>3] = $82; + $88 = $ct; + $89 = (($88) + 1)|0; + $ct = $89; + } + $90 = $obj; + STACKTOP = sp;return ($90|0); +} +function _dividebyN($N) { + $N = $N|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0; + var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $1 = $N; + while(1) { + $2 = $1; + $3 = (($2|0) % 53)&-1; + $4 = ($3|0)==(0); + if (!($4)) { + break; + } + $5 = $1; + $6 = (($5|0) / 53)&-1; + $1 = $6; + } + while(1) { + $7 = $1; + $8 = (($7|0) % 47)&-1; + $9 = ($8|0)==(0); + if (!($9)) { + break; + } + $10 = $1; + $11 = (($10|0) / 47)&-1; + $1 = $11; + } + while(1) { + $12 = $1; + $13 = (($12|0) % 43)&-1; + $14 = ($13|0)==(0); + if (!($14)) { + break; + } + $15 = $1; + $16 = (($15|0) / 43)&-1; + $1 = $16; + } + while(1) { + $17 = $1; + $18 = (($17|0) % 41)&-1; + $19 = ($18|0)==(0); + if (!($19)) { + break; + } + $20 = $1; + $21 = (($20|0) / 41)&-1; + $1 = $21; + } + while(1) { + $22 = $1; + $23 = (($22|0) % 37)&-1; + $24 = ($23|0)==(0); + if (!($24)) { + break; + } + $25 = $1; + $26 = (($25|0) / 37)&-1; + $1 = $26; + } + while(1) { + $27 = $1; + $28 = (($27|0) % 31)&-1; + $29 = ($28|0)==(0); + if (!($29)) { + break; + } + $30 = $1; + $31 = (($30|0) / 31)&-1; + $1 = $31; + } + while(1) { + $32 = $1; + $33 = (($32|0) % 29)&-1; + $34 = ($33|0)==(0); + if (!($34)) { + break; + } + $35 = $1; + $36 = (($35|0) / 29)&-1; + $1 = $36; + } + while(1) { + $37 = $1; + $38 = (($37|0) % 23)&-1; + $39 = ($38|0)==(0); + if (!($39)) { + break; + } + $40 = $1; + $41 = (($40|0) / 23)&-1; + $1 = $41; + } + while(1) { + $42 = $1; + $43 = (($42|0) % 17)&-1; + $44 = ($43|0)==(0); + if (!($44)) { + break; + } + $45 = $1; + $46 = (($45|0) / 17)&-1; + $1 = $46; + } + while(1) { + $47 = $1; + $48 = (($47|0) % 13)&-1; + $49 = ($48|0)==(0); + if (!($49)) { + break; + } + $50 = $1; + $51 = (($50|0) / 13)&-1; + $1 = $51; + } + while(1) { + $52 = $1; + $53 = (($52|0) % 11)&-1; + $54 = ($53|0)==(0); + if (!($54)) { + break; + } + $55 = $1; + $56 = (($55|0) / 11)&-1; + $1 = $56; + } + while(1) { + $57 = $1; + $58 = (($57|0) % 8)&-1; + $59 = ($58|0)==(0); + if (!($59)) { + break; + } + $60 = $1; + $61 = (($60|0) / 8)&-1; + $1 = $61; + } + while(1) { + $62 = $1; + $63 = (($62|0) % 7)&-1; + $64 = ($63|0)==(0); + if (!($64)) { + break; + } + $65 = $1; + $66 = (($65|0) / 7)&-1; + $1 = $66; + } + while(1) { + $67 = $1; + $68 = (($67|0) % 5)&-1; + $69 = ($68|0)==(0); + if (!($69)) { + break; + } + $70 = $1; + $71 = (($70|0) / 5)&-1; + $1 = $71; + } + while(1) { + $72 = $1; + $73 = (($72|0) % 4)&-1; + $74 = ($73|0)==(0); + if (!($74)) { + break; + } + $75 = $1; + $76 = (($75|0) / 4)&-1; + $1 = $76; + } + while(1) { + $77 = $1; + $78 = (($77|0) % 3)&-1; + $79 = ($78|0)==(0); + if (!($79)) { + break; + } + $80 = $1; + $81 = (($80|0) / 3)&-1; + $1 = $81; + } + while(1) { + $82 = $1; + $83 = (($82|0) % 2)&-1; + $84 = ($83|0)==(0); + if (!($84)) { + break; + } + $85 = $1; + $86 = (($85|0) / 2)&-1; + $1 = $86; + } + $87 = $1; + $88 = ($87|0)==(1); + if ($88) { + $0 = 1; + $89 = $0; + STACKTOP = sp;return ($89|0); + } else { + $0 = 0; + $89 = $0; + STACKTOP = sp;return ($89|0); + } + return 0|0; +} +function _factors($M,$arr) { + $M = $M|0; + $arr = $arr|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; + var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $23 = 0, $24 = 0; + var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0; + var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0; + var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0; + var $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0; + var $98 = 0, $99 = 0, $N = 0, $i = 0, $m1 = 0, $m2 = 0, $mult = 0, $num = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $M; + $1 = $arr; + $i = 0; + $2 = $0; + $N = $2; + while(1) { + $3 = $N; + $4 = (($3|0) % 53)&-1; + $5 = ($4|0)==(0); + if (!($5)) { + break; + } + $6 = $N; + $7 = (($6|0) / 53)&-1; + $N = $7; + $8 = $i; + $9 = $1; + $10 = (($9) + ($8<<2)|0); + HEAP32[$10>>2] = 53; + $11 = $i; + $12 = (($11) + 1)|0; + $i = $12; + } + while(1) { + $13 = $N; + $14 = (($13|0) % 47)&-1; + $15 = ($14|0)==(0); + if (!($15)) { + break; + } + $16 = $N; + $17 = (($16|0) / 47)&-1; + $N = $17; + $18 = $i; + $19 = $1; + $20 = (($19) + ($18<<2)|0); + HEAP32[$20>>2] = 47; + $21 = $i; + $22 = (($21) + 1)|0; + $i = $22; + } + while(1) { + $23 = $N; + $24 = (($23|0) % 43)&-1; + $25 = ($24|0)==(0); + if (!($25)) { + break; + } + $26 = $N; + $27 = (($26|0) / 43)&-1; + $N = $27; + $28 = $i; + $29 = $1; + $30 = (($29) + ($28<<2)|0); + HEAP32[$30>>2] = 43; + $31 = $i; + $32 = (($31) + 1)|0; + $i = $32; + } + while(1) { + $33 = $N; + $34 = (($33|0) % 41)&-1; + $35 = ($34|0)==(0); + if (!($35)) { + break; + } + $36 = $N; + $37 = (($36|0) / 41)&-1; + $N = $37; + $38 = $i; + $39 = $1; + $40 = (($39) + ($38<<2)|0); + HEAP32[$40>>2] = 41; + $41 = $i; + $42 = (($41) + 1)|0; + $i = $42; + } + while(1) { + $43 = $N; + $44 = (($43|0) % 37)&-1; + $45 = ($44|0)==(0); + if (!($45)) { + break; + } + $46 = $N; + $47 = (($46|0) / 37)&-1; + $N = $47; + $48 = $i; + $49 = $1; + $50 = (($49) + ($48<<2)|0); + HEAP32[$50>>2] = 37; + $51 = $i; + $52 = (($51) + 1)|0; + $i = $52; + } + while(1) { + $53 = $N; + $54 = (($53|0) % 31)&-1; + $55 = ($54|0)==(0); + if (!($55)) { + break; + } + $56 = $N; + $57 = (($56|0) / 31)&-1; + $N = $57; + $58 = $i; + $59 = $1; + $60 = (($59) + ($58<<2)|0); + HEAP32[$60>>2] = 31; + $61 = $i; + $62 = (($61) + 1)|0; + $i = $62; + } + while(1) { + $63 = $N; + $64 = (($63|0) % 29)&-1; + $65 = ($64|0)==(0); + if (!($65)) { + break; + } + $66 = $N; + $67 = (($66|0) / 29)&-1; + $N = $67; + $68 = $i; + $69 = $1; + $70 = (($69) + ($68<<2)|0); + HEAP32[$70>>2] = 29; + $71 = $i; + $72 = (($71) + 1)|0; + $i = $72; + } + while(1) { + $73 = $N; + $74 = (($73|0) % 23)&-1; + $75 = ($74|0)==(0); + if (!($75)) { + break; + } + $76 = $N; + $77 = (($76|0) / 23)&-1; + $N = $77; + $78 = $i; + $79 = $1; + $80 = (($79) + ($78<<2)|0); + HEAP32[$80>>2] = 23; + $81 = $i; + $82 = (($81) + 1)|0; + $i = $82; + } + while(1) { + $83 = $N; + $84 = (($83|0) % 19)&-1; + $85 = ($84|0)==(0); + if (!($85)) { + break; + } + $86 = $N; + $87 = (($86|0) / 19)&-1; + $N = $87; + $88 = $i; + $89 = $1; + $90 = (($89) + ($88<<2)|0); + HEAP32[$90>>2] = 19; + $91 = $i; + $92 = (($91) + 1)|0; + $i = $92; + } + while(1) { + $93 = $N; + $94 = (($93|0) % 17)&-1; + $95 = ($94|0)==(0); + if (!($95)) { + break; + } + $96 = $N; + $97 = (($96|0) / 17)&-1; + $N = $97; + $98 = $i; + $99 = $1; + $100 = (($99) + ($98<<2)|0); + HEAP32[$100>>2] = 17; + $101 = $i; + $102 = (($101) + 1)|0; + $i = $102; + } + while(1) { + $103 = $N; + $104 = (($103|0) % 13)&-1; + $105 = ($104|0)==(0); + if (!($105)) { + break; + } + $106 = $N; + $107 = (($106|0) / 13)&-1; + $N = $107; + $108 = $i; + $109 = $1; + $110 = (($109) + ($108<<2)|0); + HEAP32[$110>>2] = 13; + $111 = $i; + $112 = (($111) + 1)|0; + $i = $112; + } + while(1) { + $113 = $N; + $114 = (($113|0) % 11)&-1; + $115 = ($114|0)==(0); + if (!($115)) { + break; + } + $116 = $N; + $117 = (($116|0) / 11)&-1; + $N = $117; + $118 = $i; + $119 = $1; + $120 = (($119) + ($118<<2)|0); + HEAP32[$120>>2] = 11; + $121 = $i; + $122 = (($121) + 1)|0; + $i = $122; + } + while(1) { + $123 = $N; + $124 = (($123|0) % 8)&-1; + $125 = ($124|0)==(0); + if (!($125)) { + break; + } + $126 = $N; + $127 = (($126|0) / 8)&-1; + $N = $127; + $128 = $i; + $129 = $1; + $130 = (($129) + ($128<<2)|0); + HEAP32[$130>>2] = 8; + $131 = $i; + $132 = (($131) + 1)|0; + $i = $132; + } + while(1) { + $133 = $N; + $134 = (($133|0) % 7)&-1; + $135 = ($134|0)==(0); + if (!($135)) { + break; + } + $136 = $N; + $137 = (($136|0) / 7)&-1; + $N = $137; + $138 = $i; + $139 = $1; + $140 = (($139) + ($138<<2)|0); + HEAP32[$140>>2] = 7; + $141 = $i; + $142 = (($141) + 1)|0; + $i = $142; + } + while(1) { + $143 = $N; + $144 = (($143|0) % 5)&-1; + $145 = ($144|0)==(0); + if (!($145)) { + break; + } + $146 = $N; + $147 = (($146|0) / 5)&-1; + $N = $147; + $148 = $i; + $149 = $1; + $150 = (($149) + ($148<<2)|0); + HEAP32[$150>>2] = 5; + $151 = $i; + $152 = (($151) + 1)|0; + $i = $152; + } + while(1) { + $153 = $N; + $154 = (($153|0) % 4)&-1; + $155 = ($154|0)==(0); + if (!($155)) { + break; + } + $156 = $N; + $157 = (($156|0) / 4)&-1; + $N = $157; + $158 = $i; + $159 = $1; + $160 = (($159) + ($158<<2)|0); + HEAP32[$160>>2] = 4; + $161 = $i; + $162 = (($161) + 1)|0; + $i = $162; + } + while(1) { + $163 = $N; + $164 = (($163|0) % 3)&-1; + $165 = ($164|0)==(0); + if (!($165)) { + break; + } + $166 = $N; + $167 = (($166|0) / 3)&-1; + $N = $167; + $168 = $i; + $169 = $1; + $170 = (($169) + ($168<<2)|0); + HEAP32[$170>>2] = 3; + $171 = $i; + $172 = (($171) + 1)|0; + $i = $172; + } + while(1) { + $173 = $N; + $174 = (($173|0) % 2)&-1; + $175 = ($174|0)==(0); + if (!($175)) { + break; + } + $176 = $N; + $177 = (($176|0) / 2)&-1; + $N = $177; + $178 = $i; + $179 = $1; + $180 = (($179) + ($178<<2)|0); + HEAP32[$180>>2] = 2; + $181 = $i; + $182 = (($181) + 1)|0; + $i = $182; + } + $183 = $N; + $184 = ($183|0)>(31); + if (!($184)) { + $221 = $i; + STACKTOP = sp;return ($221|0); + } + $num = 2; + while(1) { + $185 = $N; + $186 = ($185|0)>(1); + if (!($186)) { + break; + } + $187 = $num; + $188 = ($187*6)|0; + $mult = $188; + $189 = $mult; + $190 = (($189) - 1)|0; + $m1 = $190; + $191 = $mult; + $192 = (($191) + 1)|0; + $m2 = $192; + while(1) { + $193 = $N; + $194 = $m1; + $195 = (($193|0) % ($194|0))&-1; + $196 = ($195|0)==(0); + if (!($196)) { + break; + } + $197 = $m1; + $198 = $i; + $199 = $1; + $200 = (($199) + ($198<<2)|0); + HEAP32[$200>>2] = $197; + $201 = $i; + $202 = (($201) + 1)|0; + $i = $202; + $203 = $N; + $204 = $m1; + $205 = (($203|0) / ($204|0))&-1; + $N = $205; + } + while(1) { + $206 = $N; + $207 = $m2; + $208 = (($206|0) % ($207|0))&-1; + $209 = ($208|0)==(0); + if (!($209)) { + break; + } + $210 = $m2; + $211 = $i; + $212 = $1; + $213 = (($212) + ($211<<2)|0); + HEAP32[$213>>2] = $210; + $214 = $i; + $215 = (($214) + 1)|0; + $i = $215; + $216 = $N; + $217 = $m2; + $218 = (($216|0) / ($217|0))&-1; + $N = $218; + } + $219 = $num; + $220 = (($219) + 1)|0; + $num = $220; + } + $221 = $i; + STACKTOP = sp;return ($221|0); +} +function _longvectorN($sig,$N,$array,$tx) { + $sig = $sig|0; + $N = $N|0; + $array = $array|0; + $tx = $tx|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0.0; + var $27 = 0.0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0.0, $46 = 0.0, $47 = 0.0, $48 = 0.0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0.0, $57 = 0.0, $58 = 0.0, $59 = 0.0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $8 = 0, $9 = 0, $L = 0, $Ls = 0, $ct = 0, $i = 0, $j = 0, $k = 0, $theta = 0.0, label = 0; + var sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $sig; + $1 = $N; + $2 = $array; + $3 = $tx; + $L = 1; + $ct = 0; + $i = 0; + while(1) { + $4 = $i; + $5 = $3; + $6 = ($4|0)<($5|0); + if (!($6)) { + break; + } + $7 = $L; + $8 = $3; + $9 = (($8) - 1)|0; + $10 = $i; + $11 = (($9) - ($10))|0; + $12 = $2; + $13 = (($12) + ($11<<2)|0); + $14 = HEAP32[$13>>2]|0; + $15 = Math_imul($7, $14)|0; + $L = $15; + $16 = $L; + $17 = $3; + $18 = (($17) - 1)|0; + $19 = $i; + $20 = (($18) - ($19))|0; + $21 = $2; + $22 = (($21) + ($20<<2)|0); + $23 = HEAP32[$22>>2]|0; + $24 = (($16|0) / ($23|0))&-1; + $Ls = $24; + $25 = $L; + $26 = (+($25|0)); + $27 = -6.283185307179586232 / $26; + $theta = $27; + $j = 0; + while(1) { + $28 = $j; + $29 = $Ls; + $30 = ($28|0)<($29|0); + if (!($30)) { + break; + } + $k = 0; + while(1) { + $31 = $k; + $32 = $3; + $33 = (($32) - 1)|0; + $34 = $i; + $35 = (($33) - ($34))|0; + $36 = $2; + $37 = (($36) + ($35<<2)|0); + $38 = HEAP32[$37>>2]|0; + $39 = (($38) - 1)|0; + $40 = ($31|0)<($39|0); + if (!($40)) { + break; + } + $41 = $k; + $42 = (($41) + 1)|0; + $43 = $j; + $44 = Math_imul($42, $43)|0; + $45 = (+($44|0)); + $46 = $theta; + $47 = $45 * $46; + $48 = (+Math_cos((+$47))); + $49 = $ct; + $50 = $0; + $51 = (($50) + ($49<<4)|0); + HEAPF64[$51>>3] = $48; + $52 = $k; + $53 = (($52) + 1)|0; + $54 = $j; + $55 = Math_imul($53, $54)|0; + $56 = (+($55|0)); + $57 = $theta; + $58 = $56 * $57; + $59 = (+Math_sin((+$58))); + $60 = $ct; + $61 = $0; + $62 = (($61) + ($60<<4)|0); + $63 = (($62) + 8|0); + HEAPF64[$63>>3] = $59; + $64 = $ct; + $65 = (($64) + 1)|0; + $ct = $65; + $66 = $k; + $67 = (($66) + 1)|0; + $k = $67; + } + $68 = $j; + $69 = (($68) + 1)|0; + $j = $69; + } + $70 = $i; + $71 = (($70) + 1)|0; + $i = $71; + } + STACKTOP = sp;return; +} +function _fft_exec($obj,$inp,$oup) { + $obj = $obj|0; + $inp = $inp|0; + $oup = $oup|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $inc = 0, $l = 0, $nn = 0, $nn1 = 0, $sgn1 = 0, $sgn12 = 0, label = 0; + var sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $obj; + $1 = $inp; + $2 = $oup; + $3 = $0; + $4 = (($3) + 268|0); + $5 = HEAP32[$4>>2]|0; + $6 = ($5|0)==(0); + if ($6) { + $7 = $0; + $8 = HEAP32[$7>>2]|0; + $nn = $8; + $9 = $0; + $10 = (($9) + 4|0); + $11 = HEAP32[$10>>2]|0; + $sgn1 = $11; + $l = 1; + $inc = 0; + $12 = $2; + $13 = $1; + $14 = $0; + $15 = $sgn1; + $16 = $nn; + $17 = $l; + $18 = $inc; + _mixed_radix_dit_rec($12,$13,$14,$15,$16,$17,$18); + STACKTOP = sp;return; + } + $19 = $0; + $20 = (($19) + 268|0); + $21 = HEAP32[$20>>2]|0; + $22 = ($21|0)==(1); + if ($22) { + $23 = $0; + $24 = HEAP32[$23>>2]|0; + $nn1 = $24; + $25 = $0; + $26 = (($25) + 4|0); + $27 = HEAP32[$26>>2]|0; + $sgn12 = $27; + $28 = $1; + $29 = $2; + $30 = $0; + $31 = $sgn12; + $32 = $nn1; + _bluestein_fft($28,$29,$30,$31,$32); + } + STACKTOP = sp;return; +} +function _mixed_radix_dit_rec($op,$ip,$obj,$sgn,$N,$l,$inc) { + $op = $op|0; + $ip = $ip|0; + $obj = $obj|0; + $sgn = $sgn|0; + $N = $N|0; + $l = $l|0; + $inc = $inc|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $1000 = 0.0, $1001 = 0.0, $1002 = 0.0, $1003 = 0, $1004 = 0, $1005 = 0.0, $1006 = 0.0, $1007 = 0.0, $1008 = 0.0, $1009 = 0.0, $101 = 0, $1010 = 0.0, $1011 = 0.0, $1012 = 0.0, $1013 = 0.0, $1014 = 0.0; + var $1015 = 0.0, $1016 = 0.0, $1017 = 0.0, $1018 = 0.0, $1019 = 0.0, $102 = 0, $1020 = 0.0, $1021 = 0.0, $1022 = 0.0, $1023 = 0.0, $1024 = 0.0, $1025 = 0.0, $1026 = 0.0, $1027 = 0.0, $1028 = 0.0, $1029 = 0.0, $103 = 0.0, $1030 = 0.0, $1031 = 0.0, $1032 = 0.0; + var $1033 = 0.0, $1034 = 0.0, $1035 = 0.0, $1036 = 0.0, $1037 = 0.0, $1038 = 0.0, $1039 = 0.0, $104 = 0, $1040 = 0.0, $1041 = 0.0, $1042 = 0.0, $1043 = 0.0, $1044 = 0.0, $1045 = 0.0, $1046 = 0.0, $1047 = 0.0, $1048 = 0.0, $1049 = 0.0, $105 = 0, $1050 = 0.0; + var $1051 = 0.0, $1052 = 0.0, $1053 = 0.0, $1054 = 0, $1055 = 0, $1056 = 0.0, $1057 = 0.0, $1058 = 0.0, $1059 = 0, $106 = 0, $1060 = 0, $1061 = 0.0, $1062 = 0.0, $1063 = 0.0, $1064 = 0, $1065 = 0, $1066 = 0, $1067 = 0.0, $1068 = 0.0, $1069 = 0.0; + var $107 = 0, $1070 = 0, $1071 = 0, $1072 = 0, $1073 = 0, $1074 = 0.0, $1075 = 0.0, $1076 = 0.0, $1077 = 0.0, $1078 = 0.0, $1079 = 0.0, $108 = 0, $1080 = 0.0, $1081 = 0.0, $1082 = 0.0, $1083 = 0.0, $1084 = 0.0, $1085 = 0.0, $1086 = 0.0, $1087 = 0; + var $1088 = 0, $1089 = 0.0, $109 = 0, $1090 = 0.0, $1091 = 0.0, $1092 = 0.0, $1093 = 0.0, $1094 = 0.0, $1095 = 0.0, $1096 = 0.0, $1097 = 0.0, $1098 = 0.0, $1099 = 0.0, $11 = 0, $110 = 0, $1100 = 0.0, $1101 = 0.0, $1102 = 0, $1103 = 0, $1104 = 0.0; + var $1105 = 0.0, $1106 = 0.0, $1107 = 0.0, $1108 = 0.0, $1109 = 0.0, $111 = 0.0, $1110 = 0.0, $1111 = 0.0, $1112 = 0.0, $1113 = 0.0, $1114 = 0.0, $1115 = 0.0, $1116 = 0.0, $1117 = 0.0, $1118 = 0.0, $1119 = 0.0, $112 = 0, $1120 = 0.0, $1121 = 0.0, $1122 = 0.0; + var $1123 = 0.0, $1124 = 0.0, $1125 = 0.0, $1126 = 0.0, $1127 = 0.0, $1128 = 0.0, $1129 = 0.0, $113 = 0, $1130 = 0.0, $1131 = 0.0, $1132 = 0.0, $1133 = 0.0, $1134 = 0.0, $1135 = 0.0, $1136 = 0.0, $1137 = 0.0, $1138 = 0.0, $1139 = 0.0, $114 = 0, $1140 = 0.0; + var $1141 = 0.0, $1142 = 0.0, $1143 = 0.0, $1144 = 0.0, $1145 = 0.0, $1146 = 0.0, $1147 = 0.0, $1148 = 0.0, $1149 = 0.0, $115 = 0, $1150 = 0.0, $1151 = 0.0, $1152 = 0.0, $1153 = 0, $1154 = 0, $1155 = 0.0, $1156 = 0.0, $1157 = 0.0, $1158 = 0, $1159 = 0; + var $116 = 0, $1160 = 0.0, $1161 = 0.0, $1162 = 0.0, $1163 = 0, $1164 = 0, $1165 = 0, $1166 = 0.0, $1167 = 0.0, $1168 = 0.0, $1169 = 0, $117 = 0, $1170 = 0, $1171 = 0, $1172 = 0.0, $1173 = 0.0, $1174 = 0.0, $1175 = 0.0, $1176 = 0.0, $1177 = 0; + var $1178 = 0.0, $1179 = 0.0, $118 = 0, $1180 = 0.0, $1181 = 0.0, $1182 = 0.0, $1183 = 0.0, $1184 = 0.0, $1185 = 0, $1186 = 0, $1187 = 0.0, $1188 = 0.0, $1189 = 0, $119 = 0.0, $1190 = 0, $1191 = 0, $1192 = 0.0, $1193 = 0, $1194 = 0, $1195 = 0; + var $1196 = 0.0, $1197 = 0, $1198 = 0, $1199 = 0, $12 = 0, $120 = 0, $1200 = 0, $1201 = 0, $1202 = 0.0, $1203 = 0, $1204 = 0, $1205 = 0, $1206 = 0, $1207 = 0, $1208 = 0, $1209 = 0.0, $121 = 0, $1210 = 0, $1211 = 0, $1212 = 0; + var $1213 = 0, $1214 = 0, $1215 = 0, $1216 = 0, $1217 = 0.0, $1218 = 0, $1219 = 0, $122 = 0, $1220 = 0, $1221 = 0, $1222 = 0, $1223 = 0, $1224 = 0, $1225 = 0.0, $1226 = 0, $1227 = 0, $1228 = 0, $1229 = 0, $123 = 0, $1230 = 0; + var $1231 = 0, $1232 = 0, $1233 = 0.0, $1234 = 0, $1235 = 0, $1236 = 0, $1237 = 0, $1238 = 0, $1239 = 0, $124 = 0, $1240 = 0, $1241 = 0.0, $1242 = 0, $1243 = 0, $1244 = 0, $1245 = 0, $1246 = 0, $1247 = 0, $1248 = 0, $1249 = 0.0; + var $125 = 0.0, $1250 = 0, $1251 = 0, $1252 = 0, $1253 = 0, $1254 = 0, $1255 = 0, $1256 = 0, $1257 = 0.0, $1258 = 0, $1259 = 0, $126 = 0, $1260 = 0, $1261 = 0, $1262 = 0, $1263 = 0, $1264 = 0, $1265 = 0.0, $1266 = 0, $1267 = 0; + var $1268 = 0, $1269 = 0, $127 = 0, $1270 = 0, $1271 = 0, $1272 = 0, $1273 = 0.0, $1274 = 0, $1275 = 0, $1276 = 0, $1277 = 0, $1278 = 0, $1279 = 0, $128 = 0.0, $1280 = 0, $1281 = 0.0, $1282 = 0, $1283 = 0, $1284 = 0, $1285 = 0; + var $1286 = 0, $1287 = 0, $1288 = 0, $1289 = 0.0, $129 = 0.0, $1290 = 0, $1291 = 0, $1292 = 0, $1293 = 0, $1294 = 0, $1295 = 0, $1296 = 0, $1297 = 0.0, $1298 = 0, $1299 = 0, $13 = 0, $130 = 0, $1300 = 0, $1301 = 0, $1302 = 0; + var $1303 = 0, $1304 = 0, $1305 = 0.0, $1306 = 0, $1307 = 0, $1308 = 0, $1309 = 0, $131 = 0, $1310 = 0.0, $1311 = 0, $1312 = 0, $1313 = 0.0, $1314 = 0.0, $1315 = 0, $1316 = 0.0, $1317 = 0, $1318 = 0, $1319 = 0.0, $132 = 0, $1320 = 0.0; + var $1321 = 0, $1322 = 0, $1323 = 0.0, $1324 = 0, $1325 = 0, $1326 = 0, $1327 = 0.0, $1328 = 0.0, $1329 = 0, $133 = 0.0, $1330 = 0, $1331 = 0.0, $1332 = 0, $1333 = 0, $1334 = 0, $1335 = 0.0, $1336 = 0.0, $1337 = 0, $1338 = 0, $1339 = 0.0; + var $134 = 0, $1340 = 0, $1341 = 0, $1342 = 0.0, $1343 = 0.0, $1344 = 0, $1345 = 0, $1346 = 0.0, $1347 = 0, $1348 = 0, $1349 = 0.0, $135 = 0, $1350 = 0.0, $1351 = 0, $1352 = 0, $1353 = 0, $1354 = 0.0, $1355 = 0, $1356 = 0, $1357 = 0; + var $1358 = 0.0, $1359 = 0.0, $136 = 0, $1360 = 0, $1361 = 0, $1362 = 0, $1363 = 0.0, $1364 = 0, $1365 = 0, $1366 = 0, $1367 = 0.0, $1368 = 0.0, $1369 = 0, $137 = 0.0, $1370 = 0, $1371 = 0.0, $1372 = 0, $1373 = 0, $1374 = 0.0, $1375 = 0.0; + var $1376 = 0, $1377 = 0, $1378 = 0.0, $1379 = 0, $138 = 0.0, $1380 = 0, $1381 = 0.0, $1382 = 0.0, $1383 = 0, $1384 = 0, $1385 = 0, $1386 = 0.0, $1387 = 0, $1388 = 0, $1389 = 0, $139 = 0, $1390 = 0.0, $1391 = 0.0, $1392 = 0, $1393 = 0; + var $1394 = 0, $1395 = 0.0, $1396 = 0, $1397 = 0, $1398 = 0, $1399 = 0.0, $14 = 0, $140 = 0.0, $1400 = 0.0, $1401 = 0, $1402 = 0, $1403 = 0.0, $1404 = 0, $1405 = 0, $1406 = 0.0, $1407 = 0.0, $1408 = 0, $1409 = 0, $141 = 0.0, $1410 = 0.0; + var $1411 = 0, $1412 = 0, $1413 = 0.0, $1414 = 0.0, $1415 = 0, $1416 = 0, $1417 = 0, $1418 = 0.0, $1419 = 0, $142 = 0, $1420 = 0, $1421 = 0, $1422 = 0.0, $1423 = 0.0, $1424 = 0, $1425 = 0, $1426 = 0, $1427 = 0.0, $1428 = 0, $1429 = 0; + var $143 = 0, $1430 = 0, $1431 = 0.0, $1432 = 0.0, $1433 = 0.0, $1434 = 0.0, $1435 = 0.0, $1436 = 0.0, $1437 = 0.0, $1438 = 0.0, $1439 = 0.0, $144 = 0.0, $1440 = 0, $1441 = 0.0, $1442 = 0.0, $1443 = 0.0, $1444 = 0.0, $1445 = 0.0, $1446 = 0.0, $1447 = 0.0; + var $1448 = 0, $1449 = 0, $145 = 0, $1450 = 0.0, $1451 = 0.0, $1452 = 0.0, $1453 = 0.0, $1454 = 0.0, $1455 = 0.0, $1456 = 0.0, $1457 = 0, $1458 = 0, $1459 = 0.0, $146 = 0, $1460 = 0.0, $1461 = 0.0, $1462 = 0.0, $1463 = 0.0, $1464 = 0.0, $1465 = 0.0; + var $1466 = 0, $1467 = 0, $1468 = 0, $1469 = 0.0, $147 = 0.0, $1470 = 0.0, $1471 = 0.0, $1472 = 0.0, $1473 = 0.0, $1474 = 0.0, $1475 = 0.0, $1476 = 0.0, $1477 = 0.0, $1478 = 0.0, $1479 = 0.0, $148 = 0.0, $1480 = 0.0, $1481 = 0.0, $1482 = 0.0, $1483 = 0.0; + var $1484 = 0.0, $1485 = 0.0, $1486 = 0.0, $1487 = 0.0, $1488 = 0.0, $1489 = 0.0, $149 = 0.0, $1490 = 0.0, $1491 = 0, $1492 = 0, $1493 = 0.0, $1494 = 0.0, $1495 = 0.0, $1496 = 0.0, $1497 = 0.0, $1498 = 0.0, $1499 = 0.0, $15 = 0, $150 = 0, $1500 = 0.0; + var $1501 = 0.0, $1502 = 0.0, $1503 = 0.0, $1504 = 0.0, $1505 = 0.0, $1506 = 0.0, $1507 = 0.0, $1508 = 0.0, $1509 = 0.0, $151 = 0.0, $1510 = 0.0, $1511 = 0.0, $1512 = 0.0, $1513 = 0.0, $1514 = 0.0, $1515 = 0.0, $1516 = 0.0, $1517 = 0.0, $1518 = 0, $1519 = 0; + var $152 = 0.0, $1520 = 0.0, $1521 = 0.0, $1522 = 0.0, $1523 = 0, $1524 = 0, $1525 = 0, $1526 = 0.0, $1527 = 0.0, $1528 = 0.0, $1529 = 0, $153 = 0, $1530 = 0, $1531 = 0.0, $1532 = 0.0, $1533 = 0.0, $1534 = 0, $1535 = 0, $1536 = 0, $1537 = 0.0; + var $1538 = 0.0, $1539 = 0.0, $154 = 0, $1540 = 0.0, $1541 = 0.0, $1542 = 0.0, $1543 = 0, $1544 = 0, $1545 = 0.0, $1546 = 0.0, $1547 = 0.0, $1548 = 0.0, $1549 = 0.0, $155 = 0, $1550 = 0.0, $1551 = 0.0, $1552 = 0.0, $1553 = 0.0, $1554 = 0.0, $1555 = 0.0; + var $1556 = 0.0, $1557 = 0.0, $1558 = 0.0, $1559 = 0.0, $156 = 0.0, $1560 = 0.0, $1561 = 0.0, $1562 = 0, $1563 = 0, $1564 = 0.0, $1565 = 0.0, $1566 = 0.0, $1567 = 0, $1568 = 0, $1569 = 0, $157 = 0, $1570 = 0.0, $1571 = 0.0, $1572 = 0.0, $1573 = 0; + var $1574 = 0, $1575 = 0.0, $1576 = 0.0, $1577 = 0.0, $1578 = 0, $1579 = 0, $158 = 0, $1580 = 0, $1581 = 0.0, $1582 = 0.0, $1583 = 0.0, $1584 = 0.0, $1585 = 0.0, $1586 = 0.0, $1587 = 0.0, $1588 = 0.0, $1589 = 0.0, $159 = 0, $1590 = 0.0, $1591 = 0; + var $1592 = 0, $1593 = 0.0, $1594 = 0.0, $1595 = 0.0, $1596 = 0.0, $1597 = 0.0, $1598 = 0.0, $1599 = 0.0, $16 = 0, $160 = 0.0, $1600 = 0.0, $1601 = 0.0, $1602 = 0.0, $1603 = 0.0, $1604 = 0.0, $1605 = 0.0, $1606 = 0.0, $1607 = 0.0, $1608 = 0.0, $1609 = 0.0; + var $161 = 0.0, $1610 = 0.0, $1611 = 0.0, $1612 = 0.0, $1613 = 0.0, $1614 = 0.0, $1615 = 0.0, $1616 = 0.0, $1617 = 0.0, $1618 = 0, $1619 = 0, $162 = 0.0, $1620 = 0.0, $1621 = 0.0, $1622 = 0.0, $1623 = 0, $1624 = 0, $1625 = 0, $1626 = 0.0, $1627 = 0.0; + var $1628 = 0.0, $1629 = 0, $163 = 0, $1630 = 0, $1631 = 0.0, $1632 = 0.0, $1633 = 0.0, $1634 = 0, $1635 = 0, $1636 = 0, $1637 = 0, $1638 = 0, $1639 = 0, $164 = 0.0, $1640 = 0, $1641 = 0, $1642 = 0, $1643 = 0, $1644 = 0, $1645 = 0; + var $1646 = 0, $1647 = 0, $1648 = 0, $1649 = 0, $165 = 0.0, $1650 = 0, $1651 = 0, $1652 = 0, $1653 = 0, $1654 = 0, $1655 = 0, $1656 = 0, $1657 = 0, $1658 = 0, $1659 = 0, $166 = 0.0, $1660 = 0, $1661 = 0, $1662 = 0, $1663 = 0; + var $1664 = 0, $1665 = 0, $1666 = 0, $1667 = 0, $1668 = 0, $1669 = 0, $167 = 0.0, $1670 = 0, $1671 = 0, $1672 = 0, $1673 = 0, $1674 = 0.0, $1675 = 0, $1676 = 0, $1677 = 0, $1678 = 0, $1679 = 0, $168 = 0, $1680 = 0.0, $1681 = 0; + var $1682 = 0, $1683 = 0, $1684 = 0, $1685 = 0, $1686 = 0, $1687 = 0.0, $1688 = 0, $1689 = 0, $169 = 0, $1690 = 0, $1691 = 0, $1692 = 0.0, $1693 = 0, $1694 = 0, $1695 = 0, $1696 = 0.0, $1697 = 0.0, $1698 = 0.0, $1699 = 0, $17 = 0.0; + var $170 = 0.0, $1700 = 0, $1701 = 0, $1702 = 0, $1703 = 0.0, $1704 = 0.0, $1705 = 0.0, $1706 = 0.0, $1707 = 0, $1708 = 0, $1709 = 0, $171 = 0.0, $1710 = 0, $1711 = 0.0, $1712 = 0.0, $1713 = 0.0, $1714 = 0, $1715 = 0, $1716 = 0, $1717 = 0.0; + var $1718 = 0.0, $1719 = 0.0, $172 = 0.0, $1720 = 0.0, $1721 = 0.0, $1722 = 0.0, $1723 = 0.0, $1724 = 0, $1725 = 0, $1726 = 0, $1727 = 0.0, $1728 = 0.0, $1729 = 0.0, $173 = 0.0, $1730 = 0, $1731 = 0, $1732 = 0, $1733 = 0, $1734 = 0.0, $1735 = 0.0; + var $1736 = 0.0, $1737 = 0, $1738 = 0, $1739 = 0, $174 = 0.0, $1740 = 0.0, $1741 = 0.0, $1742 = 0.0, $1743 = 0, $1744 = 0, $1745 = 0, $1746 = 0, $1747 = 0, $1748 = 0, $1749 = 0, $175 = 0, $1750 = 0, $1751 = 0, $1752 = 0, $1753 = 0; + var $1754 = 0, $1755 = 0, $1756 = 0, $1757 = 0, $1758 = 0, $1759 = 0, $176 = 0.0, $1760 = 0, $1761 = 0, $1762 = 0, $1763 = 0, $1764 = 0, $1765 = 0, $1766 = 0, $1767 = 0, $1768 = 0, $1769 = 0, $177 = 0.0, $1770 = 0, $1771 = 0; + var $1772 = 0, $1773 = 0, $1774 = 0, $1775 = 0, $1776 = 0, $1777 = 0, $1778 = 0, $1779 = 0, $178 = 0, $1780 = 0, $1781 = 0, $1782 = 0, $1783 = 0, $1784 = 0, $1785 = 0, $1786 = 0, $1787 = 0, $1788 = 0, $1789 = 0, $179 = 0.0; + var $1790 = 0, $1791 = 0, $1792 = 0, $1793 = 0, $1794 = 0, $1795 = 0, $1796 = 0, $1797 = 0, $1798 = 0, $1799 = 0, $18 = 0, $180 = 0, $1800 = 0, $1801 = 0.0, $1802 = 0, $1803 = 0, $1804 = 0, $1805 = 0, $1806 = 0, $1807 = 0.0; + var $1808 = 0, $1809 = 0, $181 = 0, $1810 = 0, $1811 = 0, $1812 = 0, $1813 = 0, $1814 = 0.0, $1815 = 0, $1816 = 0, $1817 = 0, $1818 = 0, $1819 = 0, $182 = 0.0, $1820 = 0.0, $1821 = 0, $1822 = 0, $1823 = 0, $1824 = 0, $1825 = 0; + var $1826 = 0, $1827 = 0, $1828 = 0, $1829 = 0, $183 = 0.0, $1830 = 0.0, $1831 = 0, $1832 = 0, $1833 = 0, $1834 = 0, $1835 = 0.0, $1836 = 0, $1837 = 0, $1838 = 0, $1839 = 0.0, $184 = 0, $1840 = 0.0, $1841 = 0.0, $1842 = 0, $1843 = 0; + var $1844 = 0, $1845 = 0, $1846 = 0.0, $1847 = 0.0, $1848 = 0.0, $1849 = 0.0, $185 = 0, $1850 = 0, $1851 = 0, $1852 = 0, $1853 = 0, $1854 = 0.0, $1855 = 0.0, $1856 = 0.0, $1857 = 0, $1858 = 0, $1859 = 0, $186 = 0.0, $1860 = 0.0, $1861 = 0.0; + var $1862 = 0.0, $1863 = 0.0, $1864 = 0, $1865 = 0, $1866 = 0, $1867 = 0.0, $1868 = 0.0, $1869 = 0.0, $187 = 0.0, $1870 = 0, $1871 = 0, $1872 = 0, $1873 = 0, $1874 = 0.0, $1875 = 0.0, $1876 = 0.0, $1877 = 0.0, $1878 = 0, $1879 = 0, $188 = 0.0; + var $1880 = 0, $1881 = 0, $1882 = 0.0, $1883 = 0.0, $1884 = 0.0, $1885 = 0, $1886 = 0, $1887 = 0, $1888 = 0.0, $1889 = 0.0, $189 = 0, $1890 = 0.0, $1891 = 0.0, $1892 = 0.0, $1893 = 0.0, $1894 = 0.0, $1895 = 0.0, $1896 = 0.0, $1897 = 0.0, $1898 = 0; + var $1899 = 0.0, $19 = 0, $190 = 0, $1900 = 0.0, $1901 = 0.0, $1902 = 0.0, $1903 = 0.0, $1904 = 0.0, $1905 = 0, $1906 = 0.0, $1907 = 0.0, $1908 = 0.0, $1909 = 0.0, $191 = 0.0, $1910 = 0.0, $1911 = 0.0, $1912 = 0.0, $1913 = 0.0, $1914 = 0.0, $1915 = 0.0; + var $1916 = 0.0, $1917 = 0.0, $1918 = 0.0, $1919 = 0.0, $192 = 0.0, $1920 = 0.0, $1921 = 0.0, $1922 = 0.0, $1923 = 0, $1924 = 0, $1925 = 0, $1926 = 0.0, $1927 = 0.0, $1928 = 0.0, $1929 = 0, $193 = 0.0, $1930 = 0, $1931 = 0, $1932 = 0, $1933 = 0.0; + var $1934 = 0.0, $1935 = 0.0, $1936 = 0, $1937 = 0, $1938 = 0, $1939 = 0.0, $194 = 0, $1940 = 0.0, $1941 = 0.0, $1942 = 0, $1943 = 0, $1944 = 0, $1945 = 0, $1946 = 0.0, $1947 = 0.0, $1948 = 0.0, $1949 = 0, $195 = 0, $1950 = 0, $1951 = 0; + var $1952 = 0.0, $1953 = 0.0, $1954 = 0.0, $1955 = 0, $1956 = 0, $1957 = 0, $1958 = 0, $1959 = 0, $196 = 0, $1960 = 0, $1961 = 0, $1962 = 0, $1963 = 0, $1964 = 0, $1965 = 0, $1966 = 0, $1967 = 0, $1968 = 0, $1969 = 0, $197 = 0.0; + var $1970 = 0, $1971 = 0, $1972 = 0, $1973 = 0, $1974 = 0, $1975 = 0, $1976 = 0, $1977 = 0, $1978 = 0, $1979 = 0, $198 = 0.0, $1980 = 0, $1981 = 0, $1982 = 0, $1983 = 0, $1984 = 0, $1985 = 0, $1986 = 0, $1987 = 0, $1988 = 0; + var $1989 = 0, $199 = 0.0, $1990 = 0, $1991 = 0, $1992 = 0, $1993 = 0, $1994 = 0, $1995 = 0, $1996 = 0, $1997 = 0, $1998 = 0, $1999 = 0, $2 = 0, $20 = 0, $200 = 0, $2000 = 0, $2001 = 0, $2002 = 0, $2003 = 0, $2004 = 0; + var $2005 = 0, $2006 = 0, $2007 = 0, $2008 = 0, $2009 = 0, $201 = 0, $2010 = 0, $2011 = 0, $2012 = 0, $2013 = 0, $2014 = 0, $2015 = 0, $2016 = 0, $2017 = 0, $2018 = 0, $2019 = 0, $202 = 0.0, $2020 = 0, $2021 = 0, $2022 = 0; + var $2023 = 0.0, $2024 = 0, $2025 = 0, $2026 = 0.0, $2027 = 0, $2028 = 0, $2029 = 0, $203 = 0.0, $2030 = 0.0, $2031 = 0, $2032 = 0, $2033 = 0, $2034 = 0, $2035 = 0.0, $2036 = 0, $2037 = 0, $2038 = 0, $2039 = 0.0, $204 = 0.0, $2040 = 0; + var $2041 = 0, $2042 = 0, $2043 = 0, $2044 = 0.0, $2045 = 0, $2046 = 0, $2047 = 0, $2048 = 0.0, $2049 = 0, $205 = 0, $2050 = 0, $2051 = 0, $2052 = 0, $2053 = 0.0, $2054 = 0.0, $2055 = 0.0, $2056 = 0.0, $2057 = 0.0, $2058 = 0.0, $2059 = 0.0; + var $206 = 0, $2060 = 0.0, $2061 = 0.0, $2062 = 0.0, $2063 = 0.0, $2064 = 0.0, $2065 = 0.0, $2066 = 0.0, $2067 = 0.0, $2068 = 0.0, $2069 = 0.0, $207 = 0, $2070 = 0.0, $2071 = 0.0, $2072 = 0, $2073 = 0.0, $2074 = 0.0, $2075 = 0.0, $2076 = 0.0, $2077 = 0.0; + var $2078 = 0, $2079 = 0.0, $208 = 0, $2080 = 0.0, $2081 = 0.0, $2082 = 0.0, $2083 = 0.0, $2084 = 0.0, $2085 = 0.0, $2086 = 0.0, $2087 = 0, $2088 = 0.0, $2089 = 0.0, $209 = 0, $2090 = 0.0, $2091 = 0, $2092 = 0, $2093 = 0.0, $2094 = 0.0, $2095 = 0.0; + var $2096 = 0, $2097 = 0, $2098 = 0, $2099 = 0.0, $21 = 0.0, $210 = 0, $2100 = 0.0, $2101 = 0.0, $2102 = 0, $2103 = 0, $2104 = 0, $2105 = 0, $2106 = 0.0, $2107 = 0.0, $2108 = 0.0, $2109 = 0, $211 = 0.0, $2110 = 0, $2111 = 0, $2112 = 0.0; + var $2113 = 0.0, $2114 = 0.0, $2115 = 0, $2116 = 0, $2117 = 0, $2118 = 0, $2119 = 0.0, $212 = 0, $2120 = 0.0, $2121 = 0.0, $2122 = 0, $2123 = 0, $2124 = 0, $2125 = 0.0, $2126 = 0.0, $2127 = 0.0, $2128 = 0, $2129 = 0, $213 = 0, $2130 = 0; + var $2131 = 0, $2132 = 0, $2133 = 0, $2134 = 0, $2135 = 0, $2136 = 0, $2137 = 0, $2138 = 0, $2139 = 0, $214 = 0, $2140 = 0, $2141 = 0, $2142 = 0, $2143 = 0, $2144 = 0.0, $2145 = 0, $2146 = 0, $2147 = 0, $2148 = 0, $2149 = 0; + var $215 = 0.0, $2150 = 0.0, $2151 = 0, $2152 = 0, $2153 = 0, $2154 = 0, $2155 = 0, $2156 = 0, $2157 = 0.0, $2158 = 0, $2159 = 0, $216 = 0, $2160 = 0, $2161 = 0, $2162 = 0, $2163 = 0.0, $2164 = 0, $2165 = 0, $2166 = 0, $2167 = 0; + var $2168 = 0, $2169 = 0, $217 = 0, $2170 = 0.0, $2171 = 0, $2172 = 0, $2173 = 0, $2174 = 0, $2175 = 0, $2176 = 0.0, $2177 = 0, $2178 = 0, $2179 = 0, $218 = 0, $2180 = 0, $2181 = 0, $2182 = 0, $2183 = 0, $2184 = 0, $2185 = 0; + var $2186 = 0, $2187 = 0, $2188 = 0, $2189 = 0.0, $219 = 0, $2190 = 0, $2191 = 0, $2192 = 0, $2193 = 0, $2194 = 0.0, $2195 = 0, $2196 = 0, $2197 = 0, $2198 = 0.0, $2199 = 0.0, $22 = 0, $220 = 0, $2200 = 0.0, $2201 = 0, $2202 = 0; + var $2203 = 0, $2204 = 0, $2205 = 0.0, $2206 = 0.0, $2207 = 0.0, $2208 = 0.0, $2209 = 0, $221 = 0.0, $2210 = 0, $2211 = 0, $2212 = 0, $2213 = 0.0, $2214 = 0.0, $2215 = 0.0, $2216 = 0, $2217 = 0, $2218 = 0, $2219 = 0.0, $222 = 0, $2220 = 0.0; + var $2221 = 0.0, $2222 = 0.0, $2223 = 0, $2224 = 0, $2225 = 0, $2226 = 0.0, $2227 = 0.0, $2228 = 0.0, $2229 = 0, $223 = 0, $2230 = 0, $2231 = 0, $2232 = 0, $2233 = 0.0, $2234 = 0.0, $2235 = 0.0, $2236 = 0.0, $2237 = 0, $2238 = 0, $2239 = 0; + var $224 = 0, $2240 = 0, $2241 = 0.0, $2242 = 0.0, $2243 = 0.0, $2244 = 0, $2245 = 0, $2246 = 0, $2247 = 0.0, $2248 = 0.0, $2249 = 0.0, $225 = 0, $2250 = 0.0, $2251 = 0, $2252 = 0, $2253 = 0, $2254 = 0.0, $2255 = 0.0, $2256 = 0.0, $2257 = 0; + var $2258 = 0, $2259 = 0, $226 = 0, $2260 = 0, $2261 = 0.0, $2262 = 0.0, $2263 = 0.0, $2264 = 0.0, $2265 = 0, $2266 = 0, $2267 = 0, $2268 = 0, $2269 = 0.0, $227 = 0, $2270 = 0.0, $2271 = 0.0, $2272 = 0, $2273 = 0, $2274 = 0, $2275 = 0.0; + var $2276 = 0.0, $2277 = 0.0, $2278 = 0.0, $2279 = 0.0, $228 = 0.0, $2280 = 0.0, $2281 = 0.0, $2282 = 0.0, $2283 = 0.0, $2284 = 0.0, $2285 = 0.0, $2286 = 0.0, $2287 = 0.0, $2288 = 0.0, $2289 = 0.0, $229 = 0, $2290 = 0.0, $2291 = 0.0, $2292 = 0.0, $2293 = 0.0; + var $2294 = 0.0, $2295 = 0.0, $2296 = 0.0, $2297 = 0, $2298 = 0.0, $2299 = 0.0, $23 = 0, $230 = 0, $2300 = 0.0, $2301 = 0.0, $2302 = 0.0, $2303 = 0, $2304 = 0.0, $2305 = 0.0, $2306 = 0.0, $2307 = 0.0, $2308 = 0.0, $2309 = 0.0, $231 = 0, $2310 = 0.0; + var $2311 = 0.0, $2312 = 0, $2313 = 0, $2314 = 0, $2315 = 0.0, $2316 = 0.0, $2317 = 0.0, $2318 = 0, $2319 = 0, $232 = 0, $2320 = 0, $2321 = 0, $2322 = 0.0, $2323 = 0.0, $2324 = 0.0, $2325 = 0, $2326 = 0, $2327 = 0, $2328 = 0.0, $2329 = 0.0; + var $233 = 0, $2330 = 0.0, $2331 = 0, $2332 = 0, $2333 = 0, $2334 = 0, $2335 = 0.0, $2336 = 0.0, $2337 = 0.0, $2338 = 0, $2339 = 0, $234 = 0, $2340 = 0, $2341 = 0.0, $2342 = 0.0, $2343 = 0.0, $2344 = 0, $2345 = 0, $2346 = 0, $2347 = 0; + var $2348 = 0.0, $2349 = 0.0, $235 = 0, $2350 = 0.0, $2351 = 0, $2352 = 0, $2353 = 0, $2354 = 0.0, $2355 = 0.0, $2356 = 0.0, $2357 = 0, $2358 = 0, $2359 = 0, $236 = 0.0, $2360 = 0, $2361 = 0, $2362 = 0, $2363 = 0, $2364 = 0, $2365 = 0; + var $2366 = 0, $2367 = 0, $2368 = 0, $2369 = 0, $237 = 0, $2370 = 0, $2371 = 0, $2372 = 0, $2373 = 0, $2374 = 0, $2375 = 0, $2376 = 0, $2377 = 0, $2378 = 0, $2379 = 0, $238 = 0, $2380 = 0, $2381 = 0, $2382 = 0, $2383 = 0; + var $2384 = 0, $2385 = 0, $2386 = 0, $2387 = 0, $2388 = 0, $2389 = 0, $239 = 0, $2390 = 0, $2391 = 0, $2392 = 0, $2393 = 0, $2394 = 0, $2395 = 0, $2396 = 0, $2397 = 0, $2398 = 0, $2399 = 0, $24 = 0, $240 = 0, $2400 = 0; + var $2401 = 0, $2402 = 0, $2403 = 0, $2404 = 0, $2405 = 0, $2406 = 0, $2407 = 0, $2408 = 0, $2409 = 0, $241 = 0, $2410 = 0, $2411 = 0, $2412 = 0, $2413 = 0, $2414 = 0, $2415 = 0, $2416 = 0, $2417 = 0, $2418 = 0, $2419 = 0; + var $242 = 0, $2420 = 0, $2421 = 0, $2422 = 0, $2423 = 0, $2424 = 0, $2425 = 0, $2426 = 0, $2427 = 0, $2428 = 0, $2429 = 0, $243 = 0, $2430 = 0, $2431 = 0, $2432 = 0, $2433 = 0, $2434 = 0, $2435 = 0, $2436 = 0, $2437 = 0; + var $2438 = 0, $2439 = 0, $244 = 0.0, $2440 = 0, $2441 = 0, $2442 = 0.0, $2443 = 0, $2444 = 0, $2445 = 0.0, $2446 = 0, $2447 = 0, $2448 = 0, $2449 = 0.0, $245 = 0, $2450 = 0, $2451 = 0, $2452 = 0, $2453 = 0, $2454 = 0.0, $2455 = 0; + var $2456 = 0, $2457 = 0, $2458 = 0.0, $2459 = 0, $246 = 0, $2460 = 0, $2461 = 0, $2462 = 0, $2463 = 0.0, $2464 = 0, $2465 = 0, $2466 = 0, $2467 = 0.0, $2468 = 0, $2469 = 0, $247 = 0, $2470 = 0, $2471 = 0, $2472 = 0.0, $2473 = 0; + var $2474 = 0, $2475 = 0, $2476 = 0.0, $2477 = 0, $2478 = 0, $2479 = 0, $248 = 0, $2480 = 0, $2481 = 0.0, $2482 = 0.0, $2483 = 0.0, $2484 = 0.0, $2485 = 0.0, $2486 = 0.0, $2487 = 0.0, $2488 = 0.0, $2489 = 0.0, $249 = 0, $2490 = 0.0, $2491 = 0.0; + var $2492 = 0.0, $2493 = 0.0, $2494 = 0.0, $2495 = 0.0, $2496 = 0.0, $2497 = 0.0, $2498 = 0.0, $2499 = 0.0, $25 = 0, $250 = 0, $2500 = 0.0, $2501 = 0.0, $2502 = 0.0, $2503 = 0.0, $2504 = 0.0, $2505 = 0.0, $2506 = 0.0, $2507 = 0.0, $2508 = 0.0, $2509 = 0.0; + var $251 = 0, $2510 = 0.0, $2511 = 0, $2512 = 0.0, $2513 = 0.0, $2514 = 0.0, $2515 = 0.0, $2516 = 0.0, $2517 = 0, $2518 = 0, $2519 = 0.0, $252 = 0.0, $2520 = 0.0, $2521 = 0.0, $2522 = 0.0, $2523 = 0.0, $2524 = 0.0, $2525 = 0.0, $2526 = 0.0, $2527 = 0.0; + var $2528 = 0.0, $2529 = 0.0, $253 = 0, $2530 = 0.0, $2531 = 0.0, $2532 = 0.0, $2533 = 0, $2534 = 0.0, $2535 = 0.0, $2536 = 0.0, $2537 = 0.0, $2538 = 0.0, $2539 = 0.0, $254 = 0, $2540 = 0.0, $2541 = 0.0, $2542 = 0.0, $2543 = 0, $2544 = 0.0, $2545 = 0.0; + var $2546 = 0.0, $2547 = 0.0, $2548 = 0.0, $2549 = 0.0, $255 = 0, $2550 = 0.0, $2551 = 0.0, $2552 = 0.0, $2553 = 0.0, $2554 = 0.0, $2555 = 0.0, $2556 = 0.0, $2557 = 0.0, $2558 = 0.0, $2559 = 0.0, $256 = 0, $2560 = 0.0, $2561 = 0.0, $2562 = 0, $2563 = 0; + var $2564 = 0, $2565 = 0.0, $2566 = 0.0, $2567 = 0.0, $2568 = 0, $2569 = 0, $257 = 0, $2570 = 0, $2571 = 0, $2572 = 0.0, $2573 = 0.0, $2574 = 0.0, $2575 = 0, $2576 = 0, $2577 = 0, $2578 = 0.0, $2579 = 0.0, $258 = 0, $2580 = 0.0, $2581 = 0; + var $2582 = 0, $2583 = 0, $2584 = 0, $2585 = 0.0, $2586 = 0.0, $2587 = 0.0, $2588 = 0.0, $2589 = 0.0, $259 = 0, $2590 = 0.0, $2591 = 0.0, $2592 = 0.0, $2593 = 0.0, $2594 = 0.0, $2595 = 0.0, $2596 = 0.0, $2597 = 0.0, $2598 = 0.0, $2599 = 0, $26 = 0; + var $260 = 0.0, $2600 = 0.0, $2601 = 0.0, $2602 = 0.0, $2603 = 0.0, $2604 = 0.0, $2605 = 0.0, $2606 = 0.0, $2607 = 0.0, $2608 = 0.0, $2609 = 0, $261 = 0, $2610 = 0.0, $2611 = 0.0, $2612 = 0.0, $2613 = 0.0, $2614 = 0.0, $2615 = 0.0, $2616 = 0.0, $2617 = 0.0; + var $2618 = 0.0, $2619 = 0.0, $262 = 0, $2620 = 0.0, $2621 = 0.0, $2622 = 0.0, $2623 = 0.0, $2624 = 0.0, $2625 = 0.0, $2626 = 0.0, $2627 = 0.0, $2628 = 0, $2629 = 0, $263 = 0, $2630 = 0, $2631 = 0.0, $2632 = 0.0, $2633 = 0.0, $2634 = 0, $2635 = 0; + var $2636 = 0, $2637 = 0, $2638 = 0.0, $2639 = 0.0, $264 = 0, $2640 = 0.0, $2641 = 0, $2642 = 0, $2643 = 0, $2644 = 0.0, $2645 = 0.0, $2646 = 0.0, $2647 = 0, $2648 = 0, $2649 = 0, $265 = 0.0, $2650 = 0, $2651 = 0, $2652 = 0, $2653 = 0; + var $2654 = 0, $2655 = 0, $2656 = 0, $2657 = 0, $2658 = 0, $2659 = 0, $266 = 0, $2660 = 0, $2661 = 0, $2662 = 0, $2663 = 0.0, $2664 = 0, $2665 = 0, $2666 = 0, $2667 = 0, $2668 = 0, $2669 = 0.0, $267 = 0, $2670 = 0, $2671 = 0; + var $2672 = 0, $2673 = 0, $2674 = 0, $2675 = 0, $2676 = 0.0, $2677 = 0, $2678 = 0, $2679 = 0, $268 = 0.0, $2680 = 0, $2681 = 0, $2682 = 0.0, $2683 = 0, $2684 = 0, $2685 = 0, $2686 = 0, $2687 = 0, $2688 = 0, $2689 = 0.0, $269 = 0.0; + var $2690 = 0, $2691 = 0, $2692 = 0, $2693 = 0, $2694 = 0, $2695 = 0.0, $2696 = 0, $2697 = 0, $2698 = 0, $2699 = 0, $27 = 0.0, $270 = 0, $2700 = 0, $2701 = 0, $2702 = 0.0, $2703 = 0, $2704 = 0, $2705 = 0, $2706 = 0, $2707 = 0; + var $2708 = 0.0, $2709 = 0, $271 = 0, $2710 = 0, $2711 = 0, $2712 = 0, $2713 = 0, $2714 = 0, $2715 = 0, $2716 = 0, $2717 = 0, $2718 = 0, $2719 = 0, $272 = 0.0, $2720 = 0, $2721 = 0, $2722 = 0, $2723 = 0, $2724 = 0.0, $2725 = 0; + var $2726 = 0, $2727 = 0, $2728 = 0, $2729 = 0.0, $273 = 0, $2730 = 0, $2731 = 0, $2732 = 0, $2733 = 0.0, $2734 = 0.0, $2735 = 0.0, $2736 = 0, $2737 = 0, $2738 = 0, $2739 = 0, $274 = 0, $2740 = 0.0, $2741 = 0.0, $2742 = 0.0, $2743 = 0.0; + var $2744 = 0, $2745 = 0, $2746 = 0, $2747 = 0, $2748 = 0.0, $2749 = 0.0, $275 = 0, $2750 = 0.0, $2751 = 0, $2752 = 0, $2753 = 0, $2754 = 0.0, $2755 = 0.0, $2756 = 0.0, $2757 = 0.0, $2758 = 0, $2759 = 0, $276 = 0.0, $2760 = 0, $2761 = 0.0; + var $2762 = 0.0, $2763 = 0.0, $2764 = 0, $2765 = 0, $2766 = 0, $2767 = 0, $2768 = 0.0, $2769 = 0.0, $277 = 0.0, $2770 = 0.0, $2771 = 0.0, $2772 = 0, $2773 = 0, $2774 = 0, $2775 = 0, $2776 = 0.0, $2777 = 0.0, $2778 = 0.0, $2779 = 0, $278 = 0; + var $2780 = 0, $2781 = 0, $2782 = 0.0, $2783 = 0.0, $2784 = 0.0, $2785 = 0.0, $2786 = 0, $2787 = 0, $2788 = 0, $2789 = 0.0, $279 = 0.0, $2790 = 0.0, $2791 = 0.0, $2792 = 0, $2793 = 0, $2794 = 0, $2795 = 0, $2796 = 0.0, $2797 = 0.0, $2798 = 0.0; + var $2799 = 0.0, $28 = 0, $280 = 0, $2800 = 0, $2801 = 0, $2802 = 0, $2803 = 0, $2804 = 0.0, $2805 = 0.0, $2806 = 0.0, $2807 = 0, $2808 = 0, $2809 = 0, $281 = 0, $2810 = 0.0, $2811 = 0.0, $2812 = 0.0, $2813 = 0.0, $2814 = 0, $2815 = 0; + var $2816 = 0, $2817 = 0.0, $2818 = 0.0, $2819 = 0.0, $282 = 0.0, $2820 = 0, $2821 = 0, $2822 = 0, $2823 = 0, $2824 = 0.0, $2825 = 0.0, $2826 = 0.0, $2827 = 0.0, $2828 = 0, $2829 = 0, $283 = 0.0, $2830 = 0, $2831 = 0, $2832 = 0.0, $2833 = 0.0; + var $2834 = 0.0, $2835 = 0, $2836 = 0, $2837 = 0, $2838 = 0.0, $2839 = 0.0, $284 = 0, $2840 = 0.0, $2841 = 0.0, $2842 = 0.0, $2843 = 0.0, $2844 = 0.0, $2845 = 0.0, $2846 = 0.0, $2847 = 0.0, $2848 = 0.0, $2849 = 0.0, $285 = 0, $2850 = 0.0, $2851 = 0.0; + var $2852 = 0.0, $2853 = 0.0, $2854 = 0.0, $2855 = 0.0, $2856 = 0.0, $2857 = 0.0, $2858 = 0.0, $2859 = 0.0, $286 = 0.0, $2860 = 0.0, $2861 = 0.0, $2862 = 0.0, $2863 = 0.0, $2864 = 0.0, $2865 = 0.0, $2866 = 0.0, $2867 = 0.0, $2868 = 0.0, $2869 = 0.0, $287 = 0; + var $2870 = 0.0, $2871 = 0, $2872 = 0, $2873 = 0, $2874 = 0.0, $2875 = 0.0, $2876 = 0.0, $2877 = 0.0, $2878 = 0.0, $2879 = 0, $288 = 0, $2880 = 0, $2881 = 0, $2882 = 0, $2883 = 0.0, $2884 = 0.0, $2885 = 0.0, $2886 = 0.0, $2887 = 0.0, $2888 = 0.0; + var $2889 = 0.0, $289 = 0, $2890 = 0.0, $2891 = 0.0, $2892 = 0.0, $2893 = 0.0, $2894 = 0.0, $2895 = 0.0, $2896 = 0.0, $2897 = 0, $2898 = 0, $2899 = 0.0, $29 = 0, $290 = 0.0, $2900 = 0.0, $2901 = 0.0, $2902 = 0.0, $2903 = 0.0, $2904 = 0.0, $2905 = 0.0; + var $2906 = 0.0, $2907 = 0.0, $2908 = 0.0, $2909 = 0.0, $291 = 0.0, $2910 = 0.0, $2911 = 0.0, $2912 = 0.0, $2913 = 0.0, $2914 = 0.0, $2915 = 0.0, $2916 = 0.0, $2917 = 0.0, $2918 = 0.0, $2919 = 0.0, $292 = 0, $2920 = 0.0, $2921 = 0.0, $2922 = 0.0, $2923 = 0.0; + var $2924 = 0.0, $2925 = 0.0, $2926 = 0.0, $2927 = 0.0, $2928 = 0.0, $2929 = 0.0, $293 = 0, $2930 = 0.0, $2931 = 0.0, $2932 = 0.0, $2933 = 0.0, $2934 = 0.0, $2935 = 0.0, $2936 = 0.0, $2937 = 0.0, $2938 = 0, $2939 = 0, $294 = 0.0, $2940 = 0, $2941 = 0.0; + var $2942 = 0.0, $2943 = 0.0, $2944 = 0, $2945 = 0, $2946 = 0, $2947 = 0, $2948 = 0.0, $2949 = 0.0, $295 = 0, $2950 = 0.0, $2951 = 0, $2952 = 0, $2953 = 0, $2954 = 0.0, $2955 = 0.0, $2956 = 0.0, $2957 = 0, $2958 = 0, $2959 = 0, $296 = 0; + var $2960 = 0, $2961 = 0.0, $2962 = 0.0, $2963 = 0.0, $2964 = 0.0, $2965 = 0.0, $2966 = 0.0, $2967 = 0.0, $2968 = 0.0, $2969 = 0.0, $297 = 0.0, $2970 = 0.0, $2971 = 0.0, $2972 = 0.0, $2973 = 0.0, $2974 = 0.0, $2975 = 0, $2976 = 0, $2977 = 0.0, $2978 = 0.0; + var $2979 = 0.0, $298 = 0.0, $2980 = 0.0, $2981 = 0.0, $2982 = 0.0, $2983 = 0.0, $2984 = 0.0, $2985 = 0.0, $2986 = 0.0, $2987 = 0.0, $2988 = 0.0, $2989 = 0.0, $299 = 0, $2990 = 0.0, $2991 = 0.0, $2992 = 0.0, $2993 = 0.0, $2994 = 0.0, $2995 = 0.0, $2996 = 0.0; + var $2997 = 0.0, $2998 = 0.0, $2999 = 0.0, $3 = 0, $30 = 0, $300 = 0, $3000 = 0.0, $3001 = 0.0, $3002 = 0.0, $3003 = 0.0, $3004 = 0.0, $3005 = 0.0, $3006 = 0.0, $3007 = 0.0, $3008 = 0.0, $3009 = 0.0, $301 = 0, $3010 = 0.0, $3011 = 0.0, $3012 = 0.0; + var $3013 = 0.0, $3014 = 0.0, $3015 = 0.0, $3016 = 0, $3017 = 0, $3018 = 0, $3019 = 0.0, $302 = 0.0, $3020 = 0.0, $3021 = 0.0, $3022 = 0, $3023 = 0, $3024 = 0, $3025 = 0, $3026 = 0.0, $3027 = 0.0, $3028 = 0.0, $3029 = 0, $303 = 0, $3030 = 0; + var $3031 = 0, $3032 = 0.0, $3033 = 0.0, $3034 = 0.0, $3035 = 0, $3036 = 0, $3037 = 0, $3038 = 0, $3039 = 0, $304 = 0, $3040 = 0, $3041 = 0, $3042 = 0, $3043 = 0, $3044 = 0, $3045 = 0, $3046 = 0, $3047 = 0, $3048 = 0, $3049 = 0; + var $305 = 0, $3050 = 0, $3051 = 0, $3052 = 0, $3053 = 0, $3054 = 0, $3055 = 0, $3056 = 0, $3057 = 0, $3058 = 0, $3059 = 0, $306 = 0.0, $3060 = 0, $3061 = 0, $3062 = 0, $3063 = 0, $3064 = 0, $3065 = 0, $3066 = 0, $3067 = 0; + var $3068 = 0, $3069 = 0, $307 = 0.0, $3070 = 0, $3071 = 0, $3072 = 0, $3073 = 0, $3074 = 0, $3075 = 0, $3076 = 0, $3077 = 0, $3078 = 0, $3079 = 0, $308 = 0, $3080 = 0, $3081 = 0, $3082 = 0, $3083 = 0, $3084 = 0, $3085 = 0; + var $3086 = 0, $3087 = 0, $3088 = 0, $3089 = 0, $309 = 0.0, $3090 = 0, $3091 = 0, $3092 = 0, $3093 = 0, $3094 = 0, $3095 = 0, $3096 = 0, $3097 = 0, $3098 = 0, $3099 = 0, $31 = 0.0, $310 = 0, $3100 = 0, $3101 = 0, $3102 = 0; + var $3103 = 0, $3104 = 0, $3105 = 0, $3106 = 0, $3107 = 0, $3108 = 0, $3109 = 0, $311 = 0, $3110 = 0, $3111 = 0, $3112 = 0, $3113 = 0, $3114 = 0, $3115 = 0, $3116 = 0, $3117 = 0, $3118 = 0, $3119 = 0, $312 = 0.0, $3120 = 0; + var $3121 = 0, $3122 = 0, $3123 = 0, $3124 = 0, $3125 = 0, $3126 = 0, $3127 = 0, $3128 = 0, $3129 = 0, $313 = 0, $3130 = 0, $3131 = 0, $3132 = 0, $3133 = 0, $3134 = 0, $3135 = 0, $3136 = 0, $3137 = 0, $3138 = 0, $3139 = 0; + var $314 = 0, $3140 = 0, $3141 = 0, $3142 = 0, $3143 = 0, $3144 = 0, $3145 = 0, $3146 = 0, $3147 = 0, $3148 = 0, $3149 = 0, $315 = 0.0, $3150 = 0, $3151 = 0, $3152 = 0, $3153 = 0, $3154 = 0.0, $3155 = 0, $3156 = 0, $3157 = 0.0; + var $3158 = 0, $3159 = 0, $316 = 0.0, $3160 = 0, $3161 = 0.0, $3162 = 0, $3163 = 0, $3164 = 0, $3165 = 0, $3166 = 0.0, $3167 = 0, $3168 = 0, $3169 = 0, $317 = 0.0, $3170 = 0.0, $3171 = 0, $3172 = 0, $3173 = 0, $3174 = 0, $3175 = 0.0; + var $3176 = 0, $3177 = 0, $3178 = 0, $3179 = 0.0, $318 = 0, $3180 = 0, $3181 = 0, $3182 = 0, $3183 = 0, $3184 = 0.0, $3185 = 0, $3186 = 0, $3187 = 0, $3188 = 0.0, $3189 = 0, $319 = 0.0, $3190 = 0, $3191 = 0, $3192 = 0, $3193 = 0.0; + var $3194 = 0, $3195 = 0, $3196 = 0, $3197 = 0.0, $3198 = 0, $3199 = 0, $32 = 0, $320 = 0, $3200 = 0, $3201 = 0, $3202 = 0.0, $3203 = 0, $3204 = 0, $3205 = 0, $3206 = 0.0, $3207 = 0, $3208 = 0, $3209 = 0, $321 = 0, $3210 = 0; + var $3211 = 0.0, $3212 = 0.0, $3213 = 0.0, $3214 = 0.0, $3215 = 0.0, $3216 = 0.0, $3217 = 0.0, $3218 = 0.0, $3219 = 0.0, $322 = 0, $3220 = 0.0, $3221 = 0.0, $3222 = 0.0, $3223 = 0.0, $3224 = 0.0, $3225 = 0.0, $3226 = 0.0, $3227 = 0.0, $3228 = 0.0, $3229 = 0.0; + var $323 = 0.0, $3230 = 0.0, $3231 = 0.0, $3232 = 0.0, $3233 = 0.0, $3234 = 0.0, $3235 = 0.0, $3236 = 0.0, $3237 = 0.0, $3238 = 0.0, $3239 = 0.0, $324 = 0, $3240 = 0.0, $3241 = 0.0, $3242 = 0.0, $3243 = 0.0, $3244 = 0.0, $3245 = 0.0, $3246 = 0.0, $3247 = 0.0; + var $3248 = 0.0, $3249 = 0.0, $325 = 0, $3250 = 0.0, $3251 = 0.0, $3252 = 0.0, $3253 = 0.0, $3254 = 0.0, $3255 = 0, $3256 = 0.0, $3257 = 0.0, $3258 = 0.0, $3259 = 0.0, $326 = 0, $3260 = 0.0, $3261 = 0.0, $3262 = 0.0, $3263 = 0, $3264 = 0, $3265 = 0.0; + var $3266 = 0.0, $3267 = 0.0, $3268 = 0.0, $3269 = 0.0, $327 = 0.0, $3270 = 0.0, $3271 = 0.0, $3272 = 0.0, $3273 = 0.0, $3274 = 0.0, $3275 = 0.0, $3276 = 0.0, $3277 = 0.0, $3278 = 0.0, $3279 = 0.0, $328 = 0.0, $3280 = 0.0, $3281 = 0.0, $3282 = 0.0, $3283 = 0.0; + var $3284 = 0.0, $3285 = 0.0, $3286 = 0.0, $3287 = 0.0, $3288 = 0.0, $3289 = 0.0, $329 = 0.0, $3290 = 0.0, $3291 = 0, $3292 = 0, $3293 = 0.0, $3294 = 0.0, $3295 = 0.0, $3296 = 0.0, $3297 = 0.0, $3298 = 0.0, $3299 = 0.0, $33 = 0, $330 = 0.0, $3300 = 0.0; + var $3301 = 0.0, $3302 = 0.0, $3303 = 0.0, $3304 = 0.0, $3305 = 0.0, $3306 = 0.0, $3307 = 0.0, $3308 = 0.0, $3309 = 0.0, $331 = 0.0, $3310 = 0.0, $3311 = 0.0, $3312 = 0.0, $3313 = 0.0, $3314 = 0.0, $3315 = 0.0, $3316 = 0.0, $3317 = 0.0, $3318 = 0.0, $3319 = 0.0; + var $332 = 0.0, $3320 = 0.0, $3321 = 0.0, $3322 = 0.0, $3323 = 0.0, $3324 = 0.0, $3325 = 0.0, $3326 = 0.0, $3327 = 0.0, $3328 = 0.0, $3329 = 0.0, $333 = 0, $3330 = 0.0, $3331 = 0.0, $3332 = 0.0, $3333 = 0.0, $3334 = 0.0, $3335 = 0.0, $3336 = 0.0, $3337 = 0.0; + var $3338 = 0.0, $3339 = 0.0, $334 = 0.0, $3340 = 0.0, $3341 = 0.0, $3342 = 0, $3343 = 0, $3344 = 0, $3345 = 0.0, $3346 = 0.0, $3347 = 0.0, $3348 = 0, $3349 = 0, $335 = 0.0, $3350 = 0, $3351 = 0, $3352 = 0.0, $3353 = 0.0, $3354 = 0.0, $3355 = 0; + var $3356 = 0, $3357 = 0, $3358 = 0.0, $3359 = 0.0, $336 = 0.0, $3360 = 0.0, $3361 = 0, $3362 = 0, $3363 = 0, $3364 = 0, $3365 = 0.0, $3366 = 0.0, $3367 = 0.0, $3368 = 0.0, $3369 = 0.0, $337 = 0, $3370 = 0.0, $3371 = 0.0, $3372 = 0.0, $3373 = 0.0; + var $3374 = 0.0, $3375 = 0.0, $3376 = 0.0, $3377 = 0.0, $3378 = 0.0, $3379 = 0.0, $338 = 0, $3380 = 0.0, $3381 = 0.0, $3382 = 0.0, $3383 = 0.0, $3384 = 0.0, $3385 = 0.0, $3386 = 0.0, $3387 = 0.0, $3388 = 0.0, $3389 = 0.0, $339 = 0.0, $3390 = 0.0, $3391 = 0; + var $3392 = 0, $3393 = 0.0, $3394 = 0.0, $3395 = 0.0, $3396 = 0.0, $3397 = 0.0, $3398 = 0.0, $3399 = 0.0, $34 = 0, $340 = 0.0, $3400 = 0.0, $3401 = 0.0, $3402 = 0.0, $3403 = 0.0, $3404 = 0.0, $3405 = 0.0, $3406 = 0.0, $3407 = 0.0, $3408 = 0.0, $3409 = 0.0; + var $341 = 0.0, $3410 = 0.0, $3411 = 0.0, $3412 = 0.0, $3413 = 0.0, $3414 = 0.0, $3415 = 0.0, $3416 = 0.0, $3417 = 0.0, $3418 = 0.0, $3419 = 0.0, $342 = 0, $3420 = 0.0, $3421 = 0.0, $3422 = 0.0, $3423 = 0.0, $3424 = 0.0, $3425 = 0.0, $3426 = 0.0, $3427 = 0.0; + var $3428 = 0.0, $3429 = 0.0, $343 = 0, $3430 = 0.0, $3431 = 0.0, $3432 = 0.0, $3433 = 0.0, $3434 = 0.0, $3435 = 0.0, $3436 = 0.0, $3437 = 0.0, $3438 = 0.0, $3439 = 0.0, $344 = 0.0, $3440 = 0.0, $3441 = 0.0, $3442 = 0, $3443 = 0, $3444 = 0, $3445 = 0.0; + var $3446 = 0.0, $3447 = 0.0, $3448 = 0, $3449 = 0, $345 = 0.0, $3450 = 0, $3451 = 0, $3452 = 0.0, $3453 = 0.0, $3454 = 0.0, $3455 = 0, $3456 = 0, $3457 = 0, $3458 = 0.0, $3459 = 0.0, $346 = 0.0, $3460 = 0.0, $3461 = 0, $3462 = 0, $3463 = 0; + var $3464 = 0, $3465 = 0.0, $3466 = 0.0, $3467 = 0.0, $3468 = 0.0, $3469 = 0.0, $347 = 0, $3470 = 0.0, $3471 = 0.0, $3472 = 0.0, $3473 = 0.0, $3474 = 0.0, $3475 = 0.0, $3476 = 0.0, $3477 = 0.0, $3478 = 0.0, $3479 = 0.0, $348 = 0, $3480 = 0.0, $3481 = 0.0; + var $3482 = 0.0, $3483 = 0.0, $3484 = 0.0, $3485 = 0.0, $3486 = 0.0, $3487 = 0.0, $3488 = 0.0, $3489 = 0.0, $349 = 0, $3490 = 0.0, $3491 = 0, $3492 = 0, $3493 = 0.0, $3494 = 0.0, $3495 = 0.0, $3496 = 0.0, $3497 = 0.0, $3498 = 0.0, $3499 = 0.0, $35 = 0; + var $350 = 0.0, $3500 = 0.0, $3501 = 0.0, $3502 = 0.0, $3503 = 0.0, $3504 = 0.0, $3505 = 0.0, $3506 = 0.0, $3507 = 0.0, $3508 = 0.0, $3509 = 0.0, $351 = 0.0, $3510 = 0.0, $3511 = 0.0, $3512 = 0.0, $3513 = 0.0, $3514 = 0.0, $3515 = 0.0, $3516 = 0.0, $3517 = 0.0; + var $3518 = 0.0, $3519 = 0.0, $352 = 0.0, $3520 = 0.0, $3521 = 0.0, $3522 = 0.0, $3523 = 0.0, $3524 = 0.0, $3525 = 0.0, $3526 = 0.0, $3527 = 0.0, $3528 = 0.0, $3529 = 0.0, $353 = 0, $3530 = 0.0, $3531 = 0.0, $3532 = 0.0, $3533 = 0.0, $3534 = 0.0, $3535 = 0.0; + var $3536 = 0.0, $3537 = 0.0, $3538 = 0.0, $3539 = 0.0, $354 = 0, $3540 = 0.0, $3541 = 0.0, $3542 = 0, $3543 = 0, $3544 = 0, $3545 = 0.0, $3546 = 0.0, $3547 = 0.0, $3548 = 0, $3549 = 0, $355 = 0.0, $3550 = 0, $3551 = 0, $3552 = 0.0, $3553 = 0.0; + var $3554 = 0.0, $3555 = 0, $3556 = 0, $3557 = 0, $3558 = 0.0, $3559 = 0.0, $356 = 0.0, $3560 = 0.0, $3561 = 0, $3562 = 0, $3563 = 0, $3564 = 0, $3565 = 0, $3566 = 0, $3567 = 0, $3568 = 0, $3569 = 0, $357 = 0.0, $3570 = 0, $3571 = 0; + var $3572 = 0, $3573 = 0, $3574 = 0, $3575 = 0, $3576 = 0, $3577 = 0.0, $3578 = 0, $3579 = 0, $358 = 0, $3580 = 0, $3581 = 0, $3582 = 0, $3583 = 0.0, $3584 = 0, $3585 = 0, $3586 = 0, $3587 = 0, $3588 = 0, $3589 = 0, $359 = 0; + var $3590 = 0.0, $3591 = 0, $3592 = 0, $3593 = 0, $3594 = 0, $3595 = 0, $3596 = 0.0, $3597 = 0, $3598 = 0, $3599 = 0, $36 = 0, $360 = 0, $3600 = 0, $3601 = 0, $3602 = 0, $3603 = 0.0, $3604 = 0, $3605 = 0, $3606 = 0, $3607 = 0; + var $3608 = 0, $3609 = 0.0, $361 = 0.0, $3610 = 0, $3611 = 0, $3612 = 0, $3613 = 0, $3614 = 0, $3615 = 0, $3616 = 0.0, $3617 = 0, $3618 = 0, $3619 = 0, $362 = 0.0, $3620 = 0, $3621 = 0, $3622 = 0.0, $3623 = 0, $3624 = 0, $3625 = 0; + var $3626 = 0, $3627 = 0, $3628 = 0, $3629 = 0.0, $363 = 0.0, $3630 = 0, $3631 = 0, $3632 = 0, $3633 = 0, $3634 = 0, $3635 = 0.0, $3636 = 0, $3637 = 0, $3638 = 0, $3639 = 0, $364 = 0, $3640 = 0, $3641 = 0, $3642 = 0.0, $3643 = 0; + var $3644 = 0, $3645 = 0, $3646 = 0, $3647 = 0, $3648 = 0.0, $3649 = 0, $365 = 0, $3650 = 0, $3651 = 0, $3652 = 0, $3653 = 0, $3654 = 0, $3655 = 0, $3656 = 0, $3657 = 0, $3658 = 0, $3659 = 0, $366 = 0.0, $3660 = 0, $3661 = 0; + var $3662 = 0, $3663 = 0, $3664 = 0, $3665 = 0, $3666 = 0, $3667 = 0, $3668 = 0, $3669 = 0, $367 = 0.0, $3670 = 0.0, $3671 = 0, $3672 = 0, $3673 = 0, $3674 = 0, $3675 = 0.0, $3676 = 0, $3677 = 0, $3678 = 0, $3679 = 0.0, $368 = 0.0; + var $3680 = 0.0, $3681 = 0.0, $3682 = 0, $3683 = 0, $3684 = 0, $3685 = 0, $3686 = 0.0, $3687 = 0.0, $3688 = 0.0, $3689 = 0.0, $369 = 0, $3690 = 0, $3691 = 0, $3692 = 0, $3693 = 0, $3694 = 0.0, $3695 = 0.0, $3696 = 0.0, $3697 = 0, $3698 = 0; + var $3699 = 0, $37 = 0.0, $370 = 0, $3700 = 0.0, $3701 = 0.0, $3702 = 0.0, $3703 = 0.0, $3704 = 0, $3705 = 0, $3706 = 0, $3707 = 0.0, $3708 = 0.0, $3709 = 0.0, $371 = 0, $3710 = 0, $3711 = 0, $3712 = 0, $3713 = 0, $3714 = 0.0, $3715 = 0.0; + var $3716 = 0.0, $3717 = 0.0, $3718 = 0, $3719 = 0, $372 = 0, $3720 = 0, $3721 = 0, $3722 = 0.0, $3723 = 0.0, $3724 = 0.0, $3725 = 0, $3726 = 0, $3727 = 0, $3728 = 0.0, $3729 = 0.0, $373 = 0, $3730 = 0.0, $3731 = 0.0, $3732 = 0, $3733 = 0; + var $3734 = 0, $3735 = 0.0, $3736 = 0.0, $3737 = 0.0, $3738 = 0, $3739 = 0, $374 = 0, $3740 = 0, $3741 = 0, $3742 = 0.0, $3743 = 0.0, $3744 = 0.0, $3745 = 0.0, $3746 = 0, $3747 = 0, $3748 = 0, $3749 = 0, $375 = 0.0, $3750 = 0.0, $3751 = 0.0; + var $3752 = 0.0, $3753 = 0, $3754 = 0, $3755 = 0, $3756 = 0.0, $3757 = 0.0, $3758 = 0.0, $3759 = 0.0, $376 = 0, $3760 = 0, $3761 = 0, $3762 = 0, $3763 = 0.0, $3764 = 0.0, $3765 = 0.0, $3766 = 0, $3767 = 0, $3768 = 0, $3769 = 0, $377 = 0; + var $3770 = 0.0, $3771 = 0.0, $3772 = 0.0, $3773 = 0.0, $3774 = 0, $3775 = 0, $3776 = 0, $3777 = 0, $3778 = 0.0, $3779 = 0.0, $378 = 0, $3780 = 0.0, $3781 = 0, $3782 = 0, $3783 = 0, $3784 = 0.0, $3785 = 0.0, $3786 = 0.0, $3787 = 0.0, $3788 = 0; + var $3789 = 0, $379 = 0.0, $3790 = 0, $3791 = 0.0, $3792 = 0.0, $3793 = 0.0, $3794 = 0, $3795 = 0, $3796 = 0, $3797 = 0, $3798 = 0.0, $3799 = 0.0, $38 = 0, $380 = 0, $3800 = 0.0, $3801 = 0.0, $3802 = 0, $3803 = 0, $3804 = 0, $3805 = 0; + var $3806 = 0.0, $3807 = 0.0, $3808 = 0.0, $3809 = 0, $381 = 0, $3810 = 0, $3811 = 0, $3812 = 0.0, $3813 = 0.0, $3814 = 0.0, $3815 = 0.0, $3816 = 0, $3817 = 0, $3818 = 0, $3819 = 0.0, $382 = 0, $3820 = 0.0, $3821 = 0.0, $3822 = 0, $3823 = 0; + var $3824 = 0, $3825 = 0, $3826 = 0.0, $3827 = 0.0, $3828 = 0.0, $3829 = 0.0, $383 = 0, $3830 = 0, $3831 = 0, $3832 = 0, $3833 = 0, $3834 = 0.0, $3835 = 0.0, $3836 = 0.0, $3837 = 0, $3838 = 0, $3839 = 0, $384 = 0, $3840 = 0.0, $3841 = 0.0; + var $3842 = 0.0, $3843 = 0.0, $3844 = 0.0, $3845 = 0.0, $3846 = 0.0, $3847 = 0.0, $3848 = 0.0, $3849 = 0.0, $385 = 0.0, $3850 = 0.0, $3851 = 0.0, $3852 = 0.0, $3853 = 0.0, $3854 = 0.0, $3855 = 0.0, $3856 = 0.0, $3857 = 0.0, $3858 = 0.0, $3859 = 0.0, $386 = 0; + var $3860 = 0.0, $3861 = 0.0, $3862 = 0.0, $3863 = 0.0, $3864 = 0.0, $3865 = 0.0, $3866 = 0.0, $3867 = 0.0, $3868 = 0.0, $3869 = 0.0, $387 = 0, $3870 = 0.0, $3871 = 0.0, $3872 = 0.0, $3873 = 0.0, $3874 = 0.0, $3875 = 0.0, $3876 = 0.0, $3877 = 0.0, $3878 = 0.0; + var $3879 = 0.0, $388 = 0, $3880 = 0.0, $3881 = 0.0, $3882 = 0.0, $3883 = 0.0, $3884 = 0.0, $3885 = 0.0, $3886 = 0.0, $3887 = 0, $3888 = 0, $3889 = 0, $389 = 0, $3890 = 0.0, $3891 = 0.0, $3892 = 0.0, $3893 = 0.0, $3894 = 0.0, $3895 = 0.0, $3896 = 0.0; + var $3897 = 0, $3898 = 0, $3899 = 0, $39 = 0, $390 = 0, $3900 = 0, $3901 = 0.0, $3902 = 0.0, $3903 = 0.0, $3904 = 0.0, $3905 = 0.0, $3906 = 0.0, $3907 = 0.0, $3908 = 0.0, $3909 = 0.0, $391 = 0, $3910 = 0.0, $3911 = 0.0, $3912 = 0.0, $3913 = 0.0; + var $3914 = 0.0, $3915 = 0.0, $3916 = 0.0, $3917 = 0.0, $3918 = 0.0, $3919 = 0.0, $392 = 0.0, $3920 = 0.0, $3921 = 0.0, $3922 = 0.0, $3923 = 0.0, $3924 = 0.0, $3925 = 0.0, $3926 = 0.0, $3927 = 0, $3928 = 0, $3929 = 0.0, $393 = 0, $3930 = 0.0, $3931 = 0.0; + var $3932 = 0.0, $3933 = 0.0, $3934 = 0.0, $3935 = 0.0, $3936 = 0.0, $3937 = 0.0, $3938 = 0.0, $3939 = 0.0, $394 = 0, $3940 = 0.0, $3941 = 0.0, $3942 = 0.0, $3943 = 0.0, $3944 = 0.0, $3945 = 0.0, $3946 = 0.0, $3947 = 0.0, $3948 = 0.0, $3949 = 0.0, $395 = 0; + var $3950 = 0.0, $3951 = 0.0, $3952 = 0.0, $3953 = 0.0, $3954 = 0.0, $3955 = 0.0, $3956 = 0.0, $3957 = 0.0, $3958 = 0.0, $3959 = 0.0, $396 = 0, $3960 = 0.0, $3961 = 0.0, $3962 = 0.0, $3963 = 0.0, $3964 = 0.0, $3965 = 0.0, $3966 = 0.0, $3967 = 0.0, $3968 = 0.0; + var $3969 = 0.0, $397 = 0, $3970 = 0.0, $3971 = 0.0, $3972 = 0.0, $3973 = 0.0, $3974 = 0.0, $3975 = 0.0, $3976 = 0.0, $3977 = 0.0, $3978 = 0, $3979 = 0, $398 = 0, $3980 = 0, $3981 = 0.0, $3982 = 0.0, $3983 = 0.0, $3984 = 0, $3985 = 0, $3986 = 0; + var $3987 = 0, $3988 = 0.0, $3989 = 0.0, $399 = 0, $3990 = 0.0, $3991 = 0, $3992 = 0, $3993 = 0, $3994 = 0.0, $3995 = 0.0, $3996 = 0.0, $3997 = 0, $3998 = 0, $3999 = 0, $4 = 0, $40 = 0, $400 = 0.0, $4000 = 0, $4001 = 0.0, $4002 = 0.0; + var $4003 = 0.0, $4004 = 0.0, $4005 = 0.0, $4006 = 0.0, $4007 = 0.0, $4008 = 0.0, $4009 = 0.0, $401 = 0, $4010 = 0.0, $4011 = 0.0, $4012 = 0.0, $4013 = 0.0, $4014 = 0.0, $4015 = 0.0, $4016 = 0.0, $4017 = 0.0, $4018 = 0.0, $4019 = 0.0, $402 = 0, $4020 = 0.0; + var $4021 = 0.0, $4022 = 0.0, $4023 = 0.0, $4024 = 0.0, $4025 = 0.0, $4026 = 0.0, $4027 = 0, $4028 = 0, $4029 = 0.0, $403 = 0, $4030 = 0.0, $4031 = 0.0, $4032 = 0.0, $4033 = 0.0, $4034 = 0.0, $4035 = 0.0, $4036 = 0.0, $4037 = 0.0, $4038 = 0.0, $4039 = 0.0; + var $404 = 0, $4040 = 0.0, $4041 = 0.0, $4042 = 0.0, $4043 = 0.0, $4044 = 0.0, $4045 = 0.0, $4046 = 0.0, $4047 = 0.0, $4048 = 0.0, $4049 = 0.0, $405 = 0, $4050 = 0.0, $4051 = 0.0, $4052 = 0.0, $4053 = 0.0, $4054 = 0.0, $4055 = 0.0, $4056 = 0.0, $4057 = 0.0; + var $4058 = 0.0, $4059 = 0.0, $406 = 0, $4060 = 0.0, $4061 = 0.0, $4062 = 0.0, $4063 = 0.0, $4064 = 0.0, $4065 = 0.0, $4066 = 0.0, $4067 = 0.0, $4068 = 0.0, $4069 = 0.0, $407 = 0, $4070 = 0.0, $4071 = 0.0, $4072 = 0.0, $4073 = 0.0, $4074 = 0.0, $4075 = 0.0; + var $4076 = 0.0, $4077 = 0.0, $4078 = 0, $4079 = 0, $408 = 0.0, $4080 = 0, $4081 = 0.0, $4082 = 0.0, $4083 = 0.0, $4084 = 0, $4085 = 0, $4086 = 0, $4087 = 0, $4088 = 0.0, $4089 = 0.0, $409 = 0, $4090 = 0.0, $4091 = 0, $4092 = 0, $4093 = 0; + var $4094 = 0.0, $4095 = 0.0, $4096 = 0.0, $4097 = 0, $4098 = 0, $4099 = 0, $41 = 0, $410 = 0, $4100 = 0, $4101 = 0.0, $4102 = 0.0, $4103 = 0.0, $4104 = 0.0, $4105 = 0.0, $4106 = 0.0, $4107 = 0.0, $4108 = 0.0, $4109 = 0.0, $411 = 0, $4110 = 0.0; + var $4111 = 0.0, $4112 = 0.0, $4113 = 0.0, $4114 = 0.0, $4115 = 0.0, $4116 = 0.0, $4117 = 0.0, $4118 = 0.0, $4119 = 0.0, $412 = 0, $4120 = 0.0, $4121 = 0.0, $4122 = 0.0, $4123 = 0.0, $4124 = 0.0, $4125 = 0.0, $4126 = 0.0, $4127 = 0, $4128 = 0, $4129 = 0.0; + var $413 = 0, $4130 = 0.0, $4131 = 0.0, $4132 = 0.0, $4133 = 0.0, $4134 = 0.0, $4135 = 0.0, $4136 = 0.0, $4137 = 0.0, $4138 = 0.0, $4139 = 0.0, $414 = 0, $4140 = 0.0, $4141 = 0.0, $4142 = 0.0, $4143 = 0.0, $4144 = 0.0, $4145 = 0.0, $4146 = 0.0, $4147 = 0.0; + var $4148 = 0.0, $4149 = 0.0, $415 = 0, $4150 = 0.0, $4151 = 0.0, $4152 = 0.0, $4153 = 0.0, $4154 = 0.0, $4155 = 0.0, $4156 = 0.0, $4157 = 0.0, $4158 = 0.0, $4159 = 0.0, $416 = 0.0, $4160 = 0.0, $4161 = 0.0, $4162 = 0.0, $4163 = 0.0, $4164 = 0.0, $4165 = 0.0; + var $4166 = 0.0, $4167 = 0.0, $4168 = 0.0, $4169 = 0.0, $417 = 0, $4170 = 0.0, $4171 = 0.0, $4172 = 0.0, $4173 = 0.0, $4174 = 0.0, $4175 = 0.0, $4176 = 0.0, $4177 = 0.0, $4178 = 0, $4179 = 0, $418 = 0, $4180 = 0, $4181 = 0.0, $4182 = 0.0, $4183 = 0.0; + var $4184 = 0, $4185 = 0, $4186 = 0, $4187 = 0, $4188 = 0.0, $4189 = 0.0, $419 = 0, $4190 = 0.0, $4191 = 0, $4192 = 0, $4193 = 0, $4194 = 0.0, $4195 = 0.0, $4196 = 0.0, $4197 = 0, $4198 = 0, $4199 = 0, $42 = 0, $420 = 0, $4200 = 0; + var $4201 = 0, $4202 = 0, $4203 = 0, $4204 = 0, $4205 = 0, $4206 = 0, $4207 = 0, $4208 = 0, $4209 = 0, $421 = 0, $4210 = 0, $4211 = 0, $4212 = 0, $4213 = 0, $4214 = 0, $4215 = 0, $4216 = 0, $4217 = 0, $4218 = 0, $4219 = 0; + var $422 = 0, $4220 = 0, $4221 = 0, $4222 = 0, $4223 = 0, $4224 = 0, $4225 = 0, $4226 = 0, $4227 = 0, $4228 = 0, $4229 = 0, $423 = 0, $4230 = 0, $4231 = 0, $4232 = 0, $4233 = 0, $4234 = 0, $4235 = 0, $4236 = 0, $4237 = 0; + var $4238 = 0, $4239 = 0, $424 = 0.0, $4240 = 0, $4241 = 0, $4242 = 0, $4243 = 0, $4244 = 0, $4245 = 0, $4246 = 0, $4247 = 0, $4248 = 0, $4249 = 0, $425 = 0, $4250 = 0, $4251 = 0, $4252 = 0, $4253 = 0, $4254 = 0, $4255 = 0; + var $4256 = 0, $4257 = 0, $4258 = 0, $4259 = 0, $426 = 0, $4260 = 0, $4261 = 0, $4262 = 0, $4263 = 0, $4264 = 0, $4265 = 0, $4266 = 0, $4267 = 0, $4268 = 0, $4269 = 0, $427 = 0, $4270 = 0, $4271 = 0, $4272 = 0, $4273 = 0; + var $4274 = 0, $4275 = 0, $4276 = 0, $4277 = 0, $4278 = 0, $4279 = 0, $428 = 0, $4280 = 0, $4281 = 0, $4282 = 0, $4283 = 0, $4284 = 0, $4285 = 0, $4286 = 0, $4287 = 0, $4288 = 0, $4289 = 0, $429 = 0, $4290 = 0, $4291 = 0; + var $4292 = 0, $4293 = 0, $4294 = 0, $4295 = 0, $4296 = 0, $4297 = 0, $4298 = 0, $4299 = 0, $43 = 0, $430 = 0, $4300 = 0, $4301 = 0, $4302 = 0, $4303 = 0, $4304 = 0, $4305 = 0, $4306 = 0, $4307 = 0, $4308 = 0, $4309 = 0; + var $431 = 0, $4310 = 0, $4311 = 0, $4312 = 0, $4313 = 0, $4314 = 0, $4315 = 0, $4316 = 0, $4317 = 0, $4318 = 0, $4319 = 0, $432 = 0.0, $4320 = 0, $4321 = 0, $4322 = 0, $4323 = 0, $4324 = 0, $4325 = 0.0, $4326 = 0, $4327 = 0; + var $4328 = 0, $4329 = 0, $433 = 0, $4330 = 0, $4331 = 0.0, $4332 = 0, $4333 = 0, $4334 = 0, $4335 = 0, $4336 = 0, $4337 = 0, $4338 = 0.0, $4339 = 0, $434 = 0, $4340 = 0, $4341 = 0, $4342 = 0, $4343 = 0, $4344 = 0.0, $4345 = 0; + var $4346 = 0, $4347 = 0, $4348 = 0, $4349 = 0, $435 = 0, $4350 = 0, $4351 = 0.0, $4352 = 0, $4353 = 0, $4354 = 0, $4355 = 0, $4356 = 0, $4357 = 0.0, $4358 = 0, $4359 = 0, $436 = 0, $4360 = 0, $4361 = 0, $4362 = 0, $4363 = 0; + var $4364 = 0.0, $4365 = 0, $4366 = 0, $4367 = 0, $4368 = 0, $4369 = 0, $437 = 0, $4370 = 0.0, $4371 = 0, $4372 = 0, $4373 = 0, $4374 = 0, $4375 = 0, $4376 = 0, $4377 = 0.0, $4378 = 0, $4379 = 0, $438 = 0, $4380 = 0, $4381 = 0; + var $4382 = 0, $4383 = 0.0, $4384 = 0, $4385 = 0, $4386 = 0, $4387 = 0, $4388 = 0, $4389 = 0, $439 = 0, $4390 = 0.0, $4391 = 0, $4392 = 0, $4393 = 0, $4394 = 0, $4395 = 0, $4396 = 0.0, $4397 = 0, $4398 = 0, $4399 = 0, $44 = 0.0; + var $440 = 0.0, $4400 = 0, $4401 = 0, $4402 = 0, $4403 = 0.0, $4404 = 0, $4405 = 0, $4406 = 0, $4407 = 0, $4408 = 0, $4409 = 0.0, $441 = 0, $4410 = 0, $4411 = 0, $4412 = 0, $4413 = 0, $4414 = 0, $4415 = 0, $4416 = 0, $4417 = 0; + var $4418 = 0, $4419 = 0, $442 = 0, $4420 = 0, $4421 = 0, $4422 = 0, $4423 = 0, $4424 = 0, $4425 = 0, $4426 = 0, $4427 = 0, $4428 = 0, $4429 = 0, $443 = 0, $4430 = 0, $4431 = 0, $4432 = 0, $4433 = 0, $4434 = 0.0, $4435 = 0; + var $4436 = 0, $4437 = 0, $4438 = 0, $4439 = 0.0, $444 = 0, $4440 = 0, $4441 = 0, $4442 = 0, $4443 = 0.0, $4444 = 0.0, $4445 = 0.0, $4446 = 0, $4447 = 0, $4448 = 0, $4449 = 0, $445 = 0, $4450 = 0.0, $4451 = 0.0, $4452 = 0.0, $4453 = 0.0; + var $4454 = 0, $4455 = 0, $4456 = 0, $4457 = 0, $4458 = 0.0, $4459 = 0.0, $446 = 0.0, $4460 = 0.0, $4461 = 0, $4462 = 0, $4463 = 0, $4464 = 0.0, $4465 = 0.0, $4466 = 0.0, $4467 = 0.0, $4468 = 0, $4469 = 0, $447 = 0, $4470 = 0, $4471 = 0.0; + var $4472 = 0.0, $4473 = 0.0, $4474 = 0, $4475 = 0, $4476 = 0, $4477 = 0, $4478 = 0.0, $4479 = 0.0, $448 = 0, $4480 = 0.0, $4481 = 0.0, $4482 = 0, $4483 = 0, $4484 = 0, $4485 = 0, $4486 = 0.0, $4487 = 0.0, $4488 = 0.0, $4489 = 0, $449 = 0.0; + var $4490 = 0, $4491 = 0, $4492 = 0.0, $4493 = 0.0, $4494 = 0.0, $4495 = 0.0, $4496 = 0, $4497 = 0, $4498 = 0, $4499 = 0.0, $45 = 0, $450 = 0.0, $4500 = 0.0, $4501 = 0.0, $4502 = 0, $4503 = 0, $4504 = 0, $4505 = 0, $4506 = 0.0, $4507 = 0.0; + var $4508 = 0.0, $4509 = 0.0, $451 = 0, $4510 = 0, $4511 = 0, $4512 = 0, $4513 = 0, $4514 = 0.0, $4515 = 0.0, $4516 = 0.0, $4517 = 0, $4518 = 0, $4519 = 0, $452 = 0, $4520 = 0.0, $4521 = 0.0, $4522 = 0.0, $4523 = 0.0, $4524 = 0, $4525 = 0; + var $4526 = 0, $4527 = 0.0, $4528 = 0.0, $4529 = 0.0, $453 = 0.0, $4530 = 0, $4531 = 0, $4532 = 0, $4533 = 0, $4534 = 0.0, $4535 = 0.0, $4536 = 0.0, $4537 = 0.0, $4538 = 0, $4539 = 0, $454 = 0, $4540 = 0, $4541 = 0, $4542 = 0.0, $4543 = 0.0; + var $4544 = 0.0, $4545 = 0, $4546 = 0, $4547 = 0, $4548 = 0.0, $4549 = 0.0, $455 = 0, $4550 = 0.0, $4551 = 0.0, $4552 = 0, $4553 = 0, $4554 = 0, $4555 = 0.0, $4556 = 0.0, $4557 = 0.0, $4558 = 0, $4559 = 0, $456 = 0.0, $4560 = 0, $4561 = 0; + var $4562 = 0.0, $4563 = 0.0, $4564 = 0.0, $4565 = 0.0, $4566 = 0, $4567 = 0, $4568 = 0, $4569 = 0, $457 = 0.0, $4570 = 0.0, $4571 = 0.0, $4572 = 0.0, $4573 = 0, $4574 = 0, $4575 = 0, $4576 = 0.0, $4577 = 0.0, $4578 = 0.0, $4579 = 0.0, $458 = 0; + var $4580 = 0, $4581 = 0, $4582 = 0, $4583 = 0.0, $4584 = 0.0, $4585 = 0.0, $4586 = 0, $4587 = 0, $4588 = 0, $4589 = 0, $459 = 0, $4590 = 0.0, $4591 = 0.0, $4592 = 0.0, $4593 = 0.0, $4594 = 0, $4595 = 0, $4596 = 0, $4597 = 0, $4598 = 0.0; + var $4599 = 0.0, $46 = 0, $460 = 0, $4600 = 0.0, $4601 = 0, $4602 = 0, $4603 = 0, $4604 = 0.0, $4605 = 0.0, $4606 = 0.0, $4607 = 0.0, $4608 = 0, $4609 = 0, $461 = 0.0, $4610 = 0, $4611 = 0.0, $4612 = 0.0, $4613 = 0.0, $4614 = 0, $4615 = 0; + var $4616 = 0, $4617 = 0, $4618 = 0.0, $4619 = 0.0, $462 = 0, $4620 = 0.0, $4621 = 0.0, $4622 = 0, $4623 = 0, $4624 = 0, $4625 = 0, $4626 = 0.0, $4627 = 0.0, $4628 = 0.0, $4629 = 0, $463 = 0, $4630 = 0, $4631 = 0, $4632 = 0.0, $4633 = 0.0; + var $4634 = 0.0, $4635 = 0.0, $4636 = 0.0, $4637 = 0.0, $4638 = 0.0, $4639 = 0.0, $464 = 0, $4640 = 0.0, $4641 = 0.0, $4642 = 0.0, $4643 = 0.0, $4644 = 0.0, $4645 = 0.0, $4646 = 0.0, $4647 = 0.0, $4648 = 0.0, $4649 = 0.0, $465 = 0.0, $4650 = 0.0, $4651 = 0.0; + var $4652 = 0.0, $4653 = 0.0, $4654 = 0.0, $4655 = 0.0, $4656 = 0.0, $4657 = 0.0, $4658 = 0.0, $4659 = 0.0, $466 = 0.0, $4660 = 0.0, $4661 = 0.0, $4662 = 0.0, $4663 = 0.0, $4664 = 0.0, $4665 = 0.0, $4666 = 0.0, $4667 = 0.0, $4668 = 0.0, $4669 = 0.0, $467 = 0; + var $4670 = 0.0, $4671 = 0.0, $4672 = 0.0, $4673 = 0.0, $4674 = 0.0, $4675 = 0.0, $4676 = 0.0, $4677 = 0.0, $4678 = 0.0, $4679 = 0.0, $468 = 0, $4680 = 0.0, $4681 = 0.0, $4682 = 0.0, $4683 = 0.0, $4684 = 0.0, $4685 = 0.0, $4686 = 0.0, $4687 = 0.0, $4688 = 0.0; + var $4689 = 0.0, $469 = 0, $4690 = 0.0, $4691 = 0, $4692 = 0, $4693 = 0, $4694 = 0.0, $4695 = 0.0, $4696 = 0.0, $4697 = 0.0, $4698 = 0.0, $4699 = 0.0, $47 = 0, $470 = 0.0, $4700 = 0.0, $4701 = 0, $4702 = 0, $4703 = 0, $4704 = 0, $4705 = 0.0; + var $4706 = 0.0, $4707 = 0.0, $4708 = 0.0, $4709 = 0.0, $471 = 0, $4710 = 0.0, $4711 = 0.0, $4712 = 0, $4713 = 0, $4714 = 0, $4715 = 0.0, $4716 = 0.0, $4717 = 0.0, $4718 = 0.0, $4719 = 0.0, $472 = 0, $4720 = 0.0, $4721 = 0.0, $4722 = 0, $4723 = 0; + var $4724 = 0, $4725 = 0, $4726 = 0.0, $4727 = 0.0, $4728 = 0.0, $4729 = 0.0, $473 = 0, $4730 = 0.0, $4731 = 0.0, $4732 = 0.0, $4733 = 0.0, $4734 = 0.0, $4735 = 0.0, $4736 = 0.0, $4737 = 0.0, $4738 = 0.0, $4739 = 0.0, $474 = 0.0, $4740 = 0.0, $4741 = 0.0; + var $4742 = 0.0, $4743 = 0.0, $4744 = 0.0, $4745 = 0.0, $4746 = 0.0, $4747 = 0.0, $4748 = 0, $4749 = 0, $475 = 0.0, $4750 = 0.0, $4751 = 0.0, $4752 = 0.0, $4753 = 0.0, $4754 = 0.0, $4755 = 0.0, $4756 = 0.0, $4757 = 0.0, $4758 = 0.0, $4759 = 0.0, $476 = 0; + var $4760 = 0.0, $4761 = 0.0, $4762 = 0.0, $4763 = 0.0, $4764 = 0.0, $4765 = 0.0, $4766 = 0.0, $4767 = 0.0, $4768 = 0.0, $4769 = 0.0, $477 = 0, $4770 = 0.0, $4771 = 0.0, $4772 = 0.0, $4773 = 0.0, $4774 = 0.0, $4775 = 0, $4776 = 0, $4777 = 0, $4778 = 0.0; + var $4779 = 0.0, $478 = 0.0, $4780 = 0.0, $4781 = 0, $4782 = 0, $4783 = 0, $4784 = 0, $4785 = 0.0, $4786 = 0.0, $4787 = 0.0, $4788 = 0, $4789 = 0, $479 = 0, $4790 = 0, $4791 = 0.0, $4792 = 0.0, $4793 = 0.0, $4794 = 0, $4795 = 0, $4796 = 0; + var $4797 = 0, $4798 = 0.0, $4799 = 0.0, $48 = 0, $480 = 0, $4800 = 0.0, $4801 = 0.0, $4802 = 0.0, $4803 = 0.0, $4804 = 0, $4805 = 0, $4806 = 0.0, $4807 = 0.0, $4808 = 0.0, $4809 = 0.0, $481 = 0.0, $4810 = 0.0, $4811 = 0.0, $4812 = 0.0, $4813 = 0.0; + var $4814 = 0.0, $4815 = 0.0, $4816 = 0.0, $4817 = 0.0, $4818 = 0.0, $4819 = 0.0, $482 = 0.0, $4820 = 0.0, $4821 = 0.0, $4822 = 0.0, $4823 = 0, $4824 = 0, $4825 = 0, $4826 = 0.0, $4827 = 0.0, $4828 = 0.0, $4829 = 0, $483 = 0, $4830 = 0, $4831 = 0; + var $4832 = 0, $4833 = 0.0, $4834 = 0.0, $4835 = 0.0, $4836 = 0, $4837 = 0, $4838 = 0, $4839 = 0.0, $484 = 0, $4840 = 0.0, $4841 = 0.0, $4842 = 0, $4843 = 0, $4844 = 0, $4845 = 0, $4846 = 0.0, $4847 = 0.0, $4848 = 0.0, $4849 = 0.0, $485 = 0.0; + var $4850 = 0.0, $4851 = 0.0, $4852 = 0.0, $4853 = 0.0, $4854 = 0.0, $4855 = 0.0, $4856 = 0, $4857 = 0, $4858 = 0.0, $4859 = 0.0, $486 = 0, $4860 = 0.0, $4861 = 0.0, $4862 = 0.0, $4863 = 0.0, $4864 = 0.0, $4865 = 0.0, $4866 = 0.0, $4867 = 0.0, $4868 = 0.0; + var $4869 = 0.0, $487 = 0, $4870 = 0.0, $4871 = 0.0, $4872 = 0.0, $4873 = 0.0, $4874 = 0.0, $4875 = 0.0, $4876 = 0.0, $4877 = 0.0, $4878 = 0.0, $4879 = 0.0, $488 = 0.0, $4880 = 0.0, $4881 = 0.0, $4882 = 0.0, $4883 = 0, $4884 = 0, $4885 = 0, $4886 = 0.0; + var $4887 = 0.0, $4888 = 0.0, $4889 = 0, $489 = 0.0, $4890 = 0, $4891 = 0, $4892 = 0, $4893 = 0.0, $4894 = 0.0, $4895 = 0.0, $4896 = 0, $4897 = 0, $4898 = 0, $4899 = 0.0, $49 = 0.0, $490 = 0, $4900 = 0.0, $4901 = 0.0, $4902 = 0, $4903 = 0; + var $4904 = 0, $4905 = 0, $4906 = 0, $4907 = 0, $4908 = 0, $4909 = 0, $491 = 0, $4910 = 0, $4911 = 0, $4912 = 0, $4913 = 0, $4914 = 0, $4915 = 0, $4916 = 0, $4917 = 0, $4918 = 0, $4919 = 0, $492 = 0, $4920 = 0, $4921 = 0; + var $4922 = 0, $4923 = 0, $4924 = 0, $4925 = 0, $4926 = 0, $4927 = 0, $4928 = 0, $4929 = 0, $493 = 0.0, $4930 = 0, $4931 = 0, $4932 = 0, $4933 = 0, $4934 = 0, $4935 = 0, $4936 = 0, $4937 = 0, $4938 = 0, $4939 = 0, $494 = 0; + var $4940 = 0, $4941 = 0, $4942 = 0, $4943 = 0, $4944 = 0, $4945 = 0, $4946 = 0, $4947 = 0, $4948 = 0, $4949 = 0, $495 = 0, $4950 = 0, $4951 = 0, $4952 = 0, $4953 = 0, $4954 = 0, $4955 = 0, $4956 = 0, $4957 = 0, $4958 = 0; + var $4959 = 0, $496 = 0, $4960 = 0, $4961 = 0, $4962 = 0, $4963 = 0, $4964 = 0, $4965 = 0, $4966 = 0, $4967 = 0, $4968 = 0, $4969 = 0, $497 = 0.0, $4970 = 0, $4971 = 0, $4972 = 0, $4973 = 0.0, $4974 = 0.0, $4975 = 0, $4976 = 0.0; + var $4977 = 0.0, $4978 = 0.0, $4979 = 0, $498 = 0.0, $4980 = 0, $4981 = 0, $4982 = 0, $4983 = 0, $4984 = 0.0, $4985 = 0.0, $4986 = 0, $4987 = 0.0, $4988 = 0.0, $4989 = 0.0, $499 = 0, $4990 = 0, $4991 = 0, $4992 = 0, $4993 = 0, $4994 = 0; + var $4995 = 0, $4996 = 0, $4997 = 0, $4998 = 0, $4999 = 0, $5 = 0, $50 = 0, $500 = 0, $5000 = 0, $5001 = 0, $5002 = 0, $5003 = 0, $5004 = 0, $5005 = 0.0, $5006 = 0.0, $5007 = 0, $5008 = 0, $5009 = 0, $501 = 0, $5010 = 0; + var $5011 = 0, $5012 = 0, $5013 = 0, $5014 = 0, $5015 = 0, $5016 = 0, $5017 = 0, $5018 = 0.0, $5019 = 0, $502 = 0.0, $5020 = 0, $5021 = 0, $5022 = 0, $5023 = 0, $5024 = 0, $5025 = 0, $5026 = 0, $5027 = 0, $5028 = 0, $5029 = 0; + var $503 = 0, $5030 = 0, $5031 = 0, $5032 = 0, $5033 = 0, $5034 = 0, $5035 = 0, $5036 = 0, $5037 = 0, $5038 = 0, $5039 = 0.0, $504 = 0, $5040 = 0, $5041 = 0, $5042 = 0, $5043 = 0, $5044 = 0, $5045 = 0.0, $5046 = 0, $5047 = 0; + var $5048 = 0, $5049 = 0, $505 = 0, $5050 = 0, $5051 = 0, $5052 = 0, $5053 = 0, $5054 = 0, $5055 = 0.0, $5056 = 0, $5057 = 0, $5058 = 0, $5059 = 0, $506 = 0.0, $5060 = 0, $5061 = 0, $5062 = 0, $5063 = 0, $5064 = 0.0, $5065 = 0; + var $5066 = 0, $5067 = 0, $5068 = 0, $5069 = 0, $507 = 0.0, $5070 = 0, $5071 = 0, $5072 = 0, $5073 = 0, $5074 = 0, $5075 = 0, $5076 = 0, $5077 = 0.0, $5078 = 0, $5079 = 0, $508 = 0.0, $5080 = 0, $5081 = 0.0, $5082 = 0.0, $5083 = 0; + var $5084 = 0, $5085 = 0, $5086 = 0, $5087 = 0.0, $5088 = 0, $5089 = 0, $509 = 0.0, $5090 = 0, $5091 = 0.0, $5092 = 0.0, $5093 = 0.0, $5094 = 0, $5095 = 0, $5096 = 0, $5097 = 0, $5098 = 0, $5099 = 0, $51 = 0, $510 = 0.0, $5100 = 0; + var $5101 = 0, $5102 = 0.0, $5103 = 0, $5104 = 0, $5105 = 0, $5106 = 0.0, $5107 = 0.0, $5108 = 0, $5109 = 0, $511 = 0.0, $5110 = 0, $5111 = 0.0, $5112 = 0, $5113 = 0, $5114 = 0, $5115 = 0.0, $5116 = 0.0, $5117 = 0.0, $5118 = 0, $5119 = 0; + var $512 = 0.0, $5120 = 0, $5121 = 0, $5122 = 0, $5123 = 0, $5124 = 0, $5125 = 0, $5126 = 0, $5127 = 0, $5128 = 0, $5129 = 0, $513 = 0.0, $5130 = 0, $5131 = 0, $5132 = 0, $5133 = 0.0, $5134 = 0, $5135 = 0, $5136 = 0, $5137 = 0; + var $5138 = 0, $5139 = 0, $514 = 0.0, $5140 = 0.0, $5141 = 0.0, $5142 = 0, $5143 = 0, $5144 = 0, $5145 = 0, $5146 = 0, $5147 = 0, $5148 = 0, $5149 = 0.0, $515 = 0.0, $5150 = 0, $5151 = 0, $5152 = 0, $5153 = 0, $5154 = 0, $5155 = 0; + var $5156 = 0.0, $5157 = 0.0, $5158 = 0, $5159 = 0, $516 = 0.0, $5160 = 0, $5161 = 0, $5162 = 0, $5163 = 0, $5164 = 0, $5165 = 0, $5166 = 0, $5167 = 0.0, $5168 = 0, $5169 = 0, $517 = 0.0, $5170 = 0, $5171 = 0, $5172 = 0, $5173 = 0; + var $5174 = 0.0, $5175 = 0.0, $5176 = 0, $5177 = 0, $5178 = 0, $5179 = 0, $518 = 0.0, $5180 = 0, $5181 = 0, $5182 = 0, $5183 = 0.0, $5184 = 0, $5185 = 0, $5186 = 0, $5187 = 0, $5188 = 0, $5189 = 0, $519 = 0.0, $5190 = 0.0, $5191 = 0.0; + var $5192 = 0, $5193 = 0, $5194 = 0, $5195 = 0, $5196 = 0, $5197 = 0, $5198 = 0, $5199 = 0, $52 = 0.0, $520 = 0.0, $5200 = 0.0, $5201 = 0, $5202 = 0.0, $5203 = 0, $5204 = 0, $5205 = 0, $5206 = 0, $5207 = 0, $5208 = 0, $5209 = 0.0; + var $521 = 0.0, $5210 = 0.0, $5211 = 0.0, $5212 = 0, $5213 = 0, $5214 = 0, $5215 = 0.0, $5216 = 0.0, $5217 = 0.0, $5218 = 0, $5219 = 0, $522 = 0, $5220 = 0.0, $5221 = 0, $5222 = 0, $5223 = 0, $5224 = 0.0, $5225 = 0, $5226 = 0, $5227 = 0; + var $5228 = 0, $5229 = 0, $523 = 0, $5230 = 0, $5231 = 0, $5232 = 0, $5233 = 0.0, $5234 = 0, $5235 = 0.0, $5236 = 0, $5237 = 0, $5238 = 0, $5239 = 0, $524 = 0.0, $5240 = 0, $5241 = 0, $5242 = 0, $5243 = 0, $5244 = 0, $5245 = 0; + var $5246 = 0, $5247 = 0, $5248 = 0, $5249 = 0, $525 = 0.0, $5250 = 0, $5251 = 0, $5252 = 0, $5253 = 0, $5254 = 0, $5255 = 0.0, $5256 = 0, $5257 = 0, $5258 = 0, $5259 = 0.0, $526 = 0.0, $5260 = 0.0, $5261 = 0.0, $5262 = 0.0, $5263 = 0; + var $5264 = 0, $5265 = 0, $5266 = 0.0, $5267 = 0, $5268 = 0, $5269 = 0, $527 = 0.0, $5270 = 0.0, $5271 = 0.0, $5272 = 0.0, $5273 = 0.0, $5274 = 0, $5275 = 0, $5276 = 0, $5277 = 0.0, $5278 = 0, $5279 = 0, $528 = 0.0, $5280 = 0, $5281 = 0; + var $5282 = 0, $5283 = 0.0, $5284 = 0.0, $5285 = 0.0, $5286 = 0.0, $5287 = 0, $5288 = 0, $5289 = 0, $529 = 0.0, $5290 = 0.0, $5291 = 0, $5292 = 0, $5293 = 0, $5294 = 0, $5295 = 0, $5296 = 0.0, $5297 = 0.0, $5298 = 0.0, $5299 = 0.0, $53 = 0.0; + var $530 = 0.0, $5300 = 0, $5301 = 0, $5302 = 0, $5303 = 0.0, $5304 = 0.0, $5305 = 0.0, $5306 = 0, $5307 = 0.0, $5308 = 0.0, $5309 = 0.0, $531 = 0.0, $5310 = 0.0, $5311 = 0.0, $5312 = 0.0, $5313 = 0, $5314 = 0, $5315 = 0, $5316 = 0, $5317 = 0; + var $5318 = 0, $5319 = 0, $532 = 0.0, $5320 = 0, $5321 = 0.0, $5322 = 0.0, $5323 = 0.0, $5324 = 0, $5325 = 0, $5326 = 0, $5327 = 0, $5328 = 0, $5329 = 0, $533 = 0.0, $5330 = 0, $5331 = 0, $5332 = 0, $5333 = 0.0, $5334 = 0.0, $5335 = 0.0; + var $5336 = 0, $5337 = 0, $5338 = 0, $5339 = 0, $534 = 0.0, $5340 = 0, $5341 = 0, $5342 = 0, $5343 = 0, $5344 = 0, $5345 = 0, $5346 = 0.0, $5347 = 0.0, $5348 = 0.0, $5349 = 0, $535 = 0.0, $5350 = 0, $5351 = 0, $5352 = 0, $5353 = 0; + var $5354 = 0, $5355 = 0, $5356 = 0, $5357 = 0, $5358 = 0, $5359 = 0, $536 = 0.0, $5360 = 0, $5361 = 0, $5362 = 0, $5363 = 0, $5364 = 0, $5365 = 0, $5366 = 0, $5367 = 0, $5368 = 0, $5369 = 0, $537 = 0.0, $5370 = 0, $5371 = 0; + var $538 = 0.0, $539 = 0.0, $54 = 0, $540 = 0.0, $541 = 0.0, $542 = 0.0, $543 = 0.0, $544 = 0.0, $545 = 0.0, $546 = 0.0, $547 = 0.0, $548 = 0.0, $549 = 0.0, $55 = 0, $550 = 0.0, $551 = 0.0, $552 = 0.0, $553 = 0.0, $554 = 0, $555 = 0.0; + var $556 = 0.0, $557 = 0.0, $558 = 0, $559 = 0, $56 = 0.0, $560 = 0.0, $561 = 0.0, $562 = 0.0, $563 = 0.0, $564 = 0.0, $565 = 0.0, $566 = 0, $567 = 0, $568 = 0.0, $569 = 0.0, $57 = 0.0, $570 = 0.0, $571 = 0, $572 = 0, $573 = 0; + var $574 = 0.0, $575 = 0.0, $576 = 0.0, $577 = 0, $578 = 0, $579 = 0.0, $58 = 0, $580 = 0.0, $581 = 0.0, $582 = 0, $583 = 0, $584 = 0, $585 = 0.0, $586 = 0.0, $587 = 0.0, $588 = 0.0, $589 = 0.0, $59 = 0.0, $590 = 0.0, $591 = 0.0; + var $592 = 0.0, $593 = 0.0, $594 = 0.0, $595 = 0.0, $596 = 0.0, $597 = 0.0, $598 = 0.0, $599 = 0, $6 = 0, $60 = 0, $600 = 0, $601 = 0.0, $602 = 0.0, $603 = 0.0, $604 = 0.0, $605 = 0.0, $606 = 0.0, $607 = 0.0, $608 = 0.0, $609 = 0.0; + var $61 = 0, $610 = 0.0, $611 = 0.0, $612 = 0.0, $613 = 0.0, $614 = 0.0, $615 = 0.0, $616 = 0.0, $617 = 0.0, $618 = 0.0, $619 = 0.0, $62 = 0, $620 = 0.0, $621 = 0.0, $622 = 0.0, $623 = 0.0, $624 = 0.0, $625 = 0.0, $626 = 0.0, $627 = 0.0; + var $628 = 0.0, $629 = 0.0, $63 = 0.0, $630 = 0.0, $631 = 0, $632 = 0.0, $633 = 0.0, $634 = 0.0, $635 = 0, $636 = 0, $637 = 0.0, $638 = 0.0, $639 = 0.0, $64 = 0.0, $640 = 0.0, $641 = 0.0, $642 = 0.0, $643 = 0, $644 = 0, $645 = 0.0; + var $646 = 0.0, $647 = 0.0, $648 = 0, $649 = 0, $65 = 0, $650 = 0, $651 = 0.0, $652 = 0.0, $653 = 0.0, $654 = 0, $655 = 0, $656 = 0.0, $657 = 0.0, $658 = 0.0, $659 = 0, $66 = 0, $660 = 0, $661 = 0, $662 = 0.0, $663 = 0.0; + var $664 = 0.0, $665 = 0, $666 = 0.0, $667 = 0.0, $668 = 0.0, $669 = 0.0, $67 = 0.0, $670 = 0.0, $671 = 0, $672 = 0, $673 = 0.0, $674 = 0.0, $675 = 0, $676 = 0, $677 = 0, $678 = 0.0, $679 = 0, $68 = 0, $680 = 0, $681 = 0; + var $682 = 0.0, $683 = 0, $684 = 0, $685 = 0, $686 = 0, $687 = 0, $688 = 0.0, $689 = 0, $69 = 0, $690 = 0, $691 = 0, $692 = 0, $693 = 0, $694 = 0, $695 = 0.0, $696 = 0, $697 = 0, $698 = 0, $699 = 0, $7 = 0; + var $70 = 0.0, $700 = 0, $701 = 0, $702 = 0, $703 = 0.0, $704 = 0, $705 = 0, $706 = 0, $707 = 0, $708 = 0, $709 = 0, $71 = 0.0, $710 = 0, $711 = 0.0, $712 = 0, $713 = 0, $714 = 0, $715 = 0, $716 = 0, $717 = 0; + var $718 = 0, $719 = 0.0, $72 = 0, $720 = 0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0, $726 = 0, $727 = 0.0, $728 = 0, $729 = 0, $73 = 0, $730 = 0, $731 = 0, $732 = 0, $733 = 0, $734 = 0, $735 = 0.0; + var $736 = 0, $737 = 0, $738 = 0, $739 = 0, $74 = 0.0, $740 = 0, $741 = 0, $742 = 0, $743 = 0.0, $744 = 0, $745 = 0, $746 = 0, $747 = 0, $748 = 0, $749 = 0, $75 = 0, $750 = 0, $751 = 0.0, $752 = 0, $753 = 0; + var $754 = 0, $755 = 0, $756 = 0, $757 = 0, $758 = 0, $759 = 0.0, $76 = 0, $760 = 0, $761 = 0, $762 = 0, $763 = 0, $764 = 0, $765 = 0, $766 = 0, $767 = 0.0, $768 = 0, $769 = 0, $77 = 0, $770 = 0, $771 = 0; + var $772 = 0, $773 = 0, $774 = 0, $775 = 0.0, $776 = 0, $777 = 0, $778 = 0, $779 = 0, $78 = 0.0, $780 = 0, $781 = 0.0, $782 = 0, $783 = 0, $784 = 0.0, $785 = 0.0, $786 = 0, $787 = 0, $788 = 0.0, $789 = 0, $79 = 0.0; + var $790 = 0, $791 = 0.0, $792 = 0.0, $793 = 0, $794 = 0, $795 = 0, $796 = 0.0, $797 = 0, $798 = 0, $799 = 0, $8 = 0, $80 = 0, $800 = 0.0, $801 = 0.0, $802 = 0, $803 = 0, $804 = 0, $805 = 0.0, $806 = 0, $807 = 0; + var $808 = 0, $809 = 0.0, $81 = 0, $810 = 0.0, $811 = 0, $812 = 0, $813 = 0.0, $814 = 0, $815 = 0, $816 = 0.0, $817 = 0.0, $818 = 0, $819 = 0, $82 = 0, $820 = 0.0, $821 = 0, $822 = 0, $823 = 0.0, $824 = 0.0, $825 = 0; + var $826 = 0, $827 = 0, $828 = 0.0, $829 = 0, $83 = 0, $830 = 0, $831 = 0, $832 = 0.0, $833 = 0.0, $834 = 0, $835 = 0, $836 = 0, $837 = 0.0, $838 = 0, $839 = 0, $84 = 0, $840 = 0, $841 = 0.0, $842 = 0.0, $843 = 0; + var $844 = 0, $845 = 0.0, $846 = 0, $847 = 0, $848 = 0.0, $849 = 0.0, $85 = 0, $850 = 0, $851 = 0, $852 = 0.0, $853 = 0, $854 = 0, $855 = 0.0, $856 = 0.0, $857 = 0, $858 = 0, $859 = 0, $86 = 0.0, $860 = 0.0, $861 = 0; + var $862 = 0, $863 = 0, $864 = 0.0, $865 = 0.0, $866 = 0, $867 = 0, $868 = 0, $869 = 0.0, $87 = 0, $870 = 0, $871 = 0, $872 = 0, $873 = 0.0, $874 = 0.0, $875 = 0, $876 = 0.0, $877 = 0.0, $878 = 0.0, $879 = 0.0, $88 = 0; + var $880 = 0.0, $881 = 0.0, $882 = 0.0, $883 = 0.0, $884 = 0.0, $885 = 0.0, $886 = 0.0, $887 = 0.0, $888 = 0.0, $889 = 0, $89 = 0, $890 = 0, $891 = 0.0, $892 = 0.0, $893 = 0.0, $894 = 0.0, $895 = 0.0, $896 = 0.0, $897 = 0.0, $898 = 0.0; + var $899 = 0.0, $9 = 0, $90 = 0.0, $900 = 0.0, $901 = 0.0, $902 = 0.0, $903 = 0.0, $904 = 0, $905 = 0, $906 = 0.0, $907 = 0.0, $908 = 0.0, $909 = 0.0, $91 = 0, $910 = 0.0, $911 = 0.0, $912 = 0.0, $913 = 0.0, $914 = 0.0, $915 = 0.0; + var $916 = 0.0, $917 = 0.0, $918 = 0.0, $919 = 0.0, $92 = 0, $920 = 0.0, $921 = 0.0, $922 = 0.0, $923 = 0.0, $924 = 0.0, $925 = 0.0, $926 = 0.0, $927 = 0.0, $928 = 0.0, $929 = 0.0, $93 = 0, $930 = 0.0, $931 = 0.0, $932 = 0.0, $933 = 0.0; + var $934 = 0.0, $935 = 0.0, $936 = 0.0, $937 = 0.0, $938 = 0.0, $939 = 0.0, $94 = 0, $940 = 0.0, $941 = 0.0, $942 = 0.0, $943 = 0.0, $944 = 0.0, $945 = 0.0, $946 = 0.0, $947 = 0.0, $948 = 0.0, $949 = 0.0, $95 = 0, $950 = 0.0, $951 = 0.0; + var $952 = 0.0, $953 = 0.0, $954 = 0.0, $955 = 0, $956 = 0, $957 = 0.0, $958 = 0.0, $959 = 0.0, $96 = 0.0, $960 = 0, $961 = 0, $962 = 0.0, $963 = 0.0, $964 = 0.0, $965 = 0, $966 = 0, $967 = 0, $968 = 0.0, $969 = 0.0, $97 = 0; + var $970 = 0.0, $971 = 0, $972 = 0, $973 = 0, $974 = 0, $975 = 0.0, $976 = 0.0, $977 = 0.0, $978 = 0.0, $979 = 0.0, $98 = 0, $980 = 0.0, $981 = 0.0, $982 = 0.0, $983 = 0.0, $984 = 0.0, $985 = 0.0, $986 = 0.0, $987 = 0.0, $988 = 0; + var $989 = 0, $99 = 0, $990 = 0.0, $991 = 0.0, $992 = 0.0, $993 = 0.0, $994 = 0.0, $995 = 0.0, $996 = 0.0, $997 = 0.0, $998 = 0.0, $999 = 0.0, $M = 0, $ai = 0.0, $ai110 = 0.0, $ai150 = 0.0, $ai202 = 0.0, $ai85 = 0.0, $ar = 0.0, $ar109 = 0.0; + var $ar149 = 0.0, $ar201 = 0.0, $ar84 = 0.0, $bi = 0.0, $bi112 = 0.0, $bi152 = 0.0, $bi204 = 0.0, $bi87 = 0.0, $br = 0.0, $br111 = 0.0, $br151 = 0.0, $br203 = 0.0, $br86 = 0.0, $c1 = 0.0, $c1123 = 0.0, $c1167 = 0.0, $c1227 = 0.0, $c1241 = 0, $c131 = 0.0, $c151 = 0.0; + var $c2 = 0.0, $c2124 = 0.0, $c2168 = 0.0, $c232 = 0.0, $c3 = 0.0, $c3169 = 0.0, $ci = 0.0, $ci114 = 0.0, $ci154 = 0.0, $ci206 = 0.0, $ci89 = 0.0, $cr = 0.0, $cr113 = 0.0, $cr153 = 0.0, $cr205 = 0.0, $cr88 = 0.0, $di = 0.0, $di116 = 0.0, $di156 = 0.0, $di208 = 0.0; + var $dr = 0.0, $dr115 = 0.0, $dr155 = 0.0, $dr207 = 0.0, $ei = 0.0, $ei158 = 0.0, $ei210 = 0.0, $er = 0.0, $er157 = 0.0, $er209 = 0.0, $fi = 0.0, $fi212 = 0.0, $fr = 0.0, $fr211 = 0.0, $gi = 0.0, $gi214 = 0.0, $gr = 0.0, $gr213 = 0.0, $hi = 0.0, $hr = 0.0; + var $i = 0, $ind = 0, $ind132 = 0, $ind180 = 0, $ind234 = 0, $ind59 = 0, $ind71 = 0, $ind94 = 0, $k = 0, $k127 = 0, $k173 = 0, $k233 = 0, $k57 = 0, $k68 = 0, $k90 = 0, $ll = 0, $m = 0, $radix = 0, $s1 = 0.0, $s1125 = 0.0; + var $s1170 = 0.0, $s1228 = 0.0, $s1242 = 0, $s133 = 0.0, $s152 = 0.0, $s2 = 0.0, $s2126 = 0.0, $s2171 = 0.0, $s234 = 0.0, $s3 = 0.0, $s3172 = 0.0, $t = 0, $tau0i = 0.0, $tau0i10 = 0.0, $tau0i102 = 0.0, $tau0i142 = 0.0, $tau0i18 = 0.0, $tau0i194 = 0.0, $tau0i36 = 0.0, $tau0i4 = 0.0; + var $tau0i63 = 0.0, $tau0i77 = 0.0, $tau0r = 0.0, $tau0r101 = 0.0, $tau0r141 = 0.0, $tau0r17 = 0.0, $tau0r193 = 0.0, $tau0r3 = 0.0, $tau0r35 = 0.0, $tau0r62 = 0.0, $tau0r76 = 0.0, $tau0r9 = 0.0, $tau1i = 0.0, $tau1i104 = 0.0, $tau1i12 = 0.0, $tau1i144 = 0.0, $tau1i196 = 0.0, $tau1i2 = 0.0, $tau1i20 = 0.0, $tau1i38 = 0.0; + var $tau1i54 = 0.0, $tau1i6 = 0.0, $tau1i65 = 0.0, $tau1i79 = 0.0, $tau1r = 0.0, $tau1r1 = 0.0, $tau1r103 = 0.0, $tau1r11 = 0.0, $tau1r143 = 0.0, $tau1r19 = 0.0, $tau1r195 = 0.0, $tau1r37 = 0.0, $tau1r5 = 0.0, $tau1r53 = 0.0, $tau1r64 = 0.0, $tau1r78 = 0.0, $tau2i = 0.0, $tau2i106 = 0.0, $tau2i14 = 0.0, $tau2i146 = 0.0; + var $tau2i198 = 0.0, $tau2i22 = 0.0, $tau2i40 = 0.0, $tau2i56 = 0.0, $tau2i67 = 0.0, $tau2i8 = 0.0, $tau2i81 = 0.0, $tau2r = 0.0, $tau2r105 = 0.0, $tau2r13 = 0.0, $tau2r145 = 0.0, $tau2r197 = 0.0, $tau2r21 = 0.0, $tau2r39 = 0.0, $tau2r55 = 0.0, $tau2r66 = 0.0, $tau2r7 = 0.0, $tau2r80 = 0.0, $tau3i = 0.0, $tau3i108 = 0.0; + var $tau3i148 = 0.0, $tau3i16 = 0.0, $tau3i200 = 0.0, $tau3i24 = 0.0, $tau3i42 = 0.0, $tau3i83 = 0.0, $tau3r = 0.0, $tau3r107 = 0.0, $tau3r147 = 0.0, $tau3r15 = 0.0, $tau3r199 = 0.0, $tau3r23 = 0.0, $tau3r41 = 0.0, $tau3r82 = 0.0, $tau4i = 0.0, $tau4i118 = 0.0, $tau4i160 = 0.0, $tau4i216 = 0.0, $tau4i26 = 0.0, $tau4i44 = 0.0; + var $tau4r = 0.0, $tau4r117 = 0.0, $tau4r159 = 0.0, $tau4r215 = 0.0, $tau4r25 = 0.0, $tau4r43 = 0.0, $tau5i = 0.0, $tau5i120 = 0.0, $tau5i162 = 0.0, $tau5i218 = 0.0, $tau5i28 = 0.0, $tau5i46 = 0.0, $tau5r = 0.0, $tau5r119 = 0.0, $tau5r161 = 0.0, $tau5r217 = 0.0, $tau5r27 = 0.0, $tau5r45 = 0.0, $tau6i = 0.0, $tau6i122 = 0.0; + var $tau6i164 = 0.0, $tau6i220 = 0.0, $tau6i30 = 0.0, $tau6i48 = 0.0, $tau6r = 0.0, $tau6r121 = 0.0, $tau6r163 = 0.0, $tau6r219 = 0.0, $tau6r29 = 0.0, $tau6r47 = 0.0, $tau7i = 0.0, $tau7i166 = 0.0, $tau7i222 = 0.0, $tau7i50 = 0.0, $tau7r = 0.0, $tau7r165 = 0.0, $tau7r221 = 0.0, $tau7r49 = 0.0, $tau8i = 0.0, $tau8i224 = 0.0; + var $tau8r = 0.0, $tau8r223 = 0.0, $tau9i = 0.0, $tau9i226 = 0.0, $tau9r = 0.0, $tau9r225 = 0.0, $taui = 0, $taur = 0, $temp1i = 0.0, $temp1i230 = 0.0, $temp1i236 = 0.0, $temp1r = 0.0, $temp1r229 = 0.0, $temp1r235 = 0.0, $temp2i = 0.0, $temp2i232 = 0.0, $temp2i238 = 0.0, $temp2r = 0.0, $temp2r231 = 0.0, $temp2r237 = 0.0; + var $tkm = 0, $tkm1 = 0, $tkm1128 = 0, $tkm1174 = 0, $tkm158 = 0, $tkm169 = 0, $tkm191 = 0, $tkm2 = 0, $tkm2129 = 0, $tkm2175 = 0, $tkm270 = 0, $tkm292 = 0, $tkm3 = 0, $tkm3130 = 0, $tkm3176 = 0, $tkm393 = 0, $tkm4 = 0, $tkm4131 = 0, $tkm4177 = 0, $tkm5 = 0; + var $tkm5178 = 0, $tkm6 = 0, $tkm6179 = 0, $tkm7 = 0, $tt = 0, $u = 0, $v = 0, $wl2i = 0.0, $wl2i136 = 0.0, $wl2i184 = 0.0, $wl2i75 = 0.0, $wl2i98 = 0.0, $wl2r = 0.0, $wl2r135 = 0.0, $wl2r183 = 0.0, $wl2r74 = 0.0, $wl2r97 = 0.0, $wl3i = 0.0, $wl3i100 = 0.0, $wl3i138 = 0.0; + var $wl3i186 = 0.0, $wl3r = 0.0, $wl3r137 = 0.0, $wl3r185 = 0.0, $wl3r99 = 0.0, $wl4i = 0.0, $wl4i140 = 0.0, $wl4i188 = 0.0, $wl4r = 0.0, $wl4r139 = 0.0, $wl4r187 = 0.0, $wl5i = 0.0, $wl5i190 = 0.0, $wl5r = 0.0, $wl5r189 = 0.0, $wl6i = 0.0, $wl6i192 = 0.0, $wl6r = 0.0, $wl6r191 = 0.0, $wl7i = 0.0; + var $wl7r = 0.0, $wli = 0.0, $wli134 = 0.0, $wli182 = 0.0, $wli240 = 0, $wli61 = 0.0, $wli73 = 0.0, $wli96 = 0.0, $wlr = 0.0, $wlr133 = 0.0, $wlr181 = 0.0, $wlr239 = 0, $wlr60 = 0.0, $wlr72 = 0.0, $wlr95 = 0.0, $yi = 0, $yr = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 2416|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $op; + $1 = $ip; + $2 = $obj; + $3 = $sgn; + $4 = $N; + $5 = $l; + $6 = $inc; + $7 = $4; + $8 = ($7|0)>(1); + if ($8) { + $9 = $6; + $10 = $2; + $11 = (($10) + 8|0); + $12 = (($11) + ($9<<2)|0); + $13 = HEAP32[$12>>2]|0; + $radix = $13; + } + $14 = $4; + $15 = ($14|0)==(1); + if ($15) { + $16 = $1; + $17 = +HEAPF64[$16>>3]; + $18 = $0; + HEAPF64[$18>>3] = $17; + $19 = $1; + $20 = (($19) + 8|0); + $21 = +HEAPF64[$20>>3]; + $22 = $0; + $23 = (($22) + 8|0); + HEAPF64[$23>>3] = $21; + STACKTOP = sp;return; + } + $24 = $4; + $25 = ($24|0)==(2); + if ($25) { + $26 = $1; + $27 = +HEAPF64[$26>>3]; + $28 = $0; + HEAPF64[$28>>3] = $27; + $29 = $1; + $30 = (($29) + 8|0); + $31 = +HEAPF64[$30>>3]; + $32 = $0; + $33 = (($32) + 8|0); + HEAPF64[$33>>3] = $31; + $34 = $5; + $35 = $1; + $36 = (($35) + ($34<<4)|0); + $37 = +HEAPF64[$36>>3]; + $38 = $0; + $39 = (($38) + 16|0); + HEAPF64[$39>>3] = $37; + $40 = $5; + $41 = $1; + $42 = (($41) + ($40<<4)|0); + $43 = (($42) + 8|0); + $44 = +HEAPF64[$43>>3]; + $45 = $0; + $46 = (($45) + 16|0); + $47 = (($46) + 8|0); + HEAPF64[$47>>3] = $44; + $48 = $0; + $49 = +HEAPF64[$48>>3]; + $tau1r = $49; + $50 = $0; + $51 = (($50) + 8|0); + $52 = +HEAPF64[$51>>3]; + $tau1i = $52; + $53 = $tau1r; + $54 = $0; + $55 = (($54) + 16|0); + $56 = +HEAPF64[$55>>3]; + $57 = $53 + $56; + $58 = $0; + HEAPF64[$58>>3] = $57; + $59 = $tau1i; + $60 = $0; + $61 = (($60) + 16|0); + $62 = (($61) + 8|0); + $63 = +HEAPF64[$62>>3]; + $64 = $59 + $63; + $65 = $0; + $66 = (($65) + 8|0); + HEAPF64[$66>>3] = $64; + $67 = $tau1r; + $68 = $0; + $69 = (($68) + 16|0); + $70 = +HEAPF64[$69>>3]; + $71 = $67 - $70; + $72 = $0; + $73 = (($72) + 16|0); + HEAPF64[$73>>3] = $71; + $74 = $tau1i; + $75 = $0; + $76 = (($75) + 16|0); + $77 = (($76) + 8|0); + $78 = +HEAPF64[$77>>3]; + $79 = $74 - $78; + $80 = $0; + $81 = (($80) + 16|0); + $82 = (($81) + 8|0); + HEAPF64[$82>>3] = $79; + } else { + $83 = $4; + $84 = ($83|0)==(3); + if ($84) { + $85 = $1; + $86 = +HEAPF64[$85>>3]; + $87 = $0; + HEAPF64[$87>>3] = $86; + $88 = $1; + $89 = (($88) + 8|0); + $90 = +HEAPF64[$89>>3]; + $91 = $0; + $92 = (($91) + 8|0); + HEAPF64[$92>>3] = $90; + $93 = $5; + $94 = $1; + $95 = (($94) + ($93<<4)|0); + $96 = +HEAPF64[$95>>3]; + $97 = $0; + $98 = (($97) + 16|0); + HEAPF64[$98>>3] = $96; + $99 = $5; + $100 = $1; + $101 = (($100) + ($99<<4)|0); + $102 = (($101) + 8|0); + $103 = +HEAPF64[$102>>3]; + $104 = $0; + $105 = (($104) + 16|0); + $106 = (($105) + 8|0); + HEAPF64[$106>>3] = $103; + $107 = $5; + $108 = $107<<1; + $109 = $1; + $110 = (($109) + ($108<<4)|0); + $111 = +HEAPF64[$110>>3]; + $112 = $0; + $113 = (($112) + 32|0); + HEAPF64[$113>>3] = $111; + $114 = $5; + $115 = $114<<1; + $116 = $1; + $117 = (($116) + ($115<<4)|0); + $118 = (($117) + 8|0); + $119 = +HEAPF64[$118>>3]; + $120 = $0; + $121 = (($120) + 32|0); + $122 = (($121) + 8|0); + HEAPF64[$122>>3] = $119; + $123 = $0; + $124 = (($123) + 16|0); + $125 = +HEAPF64[$124>>3]; + $126 = $0; + $127 = (($126) + 32|0); + $128 = +HEAPF64[$127>>3]; + $129 = $125 + $128; + $tau0r = $129; + $130 = $0; + $131 = (($130) + 16|0); + $132 = (($131) + 8|0); + $133 = +HEAPF64[$132>>3]; + $134 = $0; + $135 = (($134) + 32|0); + $136 = (($135) + 8|0); + $137 = +HEAPF64[$136>>3]; + $138 = $133 + $137; + $tau0i = $138; + $139 = $3; + $140 = (+($139|0)); + $141 = $140 * 0.866025403780000035958; + $142 = $0; + $143 = (($142) + 16|0); + $144 = +HEAPF64[$143>>3]; + $145 = $0; + $146 = (($145) + 32|0); + $147 = +HEAPF64[$146>>3]; + $148 = $144 - $147; + $149 = $141 * $148; + $tau1r1 = $149; + $150 = $3; + $151 = (+($150|0)); + $152 = $151 * 0.866025403780000035958; + $153 = $0; + $154 = (($153) + 16|0); + $155 = (($154) + 8|0); + $156 = +HEAPF64[$155>>3]; + $157 = $0; + $158 = (($157) + 32|0); + $159 = (($158) + 8|0); + $160 = +HEAPF64[$159>>3]; + $161 = $156 - $160; + $162 = $152 * $161; + $tau1i2 = $162; + $163 = $0; + $164 = +HEAPF64[$163>>3]; + $165 = $tau0r; + $166 = $165 * 0.5; + $167 = $164 - $166; + $tau2r = $167; + $168 = $0; + $169 = (($168) + 8|0); + $170 = +HEAPF64[$169>>3]; + $171 = $tau0i; + $172 = $171 * 0.5; + $173 = $170 - $172; + $tau2i = $173; + $174 = $tau0r; + $175 = $0; + $176 = +HEAPF64[$175>>3]; + $177 = $174 + $176; + $178 = $0; + HEAPF64[$178>>3] = $177; + $179 = $tau0i; + $180 = $0; + $181 = (($180) + 8|0); + $182 = +HEAPF64[$181>>3]; + $183 = $179 + $182; + $184 = $0; + $185 = (($184) + 8|0); + HEAPF64[$185>>3] = $183; + $186 = $tau2r; + $187 = $tau1i2; + $188 = $186 + $187; + $189 = $0; + $190 = (($189) + 16|0); + HEAPF64[$190>>3] = $188; + $191 = $tau2i; + $192 = $tau1r1; + $193 = $191 - $192; + $194 = $0; + $195 = (($194) + 16|0); + $196 = (($195) + 8|0); + HEAPF64[$196>>3] = $193; + $197 = $tau2r; + $198 = $tau1i2; + $199 = $197 - $198; + $200 = $0; + $201 = (($200) + 32|0); + HEAPF64[$201>>3] = $199; + $202 = $tau2i; + $203 = $tau1r1; + $204 = $202 + $203; + $205 = $0; + $206 = (($205) + 32|0); + $207 = (($206) + 8|0); + HEAPF64[$207>>3] = $204; + STACKTOP = sp;return; + } + $208 = $4; + $209 = ($208|0)==(4); + if ($209) { + $210 = $1; + $211 = +HEAPF64[$210>>3]; + $212 = $0; + HEAPF64[$212>>3] = $211; + $213 = $1; + $214 = (($213) + 8|0); + $215 = +HEAPF64[$214>>3]; + $216 = $0; + $217 = (($216) + 8|0); + HEAPF64[$217>>3] = $215; + $218 = $5; + $219 = $1; + $220 = (($219) + ($218<<4)|0); + $221 = +HEAPF64[$220>>3]; + $222 = $0; + $223 = (($222) + 16|0); + HEAPF64[$223>>3] = $221; + $224 = $5; + $225 = $1; + $226 = (($225) + ($224<<4)|0); + $227 = (($226) + 8|0); + $228 = +HEAPF64[$227>>3]; + $229 = $0; + $230 = (($229) + 16|0); + $231 = (($230) + 8|0); + HEAPF64[$231>>3] = $228; + $232 = $5; + $233 = $232<<1; + $234 = $1; + $235 = (($234) + ($233<<4)|0); + $236 = +HEAPF64[$235>>3]; + $237 = $0; + $238 = (($237) + 32|0); + HEAPF64[$238>>3] = $236; + $239 = $5; + $240 = $239<<1; + $241 = $1; + $242 = (($241) + ($240<<4)|0); + $243 = (($242) + 8|0); + $244 = +HEAPF64[$243>>3]; + $245 = $0; + $246 = (($245) + 32|0); + $247 = (($246) + 8|0); + HEAPF64[$247>>3] = $244; + $248 = $5; + $249 = ($248*3)|0; + $250 = $1; + $251 = (($250) + ($249<<4)|0); + $252 = +HEAPF64[$251>>3]; + $253 = $0; + $254 = (($253) + 48|0); + HEAPF64[$254>>3] = $252; + $255 = $5; + $256 = ($255*3)|0; + $257 = $1; + $258 = (($257) + ($256<<4)|0); + $259 = (($258) + 8|0); + $260 = +HEAPF64[$259>>3]; + $261 = $0; + $262 = (($261) + 48|0); + $263 = (($262) + 8|0); + HEAPF64[$263>>3] = $260; + $264 = $0; + $265 = +HEAPF64[$264>>3]; + $266 = $0; + $267 = (($266) + 32|0); + $268 = +HEAPF64[$267>>3]; + $269 = $265 + $268; + $tau0r3 = $269; + $270 = $0; + $271 = (($270) + 8|0); + $272 = +HEAPF64[$271>>3]; + $273 = $0; + $274 = (($273) + 32|0); + $275 = (($274) + 8|0); + $276 = +HEAPF64[$275>>3]; + $277 = $272 + $276; + $tau0i4 = $277; + $278 = $0; + $279 = +HEAPF64[$278>>3]; + $280 = $0; + $281 = (($280) + 32|0); + $282 = +HEAPF64[$281>>3]; + $283 = $279 - $282; + $tau1r5 = $283; + $284 = $0; + $285 = (($284) + 8|0); + $286 = +HEAPF64[$285>>3]; + $287 = $0; + $288 = (($287) + 32|0); + $289 = (($288) + 8|0); + $290 = +HEAPF64[$289>>3]; + $291 = $286 - $290; + $tau1i6 = $291; + $292 = $0; + $293 = (($292) + 16|0); + $294 = +HEAPF64[$293>>3]; + $295 = $0; + $296 = (($295) + 48|0); + $297 = +HEAPF64[$296>>3]; + $298 = $294 + $297; + $tau2r7 = $298; + $299 = $0; + $300 = (($299) + 16|0); + $301 = (($300) + 8|0); + $302 = +HEAPF64[$301>>3]; + $303 = $0; + $304 = (($303) + 48|0); + $305 = (($304) + 8|0); + $306 = +HEAPF64[$305>>3]; + $307 = $302 + $306; + $tau2i8 = $307; + $308 = $3; + $309 = (+($308|0)); + $310 = $0; + $311 = (($310) + 16|0); + $312 = +HEAPF64[$311>>3]; + $313 = $0; + $314 = (($313) + 48|0); + $315 = +HEAPF64[$314>>3]; + $316 = $312 - $315; + $317 = $309 * $316; + $tau3r = $317; + $318 = $3; + $319 = (+($318|0)); + $320 = $0; + $321 = (($320) + 16|0); + $322 = (($321) + 8|0); + $323 = +HEAPF64[$322>>3]; + $324 = $0; + $325 = (($324) + 48|0); + $326 = (($325) + 8|0); + $327 = +HEAPF64[$326>>3]; + $328 = $323 - $327; + $329 = $319 * $328; + $tau3i = $329; + $330 = $tau0r3; + $331 = $tau2r7; + $332 = $330 + $331; + $333 = $0; + HEAPF64[$333>>3] = $332; + $334 = $tau0i4; + $335 = $tau2i8; + $336 = $334 + $335; + $337 = $0; + $338 = (($337) + 8|0); + HEAPF64[$338>>3] = $336; + $339 = $tau1r5; + $340 = $tau3i; + $341 = $339 + $340; + $342 = $0; + $343 = (($342) + 16|0); + HEAPF64[$343>>3] = $341; + $344 = $tau1i6; + $345 = $tau3r; + $346 = $344 - $345; + $347 = $0; + $348 = (($347) + 16|0); + $349 = (($348) + 8|0); + HEAPF64[$349>>3] = $346; + $350 = $tau0r3; + $351 = $tau2r7; + $352 = $350 - $351; + $353 = $0; + $354 = (($353) + 32|0); + HEAPF64[$354>>3] = $352; + $355 = $tau0i4; + $356 = $tau2i8; + $357 = $355 - $356; + $358 = $0; + $359 = (($358) + 32|0); + $360 = (($359) + 8|0); + HEAPF64[$360>>3] = $357; + $361 = $tau1r5; + $362 = $tau3i; + $363 = $361 - $362; + $364 = $0; + $365 = (($364) + 48|0); + HEAPF64[$365>>3] = $363; + $366 = $tau1i6; + $367 = $tau3r; + $368 = $366 + $367; + $369 = $0; + $370 = (($369) + 48|0); + $371 = (($370) + 8|0); + HEAPF64[$371>>3] = $368; + } else { + $372 = $4; + $373 = ($372|0)==(5); + if ($373) { + $374 = $1; + $375 = +HEAPF64[$374>>3]; + $376 = $0; + HEAPF64[$376>>3] = $375; + $377 = $1; + $378 = (($377) + 8|0); + $379 = +HEAPF64[$378>>3]; + $380 = $0; + $381 = (($380) + 8|0); + HEAPF64[$381>>3] = $379; + $382 = $5; + $383 = $1; + $384 = (($383) + ($382<<4)|0); + $385 = +HEAPF64[$384>>3]; + $386 = $0; + $387 = (($386) + 16|0); + HEAPF64[$387>>3] = $385; + $388 = $5; + $389 = $1; + $390 = (($389) + ($388<<4)|0); + $391 = (($390) + 8|0); + $392 = +HEAPF64[$391>>3]; + $393 = $0; + $394 = (($393) + 16|0); + $395 = (($394) + 8|0); + HEAPF64[$395>>3] = $392; + $396 = $5; + $397 = $396<<1; + $398 = $1; + $399 = (($398) + ($397<<4)|0); + $400 = +HEAPF64[$399>>3]; + $401 = $0; + $402 = (($401) + 32|0); + HEAPF64[$402>>3] = $400; + $403 = $5; + $404 = $403<<1; + $405 = $1; + $406 = (($405) + ($404<<4)|0); + $407 = (($406) + 8|0); + $408 = +HEAPF64[$407>>3]; + $409 = $0; + $410 = (($409) + 32|0); + $411 = (($410) + 8|0); + HEAPF64[$411>>3] = $408; + $412 = $5; + $413 = ($412*3)|0; + $414 = $1; + $415 = (($414) + ($413<<4)|0); + $416 = +HEAPF64[$415>>3]; + $417 = $0; + $418 = (($417) + 48|0); + HEAPF64[$418>>3] = $416; + $419 = $5; + $420 = ($419*3)|0; + $421 = $1; + $422 = (($421) + ($420<<4)|0); + $423 = (($422) + 8|0); + $424 = +HEAPF64[$423>>3]; + $425 = $0; + $426 = (($425) + 48|0); + $427 = (($426) + 8|0); + HEAPF64[$427>>3] = $424; + $428 = $5; + $429 = $428<<2; + $430 = $1; + $431 = (($430) + ($429<<4)|0); + $432 = +HEAPF64[$431>>3]; + $433 = $0; + $434 = (($433) + 64|0); + HEAPF64[$434>>3] = $432; + $435 = $5; + $436 = $435<<2; + $437 = $1; + $438 = (($437) + ($436<<4)|0); + $439 = (($438) + 8|0); + $440 = +HEAPF64[$439>>3]; + $441 = $0; + $442 = (($441) + 64|0); + $443 = (($442) + 8|0); + HEAPF64[$443>>3] = $440; + $c1 = 0.309016994370000019909; + $c2 = -0.809016994369999964398; + $s1 = 0.951056516289999986923; + $s2 = 0.587785252290000004294; + $444 = $0; + $445 = (($444) + 16|0); + $446 = +HEAPF64[$445>>3]; + $447 = $0; + $448 = (($447) + 64|0); + $449 = +HEAPF64[$448>>3]; + $450 = $446 + $449; + $tau0r9 = $450; + $451 = $0; + $452 = (($451) + 16|0); + $453 = +HEAPF64[$452>>3]; + $454 = $0; + $455 = (($454) + 64|0); + $456 = +HEAPF64[$455>>3]; + $457 = $453 - $456; + $tau2r13 = $457; + $458 = $0; + $459 = (($458) + 16|0); + $460 = (($459) + 8|0); + $461 = +HEAPF64[$460>>3]; + $462 = $0; + $463 = (($462) + 64|0); + $464 = (($463) + 8|0); + $465 = +HEAPF64[$464>>3]; + $466 = $461 + $465; + $tau0i10 = $466; + $467 = $0; + $468 = (($467) + 16|0); + $469 = (($468) + 8|0); + $470 = +HEAPF64[$469>>3]; + $471 = $0; + $472 = (($471) + 64|0); + $473 = (($472) + 8|0); + $474 = +HEAPF64[$473>>3]; + $475 = $470 - $474; + $tau2i14 = $475; + $476 = $0; + $477 = (($476) + 32|0); + $478 = +HEAPF64[$477>>3]; + $479 = $0; + $480 = (($479) + 48|0); + $481 = +HEAPF64[$480>>3]; + $482 = $478 + $481; + $tau1r11 = $482; + $483 = $0; + $484 = (($483) + 32|0); + $485 = +HEAPF64[$484>>3]; + $486 = $0; + $487 = (($486) + 48|0); + $488 = +HEAPF64[$487>>3]; + $489 = $485 - $488; + $tau3r15 = $489; + $490 = $0; + $491 = (($490) + 32|0); + $492 = (($491) + 8|0); + $493 = +HEAPF64[$492>>3]; + $494 = $0; + $495 = (($494) + 48|0); + $496 = (($495) + 8|0); + $497 = +HEAPF64[$496>>3]; + $498 = $493 + $497; + $tau1i12 = $498; + $499 = $0; + $500 = (($499) + 32|0); + $501 = (($500) + 8|0); + $502 = +HEAPF64[$501>>3]; + $503 = $0; + $504 = (($503) + 48|0); + $505 = (($504) + 8|0); + $506 = +HEAPF64[$505>>3]; + $507 = $502 - $506; + $tau3i16 = $507; + $508 = $c1; + $509 = $tau0r9; + $510 = $508 * $509; + $511 = $c2; + $512 = $tau1r11; + $513 = $511 * $512; + $514 = $510 + $513; + $tau4r = $514; + $515 = $c1; + $516 = $tau0i10; + $517 = $515 * $516; + $518 = $c2; + $519 = $tau1i12; + $520 = $518 * $519; + $521 = $517 + $520; + $tau4i = $521; + $522 = $3; + $523 = ($522|0)==(1); + if ($523) { + $524 = $s1; + $525 = $tau2r13; + $526 = $524 * $525; + $527 = $s2; + $528 = $tau3r15; + $529 = $527 * $528; + $530 = $526 + $529; + $tau5r = $530; + $531 = $s1; + $532 = $tau2i14; + $533 = $531 * $532; + $534 = $s2; + $535 = $tau3i16; + $536 = $534 * $535; + $537 = $533 + $536; + $tau5i = $537; + } else { + $538 = $s1; + $539 = -$538; + $540 = $tau2r13; + $541 = $539 * $540; + $542 = $s2; + $543 = $tau3r15; + $544 = $542 * $543; + $545 = $541 - $544; + $tau5r = $545; + $546 = $s1; + $547 = -$546; + $548 = $tau2i14; + $549 = $547 * $548; + $550 = $s2; + $551 = $tau3i16; + $552 = $550 * $551; + $553 = $549 - $552; + $tau5i = $553; + } + $554 = $0; + $555 = +HEAPF64[$554>>3]; + $556 = $tau4r; + $557 = $555 + $556; + $tau6r = $557; + $558 = $0; + $559 = (($558) + 8|0); + $560 = +HEAPF64[$559>>3]; + $561 = $tau4i; + $562 = $560 + $561; + $tau6i = $562; + $563 = $tau6r; + $564 = $tau5i; + $565 = $563 + $564; + $566 = $0; + $567 = (($566) + 16|0); + HEAPF64[$567>>3] = $565; + $568 = $tau6i; + $569 = $tau5r; + $570 = $568 - $569; + $571 = $0; + $572 = (($571) + 16|0); + $573 = (($572) + 8|0); + HEAPF64[$573>>3] = $570; + $574 = $tau6r; + $575 = $tau5i; + $576 = $574 - $575; + $577 = $0; + $578 = (($577) + 64|0); + HEAPF64[$578>>3] = $576; + $579 = $tau6i; + $580 = $tau5r; + $581 = $579 + $580; + $582 = $0; + $583 = (($582) + 64|0); + $584 = (($583) + 8|0); + HEAPF64[$584>>3] = $581; + $585 = $c2; + $586 = $tau0r9; + $587 = $585 * $586; + $588 = $c1; + $589 = $tau1r11; + $590 = $588 * $589; + $591 = $587 + $590; + $tau4r = $591; + $592 = $c2; + $593 = $tau0i10; + $594 = $592 * $593; + $595 = $c1; + $596 = $tau1i12; + $597 = $595 * $596; + $598 = $594 + $597; + $tau4i = $598; + $599 = $3; + $600 = ($599|0)==(1); + if ($600) { + $601 = $s2; + $602 = $tau2r13; + $603 = $601 * $602; + $604 = $s1; + $605 = $tau3r15; + $606 = $604 * $605; + $607 = $603 - $606; + $tau5r = $607; + $608 = $s2; + $609 = $tau2i14; + $610 = $608 * $609; + $611 = $s1; + $612 = $tau3i16; + $613 = $611 * $612; + $614 = $610 - $613; + $tau5i = $614; + } else { + $615 = $s2; + $616 = -$615; + $617 = $tau2r13; + $618 = $616 * $617; + $619 = $s1; + $620 = $tau3r15; + $621 = $619 * $620; + $622 = $618 + $621; + $tau5r = $622; + $623 = $s2; + $624 = -$623; + $625 = $tau2i14; + $626 = $624 * $625; + $627 = $s1; + $628 = $tau3i16; + $629 = $627 * $628; + $630 = $626 + $629; + $tau5i = $630; + } + $631 = $0; + $632 = +HEAPF64[$631>>3]; + $633 = $tau4r; + $634 = $632 + $633; + $tau6r = $634; + $635 = $0; + $636 = (($635) + 8|0); + $637 = +HEAPF64[$636>>3]; + $638 = $tau4i; + $639 = $637 + $638; + $tau6i = $639; + $640 = $tau6r; + $641 = $tau5i; + $642 = $640 + $641; + $643 = $0; + $644 = (($643) + 32|0); + HEAPF64[$644>>3] = $642; + $645 = $tau6i; + $646 = $tau5r; + $647 = $645 - $646; + $648 = $0; + $649 = (($648) + 32|0); + $650 = (($649) + 8|0); + HEAPF64[$650>>3] = $647; + $651 = $tau6r; + $652 = $tau5i; + $653 = $651 - $652; + $654 = $0; + $655 = (($654) + 48|0); + HEAPF64[$655>>3] = $653; + $656 = $tau6i; + $657 = $tau5r; + $658 = $656 + $657; + $659 = $0; + $660 = (($659) + 48|0); + $661 = (($660) + 8|0); + HEAPF64[$661>>3] = $658; + $662 = $tau0r9; + $663 = $tau1r11; + $664 = $662 + $663; + $665 = $0; + $666 = +HEAPF64[$665>>3]; + $667 = $666 + $664; + HEAPF64[$665>>3] = $667; + $668 = $tau0i10; + $669 = $tau1i12; + $670 = $668 + $669; + $671 = $0; + $672 = (($671) + 8|0); + $673 = +HEAPF64[$672>>3]; + $674 = $673 + $670; + HEAPF64[$672>>3] = $674; + } else { + $675 = $4; + $676 = ($675|0)==(7); + if ($676) { + $677 = $1; + $678 = +HEAPF64[$677>>3]; + $679 = $0; + HEAPF64[$679>>3] = $678; + $680 = $1; + $681 = (($680) + 8|0); + $682 = +HEAPF64[$681>>3]; + $683 = $0; + $684 = (($683) + 8|0); + HEAPF64[$684>>3] = $682; + $685 = $5; + $686 = $1; + $687 = (($686) + ($685<<4)|0); + $688 = +HEAPF64[$687>>3]; + $689 = $0; + $690 = (($689) + 16|0); + HEAPF64[$690>>3] = $688; + $691 = $5; + $692 = $1; + $693 = (($692) + ($691<<4)|0); + $694 = (($693) + 8|0); + $695 = +HEAPF64[$694>>3]; + $696 = $0; + $697 = (($696) + 16|0); + $698 = (($697) + 8|0); + HEAPF64[$698>>3] = $695; + $699 = $5; + $700 = $699<<1; + $701 = $1; + $702 = (($701) + ($700<<4)|0); + $703 = +HEAPF64[$702>>3]; + $704 = $0; + $705 = (($704) + 32|0); + HEAPF64[$705>>3] = $703; + $706 = $5; + $707 = $706<<1; + $708 = $1; + $709 = (($708) + ($707<<4)|0); + $710 = (($709) + 8|0); + $711 = +HEAPF64[$710>>3]; + $712 = $0; + $713 = (($712) + 32|0); + $714 = (($713) + 8|0); + HEAPF64[$714>>3] = $711; + $715 = $5; + $716 = ($715*3)|0; + $717 = $1; + $718 = (($717) + ($716<<4)|0); + $719 = +HEAPF64[$718>>3]; + $720 = $0; + $721 = (($720) + 48|0); + HEAPF64[$721>>3] = $719; + $722 = $5; + $723 = ($722*3)|0; + $724 = $1; + $725 = (($724) + ($723<<4)|0); + $726 = (($725) + 8|0); + $727 = +HEAPF64[$726>>3]; + $728 = $0; + $729 = (($728) + 48|0); + $730 = (($729) + 8|0); + HEAPF64[$730>>3] = $727; + $731 = $5; + $732 = $731<<2; + $733 = $1; + $734 = (($733) + ($732<<4)|0); + $735 = +HEAPF64[$734>>3]; + $736 = $0; + $737 = (($736) + 64|0); + HEAPF64[$737>>3] = $735; + $738 = $5; + $739 = $738<<2; + $740 = $1; + $741 = (($740) + ($739<<4)|0); + $742 = (($741) + 8|0); + $743 = +HEAPF64[$742>>3]; + $744 = $0; + $745 = (($744) + 64|0); + $746 = (($745) + 8|0); + HEAPF64[$746>>3] = $743; + $747 = $5; + $748 = ($747*5)|0; + $749 = $1; + $750 = (($749) + ($748<<4)|0); + $751 = +HEAPF64[$750>>3]; + $752 = $0; + $753 = (($752) + 80|0); + HEAPF64[$753>>3] = $751; + $754 = $5; + $755 = ($754*5)|0; + $756 = $1; + $757 = (($756) + ($755<<4)|0); + $758 = (($757) + 8|0); + $759 = +HEAPF64[$758>>3]; + $760 = $0; + $761 = (($760) + 80|0); + $762 = (($761) + 8|0); + HEAPF64[$762>>3] = $759; + $763 = $5; + $764 = ($763*6)|0; + $765 = $1; + $766 = (($765) + ($764<<4)|0); + $767 = +HEAPF64[$766>>3]; + $768 = $0; + $769 = (($768) + 96|0); + HEAPF64[$769>>3] = $767; + $770 = $5; + $771 = ($770*6)|0; + $772 = $1; + $773 = (($772) + ($771<<4)|0); + $774 = (($773) + 8|0); + $775 = +HEAPF64[$774>>3]; + $776 = $0; + $777 = (($776) + 96|0); + $778 = (($777) + 8|0); + HEAPF64[$778>>3] = $775; + $c131 = 0.623489801850000024963; + $c232 = -0.222520933949999999424; + $c3 = -0.900968867899999970028; + $s133 = 0.781831482460000004586; + $s234 = 0.974927912179999967001; + $s3 = 0.433883739109999999606; + $779 = $0; + $780 = (($779) + 16|0); + $781 = +HEAPF64[$780>>3]; + $782 = $0; + $783 = (($782) + 96|0); + $784 = +HEAPF64[$783>>3]; + $785 = $781 + $784; + $tau0r17 = $785; + $786 = $0; + $787 = (($786) + 16|0); + $788 = +HEAPF64[$787>>3]; + $789 = $0; + $790 = (($789) + 96|0); + $791 = +HEAPF64[$790>>3]; + $792 = $788 - $791; + $tau3r23 = $792; + $793 = $0; + $794 = (($793) + 16|0); + $795 = (($794) + 8|0); + $796 = +HEAPF64[$795>>3]; + $797 = $0; + $798 = (($797) + 96|0); + $799 = (($798) + 8|0); + $800 = +HEAPF64[$799>>3]; + $801 = $796 + $800; + $tau0i18 = $801; + $802 = $0; + $803 = (($802) + 16|0); + $804 = (($803) + 8|0); + $805 = +HEAPF64[$804>>3]; + $806 = $0; + $807 = (($806) + 96|0); + $808 = (($807) + 8|0); + $809 = +HEAPF64[$808>>3]; + $810 = $805 - $809; + $tau3i24 = $810; + $811 = $0; + $812 = (($811) + 32|0); + $813 = +HEAPF64[$812>>3]; + $814 = $0; + $815 = (($814) + 80|0); + $816 = +HEAPF64[$815>>3]; + $817 = $813 + $816; + $tau1r19 = $817; + $818 = $0; + $819 = (($818) + 32|0); + $820 = +HEAPF64[$819>>3]; + $821 = $0; + $822 = (($821) + 80|0); + $823 = +HEAPF64[$822>>3]; + $824 = $820 - $823; + $tau4r25 = $824; + $825 = $0; + $826 = (($825) + 32|0); + $827 = (($826) + 8|0); + $828 = +HEAPF64[$827>>3]; + $829 = $0; + $830 = (($829) + 80|0); + $831 = (($830) + 8|0); + $832 = +HEAPF64[$831>>3]; + $833 = $828 + $832; + $tau1i20 = $833; + $834 = $0; + $835 = (($834) + 32|0); + $836 = (($835) + 8|0); + $837 = +HEAPF64[$836>>3]; + $838 = $0; + $839 = (($838) + 80|0); + $840 = (($839) + 8|0); + $841 = +HEAPF64[$840>>3]; + $842 = $837 - $841; + $tau4i26 = $842; + $843 = $0; + $844 = (($843) + 48|0); + $845 = +HEAPF64[$844>>3]; + $846 = $0; + $847 = (($846) + 64|0); + $848 = +HEAPF64[$847>>3]; + $849 = $845 + $848; + $tau2r21 = $849; + $850 = $0; + $851 = (($850) + 48|0); + $852 = +HEAPF64[$851>>3]; + $853 = $0; + $854 = (($853) + 64|0); + $855 = +HEAPF64[$854>>3]; + $856 = $852 - $855; + $tau5r27 = $856; + $857 = $0; + $858 = (($857) + 48|0); + $859 = (($858) + 8|0); + $860 = +HEAPF64[$859>>3]; + $861 = $0; + $862 = (($861) + 64|0); + $863 = (($862) + 8|0); + $864 = +HEAPF64[$863>>3]; + $865 = $860 + $864; + $tau2i22 = $865; + $866 = $0; + $867 = (($866) + 48|0); + $868 = (($867) + 8|0); + $869 = +HEAPF64[$868>>3]; + $870 = $0; + $871 = (($870) + 64|0); + $872 = (($871) + 8|0); + $873 = +HEAPF64[$872>>3]; + $874 = $869 - $873; + $tau5i28 = $874; + $875 = $0; + $876 = +HEAPF64[$875>>3]; + $877 = $c131; + $878 = $tau0r17; + $879 = $877 * $878; + $880 = $876 + $879; + $881 = $c232; + $882 = $tau1r19; + $883 = $881 * $882; + $884 = $880 + $883; + $885 = $c3; + $886 = $tau2r21; + $887 = $885 * $886; + $888 = $884 + $887; + $tau6r29 = $888; + $889 = $0; + $890 = (($889) + 8|0); + $891 = +HEAPF64[$890>>3]; + $892 = $c131; + $893 = $tau0i18; + $894 = $892 * $893; + $895 = $891 + $894; + $896 = $c232; + $897 = $tau1i20; + $898 = $896 * $897; + $899 = $895 + $898; + $900 = $c3; + $901 = $tau2i22; + $902 = $900 * $901; + $903 = $899 + $902; + $tau6i30 = $903; + $904 = $3; + $905 = ($904|0)==(1); + if ($905) { + $906 = $s133; + $907 = -$906; + $908 = $tau3r23; + $909 = $907 * $908; + $910 = $s234; + $911 = $tau4r25; + $912 = $910 * $911; + $913 = $909 - $912; + $914 = $s3; + $915 = $tau5r27; + $916 = $914 * $915; + $917 = $913 - $916; + $tau7r = $917; + $918 = $s133; + $919 = -$918; + $920 = $tau3i24; + $921 = $919 * $920; + $922 = $s234; + $923 = $tau4i26; + $924 = $922 * $923; + $925 = $921 - $924; + $926 = $s3; + $927 = $tau5i28; + $928 = $926 * $927; + $929 = $925 - $928; + $tau7i = $929; + } else { + $930 = $s133; + $931 = $tau3r23; + $932 = $930 * $931; + $933 = $s234; + $934 = $tau4r25; + $935 = $933 * $934; + $936 = $932 + $935; + $937 = $s3; + $938 = $tau5r27; + $939 = $937 * $938; + $940 = $936 + $939; + $tau7r = $940; + $941 = $s133; + $942 = $tau3i24; + $943 = $941 * $942; + $944 = $s234; + $945 = $tau4i26; + $946 = $944 * $945; + $947 = $943 + $946; + $948 = $s3; + $949 = $tau5i28; + $950 = $948 * $949; + $951 = $947 + $950; + $tau7i = $951; + } + $952 = $tau6r29; + $953 = $tau7i; + $954 = $952 - $953; + $955 = $0; + $956 = (($955) + 16|0); + HEAPF64[$956>>3] = $954; + $957 = $tau6r29; + $958 = $tau7i; + $959 = $957 + $958; + $960 = $0; + $961 = (($960) + 96|0); + HEAPF64[$961>>3] = $959; + $962 = $tau6i30; + $963 = $tau7r; + $964 = $962 + $963; + $965 = $0; + $966 = (($965) + 16|0); + $967 = (($966) + 8|0); + HEAPF64[$967>>3] = $964; + $968 = $tau6i30; + $969 = $tau7r; + $970 = $968 - $969; + $971 = $0; + $972 = (($971) + 96|0); + $973 = (($972) + 8|0); + HEAPF64[$973>>3] = $970; + $974 = $0; + $975 = +HEAPF64[$974>>3]; + $976 = $c232; + $977 = $tau0r17; + $978 = $976 * $977; + $979 = $975 + $978; + $980 = $c3; + $981 = $tau1r19; + $982 = $980 * $981; + $983 = $979 + $982; + $984 = $c131; + $985 = $tau2r21; + $986 = $984 * $985; + $987 = $983 + $986; + $tau6r29 = $987; + $988 = $0; + $989 = (($988) + 8|0); + $990 = +HEAPF64[$989>>3]; + $991 = $c232; + $992 = $tau0i18; + $993 = $991 * $992; + $994 = $990 + $993; + $995 = $c3; + $996 = $tau1i20; + $997 = $995 * $996; + $998 = $994 + $997; + $999 = $c131; + $1000 = $tau2i22; + $1001 = $999 * $1000; + $1002 = $998 + $1001; + $tau6i30 = $1002; + $1003 = $3; + $1004 = ($1003|0)==(1); + if ($1004) { + $1005 = $s234; + $1006 = -$1005; + $1007 = $tau3r23; + $1008 = $1006 * $1007; + $1009 = $s3; + $1010 = $tau4r25; + $1011 = $1009 * $1010; + $1012 = $1008 + $1011; + $1013 = $s133; + $1014 = $tau5r27; + $1015 = $1013 * $1014; + $1016 = $1012 + $1015; + $tau7r = $1016; + $1017 = $s234; + $1018 = -$1017; + $1019 = $tau3i24; + $1020 = $1018 * $1019; + $1021 = $s3; + $1022 = $tau4i26; + $1023 = $1021 * $1022; + $1024 = $1020 + $1023; + $1025 = $s133; + $1026 = $tau5i28; + $1027 = $1025 * $1026; + $1028 = $1024 + $1027; + $tau7i = $1028; + } else { + $1029 = $s234; + $1030 = $tau3r23; + $1031 = $1029 * $1030; + $1032 = $s3; + $1033 = $tau4r25; + $1034 = $1032 * $1033; + $1035 = $1031 - $1034; + $1036 = $s133; + $1037 = $tau5r27; + $1038 = $1036 * $1037; + $1039 = $1035 - $1038; + $tau7r = $1039; + $1040 = $s234; + $1041 = $tau3i24; + $1042 = $1040 * $1041; + $1043 = $s3; + $1044 = $tau4i26; + $1045 = $1043 * $1044; + $1046 = $1042 - $1045; + $1047 = $s133; + $1048 = $tau5i28; + $1049 = $1047 * $1048; + $1050 = $1046 - $1049; + $tau7i = $1050; + } + $1051 = $tau6r29; + $1052 = $tau7i; + $1053 = $1051 - $1052; + $1054 = $0; + $1055 = (($1054) + 32|0); + HEAPF64[$1055>>3] = $1053; + $1056 = $tau6r29; + $1057 = $tau7i; + $1058 = $1056 + $1057; + $1059 = $0; + $1060 = (($1059) + 80|0); + HEAPF64[$1060>>3] = $1058; + $1061 = $tau6i30; + $1062 = $tau7r; + $1063 = $1061 + $1062; + $1064 = $0; + $1065 = (($1064) + 32|0); + $1066 = (($1065) + 8|0); + HEAPF64[$1066>>3] = $1063; + $1067 = $tau6i30; + $1068 = $tau7r; + $1069 = $1067 - $1068; + $1070 = $0; + $1071 = (($1070) + 80|0); + $1072 = (($1071) + 8|0); + HEAPF64[$1072>>3] = $1069; + $1073 = $0; + $1074 = +HEAPF64[$1073>>3]; + $1075 = $c3; + $1076 = $tau0r17; + $1077 = $1075 * $1076; + $1078 = $1074 + $1077; + $1079 = $c131; + $1080 = $tau1r19; + $1081 = $1079 * $1080; + $1082 = $1078 + $1081; + $1083 = $c232; + $1084 = $tau2r21; + $1085 = $1083 * $1084; + $1086 = $1082 + $1085; + $tau6r29 = $1086; + $1087 = $0; + $1088 = (($1087) + 8|0); + $1089 = +HEAPF64[$1088>>3]; + $1090 = $c3; + $1091 = $tau0i18; + $1092 = $1090 * $1091; + $1093 = $1089 + $1092; + $1094 = $c131; + $1095 = $tau1i20; + $1096 = $1094 * $1095; + $1097 = $1093 + $1096; + $1098 = $c232; + $1099 = $tau2i22; + $1100 = $1098 * $1099; + $1101 = $1097 + $1100; + $tau6i30 = $1101; + $1102 = $3; + $1103 = ($1102|0)==(1); + if ($1103) { + $1104 = $s3; + $1105 = -$1104; + $1106 = $tau3r23; + $1107 = $1105 * $1106; + $1108 = $s133; + $1109 = $tau4r25; + $1110 = $1108 * $1109; + $1111 = $1107 + $1110; + $1112 = $s234; + $1113 = $tau5r27; + $1114 = $1112 * $1113; + $1115 = $1111 - $1114; + $tau7r = $1115; + $1116 = $s3; + $1117 = -$1116; + $1118 = $tau3i24; + $1119 = $1117 * $1118; + $1120 = $s133; + $1121 = $tau4i26; + $1122 = $1120 * $1121; + $1123 = $1119 + $1122; + $1124 = $s234; + $1125 = $tau5i28; + $1126 = $1124 * $1125; + $1127 = $1123 - $1126; + $tau7i = $1127; + } else { + $1128 = $s3; + $1129 = $tau3r23; + $1130 = $1128 * $1129; + $1131 = $s133; + $1132 = $tau4r25; + $1133 = $1131 * $1132; + $1134 = $1130 - $1133; + $1135 = $s234; + $1136 = $tau5r27; + $1137 = $1135 * $1136; + $1138 = $1134 + $1137; + $tau7r = $1138; + $1139 = $s3; + $1140 = $tau3i24; + $1141 = $1139 * $1140; + $1142 = $s133; + $1143 = $tau4i26; + $1144 = $1142 * $1143; + $1145 = $1141 - $1144; + $1146 = $s234; + $1147 = $tau5i28; + $1148 = $1146 * $1147; + $1149 = $1145 + $1148; + $tau7i = $1149; + } + $1150 = $tau6r29; + $1151 = $tau7i; + $1152 = $1150 - $1151; + $1153 = $0; + $1154 = (($1153) + 48|0); + HEAPF64[$1154>>3] = $1152; + $1155 = $tau6r29; + $1156 = $tau7i; + $1157 = $1155 + $1156; + $1158 = $0; + $1159 = (($1158) + 64|0); + HEAPF64[$1159>>3] = $1157; + $1160 = $tau6i30; + $1161 = $tau7r; + $1162 = $1160 + $1161; + $1163 = $0; + $1164 = (($1163) + 48|0); + $1165 = (($1164) + 8|0); + HEAPF64[$1165>>3] = $1162; + $1166 = $tau6i30; + $1167 = $tau7r; + $1168 = $1166 - $1167; + $1169 = $0; + $1170 = (($1169) + 64|0); + $1171 = (($1170) + 8|0); + HEAPF64[$1171>>3] = $1168; + $1172 = $tau0r17; + $1173 = $tau1r19; + $1174 = $1172 + $1173; + $1175 = $tau2r21; + $1176 = $1174 + $1175; + $1177 = $0; + $1178 = +HEAPF64[$1177>>3]; + $1179 = $1178 + $1176; + HEAPF64[$1177>>3] = $1179; + $1180 = $tau0i18; + $1181 = $tau1i20; + $1182 = $1180 + $1181; + $1183 = $tau2i22; + $1184 = $1182 + $1183; + $1185 = $0; + $1186 = (($1185) + 8|0); + $1187 = +HEAPF64[$1186>>3]; + $1188 = $1187 + $1184; + HEAPF64[$1186>>3] = $1188; + } else { + $1189 = $4; + $1190 = ($1189|0)==(8); + if ($1190) { + $1191 = $1; + $1192 = +HEAPF64[$1191>>3]; + $1193 = $0; + HEAPF64[$1193>>3] = $1192; + $1194 = $1; + $1195 = (($1194) + 8|0); + $1196 = +HEAPF64[$1195>>3]; + $1197 = $0; + $1198 = (($1197) + 8|0); + HEAPF64[$1198>>3] = $1196; + $1199 = $5; + $1200 = $1; + $1201 = (($1200) + ($1199<<4)|0); + $1202 = +HEAPF64[$1201>>3]; + $1203 = $0; + $1204 = (($1203) + 16|0); + HEAPF64[$1204>>3] = $1202; + $1205 = $5; + $1206 = $1; + $1207 = (($1206) + ($1205<<4)|0); + $1208 = (($1207) + 8|0); + $1209 = +HEAPF64[$1208>>3]; + $1210 = $0; + $1211 = (($1210) + 16|0); + $1212 = (($1211) + 8|0); + HEAPF64[$1212>>3] = $1209; + $1213 = $5; + $1214 = $1213<<1; + $1215 = $1; + $1216 = (($1215) + ($1214<<4)|0); + $1217 = +HEAPF64[$1216>>3]; + $1218 = $0; + $1219 = (($1218) + 32|0); + HEAPF64[$1219>>3] = $1217; + $1220 = $5; + $1221 = $1220<<1; + $1222 = $1; + $1223 = (($1222) + ($1221<<4)|0); + $1224 = (($1223) + 8|0); + $1225 = +HEAPF64[$1224>>3]; + $1226 = $0; + $1227 = (($1226) + 32|0); + $1228 = (($1227) + 8|0); + HEAPF64[$1228>>3] = $1225; + $1229 = $5; + $1230 = ($1229*3)|0; + $1231 = $1; + $1232 = (($1231) + ($1230<<4)|0); + $1233 = +HEAPF64[$1232>>3]; + $1234 = $0; + $1235 = (($1234) + 48|0); + HEAPF64[$1235>>3] = $1233; + $1236 = $5; + $1237 = ($1236*3)|0; + $1238 = $1; + $1239 = (($1238) + ($1237<<4)|0); + $1240 = (($1239) + 8|0); + $1241 = +HEAPF64[$1240>>3]; + $1242 = $0; + $1243 = (($1242) + 48|0); + $1244 = (($1243) + 8|0); + HEAPF64[$1244>>3] = $1241; + $1245 = $5; + $1246 = $1245<<2; + $1247 = $1; + $1248 = (($1247) + ($1246<<4)|0); + $1249 = +HEAPF64[$1248>>3]; + $1250 = $0; + $1251 = (($1250) + 64|0); + HEAPF64[$1251>>3] = $1249; + $1252 = $5; + $1253 = $1252<<2; + $1254 = $1; + $1255 = (($1254) + ($1253<<4)|0); + $1256 = (($1255) + 8|0); + $1257 = +HEAPF64[$1256>>3]; + $1258 = $0; + $1259 = (($1258) + 64|0); + $1260 = (($1259) + 8|0); + HEAPF64[$1260>>3] = $1257; + $1261 = $5; + $1262 = ($1261*5)|0; + $1263 = $1; + $1264 = (($1263) + ($1262<<4)|0); + $1265 = +HEAPF64[$1264>>3]; + $1266 = $0; + $1267 = (($1266) + 80|0); + HEAPF64[$1267>>3] = $1265; + $1268 = $5; + $1269 = ($1268*5)|0; + $1270 = $1; + $1271 = (($1270) + ($1269<<4)|0); + $1272 = (($1271) + 8|0); + $1273 = +HEAPF64[$1272>>3]; + $1274 = $0; + $1275 = (($1274) + 80|0); + $1276 = (($1275) + 8|0); + HEAPF64[$1276>>3] = $1273; + $1277 = $5; + $1278 = ($1277*6)|0; + $1279 = $1; + $1280 = (($1279) + ($1278<<4)|0); + $1281 = +HEAPF64[$1280>>3]; + $1282 = $0; + $1283 = (($1282) + 96|0); + HEAPF64[$1283>>3] = $1281; + $1284 = $5; + $1285 = ($1284*6)|0; + $1286 = $1; + $1287 = (($1286) + ($1285<<4)|0); + $1288 = (($1287) + 8|0); + $1289 = +HEAPF64[$1288>>3]; + $1290 = $0; + $1291 = (($1290) + 96|0); + $1292 = (($1291) + 8|0); + HEAPF64[$1292>>3] = $1289; + $1293 = $5; + $1294 = ($1293*7)|0; + $1295 = $1; + $1296 = (($1295) + ($1294<<4)|0); + $1297 = +HEAPF64[$1296>>3]; + $1298 = $0; + $1299 = (($1298) + 112|0); + HEAPF64[$1299>>3] = $1297; + $1300 = $5; + $1301 = ($1300*7)|0; + $1302 = $1; + $1303 = (($1302) + ($1301<<4)|0); + $1304 = (($1303) + 8|0); + $1305 = +HEAPF64[$1304>>3]; + $1306 = $0; + $1307 = (($1306) + 112|0); + $1308 = (($1307) + 8|0); + HEAPF64[$1308>>3] = $1305; + $c151 = 0.707106781186547572737; + $s152 = 0.707106781186547572737; + $1309 = $0; + $1310 = +HEAPF64[$1309>>3]; + $1311 = $0; + $1312 = (($1311) + 64|0); + $1313 = +HEAPF64[$1312>>3]; + $1314 = $1310 + $1313; + $tau0r35 = $1314; + $1315 = $0; + $1316 = +HEAPF64[$1315>>3]; + $1317 = $0; + $1318 = (($1317) + 64|0); + $1319 = +HEAPF64[$1318>>3]; + $1320 = $1316 - $1319; + $tau4r43 = $1320; + $1321 = $0; + $1322 = (($1321) + 8|0); + $1323 = +HEAPF64[$1322>>3]; + $1324 = $0; + $1325 = (($1324) + 64|0); + $1326 = (($1325) + 8|0); + $1327 = +HEAPF64[$1326>>3]; + $1328 = $1323 + $1327; + $tau0i36 = $1328; + $1329 = $0; + $1330 = (($1329) + 8|0); + $1331 = +HEAPF64[$1330>>3]; + $1332 = $0; + $1333 = (($1332) + 64|0); + $1334 = (($1333) + 8|0); + $1335 = +HEAPF64[$1334>>3]; + $1336 = $1331 - $1335; + $tau4i44 = $1336; + $1337 = $0; + $1338 = (($1337) + 16|0); + $1339 = +HEAPF64[$1338>>3]; + $1340 = $0; + $1341 = (($1340) + 112|0); + $1342 = +HEAPF64[$1341>>3]; + $1343 = $1339 + $1342; + $tau1r37 = $1343; + $1344 = $0; + $1345 = (($1344) + 16|0); + $1346 = +HEAPF64[$1345>>3]; + $1347 = $0; + $1348 = (($1347) + 112|0); + $1349 = +HEAPF64[$1348>>3]; + $1350 = $1346 - $1349; + $tau5r45 = $1350; + $1351 = $0; + $1352 = (($1351) + 16|0); + $1353 = (($1352) + 8|0); + $1354 = +HEAPF64[$1353>>3]; + $1355 = $0; + $1356 = (($1355) + 112|0); + $1357 = (($1356) + 8|0); + $1358 = +HEAPF64[$1357>>3]; + $1359 = $1354 + $1358; + $tau1i38 = $1359; + $1360 = $0; + $1361 = (($1360) + 16|0); + $1362 = (($1361) + 8|0); + $1363 = +HEAPF64[$1362>>3]; + $1364 = $0; + $1365 = (($1364) + 112|0); + $1366 = (($1365) + 8|0); + $1367 = +HEAPF64[$1366>>3]; + $1368 = $1363 - $1367; + $tau5i46 = $1368; + $1369 = $0; + $1370 = (($1369) + 48|0); + $1371 = +HEAPF64[$1370>>3]; + $1372 = $0; + $1373 = (($1372) + 80|0); + $1374 = +HEAPF64[$1373>>3]; + $1375 = $1371 + $1374; + $tau2r39 = $1375; + $1376 = $0; + $1377 = (($1376) + 48|0); + $1378 = +HEAPF64[$1377>>3]; + $1379 = $0; + $1380 = (($1379) + 80|0); + $1381 = +HEAPF64[$1380>>3]; + $1382 = $1378 - $1381; + $tau6r47 = $1382; + $1383 = $0; + $1384 = (($1383) + 48|0); + $1385 = (($1384) + 8|0); + $1386 = +HEAPF64[$1385>>3]; + $1387 = $0; + $1388 = (($1387) + 80|0); + $1389 = (($1388) + 8|0); + $1390 = +HEAPF64[$1389>>3]; + $1391 = $1386 + $1390; + $tau2i40 = $1391; + $1392 = $0; + $1393 = (($1392) + 48|0); + $1394 = (($1393) + 8|0); + $1395 = +HEAPF64[$1394>>3]; + $1396 = $0; + $1397 = (($1396) + 80|0); + $1398 = (($1397) + 8|0); + $1399 = +HEAPF64[$1398>>3]; + $1400 = $1395 - $1399; + $tau6i48 = $1400; + $1401 = $0; + $1402 = (($1401) + 32|0); + $1403 = +HEAPF64[$1402>>3]; + $1404 = $0; + $1405 = (($1404) + 96|0); + $1406 = +HEAPF64[$1405>>3]; + $1407 = $1403 + $1406; + $tau3r41 = $1407; + $1408 = $0; + $1409 = (($1408) + 32|0); + $1410 = +HEAPF64[$1409>>3]; + $1411 = $0; + $1412 = (($1411) + 96|0); + $1413 = +HEAPF64[$1412>>3]; + $1414 = $1410 - $1413; + $tau7r49 = $1414; + $1415 = $0; + $1416 = (($1415) + 32|0); + $1417 = (($1416) + 8|0); + $1418 = +HEAPF64[$1417>>3]; + $1419 = $0; + $1420 = (($1419) + 96|0); + $1421 = (($1420) + 8|0); + $1422 = +HEAPF64[$1421>>3]; + $1423 = $1418 + $1422; + $tau3i42 = $1423; + $1424 = $0; + $1425 = (($1424) + 32|0); + $1426 = (($1425) + 8|0); + $1427 = +HEAPF64[$1426>>3]; + $1428 = $0; + $1429 = (($1428) + 96|0); + $1430 = (($1429) + 8|0); + $1431 = +HEAPF64[$1430>>3]; + $1432 = $1427 - $1431; + $tau7i50 = $1432; + $1433 = $tau0r35; + $1434 = $tau1r37; + $1435 = $1433 + $1434; + $1436 = $tau2r39; + $1437 = $1435 + $1436; + $1438 = $tau3r41; + $1439 = $1437 + $1438; + $1440 = $0; + HEAPF64[$1440>>3] = $1439; + $1441 = $tau0i36; + $1442 = $tau1i38; + $1443 = $1441 + $1442; + $1444 = $tau2i40; + $1445 = $1443 + $1444; + $1446 = $tau3i42; + $1447 = $1445 + $1446; + $1448 = $0; + $1449 = (($1448) + 8|0); + HEAPF64[$1449>>3] = $1447; + $1450 = $tau0r35; + $1451 = $tau1r37; + $1452 = $1450 - $1451; + $1453 = $tau2r39; + $1454 = $1452 - $1453; + $1455 = $tau3r41; + $1456 = $1454 + $1455; + $1457 = $0; + $1458 = (($1457) + 64|0); + HEAPF64[$1458>>3] = $1456; + $1459 = $tau0i36; + $1460 = $tau1i38; + $1461 = $1459 - $1460; + $1462 = $tau2i40; + $1463 = $1461 - $1462; + $1464 = $tau3i42; + $1465 = $1463 + $1464; + $1466 = $0; + $1467 = (($1466) + 64|0); + $1468 = (($1467) + 8|0); + HEAPF64[$1468>>3] = $1465; + $1469 = $tau1r37; + $1470 = $tau2r39; + $1471 = $1469 - $1470; + $temp1r = $1471; + $1472 = $tau1i38; + $1473 = $tau2i40; + $1474 = $1472 - $1473; + $temp1i = $1474; + $1475 = $tau5r45; + $1476 = $tau6r47; + $1477 = $1475 + $1476; + $temp2r = $1477; + $1478 = $tau5i46; + $1479 = $tau6i48; + $1480 = $1478 + $1479; + $temp2i = $1480; + $1481 = $tau4r43; + $1482 = $c151; + $1483 = $temp1r; + $1484 = $1482 * $1483; + $1485 = $1481 + $1484; + $tau8r = $1485; + $1486 = $tau4i44; + $1487 = $c151; + $1488 = $temp1i; + $1489 = $1487 * $1488; + $1490 = $1486 + $1489; + $tau8i = $1490; + $1491 = $3; + $1492 = ($1491|0)==(1); + if ($1492) { + $1493 = $s152; + $1494 = -$1493; + $1495 = $temp2r; + $1496 = $1494 * $1495; + $1497 = $tau7r49; + $1498 = $1496 - $1497; + $tau9r = $1498; + $1499 = $s152; + $1500 = -$1499; + $1501 = $temp2i; + $1502 = $1500 * $1501; + $1503 = $tau7i50; + $1504 = $1502 - $1503; + $tau9i = $1504; + } else { + $1505 = $s152; + $1506 = $temp2r; + $1507 = $1505 * $1506; + $1508 = $tau7r49; + $1509 = $1507 + $1508; + $tau9r = $1509; + $1510 = $s152; + $1511 = $temp2i; + $1512 = $1510 * $1511; + $1513 = $tau7i50; + $1514 = $1512 + $1513; + $tau9i = $1514; + } + $1515 = $tau8r; + $1516 = $tau9i; + $1517 = $1515 - $1516; + $1518 = $0; + $1519 = (($1518) + 16|0); + HEAPF64[$1519>>3] = $1517; + $1520 = $tau8i; + $1521 = $tau9r; + $1522 = $1520 + $1521; + $1523 = $0; + $1524 = (($1523) + 16|0); + $1525 = (($1524) + 8|0); + HEAPF64[$1525>>3] = $1522; + $1526 = $tau8r; + $1527 = $tau9i; + $1528 = $1526 + $1527; + $1529 = $0; + $1530 = (($1529) + 112|0); + HEAPF64[$1530>>3] = $1528; + $1531 = $tau8i; + $1532 = $tau9r; + $1533 = $1531 - $1532; + $1534 = $0; + $1535 = (($1534) + 112|0); + $1536 = (($1535) + 8|0); + HEAPF64[$1536>>3] = $1533; + $1537 = $tau0r35; + $1538 = $tau3r41; + $1539 = $1537 - $1538; + $tau8r = $1539; + $1540 = $tau0i36; + $1541 = $tau3i42; + $1542 = $1540 - $1541; + $tau8i = $1542; + $1543 = $3; + $1544 = ($1543|0)==(1); + if ($1544) { + $1545 = $tau5r45; + $1546 = -$1545; + $1547 = $tau6r47; + $1548 = $1546 + $1547; + $tau9r = $1548; + $1549 = $tau5i46; + $1550 = -$1549; + $1551 = $tau6i48; + $1552 = $1550 + $1551; + $tau9i = $1552; + } else { + $1553 = $tau5r45; + $1554 = $tau6r47; + $1555 = $1553 - $1554; + $tau9r = $1555; + $1556 = $tau5i46; + $1557 = $tau6i48; + $1558 = $1556 - $1557; + $tau9i = $1558; + } + $1559 = $tau8r; + $1560 = $tau9i; + $1561 = $1559 - $1560; + $1562 = $0; + $1563 = (($1562) + 32|0); + HEAPF64[$1563>>3] = $1561; + $1564 = $tau8i; + $1565 = $tau9r; + $1566 = $1564 + $1565; + $1567 = $0; + $1568 = (($1567) + 32|0); + $1569 = (($1568) + 8|0); + HEAPF64[$1569>>3] = $1566; + $1570 = $tau8r; + $1571 = $tau9i; + $1572 = $1570 + $1571; + $1573 = $0; + $1574 = (($1573) + 96|0); + HEAPF64[$1574>>3] = $1572; + $1575 = $tau8i; + $1576 = $tau9r; + $1577 = $1575 - $1576; + $1578 = $0; + $1579 = (($1578) + 96|0); + $1580 = (($1579) + 8|0); + HEAPF64[$1580>>3] = $1577; + $1581 = $tau4r43; + $1582 = $c151; + $1583 = $temp1r; + $1584 = $1582 * $1583; + $1585 = $1581 - $1584; + $tau8r = $1585; + $1586 = $tau4i44; + $1587 = $c151; + $1588 = $temp1i; + $1589 = $1587 * $1588; + $1590 = $1586 - $1589; + $tau8i = $1590; + $1591 = $3; + $1592 = ($1591|0)==(1); + if ($1592) { + $1593 = $s152; + $1594 = -$1593; + $1595 = $temp2r; + $1596 = $1594 * $1595; + $1597 = $tau7r49; + $1598 = $1596 + $1597; + $tau9r = $1598; + $1599 = $s152; + $1600 = -$1599; + $1601 = $temp2i; + $1602 = $1600 * $1601; + $1603 = $tau7i50; + $1604 = $1602 + $1603; + $tau9i = $1604; + } else { + $1605 = $s152; + $1606 = $temp2r; + $1607 = $1605 * $1606; + $1608 = $tau7r49; + $1609 = $1607 - $1608; + $tau9r = $1609; + $1610 = $s152; + $1611 = $temp2i; + $1612 = $1610 * $1611; + $1613 = $tau7i50; + $1614 = $1612 - $1613; + $tau9i = $1614; + } + $1615 = $tau8r; + $1616 = $tau9i; + $1617 = $1615 - $1616; + $1618 = $0; + $1619 = (($1618) + 48|0); + HEAPF64[$1619>>3] = $1617; + $1620 = $tau8i; + $1621 = $tau9r; + $1622 = $1620 + $1621; + $1623 = $0; + $1624 = (($1623) + 48|0); + $1625 = (($1624) + 8|0); + HEAPF64[$1625>>3] = $1622; + $1626 = $tau8r; + $1627 = $tau9i; + $1628 = $1626 + $1627; + $1629 = $0; + $1630 = (($1629) + 80|0); + HEAPF64[$1630>>3] = $1628; + $1631 = $tau8i; + $1632 = $tau9r; + $1633 = $1631 - $1632; + $1634 = $0; + $1635 = (($1634) + 80|0); + $1636 = (($1635) + 8|0); + HEAPF64[$1636>>3] = $1633; + } else { + $1637 = $radix; + $1638 = ($1637|0)==(2); + if ($1638) { + $1639 = $4; + $1640 = (($1639|0) / 2)&-1; + $m = $1640; + $1641 = $5; + $1642 = $1641<<1; + $ll = $1642; + $1643 = $0; + $1644 = $1; + $1645 = $2; + $1646 = $3; + $1647 = $m; + $1648 = $ll; + $1649 = $6; + $1650 = (($1649) + 1)|0; + _mixed_radix_dit_rec($1643,$1644,$1645,$1646,$1647,$1648,$1650); + $1651 = $0; + $1652 = $m; + $1653 = (($1651) + ($1652<<4)|0); + $1654 = $1; + $1655 = $5; + $1656 = (($1654) + ($1655<<4)|0); + $1657 = $2; + $1658 = $3; + $1659 = $m; + $1660 = $ll; + $1661 = $6; + $1662 = (($1661) + 1)|0; + _mixed_radix_dit_rec($1653,$1656,$1657,$1658,$1659,$1660,$1662); + $k = 0; + while(1) { + $1663 = $k; + $1664 = $m; + $1665 = ($1663|0)<($1664|0); + if (!($1665)) { + break; + } + $1666 = $m; + $1667 = (($1666) - 1)|0; + $1668 = $k; + $1669 = (($1667) + ($1668))|0; + $ind = $1669; + $1670 = $2; + $1671 = (($1670) + 272|0); + $1672 = $ind; + $1673 = (($1671) + ($1672<<4)|0); + $1674 = +HEAPF64[$1673>>3]; + $wlr = $1674; + $1675 = $2; + $1676 = (($1675) + 272|0); + $1677 = $ind; + $1678 = (($1676) + ($1677<<4)|0); + $1679 = (($1678) + 8|0); + $1680 = +HEAPF64[$1679>>3]; + $wli = $1680; + $1681 = $k; + $1682 = $m; + $1683 = (($1681) + ($1682))|0; + $tkm1 = $1683; + $1684 = $k; + $1685 = $0; + $1686 = (($1685) + ($1684<<4)|0); + $1687 = +HEAPF64[$1686>>3]; + $tau1r53 = $1687; + $1688 = $k; + $1689 = $0; + $1690 = (($1689) + ($1688<<4)|0); + $1691 = (($1690) + 8|0); + $1692 = +HEAPF64[$1691>>3]; + $tau1i54 = $1692; + $1693 = $tkm1; + $1694 = $0; + $1695 = (($1694) + ($1693<<4)|0); + $1696 = +HEAPF64[$1695>>3]; + $1697 = $wlr; + $1698 = $1696 * $1697; + $1699 = $tkm1; + $1700 = $0; + $1701 = (($1700) + ($1699<<4)|0); + $1702 = (($1701) + 8|0); + $1703 = +HEAPF64[$1702>>3]; + $1704 = $wli; + $1705 = $1703 * $1704; + $1706 = $1698 - $1705; + $tau2r55 = $1706; + $1707 = $tkm1; + $1708 = $0; + $1709 = (($1708) + ($1707<<4)|0); + $1710 = (($1709) + 8|0); + $1711 = +HEAPF64[$1710>>3]; + $1712 = $wlr; + $1713 = $1711 * $1712; + $1714 = $tkm1; + $1715 = $0; + $1716 = (($1715) + ($1714<<4)|0); + $1717 = +HEAPF64[$1716>>3]; + $1718 = $wli; + $1719 = $1717 * $1718; + $1720 = $1713 + $1719; + $tau2i56 = $1720; + $1721 = $tau1r53; + $1722 = $tau2r55; + $1723 = $1721 + $1722; + $1724 = $k; + $1725 = $0; + $1726 = (($1725) + ($1724<<4)|0); + HEAPF64[$1726>>3] = $1723; + $1727 = $tau1i54; + $1728 = $tau2i56; + $1729 = $1727 + $1728; + $1730 = $k; + $1731 = $0; + $1732 = (($1731) + ($1730<<4)|0); + $1733 = (($1732) + 8|0); + HEAPF64[$1733>>3] = $1729; + $1734 = $tau1r53; + $1735 = $tau2r55; + $1736 = $1734 - $1735; + $1737 = $tkm1; + $1738 = $0; + $1739 = (($1738) + ($1737<<4)|0); + HEAPF64[$1739>>3] = $1736; + $1740 = $tau1i54; + $1741 = $tau2i56; + $1742 = $1740 - $1741; + $1743 = $tkm1; + $1744 = $0; + $1745 = (($1744) + ($1743<<4)|0); + $1746 = (($1745) + 8|0); + HEAPF64[$1746>>3] = $1742; + $1747 = $k; + $1748 = (($1747) + 1)|0; + $k = $1748; + } + } else { + $1749 = $radix; + $1750 = ($1749|0)==(3); + if ($1750) { + $1751 = $4; + $1752 = (($1751|0) / 3)&-1; + $m = $1752; + $1753 = $5; + $1754 = ($1753*3)|0; + $ll = $1754; + $1755 = $0; + $1756 = $1; + $1757 = $2; + $1758 = $3; + $1759 = $m; + $1760 = $ll; + $1761 = $6; + $1762 = (($1761) + 1)|0; + _mixed_radix_dit_rec($1755,$1756,$1757,$1758,$1759,$1760,$1762); + $1763 = $0; + $1764 = $m; + $1765 = (($1763) + ($1764<<4)|0); + $1766 = $1; + $1767 = $5; + $1768 = (($1766) + ($1767<<4)|0); + $1769 = $2; + $1770 = $3; + $1771 = $m; + $1772 = $ll; + $1773 = $6; + $1774 = (($1773) + 1)|0; + _mixed_radix_dit_rec($1765,$1768,$1769,$1770,$1771,$1772,$1774); + $1775 = $0; + $1776 = $m; + $1777 = $1776<<1; + $1778 = (($1775) + ($1777<<4)|0); + $1779 = $1; + $1780 = $5; + $1781 = $1780<<1; + $1782 = (($1779) + ($1781<<4)|0); + $1783 = $2; + $1784 = $3; + $1785 = $m; + $1786 = $ll; + $1787 = $6; + $1788 = (($1787) + 1)|0; + _mixed_radix_dit_rec($1778,$1782,$1783,$1784,$1785,$1786,$1788); + $k57 = 0; + while(1) { + $1789 = $k57; + $1790 = $m; + $1791 = ($1789|0)<($1790|0); + if (!($1791)) { + break; + } + $1792 = $m; + $1793 = (($1792) - 1)|0; + $1794 = $k57; + $1795 = $1794<<1; + $1796 = (($1793) + ($1795))|0; + $ind59 = $1796; + $1797 = $2; + $1798 = (($1797) + 272|0); + $1799 = $ind59; + $1800 = (($1798) + ($1799<<4)|0); + $1801 = +HEAPF64[$1800>>3]; + $wlr60 = $1801; + $1802 = $2; + $1803 = (($1802) + 272|0); + $1804 = $ind59; + $1805 = (($1803) + ($1804<<4)|0); + $1806 = (($1805) + 8|0); + $1807 = +HEAPF64[$1806>>3]; + $wli61 = $1807; + $1808 = $ind59; + $1809 = (($1808) + 1)|0; + $ind59 = $1809; + $1810 = $2; + $1811 = (($1810) + 272|0); + $1812 = $ind59; + $1813 = (($1811) + ($1812<<4)|0); + $1814 = +HEAPF64[$1813>>3]; + $wl2r = $1814; + $1815 = $2; + $1816 = (($1815) + 272|0); + $1817 = $ind59; + $1818 = (($1816) + ($1817<<4)|0); + $1819 = (($1818) + 8|0); + $1820 = +HEAPF64[$1819>>3]; + $wl2i = $1820; + $1821 = $k57; + $1822 = $m; + $1823 = (($1821) + ($1822))|0; + $tkm158 = $1823; + $1824 = $tkm158; + $1825 = $m; + $1826 = (($1824) + ($1825))|0; + $tkm2 = $1826; + $1827 = $k57; + $1828 = $0; + $1829 = (($1828) + ($1827<<4)|0); + $1830 = +HEAPF64[$1829>>3]; + $ar = $1830; + $1831 = $k57; + $1832 = $0; + $1833 = (($1832) + ($1831<<4)|0); + $1834 = (($1833) + 8|0); + $1835 = +HEAPF64[$1834>>3]; + $ai = $1835; + $1836 = $tkm158; + $1837 = $0; + $1838 = (($1837) + ($1836<<4)|0); + $1839 = +HEAPF64[$1838>>3]; + $1840 = $wlr60; + $1841 = $1839 * $1840; + $1842 = $tkm158; + $1843 = $0; + $1844 = (($1843) + ($1842<<4)|0); + $1845 = (($1844) + 8|0); + $1846 = +HEAPF64[$1845>>3]; + $1847 = $wli61; + $1848 = $1846 * $1847; + $1849 = $1841 - $1848; + $br = $1849; + $1850 = $tkm158; + $1851 = $0; + $1852 = (($1851) + ($1850<<4)|0); + $1853 = (($1852) + 8|0); + $1854 = +HEAPF64[$1853>>3]; + $1855 = $wlr60; + $1856 = $1854 * $1855; + $1857 = $tkm158; + $1858 = $0; + $1859 = (($1858) + ($1857<<4)|0); + $1860 = +HEAPF64[$1859>>3]; + $1861 = $wli61; + $1862 = $1860 * $1861; + $1863 = $1856 + $1862; + $bi = $1863; + $1864 = $tkm2; + $1865 = $0; + $1866 = (($1865) + ($1864<<4)|0); + $1867 = +HEAPF64[$1866>>3]; + $1868 = $wl2r; + $1869 = $1867 * $1868; + $1870 = $tkm2; + $1871 = $0; + $1872 = (($1871) + ($1870<<4)|0); + $1873 = (($1872) + 8|0); + $1874 = +HEAPF64[$1873>>3]; + $1875 = $wl2i; + $1876 = $1874 * $1875; + $1877 = $1869 - $1876; + $cr = $1877; + $1878 = $tkm2; + $1879 = $0; + $1880 = (($1879) + ($1878<<4)|0); + $1881 = (($1880) + 8|0); + $1882 = +HEAPF64[$1881>>3]; + $1883 = $wl2r; + $1884 = $1882 * $1883; + $1885 = $tkm2; + $1886 = $0; + $1887 = (($1886) + ($1885<<4)|0); + $1888 = +HEAPF64[$1887>>3]; + $1889 = $wl2i; + $1890 = $1888 * $1889; + $1891 = $1884 + $1890; + $ci = $1891; + $1892 = $br; + $1893 = $cr; + $1894 = $1892 + $1893; + $tau0r62 = $1894; + $1895 = $bi; + $1896 = $ci; + $1897 = $1895 + $1896; + $tau0i63 = $1897; + $1898 = $3; + $1899 = (+($1898|0)); + $1900 = $1899 * 0.866025403780000035958; + $1901 = $br; + $1902 = $cr; + $1903 = $1901 - $1902; + $1904 = $1900 * $1903; + $tau1r64 = $1904; + $1905 = $3; + $1906 = (+($1905|0)); + $1907 = $1906 * 0.866025403780000035958; + $1908 = $bi; + $1909 = $ci; + $1910 = $1908 - $1909; + $1911 = $1907 * $1910; + $tau1i65 = $1911; + $1912 = $ar; + $1913 = $tau0r62; + $1914 = $1913 * 0.5; + $1915 = $1912 - $1914; + $tau2r66 = $1915; + $1916 = $ai; + $1917 = $tau0i63; + $1918 = $1917 * 0.5; + $1919 = $1916 - $1918; + $tau2i67 = $1919; + $1920 = $ar; + $1921 = $tau0r62; + $1922 = $1920 + $1921; + $1923 = $k57; + $1924 = $0; + $1925 = (($1924) + ($1923<<4)|0); + HEAPF64[$1925>>3] = $1922; + $1926 = $ai; + $1927 = $tau0i63; + $1928 = $1926 + $1927; + $1929 = $k57; + $1930 = $0; + $1931 = (($1930) + ($1929<<4)|0); + $1932 = (($1931) + 8|0); + HEAPF64[$1932>>3] = $1928; + $1933 = $tau2r66; + $1934 = $tau1i65; + $1935 = $1933 + $1934; + $1936 = $tkm158; + $1937 = $0; + $1938 = (($1937) + ($1936<<4)|0); + HEAPF64[$1938>>3] = $1935; + $1939 = $tau2i67; + $1940 = $tau1r64; + $1941 = $1939 - $1940; + $1942 = $tkm158; + $1943 = $0; + $1944 = (($1943) + ($1942<<4)|0); + $1945 = (($1944) + 8|0); + HEAPF64[$1945>>3] = $1941; + $1946 = $tau2r66; + $1947 = $tau1i65; + $1948 = $1946 - $1947; + $1949 = $tkm2; + $1950 = $0; + $1951 = (($1950) + ($1949<<4)|0); + HEAPF64[$1951>>3] = $1948; + $1952 = $tau2i67; + $1953 = $tau1r64; + $1954 = $1952 + $1953; + $1955 = $tkm2; + $1956 = $0; + $1957 = (($1956) + ($1955<<4)|0); + $1958 = (($1957) + 8|0); + HEAPF64[$1958>>3] = $1954; + $1959 = $k57; + $1960 = (($1959) + 1)|0; + $k57 = $1960; + } + } else { + $1961 = $radix; + $1962 = ($1961|0)==(4); + if ($1962) { + $1963 = $4; + $1964 = (($1963|0) / 4)&-1; + $m = $1964; + $1965 = $5; + $1966 = $1965<<2; + $ll = $1966; + $1967 = $0; + $1968 = $1; + $1969 = $2; + $1970 = $3; + $1971 = $m; + $1972 = $ll; + $1973 = $6; + $1974 = (($1973) + 1)|0; + _mixed_radix_dit_rec($1967,$1968,$1969,$1970,$1971,$1972,$1974); + $1975 = $0; + $1976 = $m; + $1977 = (($1975) + ($1976<<4)|0); + $1978 = $1; + $1979 = $5; + $1980 = (($1978) + ($1979<<4)|0); + $1981 = $2; + $1982 = $3; + $1983 = $m; + $1984 = $ll; + $1985 = $6; + $1986 = (($1985) + 1)|0; + _mixed_radix_dit_rec($1977,$1980,$1981,$1982,$1983,$1984,$1986); + $1987 = $0; + $1988 = $m; + $1989 = $1988<<1; + $1990 = (($1987) + ($1989<<4)|0); + $1991 = $1; + $1992 = $5; + $1993 = $1992<<1; + $1994 = (($1991) + ($1993<<4)|0); + $1995 = $2; + $1996 = $3; + $1997 = $m; + $1998 = $ll; + $1999 = $6; + $2000 = (($1999) + 1)|0; + _mixed_radix_dit_rec($1990,$1994,$1995,$1996,$1997,$1998,$2000); + $2001 = $0; + $2002 = $m; + $2003 = ($2002*3)|0; + $2004 = (($2001) + ($2003<<4)|0); + $2005 = $1; + $2006 = $5; + $2007 = ($2006*3)|0; + $2008 = (($2005) + ($2007<<4)|0); + $2009 = $2; + $2010 = $3; + $2011 = $m; + $2012 = $ll; + $2013 = $6; + $2014 = (($2013) + 1)|0; + _mixed_radix_dit_rec($2004,$2008,$2009,$2010,$2011,$2012,$2014); + $2015 = $m; + $tkm169 = $2015; + $2016 = $tkm169; + $2017 = $m; + $2018 = (($2016) + ($2017))|0; + $tkm270 = $2018; + $2019 = $tkm270; + $2020 = $m; + $2021 = (($2019) + ($2020))|0; + $tkm3 = $2021; + $2022 = $0; + $2023 = +HEAPF64[$2022>>3]; + $ar84 = $2023; + $2024 = $0; + $2025 = (($2024) + 8|0); + $2026 = +HEAPF64[$2025>>3]; + $ai85 = $2026; + $2027 = $tkm169; + $2028 = $0; + $2029 = (($2028) + ($2027<<4)|0); + $2030 = +HEAPF64[$2029>>3]; + $br86 = $2030; + $2031 = $tkm169; + $2032 = $0; + $2033 = (($2032) + ($2031<<4)|0); + $2034 = (($2033) + 8|0); + $2035 = +HEAPF64[$2034>>3]; + $bi87 = $2035; + $2036 = $tkm270; + $2037 = $0; + $2038 = (($2037) + ($2036<<4)|0); + $2039 = +HEAPF64[$2038>>3]; + $cr88 = $2039; + $2040 = $tkm270; + $2041 = $0; + $2042 = (($2041) + ($2040<<4)|0); + $2043 = (($2042) + 8|0); + $2044 = +HEAPF64[$2043>>3]; + $ci89 = $2044; + $2045 = $tkm3; + $2046 = $0; + $2047 = (($2046) + ($2045<<4)|0); + $2048 = +HEAPF64[$2047>>3]; + $dr = $2048; + $2049 = $tkm3; + $2050 = $0; + $2051 = (($2050) + ($2049<<4)|0); + $2052 = (($2051) + 8|0); + $2053 = +HEAPF64[$2052>>3]; + $di = $2053; + $2054 = $ar84; + $2055 = $cr88; + $2056 = $2054 + $2055; + $tau0r76 = $2056; + $2057 = $ai85; + $2058 = $ci89; + $2059 = $2057 + $2058; + $tau0i77 = $2059; + $2060 = $ar84; + $2061 = $cr88; + $2062 = $2060 - $2061; + $tau1r78 = $2062; + $2063 = $ai85; + $2064 = $ci89; + $2065 = $2063 - $2064; + $tau1i79 = $2065; + $2066 = $br86; + $2067 = $dr; + $2068 = $2066 + $2067; + $tau2r80 = $2068; + $2069 = $bi87; + $2070 = $di; + $2071 = $2069 + $2070; + $tau2i81 = $2071; + $2072 = $3; + $2073 = (+($2072|0)); + $2074 = $br86; + $2075 = $dr; + $2076 = $2074 - $2075; + $2077 = $2073 * $2076; + $tau3r82 = $2077; + $2078 = $3; + $2079 = (+($2078|0)); + $2080 = $bi87; + $2081 = $di; + $2082 = $2080 - $2081; + $2083 = $2079 * $2082; + $tau3i83 = $2083; + $2084 = $tau0r76; + $2085 = $tau2r80; + $2086 = $2084 + $2085; + $2087 = $0; + HEAPF64[$2087>>3] = $2086; + $2088 = $tau0i77; + $2089 = $tau2i81; + $2090 = $2088 + $2089; + $2091 = $0; + $2092 = (($2091) + 8|0); + HEAPF64[$2092>>3] = $2090; + $2093 = $tau1r78; + $2094 = $tau3i83; + $2095 = $2093 + $2094; + $2096 = $tkm169; + $2097 = $0; + $2098 = (($2097) + ($2096<<4)|0); + HEAPF64[$2098>>3] = $2095; + $2099 = $tau1i79; + $2100 = $tau3r82; + $2101 = $2099 - $2100; + $2102 = $tkm169; + $2103 = $0; + $2104 = (($2103) + ($2102<<4)|0); + $2105 = (($2104) + 8|0); + HEAPF64[$2105>>3] = $2101; + $2106 = $tau0r76; + $2107 = $tau2r80; + $2108 = $2106 - $2107; + $2109 = $tkm270; + $2110 = $0; + $2111 = (($2110) + ($2109<<4)|0); + HEAPF64[$2111>>3] = $2108; + $2112 = $tau0i77; + $2113 = $tau2i81; + $2114 = $2112 - $2113; + $2115 = $tkm270; + $2116 = $0; + $2117 = (($2116) + ($2115<<4)|0); + $2118 = (($2117) + 8|0); + HEAPF64[$2118>>3] = $2114; + $2119 = $tau1r78; + $2120 = $tau3i83; + $2121 = $2119 - $2120; + $2122 = $tkm3; + $2123 = $0; + $2124 = (($2123) + ($2122<<4)|0); + HEAPF64[$2124>>3] = $2121; + $2125 = $tau1i79; + $2126 = $tau3r82; + $2127 = $2125 + $2126; + $2128 = $tkm3; + $2129 = $0; + $2130 = (($2129) + ($2128<<4)|0); + $2131 = (($2130) + 8|0); + HEAPF64[$2131>>3] = $2127; + $k68 = 1; + while(1) { + $2132 = $k68; + $2133 = $m; + $2134 = ($2132|0)<($2133|0); + if (!($2134)) { + break; + } + $2135 = $m; + $2136 = (($2135) - 1)|0; + $2137 = $k68; + $2138 = ($2137*3)|0; + $2139 = (($2136) + ($2138))|0; + $ind71 = $2139; + $2140 = $2; + $2141 = (($2140) + 272|0); + $2142 = $ind71; + $2143 = (($2141) + ($2142<<4)|0); + $2144 = +HEAPF64[$2143>>3]; + $wlr72 = $2144; + $2145 = $2; + $2146 = (($2145) + 272|0); + $2147 = $ind71; + $2148 = (($2146) + ($2147<<4)|0); + $2149 = (($2148) + 8|0); + $2150 = +HEAPF64[$2149>>3]; + $wli73 = $2150; + $2151 = $ind71; + $2152 = (($2151) + 1)|0; + $ind71 = $2152; + $2153 = $2; + $2154 = (($2153) + 272|0); + $2155 = $ind71; + $2156 = (($2154) + ($2155<<4)|0); + $2157 = +HEAPF64[$2156>>3]; + $wl2r74 = $2157; + $2158 = $2; + $2159 = (($2158) + 272|0); + $2160 = $ind71; + $2161 = (($2159) + ($2160<<4)|0); + $2162 = (($2161) + 8|0); + $2163 = +HEAPF64[$2162>>3]; + $wl2i75 = $2163; + $2164 = $ind71; + $2165 = (($2164) + 1)|0; + $ind71 = $2165; + $2166 = $2; + $2167 = (($2166) + 272|0); + $2168 = $ind71; + $2169 = (($2167) + ($2168<<4)|0); + $2170 = +HEAPF64[$2169>>3]; + $wl3r = $2170; + $2171 = $2; + $2172 = (($2171) + 272|0); + $2173 = $ind71; + $2174 = (($2172) + ($2173<<4)|0); + $2175 = (($2174) + 8|0); + $2176 = +HEAPF64[$2175>>3]; + $wl3i = $2176; + $2177 = $k68; + $2178 = $m; + $2179 = (($2177) + ($2178))|0; + $tkm169 = $2179; + $2180 = $tkm169; + $2181 = $m; + $2182 = (($2180) + ($2181))|0; + $tkm270 = $2182; + $2183 = $tkm270; + $2184 = $m; + $2185 = (($2183) + ($2184))|0; + $tkm3 = $2185; + $2186 = $k68; + $2187 = $0; + $2188 = (($2187) + ($2186<<4)|0); + $2189 = +HEAPF64[$2188>>3]; + $ar84 = $2189; + $2190 = $k68; + $2191 = $0; + $2192 = (($2191) + ($2190<<4)|0); + $2193 = (($2192) + 8|0); + $2194 = +HEAPF64[$2193>>3]; + $ai85 = $2194; + $2195 = $tkm169; + $2196 = $0; + $2197 = (($2196) + ($2195<<4)|0); + $2198 = +HEAPF64[$2197>>3]; + $2199 = $wlr72; + $2200 = $2198 * $2199; + $2201 = $tkm169; + $2202 = $0; + $2203 = (($2202) + ($2201<<4)|0); + $2204 = (($2203) + 8|0); + $2205 = +HEAPF64[$2204>>3]; + $2206 = $wli73; + $2207 = $2205 * $2206; + $2208 = $2200 - $2207; + $br86 = $2208; + $2209 = $tkm169; + $2210 = $0; + $2211 = (($2210) + ($2209<<4)|0); + $2212 = (($2211) + 8|0); + $2213 = +HEAPF64[$2212>>3]; + $2214 = $wlr72; + $2215 = $2213 * $2214; + $2216 = $tkm169; + $2217 = $0; + $2218 = (($2217) + ($2216<<4)|0); + $2219 = +HEAPF64[$2218>>3]; + $2220 = $wli73; + $2221 = $2219 * $2220; + $2222 = $2215 + $2221; + $bi87 = $2222; + $2223 = $tkm270; + $2224 = $0; + $2225 = (($2224) + ($2223<<4)|0); + $2226 = +HEAPF64[$2225>>3]; + $2227 = $wl2r74; + $2228 = $2226 * $2227; + $2229 = $tkm270; + $2230 = $0; + $2231 = (($2230) + ($2229<<4)|0); + $2232 = (($2231) + 8|0); + $2233 = +HEAPF64[$2232>>3]; + $2234 = $wl2i75; + $2235 = $2233 * $2234; + $2236 = $2228 - $2235; + $cr88 = $2236; + $2237 = $tkm270; + $2238 = $0; + $2239 = (($2238) + ($2237<<4)|0); + $2240 = (($2239) + 8|0); + $2241 = +HEAPF64[$2240>>3]; + $2242 = $wl2r74; + $2243 = $2241 * $2242; + $2244 = $tkm270; + $2245 = $0; + $2246 = (($2245) + ($2244<<4)|0); + $2247 = +HEAPF64[$2246>>3]; + $2248 = $wl2i75; + $2249 = $2247 * $2248; + $2250 = $2243 + $2249; + $ci89 = $2250; + $2251 = $tkm3; + $2252 = $0; + $2253 = (($2252) + ($2251<<4)|0); + $2254 = +HEAPF64[$2253>>3]; + $2255 = $wl3r; + $2256 = $2254 * $2255; + $2257 = $tkm3; + $2258 = $0; + $2259 = (($2258) + ($2257<<4)|0); + $2260 = (($2259) + 8|0); + $2261 = +HEAPF64[$2260>>3]; + $2262 = $wl3i; + $2263 = $2261 * $2262; + $2264 = $2256 - $2263; + $dr = $2264; + $2265 = $tkm3; + $2266 = $0; + $2267 = (($2266) + ($2265<<4)|0); + $2268 = (($2267) + 8|0); + $2269 = +HEAPF64[$2268>>3]; + $2270 = $wl3r; + $2271 = $2269 * $2270; + $2272 = $tkm3; + $2273 = $0; + $2274 = (($2273) + ($2272<<4)|0); + $2275 = +HEAPF64[$2274>>3]; + $2276 = $wl3i; + $2277 = $2275 * $2276; + $2278 = $2271 + $2277; + $di = $2278; + $2279 = $ar84; + $2280 = $cr88; + $2281 = $2279 + $2280; + $tau0r76 = $2281; + $2282 = $ai85; + $2283 = $ci89; + $2284 = $2282 + $2283; + $tau0i77 = $2284; + $2285 = $ar84; + $2286 = $cr88; + $2287 = $2285 - $2286; + $tau1r78 = $2287; + $2288 = $ai85; + $2289 = $ci89; + $2290 = $2288 - $2289; + $tau1i79 = $2290; + $2291 = $br86; + $2292 = $dr; + $2293 = $2291 + $2292; + $tau2r80 = $2293; + $2294 = $bi87; + $2295 = $di; + $2296 = $2294 + $2295; + $tau2i81 = $2296; + $2297 = $3; + $2298 = (+($2297|0)); + $2299 = $br86; + $2300 = $dr; + $2301 = $2299 - $2300; + $2302 = $2298 * $2301; + $tau3r82 = $2302; + $2303 = $3; + $2304 = (+($2303|0)); + $2305 = $bi87; + $2306 = $di; + $2307 = $2305 - $2306; + $2308 = $2304 * $2307; + $tau3i83 = $2308; + $2309 = $tau0r76; + $2310 = $tau2r80; + $2311 = $2309 + $2310; + $2312 = $k68; + $2313 = $0; + $2314 = (($2313) + ($2312<<4)|0); + HEAPF64[$2314>>3] = $2311; + $2315 = $tau0i77; + $2316 = $tau2i81; + $2317 = $2315 + $2316; + $2318 = $k68; + $2319 = $0; + $2320 = (($2319) + ($2318<<4)|0); + $2321 = (($2320) + 8|0); + HEAPF64[$2321>>3] = $2317; + $2322 = $tau1r78; + $2323 = $tau3i83; + $2324 = $2322 + $2323; + $2325 = $tkm169; + $2326 = $0; + $2327 = (($2326) + ($2325<<4)|0); + HEAPF64[$2327>>3] = $2324; + $2328 = $tau1i79; + $2329 = $tau3r82; + $2330 = $2328 - $2329; + $2331 = $tkm169; + $2332 = $0; + $2333 = (($2332) + ($2331<<4)|0); + $2334 = (($2333) + 8|0); + HEAPF64[$2334>>3] = $2330; + $2335 = $tau0r76; + $2336 = $tau2r80; + $2337 = $2335 - $2336; + $2338 = $tkm270; + $2339 = $0; + $2340 = (($2339) + ($2338<<4)|0); + HEAPF64[$2340>>3] = $2337; + $2341 = $tau0i77; + $2342 = $tau2i81; + $2343 = $2341 - $2342; + $2344 = $tkm270; + $2345 = $0; + $2346 = (($2345) + ($2344<<4)|0); + $2347 = (($2346) + 8|0); + HEAPF64[$2347>>3] = $2343; + $2348 = $tau1r78; + $2349 = $tau3i83; + $2350 = $2348 - $2349; + $2351 = $tkm3; + $2352 = $0; + $2353 = (($2352) + ($2351<<4)|0); + HEAPF64[$2353>>3] = $2350; + $2354 = $tau1i79; + $2355 = $tau3r82; + $2356 = $2354 + $2355; + $2357 = $tkm3; + $2358 = $0; + $2359 = (($2358) + ($2357<<4)|0); + $2360 = (($2359) + 8|0); + HEAPF64[$2360>>3] = $2356; + $2361 = $k68; + $2362 = (($2361) + 1)|0; + $k68 = $2362; + } + } else { + $2363 = $radix; + $2364 = ($2363|0)==(5); + if ($2364) { + $2365 = $4; + $2366 = (($2365|0) / 5)&-1; + $m = $2366; + $2367 = $5; + $2368 = ($2367*5)|0; + $ll = $2368; + $2369 = $0; + $2370 = $1; + $2371 = $2; + $2372 = $3; + $2373 = $m; + $2374 = $ll; + $2375 = $6; + $2376 = (($2375) + 1)|0; + _mixed_radix_dit_rec($2369,$2370,$2371,$2372,$2373,$2374,$2376); + $2377 = $0; + $2378 = $m; + $2379 = (($2377) + ($2378<<4)|0); + $2380 = $1; + $2381 = $5; + $2382 = (($2380) + ($2381<<4)|0); + $2383 = $2; + $2384 = $3; + $2385 = $m; + $2386 = $ll; + $2387 = $6; + $2388 = (($2387) + 1)|0; + _mixed_radix_dit_rec($2379,$2382,$2383,$2384,$2385,$2386,$2388); + $2389 = $0; + $2390 = $m; + $2391 = $2390<<1; + $2392 = (($2389) + ($2391<<4)|0); + $2393 = $1; + $2394 = $5; + $2395 = $2394<<1; + $2396 = (($2393) + ($2395<<4)|0); + $2397 = $2; + $2398 = $3; + $2399 = $m; + $2400 = $ll; + $2401 = $6; + $2402 = (($2401) + 1)|0; + _mixed_radix_dit_rec($2392,$2396,$2397,$2398,$2399,$2400,$2402); + $2403 = $0; + $2404 = $m; + $2405 = ($2404*3)|0; + $2406 = (($2403) + ($2405<<4)|0); + $2407 = $1; + $2408 = $5; + $2409 = ($2408*3)|0; + $2410 = (($2407) + ($2409<<4)|0); + $2411 = $2; + $2412 = $3; + $2413 = $m; + $2414 = $ll; + $2415 = $6; + $2416 = (($2415) + 1)|0; + _mixed_radix_dit_rec($2406,$2410,$2411,$2412,$2413,$2414,$2416); + $2417 = $0; + $2418 = $m; + $2419 = $2418<<2; + $2420 = (($2417) + ($2419<<4)|0); + $2421 = $1; + $2422 = $5; + $2423 = $2422<<2; + $2424 = (($2421) + ($2423<<4)|0); + $2425 = $2; + $2426 = $3; + $2427 = $m; + $2428 = $ll; + $2429 = $6; + $2430 = (($2429) + 1)|0; + _mixed_radix_dit_rec($2420,$2424,$2425,$2426,$2427,$2428,$2430); + $c1123 = 0.309016994370000019909; + $c2124 = -0.809016994369999964398; + $s1125 = 0.951056516289999986923; + $s2126 = 0.587785252290000004294; + $2431 = $m; + $tkm191 = $2431; + $2432 = $tkm191; + $2433 = $m; + $2434 = (($2432) + ($2433))|0; + $tkm292 = $2434; + $2435 = $tkm292; + $2436 = $m; + $2437 = (($2435) + ($2436))|0; + $tkm393 = $2437; + $2438 = $tkm393; + $2439 = $m; + $2440 = (($2438) + ($2439))|0; + $tkm4 = $2440; + $2441 = $0; + $2442 = +HEAPF64[$2441>>3]; + $ar109 = $2442; + $2443 = $0; + $2444 = (($2443) + 8|0); + $2445 = +HEAPF64[$2444>>3]; + $ai110 = $2445; + $2446 = $tkm191; + $2447 = $0; + $2448 = (($2447) + ($2446<<4)|0); + $2449 = +HEAPF64[$2448>>3]; + $br111 = $2449; + $2450 = $tkm191; + $2451 = $0; + $2452 = (($2451) + ($2450<<4)|0); + $2453 = (($2452) + 8|0); + $2454 = +HEAPF64[$2453>>3]; + $bi112 = $2454; + $2455 = $tkm292; + $2456 = $0; + $2457 = (($2456) + ($2455<<4)|0); + $2458 = +HEAPF64[$2457>>3]; + $cr113 = $2458; + $2459 = $tkm292; + $2460 = $0; + $2461 = (($2460) + ($2459<<4)|0); + $2462 = (($2461) + 8|0); + $2463 = +HEAPF64[$2462>>3]; + $ci114 = $2463; + $2464 = $tkm393; + $2465 = $0; + $2466 = (($2465) + ($2464<<4)|0); + $2467 = +HEAPF64[$2466>>3]; + $dr115 = $2467; + $2468 = $tkm393; + $2469 = $0; + $2470 = (($2469) + ($2468<<4)|0); + $2471 = (($2470) + 8|0); + $2472 = +HEAPF64[$2471>>3]; + $di116 = $2472; + $2473 = $tkm4; + $2474 = $0; + $2475 = (($2474) + ($2473<<4)|0); + $2476 = +HEAPF64[$2475>>3]; + $er = $2476; + $2477 = $tkm4; + $2478 = $0; + $2479 = (($2478) + ($2477<<4)|0); + $2480 = (($2479) + 8|0); + $2481 = +HEAPF64[$2480>>3]; + $ei = $2481; + $2482 = $br111; + $2483 = $er; + $2484 = $2482 + $2483; + $tau0r101 = $2484; + $2485 = $bi112; + $2486 = $ei; + $2487 = $2485 + $2486; + $tau0i102 = $2487; + $2488 = $cr113; + $2489 = $dr115; + $2490 = $2488 + $2489; + $tau1r103 = $2490; + $2491 = $ci114; + $2492 = $di116; + $2493 = $2491 + $2492; + $tau1i104 = $2493; + $2494 = $br111; + $2495 = $er; + $2496 = $2494 - $2495; + $tau2r105 = $2496; + $2497 = $bi112; + $2498 = $ei; + $2499 = $2497 - $2498; + $tau2i106 = $2499; + $2500 = $cr113; + $2501 = $dr115; + $2502 = $2500 - $2501; + $tau3r107 = $2502; + $2503 = $ci114; + $2504 = $di116; + $2505 = $2503 - $2504; + $tau3i108 = $2505; + $2506 = $ar109; + $2507 = $tau0r101; + $2508 = $2506 + $2507; + $2509 = $tau1r103; + $2510 = $2508 + $2509; + $2511 = $0; + HEAPF64[$2511>>3] = $2510; + $2512 = $ai110; + $2513 = $tau0i102; + $2514 = $2512 + $2513; + $2515 = $tau1i104; + $2516 = $2514 + $2515; + $2517 = $0; + $2518 = (($2517) + 8|0); + HEAPF64[$2518>>3] = $2516; + $2519 = $c1123; + $2520 = $tau0r101; + $2521 = $2519 * $2520; + $2522 = $c2124; + $2523 = $tau1r103; + $2524 = $2522 * $2523; + $2525 = $2521 + $2524; + $tau4r117 = $2525; + $2526 = $c1123; + $2527 = $tau0i102; + $2528 = $2526 * $2527; + $2529 = $c2124; + $2530 = $tau1i104; + $2531 = $2529 * $2530; + $2532 = $2528 + $2531; + $tau4i118 = $2532; + $2533 = $3; + $2534 = (+($2533|0)); + $2535 = $s1125; + $2536 = $tau2r105; + $2537 = $2535 * $2536; + $2538 = $s2126; + $2539 = $tau3r107; + $2540 = $2538 * $2539; + $2541 = $2537 + $2540; + $2542 = $2534 * $2541; + $tau5r119 = $2542; + $2543 = $3; + $2544 = (+($2543|0)); + $2545 = $s1125; + $2546 = $tau2i106; + $2547 = $2545 * $2546; + $2548 = $s2126; + $2549 = $tau3i108; + $2550 = $2548 * $2549; + $2551 = $2547 + $2550; + $2552 = $2544 * $2551; + $tau5i120 = $2552; + $2553 = $ar109; + $2554 = $tau4r117; + $2555 = $2553 + $2554; + $tau6r121 = $2555; + $2556 = $ai110; + $2557 = $tau4i118; + $2558 = $2556 + $2557; + $tau6i122 = $2558; + $2559 = $tau6r121; + $2560 = $tau5i120; + $2561 = $2559 + $2560; + $2562 = $tkm191; + $2563 = $0; + $2564 = (($2563) + ($2562<<4)|0); + HEAPF64[$2564>>3] = $2561; + $2565 = $tau6i122; + $2566 = $tau5r119; + $2567 = $2565 - $2566; + $2568 = $tkm191; + $2569 = $0; + $2570 = (($2569) + ($2568<<4)|0); + $2571 = (($2570) + 8|0); + HEAPF64[$2571>>3] = $2567; + $2572 = $tau6r121; + $2573 = $tau5i120; + $2574 = $2572 - $2573; + $2575 = $tkm4; + $2576 = $0; + $2577 = (($2576) + ($2575<<4)|0); + HEAPF64[$2577>>3] = $2574; + $2578 = $tau6i122; + $2579 = $tau5r119; + $2580 = $2578 + $2579; + $2581 = $tkm4; + $2582 = $0; + $2583 = (($2582) + ($2581<<4)|0); + $2584 = (($2583) + 8|0); + HEAPF64[$2584>>3] = $2580; + $2585 = $c2124; + $2586 = $tau0r101; + $2587 = $2585 * $2586; + $2588 = $c1123; + $2589 = $tau1r103; + $2590 = $2588 * $2589; + $2591 = $2587 + $2590; + $tau4r117 = $2591; + $2592 = $c2124; + $2593 = $tau0i102; + $2594 = $2592 * $2593; + $2595 = $c1123; + $2596 = $tau1i104; + $2597 = $2595 * $2596; + $2598 = $2594 + $2597; + $tau4i118 = $2598; + $2599 = $3; + $2600 = (+($2599|0)); + $2601 = $s2126; + $2602 = $tau2r105; + $2603 = $2601 * $2602; + $2604 = $s1125; + $2605 = $tau3r107; + $2606 = $2604 * $2605; + $2607 = $2603 - $2606; + $2608 = $2600 * $2607; + $tau5r119 = $2608; + $2609 = $3; + $2610 = (+($2609|0)); + $2611 = $s2126; + $2612 = $tau2i106; + $2613 = $2611 * $2612; + $2614 = $s1125; + $2615 = $tau3i108; + $2616 = $2614 * $2615; + $2617 = $2613 - $2616; + $2618 = $2610 * $2617; + $tau5i120 = $2618; + $2619 = $ar109; + $2620 = $tau4r117; + $2621 = $2619 + $2620; + $tau6r121 = $2621; + $2622 = $ai110; + $2623 = $tau4i118; + $2624 = $2622 + $2623; + $tau6i122 = $2624; + $2625 = $tau6r121; + $2626 = $tau5i120; + $2627 = $2625 + $2626; + $2628 = $tkm292; + $2629 = $0; + $2630 = (($2629) + ($2628<<4)|0); + HEAPF64[$2630>>3] = $2627; + $2631 = $tau6i122; + $2632 = $tau5r119; + $2633 = $2631 - $2632; + $2634 = $tkm292; + $2635 = $0; + $2636 = (($2635) + ($2634<<4)|0); + $2637 = (($2636) + 8|0); + HEAPF64[$2637>>3] = $2633; + $2638 = $tau6r121; + $2639 = $tau5i120; + $2640 = $2638 - $2639; + $2641 = $tkm393; + $2642 = $0; + $2643 = (($2642) + ($2641<<4)|0); + HEAPF64[$2643>>3] = $2640; + $2644 = $tau6i122; + $2645 = $tau5r119; + $2646 = $2644 + $2645; + $2647 = $tkm393; + $2648 = $0; + $2649 = (($2648) + ($2647<<4)|0); + $2650 = (($2649) + 8|0); + HEAPF64[$2650>>3] = $2646; + $k90 = 1; + while(1) { + $2651 = $k90; + $2652 = $m; + $2653 = ($2651|0)<($2652|0); + if (!($2653)) { + break; + } + $2654 = $m; + $2655 = (($2654) - 1)|0; + $2656 = $k90; + $2657 = $2656<<2; + $2658 = (($2655) + ($2657))|0; + $ind94 = $2658; + $2659 = $2; + $2660 = (($2659) + 272|0); + $2661 = $ind94; + $2662 = (($2660) + ($2661<<4)|0); + $2663 = +HEAPF64[$2662>>3]; + $wlr95 = $2663; + $2664 = $2; + $2665 = (($2664) + 272|0); + $2666 = $ind94; + $2667 = (($2665) + ($2666<<4)|0); + $2668 = (($2667) + 8|0); + $2669 = +HEAPF64[$2668>>3]; + $wli96 = $2669; + $2670 = $ind94; + $2671 = (($2670) + 1)|0; + $ind94 = $2671; + $2672 = $2; + $2673 = (($2672) + 272|0); + $2674 = $ind94; + $2675 = (($2673) + ($2674<<4)|0); + $2676 = +HEAPF64[$2675>>3]; + $wl2r97 = $2676; + $2677 = $2; + $2678 = (($2677) + 272|0); + $2679 = $ind94; + $2680 = (($2678) + ($2679<<4)|0); + $2681 = (($2680) + 8|0); + $2682 = +HEAPF64[$2681>>3]; + $wl2i98 = $2682; + $2683 = $ind94; + $2684 = (($2683) + 1)|0; + $ind94 = $2684; + $2685 = $2; + $2686 = (($2685) + 272|0); + $2687 = $ind94; + $2688 = (($2686) + ($2687<<4)|0); + $2689 = +HEAPF64[$2688>>3]; + $wl3r99 = $2689; + $2690 = $2; + $2691 = (($2690) + 272|0); + $2692 = $ind94; + $2693 = (($2691) + ($2692<<4)|0); + $2694 = (($2693) + 8|0); + $2695 = +HEAPF64[$2694>>3]; + $wl3i100 = $2695; + $2696 = $ind94; + $2697 = (($2696) + 1)|0; + $ind94 = $2697; + $2698 = $2; + $2699 = (($2698) + 272|0); + $2700 = $ind94; + $2701 = (($2699) + ($2700<<4)|0); + $2702 = +HEAPF64[$2701>>3]; + $wl4r = $2702; + $2703 = $2; + $2704 = (($2703) + 272|0); + $2705 = $ind94; + $2706 = (($2704) + ($2705<<4)|0); + $2707 = (($2706) + 8|0); + $2708 = +HEAPF64[$2707>>3]; + $wl4i = $2708; + $2709 = $k90; + $2710 = $m; + $2711 = (($2709) + ($2710))|0; + $tkm191 = $2711; + $2712 = $tkm191; + $2713 = $m; + $2714 = (($2712) + ($2713))|0; + $tkm292 = $2714; + $2715 = $tkm292; + $2716 = $m; + $2717 = (($2715) + ($2716))|0; + $tkm393 = $2717; + $2718 = $tkm393; + $2719 = $m; + $2720 = (($2718) + ($2719))|0; + $tkm4 = $2720; + $2721 = $k90; + $2722 = $0; + $2723 = (($2722) + ($2721<<4)|0); + $2724 = +HEAPF64[$2723>>3]; + $ar109 = $2724; + $2725 = $k90; + $2726 = $0; + $2727 = (($2726) + ($2725<<4)|0); + $2728 = (($2727) + 8|0); + $2729 = +HEAPF64[$2728>>3]; + $ai110 = $2729; + $2730 = $tkm191; + $2731 = $0; + $2732 = (($2731) + ($2730<<4)|0); + $2733 = +HEAPF64[$2732>>3]; + $2734 = $wlr95; + $2735 = $2733 * $2734; + $2736 = $tkm191; + $2737 = $0; + $2738 = (($2737) + ($2736<<4)|0); + $2739 = (($2738) + 8|0); + $2740 = +HEAPF64[$2739>>3]; + $2741 = $wli96; + $2742 = $2740 * $2741; + $2743 = $2735 - $2742; + $br111 = $2743; + $2744 = $tkm191; + $2745 = $0; + $2746 = (($2745) + ($2744<<4)|0); + $2747 = (($2746) + 8|0); + $2748 = +HEAPF64[$2747>>3]; + $2749 = $wlr95; + $2750 = $2748 * $2749; + $2751 = $tkm191; + $2752 = $0; + $2753 = (($2752) + ($2751<<4)|0); + $2754 = +HEAPF64[$2753>>3]; + $2755 = $wli96; + $2756 = $2754 * $2755; + $2757 = $2750 + $2756; + $bi112 = $2757; + $2758 = $tkm292; + $2759 = $0; + $2760 = (($2759) + ($2758<<4)|0); + $2761 = +HEAPF64[$2760>>3]; + $2762 = $wl2r97; + $2763 = $2761 * $2762; + $2764 = $tkm292; + $2765 = $0; + $2766 = (($2765) + ($2764<<4)|0); + $2767 = (($2766) + 8|0); + $2768 = +HEAPF64[$2767>>3]; + $2769 = $wl2i98; + $2770 = $2768 * $2769; + $2771 = $2763 - $2770; + $cr113 = $2771; + $2772 = $tkm292; + $2773 = $0; + $2774 = (($2773) + ($2772<<4)|0); + $2775 = (($2774) + 8|0); + $2776 = +HEAPF64[$2775>>3]; + $2777 = $wl2r97; + $2778 = $2776 * $2777; + $2779 = $tkm292; + $2780 = $0; + $2781 = (($2780) + ($2779<<4)|0); + $2782 = +HEAPF64[$2781>>3]; + $2783 = $wl2i98; + $2784 = $2782 * $2783; + $2785 = $2778 + $2784; + $ci114 = $2785; + $2786 = $tkm393; + $2787 = $0; + $2788 = (($2787) + ($2786<<4)|0); + $2789 = +HEAPF64[$2788>>3]; + $2790 = $wl3r99; + $2791 = $2789 * $2790; + $2792 = $tkm393; + $2793 = $0; + $2794 = (($2793) + ($2792<<4)|0); + $2795 = (($2794) + 8|0); + $2796 = +HEAPF64[$2795>>3]; + $2797 = $wl3i100; + $2798 = $2796 * $2797; + $2799 = $2791 - $2798; + $dr115 = $2799; + $2800 = $tkm393; + $2801 = $0; + $2802 = (($2801) + ($2800<<4)|0); + $2803 = (($2802) + 8|0); + $2804 = +HEAPF64[$2803>>3]; + $2805 = $wl3r99; + $2806 = $2804 * $2805; + $2807 = $tkm393; + $2808 = $0; + $2809 = (($2808) + ($2807<<4)|0); + $2810 = +HEAPF64[$2809>>3]; + $2811 = $wl3i100; + $2812 = $2810 * $2811; + $2813 = $2806 + $2812; + $di116 = $2813; + $2814 = $tkm4; + $2815 = $0; + $2816 = (($2815) + ($2814<<4)|0); + $2817 = +HEAPF64[$2816>>3]; + $2818 = $wl4r; + $2819 = $2817 * $2818; + $2820 = $tkm4; + $2821 = $0; + $2822 = (($2821) + ($2820<<4)|0); + $2823 = (($2822) + 8|0); + $2824 = +HEAPF64[$2823>>3]; + $2825 = $wl4i; + $2826 = $2824 * $2825; + $2827 = $2819 - $2826; + $er = $2827; + $2828 = $tkm4; + $2829 = $0; + $2830 = (($2829) + ($2828<<4)|0); + $2831 = (($2830) + 8|0); + $2832 = +HEAPF64[$2831>>3]; + $2833 = $wl4r; + $2834 = $2832 * $2833; + $2835 = $tkm4; + $2836 = $0; + $2837 = (($2836) + ($2835<<4)|0); + $2838 = +HEAPF64[$2837>>3]; + $2839 = $wl4i; + $2840 = $2838 * $2839; + $2841 = $2834 + $2840; + $ei = $2841; + $2842 = $br111; + $2843 = $er; + $2844 = $2842 + $2843; + $tau0r101 = $2844; + $2845 = $bi112; + $2846 = $ei; + $2847 = $2845 + $2846; + $tau0i102 = $2847; + $2848 = $cr113; + $2849 = $dr115; + $2850 = $2848 + $2849; + $tau1r103 = $2850; + $2851 = $ci114; + $2852 = $di116; + $2853 = $2851 + $2852; + $tau1i104 = $2853; + $2854 = $br111; + $2855 = $er; + $2856 = $2854 - $2855; + $tau2r105 = $2856; + $2857 = $bi112; + $2858 = $ei; + $2859 = $2857 - $2858; + $tau2i106 = $2859; + $2860 = $cr113; + $2861 = $dr115; + $2862 = $2860 - $2861; + $tau3r107 = $2862; + $2863 = $ci114; + $2864 = $di116; + $2865 = $2863 - $2864; + $tau3i108 = $2865; + $2866 = $ar109; + $2867 = $tau0r101; + $2868 = $2866 + $2867; + $2869 = $tau1r103; + $2870 = $2868 + $2869; + $2871 = $k90; + $2872 = $0; + $2873 = (($2872) + ($2871<<4)|0); + HEAPF64[$2873>>3] = $2870; + $2874 = $ai110; + $2875 = $tau0i102; + $2876 = $2874 + $2875; + $2877 = $tau1i104; + $2878 = $2876 + $2877; + $2879 = $k90; + $2880 = $0; + $2881 = (($2880) + ($2879<<4)|0); + $2882 = (($2881) + 8|0); + HEAPF64[$2882>>3] = $2878; + $2883 = $c1123; + $2884 = $tau0r101; + $2885 = $2883 * $2884; + $2886 = $c2124; + $2887 = $tau1r103; + $2888 = $2886 * $2887; + $2889 = $2885 + $2888; + $tau4r117 = $2889; + $2890 = $c1123; + $2891 = $tau0i102; + $2892 = $2890 * $2891; + $2893 = $c2124; + $2894 = $tau1i104; + $2895 = $2893 * $2894; + $2896 = $2892 + $2895; + $tau4i118 = $2896; + $2897 = $3; + $2898 = ($2897|0)==(1); + if ($2898) { + $2899 = $s1125; + $2900 = $tau2r105; + $2901 = $2899 * $2900; + $2902 = $s2126; + $2903 = $tau3r107; + $2904 = $2902 * $2903; + $2905 = $2901 + $2904; + $tau5r119 = $2905; + $2906 = $s1125; + $2907 = $tau2i106; + $2908 = $2906 * $2907; + $2909 = $s2126; + $2910 = $tau3i108; + $2911 = $2909 * $2910; + $2912 = $2908 + $2911; + $tau5i120 = $2912; + } else { + $2913 = $s1125; + $2914 = -$2913; + $2915 = $tau2r105; + $2916 = $2914 * $2915; + $2917 = $s2126; + $2918 = $tau3r107; + $2919 = $2917 * $2918; + $2920 = $2916 - $2919; + $tau5r119 = $2920; + $2921 = $s1125; + $2922 = -$2921; + $2923 = $tau2i106; + $2924 = $2922 * $2923; + $2925 = $s2126; + $2926 = $tau3i108; + $2927 = $2925 * $2926; + $2928 = $2924 - $2927; + $tau5i120 = $2928; + } + $2929 = $ar109; + $2930 = $tau4r117; + $2931 = $2929 + $2930; + $tau6r121 = $2931; + $2932 = $ai110; + $2933 = $tau4i118; + $2934 = $2932 + $2933; + $tau6i122 = $2934; + $2935 = $tau6r121; + $2936 = $tau5i120; + $2937 = $2935 + $2936; + $2938 = $tkm191; + $2939 = $0; + $2940 = (($2939) + ($2938<<4)|0); + HEAPF64[$2940>>3] = $2937; + $2941 = $tau6i122; + $2942 = $tau5r119; + $2943 = $2941 - $2942; + $2944 = $tkm191; + $2945 = $0; + $2946 = (($2945) + ($2944<<4)|0); + $2947 = (($2946) + 8|0); + HEAPF64[$2947>>3] = $2943; + $2948 = $tau6r121; + $2949 = $tau5i120; + $2950 = $2948 - $2949; + $2951 = $tkm4; + $2952 = $0; + $2953 = (($2952) + ($2951<<4)|0); + HEAPF64[$2953>>3] = $2950; + $2954 = $tau6i122; + $2955 = $tau5r119; + $2956 = $2954 + $2955; + $2957 = $tkm4; + $2958 = $0; + $2959 = (($2958) + ($2957<<4)|0); + $2960 = (($2959) + 8|0); + HEAPF64[$2960>>3] = $2956; + $2961 = $c2124; + $2962 = $tau0r101; + $2963 = $2961 * $2962; + $2964 = $c1123; + $2965 = $tau1r103; + $2966 = $2964 * $2965; + $2967 = $2963 + $2966; + $tau4r117 = $2967; + $2968 = $c2124; + $2969 = $tau0i102; + $2970 = $2968 * $2969; + $2971 = $c1123; + $2972 = $tau1i104; + $2973 = $2971 * $2972; + $2974 = $2970 + $2973; + $tau4i118 = $2974; + $2975 = $3; + $2976 = ($2975|0)==(1); + if ($2976) { + $2977 = $s2126; + $2978 = $tau2r105; + $2979 = $2977 * $2978; + $2980 = $s1125; + $2981 = $tau3r107; + $2982 = $2980 * $2981; + $2983 = $2979 - $2982; + $tau5r119 = $2983; + $2984 = $s2126; + $2985 = $tau2i106; + $2986 = $2984 * $2985; + $2987 = $s1125; + $2988 = $tau3i108; + $2989 = $2987 * $2988; + $2990 = $2986 - $2989; + $tau5i120 = $2990; + } else { + $2991 = $s2126; + $2992 = -$2991; + $2993 = $tau2r105; + $2994 = $2992 * $2993; + $2995 = $s1125; + $2996 = $tau3r107; + $2997 = $2995 * $2996; + $2998 = $2994 + $2997; + $tau5r119 = $2998; + $2999 = $s2126; + $3000 = -$2999; + $3001 = $tau2i106; + $3002 = $3000 * $3001; + $3003 = $s1125; + $3004 = $tau3i108; + $3005 = $3003 * $3004; + $3006 = $3002 + $3005; + $tau5i120 = $3006; + } + $3007 = $ar109; + $3008 = $tau4r117; + $3009 = $3007 + $3008; + $tau6r121 = $3009; + $3010 = $ai110; + $3011 = $tau4i118; + $3012 = $3010 + $3011; + $tau6i122 = $3012; + $3013 = $tau6r121; + $3014 = $tau5i120; + $3015 = $3013 + $3014; + $3016 = $tkm292; + $3017 = $0; + $3018 = (($3017) + ($3016<<4)|0); + HEAPF64[$3018>>3] = $3015; + $3019 = $tau6i122; + $3020 = $tau5r119; + $3021 = $3019 - $3020; + $3022 = $tkm292; + $3023 = $0; + $3024 = (($3023) + ($3022<<4)|0); + $3025 = (($3024) + 8|0); + HEAPF64[$3025>>3] = $3021; + $3026 = $tau6r121; + $3027 = $tau5i120; + $3028 = $3026 - $3027; + $3029 = $tkm393; + $3030 = $0; + $3031 = (($3030) + ($3029<<4)|0); + HEAPF64[$3031>>3] = $3028; + $3032 = $tau6i122; + $3033 = $tau5r119; + $3034 = $3032 + $3033; + $3035 = $tkm393; + $3036 = $0; + $3037 = (($3036) + ($3035<<4)|0); + $3038 = (($3037) + 8|0); + HEAPF64[$3038>>3] = $3034; + $3039 = $k90; + $3040 = (($3039) + 1)|0; + $k90 = $3040; + } + } else { + $3041 = $radix; + $3042 = ($3041|0)==(7); + if ($3042) { + $3043 = $4; + $3044 = (($3043|0) / 7)&-1; + $m = $3044; + $3045 = $5; + $3046 = ($3045*7)|0; + $ll = $3046; + $3047 = $0; + $3048 = $1; + $3049 = $2; + $3050 = $3; + $3051 = $m; + $3052 = $ll; + $3053 = $6; + $3054 = (($3053) + 1)|0; + _mixed_radix_dit_rec($3047,$3048,$3049,$3050,$3051,$3052,$3054); + $3055 = $0; + $3056 = $m; + $3057 = (($3055) + ($3056<<4)|0); + $3058 = $1; + $3059 = $5; + $3060 = (($3058) + ($3059<<4)|0); + $3061 = $2; + $3062 = $3; + $3063 = $m; + $3064 = $ll; + $3065 = $6; + $3066 = (($3065) + 1)|0; + _mixed_radix_dit_rec($3057,$3060,$3061,$3062,$3063,$3064,$3066); + $3067 = $0; + $3068 = $m; + $3069 = $3068<<1; + $3070 = (($3067) + ($3069<<4)|0); + $3071 = $1; + $3072 = $5; + $3073 = $3072<<1; + $3074 = (($3071) + ($3073<<4)|0); + $3075 = $2; + $3076 = $3; + $3077 = $m; + $3078 = $ll; + $3079 = $6; + $3080 = (($3079) + 1)|0; + _mixed_radix_dit_rec($3070,$3074,$3075,$3076,$3077,$3078,$3080); + $3081 = $0; + $3082 = $m; + $3083 = ($3082*3)|0; + $3084 = (($3081) + ($3083<<4)|0); + $3085 = $1; + $3086 = $5; + $3087 = ($3086*3)|0; + $3088 = (($3085) + ($3087<<4)|0); + $3089 = $2; + $3090 = $3; + $3091 = $m; + $3092 = $ll; + $3093 = $6; + $3094 = (($3093) + 1)|0; + _mixed_radix_dit_rec($3084,$3088,$3089,$3090,$3091,$3092,$3094); + $3095 = $0; + $3096 = $m; + $3097 = $3096<<2; + $3098 = (($3095) + ($3097<<4)|0); + $3099 = $1; + $3100 = $5; + $3101 = $3100<<2; + $3102 = (($3099) + ($3101<<4)|0); + $3103 = $2; + $3104 = $3; + $3105 = $m; + $3106 = $ll; + $3107 = $6; + $3108 = (($3107) + 1)|0; + _mixed_radix_dit_rec($3098,$3102,$3103,$3104,$3105,$3106,$3108); + $3109 = $0; + $3110 = $m; + $3111 = ($3110*5)|0; + $3112 = (($3109) + ($3111<<4)|0); + $3113 = $1; + $3114 = $5; + $3115 = ($3114*5)|0; + $3116 = (($3113) + ($3115<<4)|0); + $3117 = $2; + $3118 = $3; + $3119 = $m; + $3120 = $ll; + $3121 = $6; + $3122 = (($3121) + 1)|0; + _mixed_radix_dit_rec($3112,$3116,$3117,$3118,$3119,$3120,$3122); + $3123 = $0; + $3124 = $m; + $3125 = ($3124*6)|0; + $3126 = (($3123) + ($3125<<4)|0); + $3127 = $1; + $3128 = $5; + $3129 = ($3128*6)|0; + $3130 = (($3127) + ($3129<<4)|0); + $3131 = $2; + $3132 = $3; + $3133 = $m; + $3134 = $ll; + $3135 = $6; + $3136 = (($3135) + 1)|0; + _mixed_radix_dit_rec($3126,$3130,$3131,$3132,$3133,$3134,$3136); + $c1167 = 0.623489801850000024963; + $c2168 = -0.222520933949999999424; + $c3169 = -0.900968867899999970028; + $s1170 = 0.781831482460000004586; + $s2171 = 0.974927912179999967001; + $s3172 = 0.433883739109999999606; + $3137 = $m; + $tkm1128 = $3137; + $3138 = $tkm1128; + $3139 = $m; + $3140 = (($3138) + ($3139))|0; + $tkm2129 = $3140; + $3141 = $tkm2129; + $3142 = $m; + $3143 = (($3141) + ($3142))|0; + $tkm3130 = $3143; + $3144 = $tkm3130; + $3145 = $m; + $3146 = (($3144) + ($3145))|0; + $tkm4131 = $3146; + $3147 = $tkm4131; + $3148 = $m; + $3149 = (($3147) + ($3148))|0; + $tkm5 = $3149; + $3150 = $tkm5; + $3151 = $m; + $3152 = (($3150) + ($3151))|0; + $tkm6 = $3152; + $3153 = $0; + $3154 = +HEAPF64[$3153>>3]; + $ar149 = $3154; + $3155 = $0; + $3156 = (($3155) + 8|0); + $3157 = +HEAPF64[$3156>>3]; + $ai150 = $3157; + $3158 = $tkm1128; + $3159 = $0; + $3160 = (($3159) + ($3158<<4)|0); + $3161 = +HEAPF64[$3160>>3]; + $br151 = $3161; + $3162 = $tkm1128; + $3163 = $0; + $3164 = (($3163) + ($3162<<4)|0); + $3165 = (($3164) + 8|0); + $3166 = +HEAPF64[$3165>>3]; + $bi152 = $3166; + $3167 = $tkm2129; + $3168 = $0; + $3169 = (($3168) + ($3167<<4)|0); + $3170 = +HEAPF64[$3169>>3]; + $cr153 = $3170; + $3171 = $tkm2129; + $3172 = $0; + $3173 = (($3172) + ($3171<<4)|0); + $3174 = (($3173) + 8|0); + $3175 = +HEAPF64[$3174>>3]; + $ci154 = $3175; + $3176 = $tkm3130; + $3177 = $0; + $3178 = (($3177) + ($3176<<4)|0); + $3179 = +HEAPF64[$3178>>3]; + $dr155 = $3179; + $3180 = $tkm3130; + $3181 = $0; + $3182 = (($3181) + ($3180<<4)|0); + $3183 = (($3182) + 8|0); + $3184 = +HEAPF64[$3183>>3]; + $di156 = $3184; + $3185 = $tkm4131; + $3186 = $0; + $3187 = (($3186) + ($3185<<4)|0); + $3188 = +HEAPF64[$3187>>3]; + $er157 = $3188; + $3189 = $tkm4131; + $3190 = $0; + $3191 = (($3190) + ($3189<<4)|0); + $3192 = (($3191) + 8|0); + $3193 = +HEAPF64[$3192>>3]; + $ei158 = $3193; + $3194 = $tkm5; + $3195 = $0; + $3196 = (($3195) + ($3194<<4)|0); + $3197 = +HEAPF64[$3196>>3]; + $fr = $3197; + $3198 = $tkm5; + $3199 = $0; + $3200 = (($3199) + ($3198<<4)|0); + $3201 = (($3200) + 8|0); + $3202 = +HEAPF64[$3201>>3]; + $fi = $3202; + $3203 = $tkm6; + $3204 = $0; + $3205 = (($3204) + ($3203<<4)|0); + $3206 = +HEAPF64[$3205>>3]; + $gr = $3206; + $3207 = $tkm6; + $3208 = $0; + $3209 = (($3208) + ($3207<<4)|0); + $3210 = (($3209) + 8|0); + $3211 = +HEAPF64[$3210>>3]; + $gi = $3211; + $3212 = $br151; + $3213 = $gr; + $3214 = $3212 + $3213; + $tau0r141 = $3214; + $3215 = $br151; + $3216 = $gr; + $3217 = $3215 - $3216; + $tau3r147 = $3217; + $3218 = $bi152; + $3219 = $gi; + $3220 = $3218 + $3219; + $tau0i142 = $3220; + $3221 = $bi152; + $3222 = $gi; + $3223 = $3221 - $3222; + $tau3i148 = $3223; + $3224 = $cr153; + $3225 = $fr; + $3226 = $3224 + $3225; + $tau1r143 = $3226; + $3227 = $cr153; + $3228 = $fr; + $3229 = $3227 - $3228; + $tau4r159 = $3229; + $3230 = $ci154; + $3231 = $fi; + $3232 = $3230 + $3231; + $tau1i144 = $3232; + $3233 = $ci154; + $3234 = $fi; + $3235 = $3233 - $3234; + $tau4i160 = $3235; + $3236 = $dr155; + $3237 = $er157; + $3238 = $3236 + $3237; + $tau2r145 = $3238; + $3239 = $dr155; + $3240 = $er157; + $3241 = $3239 - $3240; + $tau5r161 = $3241; + $3242 = $di156; + $3243 = $ei158; + $3244 = $3242 + $3243; + $tau2i146 = $3244; + $3245 = $di156; + $3246 = $ei158; + $3247 = $3245 - $3246; + $tau5i162 = $3247; + $3248 = $ar149; + $3249 = $tau0r141; + $3250 = $3248 + $3249; + $3251 = $tau1r143; + $3252 = $3250 + $3251; + $3253 = $tau2r145; + $3254 = $3252 + $3253; + $3255 = $0; + HEAPF64[$3255>>3] = $3254; + $3256 = $ai150; + $3257 = $tau0i142; + $3258 = $3256 + $3257; + $3259 = $tau1i144; + $3260 = $3258 + $3259; + $3261 = $tau2i146; + $3262 = $3260 + $3261; + $3263 = $0; + $3264 = (($3263) + 8|0); + HEAPF64[$3264>>3] = $3262; + $3265 = $ar149; + $3266 = $c1167; + $3267 = $tau0r141; + $3268 = $3266 * $3267; + $3269 = $3265 + $3268; + $3270 = $c2168; + $3271 = $tau1r143; + $3272 = $3270 * $3271; + $3273 = $3269 + $3272; + $3274 = $c3169; + $3275 = $tau2r145; + $3276 = $3274 * $3275; + $3277 = $3273 + $3276; + $tau6r163 = $3277; + $3278 = $ai150; + $3279 = $c1167; + $3280 = $tau0i142; + $3281 = $3279 * $3280; + $3282 = $3278 + $3281; + $3283 = $c2168; + $3284 = $tau1i144; + $3285 = $3283 * $3284; + $3286 = $3282 + $3285; + $3287 = $c3169; + $3288 = $tau2i146; + $3289 = $3287 * $3288; + $3290 = $3286 + $3289; + $tau6i164 = $3290; + $3291 = $3; + $3292 = ($3291|0)==(1); + if ($3292) { + $3293 = $s1170; + $3294 = -$3293; + $3295 = $tau3r147; + $3296 = $3294 * $3295; + $3297 = $s2171; + $3298 = $tau4r159; + $3299 = $3297 * $3298; + $3300 = $3296 - $3299; + $3301 = $s3172; + $3302 = $tau5r161; + $3303 = $3301 * $3302; + $3304 = $3300 - $3303; + $tau7r165 = $3304; + $3305 = $s1170; + $3306 = -$3305; + $3307 = $tau3i148; + $3308 = $3306 * $3307; + $3309 = $s2171; + $3310 = $tau4i160; + $3311 = $3309 * $3310; + $3312 = $3308 - $3311; + $3313 = $s3172; + $3314 = $tau5i162; + $3315 = $3313 * $3314; + $3316 = $3312 - $3315; + $tau7i166 = $3316; + } else { + $3317 = $s1170; + $3318 = $tau3r147; + $3319 = $3317 * $3318; + $3320 = $s2171; + $3321 = $tau4r159; + $3322 = $3320 * $3321; + $3323 = $3319 + $3322; + $3324 = $s3172; + $3325 = $tau5r161; + $3326 = $3324 * $3325; + $3327 = $3323 + $3326; + $tau7r165 = $3327; + $3328 = $s1170; + $3329 = $tau3i148; + $3330 = $3328 * $3329; + $3331 = $s2171; + $3332 = $tau4i160; + $3333 = $3331 * $3332; + $3334 = $3330 + $3333; + $3335 = $s3172; + $3336 = $tau5i162; + $3337 = $3335 * $3336; + $3338 = $3334 + $3337; + $tau7i166 = $3338; + } + $3339 = $tau6r163; + $3340 = $tau7i166; + $3341 = $3339 - $3340; + $3342 = $tkm1128; + $3343 = $0; + $3344 = (($3343) + ($3342<<4)|0); + HEAPF64[$3344>>3] = $3341; + $3345 = $tau6i164; + $3346 = $tau7r165; + $3347 = $3345 + $3346; + $3348 = $tkm1128; + $3349 = $0; + $3350 = (($3349) + ($3348<<4)|0); + $3351 = (($3350) + 8|0); + HEAPF64[$3351>>3] = $3347; + $3352 = $tau6r163; + $3353 = $tau7i166; + $3354 = $3352 + $3353; + $3355 = $tkm6; + $3356 = $0; + $3357 = (($3356) + ($3355<<4)|0); + HEAPF64[$3357>>3] = $3354; + $3358 = $tau6i164; + $3359 = $tau7r165; + $3360 = $3358 - $3359; + $3361 = $tkm6; + $3362 = $0; + $3363 = (($3362) + ($3361<<4)|0); + $3364 = (($3363) + 8|0); + HEAPF64[$3364>>3] = $3360; + $3365 = $ar149; + $3366 = $c2168; + $3367 = $tau0r141; + $3368 = $3366 * $3367; + $3369 = $3365 + $3368; + $3370 = $c3169; + $3371 = $tau1r143; + $3372 = $3370 * $3371; + $3373 = $3369 + $3372; + $3374 = $c1167; + $3375 = $tau2r145; + $3376 = $3374 * $3375; + $3377 = $3373 + $3376; + $tau6r163 = $3377; + $3378 = $ai150; + $3379 = $c2168; + $3380 = $tau0i142; + $3381 = $3379 * $3380; + $3382 = $3378 + $3381; + $3383 = $c3169; + $3384 = $tau1i144; + $3385 = $3383 * $3384; + $3386 = $3382 + $3385; + $3387 = $c1167; + $3388 = $tau2i146; + $3389 = $3387 * $3388; + $3390 = $3386 + $3389; + $tau6i164 = $3390; + $3391 = $3; + $3392 = ($3391|0)==(1); + if ($3392) { + $3393 = $s2171; + $3394 = -$3393; + $3395 = $tau3r147; + $3396 = $3394 * $3395; + $3397 = $s3172; + $3398 = $tau4r159; + $3399 = $3397 * $3398; + $3400 = $3396 + $3399; + $3401 = $s1170; + $3402 = $tau5r161; + $3403 = $3401 * $3402; + $3404 = $3400 + $3403; + $tau7r165 = $3404; + $3405 = $s2171; + $3406 = -$3405; + $3407 = $tau3i148; + $3408 = $3406 * $3407; + $3409 = $s3172; + $3410 = $tau4i160; + $3411 = $3409 * $3410; + $3412 = $3408 + $3411; + $3413 = $s1170; + $3414 = $tau5i162; + $3415 = $3413 * $3414; + $3416 = $3412 + $3415; + $tau7i166 = $3416; + } else { + $3417 = $s2171; + $3418 = $tau3r147; + $3419 = $3417 * $3418; + $3420 = $s3172; + $3421 = $tau4r159; + $3422 = $3420 * $3421; + $3423 = $3419 - $3422; + $3424 = $s1170; + $3425 = $tau5r161; + $3426 = $3424 * $3425; + $3427 = $3423 - $3426; + $tau7r165 = $3427; + $3428 = $s2171; + $3429 = $tau3i148; + $3430 = $3428 * $3429; + $3431 = $s3172; + $3432 = $tau4i160; + $3433 = $3431 * $3432; + $3434 = $3430 - $3433; + $3435 = $s1170; + $3436 = $tau5i162; + $3437 = $3435 * $3436; + $3438 = $3434 - $3437; + $tau7i166 = $3438; + } + $3439 = $tau6r163; + $3440 = $tau7i166; + $3441 = $3439 - $3440; + $3442 = $tkm2129; + $3443 = $0; + $3444 = (($3443) + ($3442<<4)|0); + HEAPF64[$3444>>3] = $3441; + $3445 = $tau6i164; + $3446 = $tau7r165; + $3447 = $3445 + $3446; + $3448 = $tkm2129; + $3449 = $0; + $3450 = (($3449) + ($3448<<4)|0); + $3451 = (($3450) + 8|0); + HEAPF64[$3451>>3] = $3447; + $3452 = $tau6r163; + $3453 = $tau7i166; + $3454 = $3452 + $3453; + $3455 = $tkm5; + $3456 = $0; + $3457 = (($3456) + ($3455<<4)|0); + HEAPF64[$3457>>3] = $3454; + $3458 = $tau6i164; + $3459 = $tau7r165; + $3460 = $3458 - $3459; + $3461 = $tkm5; + $3462 = $0; + $3463 = (($3462) + ($3461<<4)|0); + $3464 = (($3463) + 8|0); + HEAPF64[$3464>>3] = $3460; + $3465 = $ar149; + $3466 = $c3169; + $3467 = $tau0r141; + $3468 = $3466 * $3467; + $3469 = $3465 + $3468; + $3470 = $c1167; + $3471 = $tau1r143; + $3472 = $3470 * $3471; + $3473 = $3469 + $3472; + $3474 = $c2168; + $3475 = $tau2r145; + $3476 = $3474 * $3475; + $3477 = $3473 + $3476; + $tau6r163 = $3477; + $3478 = $ai150; + $3479 = $c3169; + $3480 = $tau0i142; + $3481 = $3479 * $3480; + $3482 = $3478 + $3481; + $3483 = $c1167; + $3484 = $tau1i144; + $3485 = $3483 * $3484; + $3486 = $3482 + $3485; + $3487 = $c2168; + $3488 = $tau2i146; + $3489 = $3487 * $3488; + $3490 = $3486 + $3489; + $tau6i164 = $3490; + $3491 = $3; + $3492 = ($3491|0)==(1); + if ($3492) { + $3493 = $s3172; + $3494 = -$3493; + $3495 = $tau3r147; + $3496 = $3494 * $3495; + $3497 = $s1170; + $3498 = $tau4r159; + $3499 = $3497 * $3498; + $3500 = $3496 + $3499; + $3501 = $s2171; + $3502 = $tau5r161; + $3503 = $3501 * $3502; + $3504 = $3500 - $3503; + $tau7r165 = $3504; + $3505 = $s3172; + $3506 = -$3505; + $3507 = $tau3i148; + $3508 = $3506 * $3507; + $3509 = $s1170; + $3510 = $tau4i160; + $3511 = $3509 * $3510; + $3512 = $3508 + $3511; + $3513 = $s2171; + $3514 = $tau5i162; + $3515 = $3513 * $3514; + $3516 = $3512 - $3515; + $tau7i166 = $3516; + } else { + $3517 = $s3172; + $3518 = $tau3r147; + $3519 = $3517 * $3518; + $3520 = $s1170; + $3521 = $tau4r159; + $3522 = $3520 * $3521; + $3523 = $3519 - $3522; + $3524 = $s2171; + $3525 = $tau5r161; + $3526 = $3524 * $3525; + $3527 = $3523 + $3526; + $tau7r165 = $3527; + $3528 = $s3172; + $3529 = $tau3i148; + $3530 = $3528 * $3529; + $3531 = $s1170; + $3532 = $tau4i160; + $3533 = $3531 * $3532; + $3534 = $3530 - $3533; + $3535 = $s2171; + $3536 = $tau5i162; + $3537 = $3535 * $3536; + $3538 = $3534 + $3537; + $tau7i166 = $3538; + } + $3539 = $tau6r163; + $3540 = $tau7i166; + $3541 = $3539 - $3540; + $3542 = $tkm3130; + $3543 = $0; + $3544 = (($3543) + ($3542<<4)|0); + HEAPF64[$3544>>3] = $3541; + $3545 = $tau6i164; + $3546 = $tau7r165; + $3547 = $3545 + $3546; + $3548 = $tkm3130; + $3549 = $0; + $3550 = (($3549) + ($3548<<4)|0); + $3551 = (($3550) + 8|0); + HEAPF64[$3551>>3] = $3547; + $3552 = $tau6r163; + $3553 = $tau7i166; + $3554 = $3552 + $3553; + $3555 = $tkm4131; + $3556 = $0; + $3557 = (($3556) + ($3555<<4)|0); + HEAPF64[$3557>>3] = $3554; + $3558 = $tau6i164; + $3559 = $tau7r165; + $3560 = $3558 - $3559; + $3561 = $tkm4131; + $3562 = $0; + $3563 = (($3562) + ($3561<<4)|0); + $3564 = (($3563) + 8|0); + HEAPF64[$3564>>3] = $3560; + $k127 = 1; + while(1) { + $3565 = $k127; + $3566 = $m; + $3567 = ($3565|0)<($3566|0); + if (!($3567)) { + break; + } + $3568 = $m; + $3569 = (($3568) - 1)|0; + $3570 = $k127; + $3571 = ($3570*6)|0; + $3572 = (($3569) + ($3571))|0; + $ind132 = $3572; + $3573 = $2; + $3574 = (($3573) + 272|0); + $3575 = $ind132; + $3576 = (($3574) + ($3575<<4)|0); + $3577 = +HEAPF64[$3576>>3]; + $wlr133 = $3577; + $3578 = $2; + $3579 = (($3578) + 272|0); + $3580 = $ind132; + $3581 = (($3579) + ($3580<<4)|0); + $3582 = (($3581) + 8|0); + $3583 = +HEAPF64[$3582>>3]; + $wli134 = $3583; + $3584 = $ind132; + $3585 = (($3584) + 1)|0; + $ind132 = $3585; + $3586 = $2; + $3587 = (($3586) + 272|0); + $3588 = $ind132; + $3589 = (($3587) + ($3588<<4)|0); + $3590 = +HEAPF64[$3589>>3]; + $wl2r135 = $3590; + $3591 = $2; + $3592 = (($3591) + 272|0); + $3593 = $ind132; + $3594 = (($3592) + ($3593<<4)|0); + $3595 = (($3594) + 8|0); + $3596 = +HEAPF64[$3595>>3]; + $wl2i136 = $3596; + $3597 = $ind132; + $3598 = (($3597) + 1)|0; + $ind132 = $3598; + $3599 = $2; + $3600 = (($3599) + 272|0); + $3601 = $ind132; + $3602 = (($3600) + ($3601<<4)|0); + $3603 = +HEAPF64[$3602>>3]; + $wl3r137 = $3603; + $3604 = $2; + $3605 = (($3604) + 272|0); + $3606 = $ind132; + $3607 = (($3605) + ($3606<<4)|0); + $3608 = (($3607) + 8|0); + $3609 = +HEAPF64[$3608>>3]; + $wl3i138 = $3609; + $3610 = $ind132; + $3611 = (($3610) + 1)|0; + $ind132 = $3611; + $3612 = $2; + $3613 = (($3612) + 272|0); + $3614 = $ind132; + $3615 = (($3613) + ($3614<<4)|0); + $3616 = +HEAPF64[$3615>>3]; + $wl4r139 = $3616; + $3617 = $2; + $3618 = (($3617) + 272|0); + $3619 = $ind132; + $3620 = (($3618) + ($3619<<4)|0); + $3621 = (($3620) + 8|0); + $3622 = +HEAPF64[$3621>>3]; + $wl4i140 = $3622; + $3623 = $ind132; + $3624 = (($3623) + 1)|0; + $ind132 = $3624; + $3625 = $2; + $3626 = (($3625) + 272|0); + $3627 = $ind132; + $3628 = (($3626) + ($3627<<4)|0); + $3629 = +HEAPF64[$3628>>3]; + $wl5r = $3629; + $3630 = $2; + $3631 = (($3630) + 272|0); + $3632 = $ind132; + $3633 = (($3631) + ($3632<<4)|0); + $3634 = (($3633) + 8|0); + $3635 = +HEAPF64[$3634>>3]; + $wl5i = $3635; + $3636 = $ind132; + $3637 = (($3636) + 1)|0; + $ind132 = $3637; + $3638 = $2; + $3639 = (($3638) + 272|0); + $3640 = $ind132; + $3641 = (($3639) + ($3640<<4)|0); + $3642 = +HEAPF64[$3641>>3]; + $wl6r = $3642; + $3643 = $2; + $3644 = (($3643) + 272|0); + $3645 = $ind132; + $3646 = (($3644) + ($3645<<4)|0); + $3647 = (($3646) + 8|0); + $3648 = +HEAPF64[$3647>>3]; + $wl6i = $3648; + $3649 = $k127; + $3650 = $m; + $3651 = (($3649) + ($3650))|0; + $tkm1128 = $3651; + $3652 = $tkm1128; + $3653 = $m; + $3654 = (($3652) + ($3653))|0; + $tkm2129 = $3654; + $3655 = $tkm2129; + $3656 = $m; + $3657 = (($3655) + ($3656))|0; + $tkm3130 = $3657; + $3658 = $tkm3130; + $3659 = $m; + $3660 = (($3658) + ($3659))|0; + $tkm4131 = $3660; + $3661 = $tkm4131; + $3662 = $m; + $3663 = (($3661) + ($3662))|0; + $tkm5 = $3663; + $3664 = $tkm5; + $3665 = $m; + $3666 = (($3664) + ($3665))|0; + $tkm6 = $3666; + $3667 = $k127; + $3668 = $0; + $3669 = (($3668) + ($3667<<4)|0); + $3670 = +HEAPF64[$3669>>3]; + $ar149 = $3670; + $3671 = $k127; + $3672 = $0; + $3673 = (($3672) + ($3671<<4)|0); + $3674 = (($3673) + 8|0); + $3675 = +HEAPF64[$3674>>3]; + $ai150 = $3675; + $3676 = $tkm1128; + $3677 = $0; + $3678 = (($3677) + ($3676<<4)|0); + $3679 = +HEAPF64[$3678>>3]; + $3680 = $wlr133; + $3681 = $3679 * $3680; + $3682 = $tkm1128; + $3683 = $0; + $3684 = (($3683) + ($3682<<4)|0); + $3685 = (($3684) + 8|0); + $3686 = +HEAPF64[$3685>>3]; + $3687 = $wli134; + $3688 = $3686 * $3687; + $3689 = $3681 - $3688; + $br151 = $3689; + $3690 = $tkm1128; + $3691 = $0; + $3692 = (($3691) + ($3690<<4)|0); + $3693 = (($3692) + 8|0); + $3694 = +HEAPF64[$3693>>3]; + $3695 = $wlr133; + $3696 = $3694 * $3695; + $3697 = $tkm1128; + $3698 = $0; + $3699 = (($3698) + ($3697<<4)|0); + $3700 = +HEAPF64[$3699>>3]; + $3701 = $wli134; + $3702 = $3700 * $3701; + $3703 = $3696 + $3702; + $bi152 = $3703; + $3704 = $tkm2129; + $3705 = $0; + $3706 = (($3705) + ($3704<<4)|0); + $3707 = +HEAPF64[$3706>>3]; + $3708 = $wl2r135; + $3709 = $3707 * $3708; + $3710 = $tkm2129; + $3711 = $0; + $3712 = (($3711) + ($3710<<4)|0); + $3713 = (($3712) + 8|0); + $3714 = +HEAPF64[$3713>>3]; + $3715 = $wl2i136; + $3716 = $3714 * $3715; + $3717 = $3709 - $3716; + $cr153 = $3717; + $3718 = $tkm2129; + $3719 = $0; + $3720 = (($3719) + ($3718<<4)|0); + $3721 = (($3720) + 8|0); + $3722 = +HEAPF64[$3721>>3]; + $3723 = $wl2r135; + $3724 = $3722 * $3723; + $3725 = $tkm2129; + $3726 = $0; + $3727 = (($3726) + ($3725<<4)|0); + $3728 = +HEAPF64[$3727>>3]; + $3729 = $wl2i136; + $3730 = $3728 * $3729; + $3731 = $3724 + $3730; + $ci154 = $3731; + $3732 = $tkm3130; + $3733 = $0; + $3734 = (($3733) + ($3732<<4)|0); + $3735 = +HEAPF64[$3734>>3]; + $3736 = $wl3r137; + $3737 = $3735 * $3736; + $3738 = $tkm3130; + $3739 = $0; + $3740 = (($3739) + ($3738<<4)|0); + $3741 = (($3740) + 8|0); + $3742 = +HEAPF64[$3741>>3]; + $3743 = $wl3i138; + $3744 = $3742 * $3743; + $3745 = $3737 - $3744; + $dr155 = $3745; + $3746 = $tkm3130; + $3747 = $0; + $3748 = (($3747) + ($3746<<4)|0); + $3749 = (($3748) + 8|0); + $3750 = +HEAPF64[$3749>>3]; + $3751 = $wl3r137; + $3752 = $3750 * $3751; + $3753 = $tkm3130; + $3754 = $0; + $3755 = (($3754) + ($3753<<4)|0); + $3756 = +HEAPF64[$3755>>3]; + $3757 = $wl3i138; + $3758 = $3756 * $3757; + $3759 = $3752 + $3758; + $di156 = $3759; + $3760 = $tkm4131; + $3761 = $0; + $3762 = (($3761) + ($3760<<4)|0); + $3763 = +HEAPF64[$3762>>3]; + $3764 = $wl4r139; + $3765 = $3763 * $3764; + $3766 = $tkm4131; + $3767 = $0; + $3768 = (($3767) + ($3766<<4)|0); + $3769 = (($3768) + 8|0); + $3770 = +HEAPF64[$3769>>3]; + $3771 = $wl4i140; + $3772 = $3770 * $3771; + $3773 = $3765 - $3772; + $er157 = $3773; + $3774 = $tkm4131; + $3775 = $0; + $3776 = (($3775) + ($3774<<4)|0); + $3777 = (($3776) + 8|0); + $3778 = +HEAPF64[$3777>>3]; + $3779 = $wl4r139; + $3780 = $3778 * $3779; + $3781 = $tkm4131; + $3782 = $0; + $3783 = (($3782) + ($3781<<4)|0); + $3784 = +HEAPF64[$3783>>3]; + $3785 = $wl4i140; + $3786 = $3784 * $3785; + $3787 = $3780 + $3786; + $ei158 = $3787; + $3788 = $tkm5; + $3789 = $0; + $3790 = (($3789) + ($3788<<4)|0); + $3791 = +HEAPF64[$3790>>3]; + $3792 = $wl5r; + $3793 = $3791 * $3792; + $3794 = $tkm5; + $3795 = $0; + $3796 = (($3795) + ($3794<<4)|0); + $3797 = (($3796) + 8|0); + $3798 = +HEAPF64[$3797>>3]; + $3799 = $wl5i; + $3800 = $3798 * $3799; + $3801 = $3793 - $3800; + $fr = $3801; + $3802 = $tkm5; + $3803 = $0; + $3804 = (($3803) + ($3802<<4)|0); + $3805 = (($3804) + 8|0); + $3806 = +HEAPF64[$3805>>3]; + $3807 = $wl5r; + $3808 = $3806 * $3807; + $3809 = $tkm5; + $3810 = $0; + $3811 = (($3810) + ($3809<<4)|0); + $3812 = +HEAPF64[$3811>>3]; + $3813 = $wl5i; + $3814 = $3812 * $3813; + $3815 = $3808 + $3814; + $fi = $3815; + $3816 = $tkm6; + $3817 = $0; + $3818 = (($3817) + ($3816<<4)|0); + $3819 = +HEAPF64[$3818>>3]; + $3820 = $wl6r; + $3821 = $3819 * $3820; + $3822 = $tkm6; + $3823 = $0; + $3824 = (($3823) + ($3822<<4)|0); + $3825 = (($3824) + 8|0); + $3826 = +HEAPF64[$3825>>3]; + $3827 = $wl6i; + $3828 = $3826 * $3827; + $3829 = $3821 - $3828; + $gr = $3829; + $3830 = $tkm6; + $3831 = $0; + $3832 = (($3831) + ($3830<<4)|0); + $3833 = (($3832) + 8|0); + $3834 = +HEAPF64[$3833>>3]; + $3835 = $wl6r; + $3836 = $3834 * $3835; + $3837 = $tkm6; + $3838 = $0; + $3839 = (($3838) + ($3837<<4)|0); + $3840 = +HEAPF64[$3839>>3]; + $3841 = $wl6i; + $3842 = $3840 * $3841; + $3843 = $3836 + $3842; + $gi = $3843; + $3844 = $br151; + $3845 = $gr; + $3846 = $3844 + $3845; + $tau0r141 = $3846; + $3847 = $br151; + $3848 = $gr; + $3849 = $3847 - $3848; + $tau3r147 = $3849; + $3850 = $bi152; + $3851 = $gi; + $3852 = $3850 + $3851; + $tau0i142 = $3852; + $3853 = $bi152; + $3854 = $gi; + $3855 = $3853 - $3854; + $tau3i148 = $3855; + $3856 = $cr153; + $3857 = $fr; + $3858 = $3856 + $3857; + $tau1r143 = $3858; + $3859 = $cr153; + $3860 = $fr; + $3861 = $3859 - $3860; + $tau4r159 = $3861; + $3862 = $ci154; + $3863 = $fi; + $3864 = $3862 + $3863; + $tau1i144 = $3864; + $3865 = $ci154; + $3866 = $fi; + $3867 = $3865 - $3866; + $tau4i160 = $3867; + $3868 = $dr155; + $3869 = $er157; + $3870 = $3868 + $3869; + $tau2r145 = $3870; + $3871 = $dr155; + $3872 = $er157; + $3873 = $3871 - $3872; + $tau5r161 = $3873; + $3874 = $di156; + $3875 = $ei158; + $3876 = $3874 + $3875; + $tau2i146 = $3876; + $3877 = $di156; + $3878 = $ei158; + $3879 = $3877 - $3878; + $tau5i162 = $3879; + $3880 = $ar149; + $3881 = $tau0r141; + $3882 = $3880 + $3881; + $3883 = $tau1r143; + $3884 = $3882 + $3883; + $3885 = $tau2r145; + $3886 = $3884 + $3885; + $3887 = $k127; + $3888 = $0; + $3889 = (($3888) + ($3887<<4)|0); + HEAPF64[$3889>>3] = $3886; + $3890 = $ai150; + $3891 = $tau0i142; + $3892 = $3890 + $3891; + $3893 = $tau1i144; + $3894 = $3892 + $3893; + $3895 = $tau2i146; + $3896 = $3894 + $3895; + $3897 = $k127; + $3898 = $0; + $3899 = (($3898) + ($3897<<4)|0); + $3900 = (($3899) + 8|0); + HEAPF64[$3900>>3] = $3896; + $3901 = $ar149; + $3902 = $c1167; + $3903 = $tau0r141; + $3904 = $3902 * $3903; + $3905 = $3901 + $3904; + $3906 = $c2168; + $3907 = $tau1r143; + $3908 = $3906 * $3907; + $3909 = $3905 + $3908; + $3910 = $c3169; + $3911 = $tau2r145; + $3912 = $3910 * $3911; + $3913 = $3909 + $3912; + $tau6r163 = $3913; + $3914 = $ai150; + $3915 = $c1167; + $3916 = $tau0i142; + $3917 = $3915 * $3916; + $3918 = $3914 + $3917; + $3919 = $c2168; + $3920 = $tau1i144; + $3921 = $3919 * $3920; + $3922 = $3918 + $3921; + $3923 = $c3169; + $3924 = $tau2i146; + $3925 = $3923 * $3924; + $3926 = $3922 + $3925; + $tau6i164 = $3926; + $3927 = $3; + $3928 = ($3927|0)==(1); + if ($3928) { + $3929 = $s1170; + $3930 = -$3929; + $3931 = $tau3r147; + $3932 = $3930 * $3931; + $3933 = $s2171; + $3934 = $tau4r159; + $3935 = $3933 * $3934; + $3936 = $3932 - $3935; + $3937 = $s3172; + $3938 = $tau5r161; + $3939 = $3937 * $3938; + $3940 = $3936 - $3939; + $tau7r165 = $3940; + $3941 = $s1170; + $3942 = -$3941; + $3943 = $tau3i148; + $3944 = $3942 * $3943; + $3945 = $s2171; + $3946 = $tau4i160; + $3947 = $3945 * $3946; + $3948 = $3944 - $3947; + $3949 = $s3172; + $3950 = $tau5i162; + $3951 = $3949 * $3950; + $3952 = $3948 - $3951; + $tau7i166 = $3952; + } else { + $3953 = $s1170; + $3954 = $tau3r147; + $3955 = $3953 * $3954; + $3956 = $s2171; + $3957 = $tau4r159; + $3958 = $3956 * $3957; + $3959 = $3955 + $3958; + $3960 = $s3172; + $3961 = $tau5r161; + $3962 = $3960 * $3961; + $3963 = $3959 + $3962; + $tau7r165 = $3963; + $3964 = $s1170; + $3965 = $tau3i148; + $3966 = $3964 * $3965; + $3967 = $s2171; + $3968 = $tau4i160; + $3969 = $3967 * $3968; + $3970 = $3966 + $3969; + $3971 = $s3172; + $3972 = $tau5i162; + $3973 = $3971 * $3972; + $3974 = $3970 + $3973; + $tau7i166 = $3974; + } + $3975 = $tau6r163; + $3976 = $tau7i166; + $3977 = $3975 - $3976; + $3978 = $tkm1128; + $3979 = $0; + $3980 = (($3979) + ($3978<<4)|0); + HEAPF64[$3980>>3] = $3977; + $3981 = $tau6i164; + $3982 = $tau7r165; + $3983 = $3981 + $3982; + $3984 = $tkm1128; + $3985 = $0; + $3986 = (($3985) + ($3984<<4)|0); + $3987 = (($3986) + 8|0); + HEAPF64[$3987>>3] = $3983; + $3988 = $tau6r163; + $3989 = $tau7i166; + $3990 = $3988 + $3989; + $3991 = $tkm6; + $3992 = $0; + $3993 = (($3992) + ($3991<<4)|0); + HEAPF64[$3993>>3] = $3990; + $3994 = $tau6i164; + $3995 = $tau7r165; + $3996 = $3994 - $3995; + $3997 = $tkm6; + $3998 = $0; + $3999 = (($3998) + ($3997<<4)|0); + $4000 = (($3999) + 8|0); + HEAPF64[$4000>>3] = $3996; + $4001 = $ar149; + $4002 = $c2168; + $4003 = $tau0r141; + $4004 = $4002 * $4003; + $4005 = $4001 + $4004; + $4006 = $c3169; + $4007 = $tau1r143; + $4008 = $4006 * $4007; + $4009 = $4005 + $4008; + $4010 = $c1167; + $4011 = $tau2r145; + $4012 = $4010 * $4011; + $4013 = $4009 + $4012; + $tau6r163 = $4013; + $4014 = $ai150; + $4015 = $c2168; + $4016 = $tau0i142; + $4017 = $4015 * $4016; + $4018 = $4014 + $4017; + $4019 = $c3169; + $4020 = $tau1i144; + $4021 = $4019 * $4020; + $4022 = $4018 + $4021; + $4023 = $c1167; + $4024 = $tau2i146; + $4025 = $4023 * $4024; + $4026 = $4022 + $4025; + $tau6i164 = $4026; + $4027 = $3; + $4028 = ($4027|0)==(1); + if ($4028) { + $4029 = $s2171; + $4030 = -$4029; + $4031 = $tau3r147; + $4032 = $4030 * $4031; + $4033 = $s3172; + $4034 = $tau4r159; + $4035 = $4033 * $4034; + $4036 = $4032 + $4035; + $4037 = $s1170; + $4038 = $tau5r161; + $4039 = $4037 * $4038; + $4040 = $4036 + $4039; + $tau7r165 = $4040; + $4041 = $s2171; + $4042 = -$4041; + $4043 = $tau3i148; + $4044 = $4042 * $4043; + $4045 = $s3172; + $4046 = $tau4i160; + $4047 = $4045 * $4046; + $4048 = $4044 + $4047; + $4049 = $s1170; + $4050 = $tau5i162; + $4051 = $4049 * $4050; + $4052 = $4048 + $4051; + $tau7i166 = $4052; + } else { + $4053 = $s2171; + $4054 = $tau3r147; + $4055 = $4053 * $4054; + $4056 = $s3172; + $4057 = $tau4r159; + $4058 = $4056 * $4057; + $4059 = $4055 - $4058; + $4060 = $s1170; + $4061 = $tau5r161; + $4062 = $4060 * $4061; + $4063 = $4059 - $4062; + $tau7r165 = $4063; + $4064 = $s2171; + $4065 = $tau3i148; + $4066 = $4064 * $4065; + $4067 = $s3172; + $4068 = $tau4i160; + $4069 = $4067 * $4068; + $4070 = $4066 - $4069; + $4071 = $s1170; + $4072 = $tau5i162; + $4073 = $4071 * $4072; + $4074 = $4070 - $4073; + $tau7i166 = $4074; + } + $4075 = $tau6r163; + $4076 = $tau7i166; + $4077 = $4075 - $4076; + $4078 = $tkm2129; + $4079 = $0; + $4080 = (($4079) + ($4078<<4)|0); + HEAPF64[$4080>>3] = $4077; + $4081 = $tau6i164; + $4082 = $tau7r165; + $4083 = $4081 + $4082; + $4084 = $tkm2129; + $4085 = $0; + $4086 = (($4085) + ($4084<<4)|0); + $4087 = (($4086) + 8|0); + HEAPF64[$4087>>3] = $4083; + $4088 = $tau6r163; + $4089 = $tau7i166; + $4090 = $4088 + $4089; + $4091 = $tkm5; + $4092 = $0; + $4093 = (($4092) + ($4091<<4)|0); + HEAPF64[$4093>>3] = $4090; + $4094 = $tau6i164; + $4095 = $tau7r165; + $4096 = $4094 - $4095; + $4097 = $tkm5; + $4098 = $0; + $4099 = (($4098) + ($4097<<4)|0); + $4100 = (($4099) + 8|0); + HEAPF64[$4100>>3] = $4096; + $4101 = $ar149; + $4102 = $c3169; + $4103 = $tau0r141; + $4104 = $4102 * $4103; + $4105 = $4101 + $4104; + $4106 = $c1167; + $4107 = $tau1r143; + $4108 = $4106 * $4107; + $4109 = $4105 + $4108; + $4110 = $c2168; + $4111 = $tau2r145; + $4112 = $4110 * $4111; + $4113 = $4109 + $4112; + $tau6r163 = $4113; + $4114 = $ai150; + $4115 = $c3169; + $4116 = $tau0i142; + $4117 = $4115 * $4116; + $4118 = $4114 + $4117; + $4119 = $c1167; + $4120 = $tau1i144; + $4121 = $4119 * $4120; + $4122 = $4118 + $4121; + $4123 = $c2168; + $4124 = $tau2i146; + $4125 = $4123 * $4124; + $4126 = $4122 + $4125; + $tau6i164 = $4126; + $4127 = $3; + $4128 = ($4127|0)==(1); + if ($4128) { + $4129 = $s3172; + $4130 = -$4129; + $4131 = $tau3r147; + $4132 = $4130 * $4131; + $4133 = $s1170; + $4134 = $tau4r159; + $4135 = $4133 * $4134; + $4136 = $4132 + $4135; + $4137 = $s2171; + $4138 = $tau5r161; + $4139 = $4137 * $4138; + $4140 = $4136 - $4139; + $tau7r165 = $4140; + $4141 = $s3172; + $4142 = -$4141; + $4143 = $tau3i148; + $4144 = $4142 * $4143; + $4145 = $s1170; + $4146 = $tau4i160; + $4147 = $4145 * $4146; + $4148 = $4144 + $4147; + $4149 = $s2171; + $4150 = $tau5i162; + $4151 = $4149 * $4150; + $4152 = $4148 - $4151; + $tau7i166 = $4152; + } else { + $4153 = $s3172; + $4154 = $tau3r147; + $4155 = $4153 * $4154; + $4156 = $s1170; + $4157 = $tau4r159; + $4158 = $4156 * $4157; + $4159 = $4155 - $4158; + $4160 = $s2171; + $4161 = $tau5r161; + $4162 = $4160 * $4161; + $4163 = $4159 + $4162; + $tau7r165 = $4163; + $4164 = $s3172; + $4165 = $tau3i148; + $4166 = $4164 * $4165; + $4167 = $s1170; + $4168 = $tau4i160; + $4169 = $4167 * $4168; + $4170 = $4166 - $4169; + $4171 = $s2171; + $4172 = $tau5i162; + $4173 = $4171 * $4172; + $4174 = $4170 + $4173; + $tau7i166 = $4174; + } + $4175 = $tau6r163; + $4176 = $tau7i166; + $4177 = $4175 - $4176; + $4178 = $tkm3130; + $4179 = $0; + $4180 = (($4179) + ($4178<<4)|0); + HEAPF64[$4180>>3] = $4177; + $4181 = $tau6i164; + $4182 = $tau7r165; + $4183 = $4181 + $4182; + $4184 = $tkm3130; + $4185 = $0; + $4186 = (($4185) + ($4184<<4)|0); + $4187 = (($4186) + 8|0); + HEAPF64[$4187>>3] = $4183; + $4188 = $tau6r163; + $4189 = $tau7i166; + $4190 = $4188 + $4189; + $4191 = $tkm4131; + $4192 = $0; + $4193 = (($4192) + ($4191<<4)|0); + HEAPF64[$4193>>3] = $4190; + $4194 = $tau6i164; + $4195 = $tau7r165; + $4196 = $4194 - $4195; + $4197 = $tkm4131; + $4198 = $0; + $4199 = (($4198) + ($4197<<4)|0); + $4200 = (($4199) + 8|0); + HEAPF64[$4200>>3] = $4196; + $4201 = $k127; + $4202 = (($4201) + 1)|0; + $k127 = $4202; + } + } else { + $4203 = $radix; + $4204 = ($4203|0)==(8); + if ($4204) { + $4205 = $4; + $4206 = (($4205|0) / 8)&-1; + $m = $4206; + $4207 = $5; + $4208 = $4207<<3; + $ll = $4208; + $4209 = $0; + $4210 = $1; + $4211 = $2; + $4212 = $3; + $4213 = $m; + $4214 = $ll; + $4215 = $6; + $4216 = (($4215) + 1)|0; + _mixed_radix_dit_rec($4209,$4210,$4211,$4212,$4213,$4214,$4216); + $4217 = $0; + $4218 = $m; + $4219 = (($4217) + ($4218<<4)|0); + $4220 = $1; + $4221 = $5; + $4222 = (($4220) + ($4221<<4)|0); + $4223 = $2; + $4224 = $3; + $4225 = $m; + $4226 = $ll; + $4227 = $6; + $4228 = (($4227) + 1)|0; + _mixed_radix_dit_rec($4219,$4222,$4223,$4224,$4225,$4226,$4228); + $4229 = $0; + $4230 = $m; + $4231 = $4230<<1; + $4232 = (($4229) + ($4231<<4)|0); + $4233 = $1; + $4234 = $5; + $4235 = $4234<<1; + $4236 = (($4233) + ($4235<<4)|0); + $4237 = $2; + $4238 = $3; + $4239 = $m; + $4240 = $ll; + $4241 = $6; + $4242 = (($4241) + 1)|0; + _mixed_radix_dit_rec($4232,$4236,$4237,$4238,$4239,$4240,$4242); + $4243 = $0; + $4244 = $m; + $4245 = ($4244*3)|0; + $4246 = (($4243) + ($4245<<4)|0); + $4247 = $1; + $4248 = $5; + $4249 = ($4248*3)|0; + $4250 = (($4247) + ($4249<<4)|0); + $4251 = $2; + $4252 = $3; + $4253 = $m; + $4254 = $ll; + $4255 = $6; + $4256 = (($4255) + 1)|0; + _mixed_radix_dit_rec($4246,$4250,$4251,$4252,$4253,$4254,$4256); + $4257 = $0; + $4258 = $m; + $4259 = $4258<<2; + $4260 = (($4257) + ($4259<<4)|0); + $4261 = $1; + $4262 = $5; + $4263 = $4262<<2; + $4264 = (($4261) + ($4263<<4)|0); + $4265 = $2; + $4266 = $3; + $4267 = $m; + $4268 = $ll; + $4269 = $6; + $4270 = (($4269) + 1)|0; + _mixed_radix_dit_rec($4260,$4264,$4265,$4266,$4267,$4268,$4270); + $4271 = $0; + $4272 = $m; + $4273 = ($4272*5)|0; + $4274 = (($4271) + ($4273<<4)|0); + $4275 = $1; + $4276 = $5; + $4277 = ($4276*5)|0; + $4278 = (($4275) + ($4277<<4)|0); + $4279 = $2; + $4280 = $3; + $4281 = $m; + $4282 = $ll; + $4283 = $6; + $4284 = (($4283) + 1)|0; + _mixed_radix_dit_rec($4274,$4278,$4279,$4280,$4281,$4282,$4284); + $4285 = $0; + $4286 = $m; + $4287 = ($4286*6)|0; + $4288 = (($4285) + ($4287<<4)|0); + $4289 = $1; + $4290 = $5; + $4291 = ($4290*6)|0; + $4292 = (($4289) + ($4291<<4)|0); + $4293 = $2; + $4294 = $3; + $4295 = $m; + $4296 = $ll; + $4297 = $6; + $4298 = (($4297) + 1)|0; + _mixed_radix_dit_rec($4288,$4292,$4293,$4294,$4295,$4296,$4298); + $4299 = $0; + $4300 = $m; + $4301 = ($4300*7)|0; + $4302 = (($4299) + ($4301<<4)|0); + $4303 = $1; + $4304 = $5; + $4305 = ($4304*7)|0; + $4306 = (($4303) + ($4305<<4)|0); + $4307 = $2; + $4308 = $3; + $4309 = $m; + $4310 = $ll; + $4311 = $6; + $4312 = (($4311) + 1)|0; + _mixed_radix_dit_rec($4302,$4306,$4307,$4308,$4309,$4310,$4312); + $c1227 = 0.707106781186547572737; + $s1228 = 0.707106781186547572737; + $k173 = 0; + while(1) { + $4313 = $k173; + $4314 = $m; + $4315 = ($4313|0)<($4314|0); + if (!($4315)) { + break; + } + $4316 = $m; + $4317 = (($4316) - 1)|0; + $4318 = $k173; + $4319 = ($4318*7)|0; + $4320 = (($4317) + ($4319))|0; + $ind180 = $4320; + $4321 = $2; + $4322 = (($4321) + 272|0); + $4323 = $ind180; + $4324 = (($4322) + ($4323<<4)|0); + $4325 = +HEAPF64[$4324>>3]; + $wlr181 = $4325; + $4326 = $2; + $4327 = (($4326) + 272|0); + $4328 = $ind180; + $4329 = (($4327) + ($4328<<4)|0); + $4330 = (($4329) + 8|0); + $4331 = +HEAPF64[$4330>>3]; + $wli182 = $4331; + $4332 = $ind180; + $4333 = (($4332) + 1)|0; + $ind180 = $4333; + $4334 = $2; + $4335 = (($4334) + 272|0); + $4336 = $ind180; + $4337 = (($4335) + ($4336<<4)|0); + $4338 = +HEAPF64[$4337>>3]; + $wl2r183 = $4338; + $4339 = $2; + $4340 = (($4339) + 272|0); + $4341 = $ind180; + $4342 = (($4340) + ($4341<<4)|0); + $4343 = (($4342) + 8|0); + $4344 = +HEAPF64[$4343>>3]; + $wl2i184 = $4344; + $4345 = $ind180; + $4346 = (($4345) + 1)|0; + $ind180 = $4346; + $4347 = $2; + $4348 = (($4347) + 272|0); + $4349 = $ind180; + $4350 = (($4348) + ($4349<<4)|0); + $4351 = +HEAPF64[$4350>>3]; + $wl3r185 = $4351; + $4352 = $2; + $4353 = (($4352) + 272|0); + $4354 = $ind180; + $4355 = (($4353) + ($4354<<4)|0); + $4356 = (($4355) + 8|0); + $4357 = +HEAPF64[$4356>>3]; + $wl3i186 = $4357; + $4358 = $ind180; + $4359 = (($4358) + 1)|0; + $ind180 = $4359; + $4360 = $2; + $4361 = (($4360) + 272|0); + $4362 = $ind180; + $4363 = (($4361) + ($4362<<4)|0); + $4364 = +HEAPF64[$4363>>3]; + $wl4r187 = $4364; + $4365 = $2; + $4366 = (($4365) + 272|0); + $4367 = $ind180; + $4368 = (($4366) + ($4367<<4)|0); + $4369 = (($4368) + 8|0); + $4370 = +HEAPF64[$4369>>3]; + $wl4i188 = $4370; + $4371 = $ind180; + $4372 = (($4371) + 1)|0; + $ind180 = $4372; + $4373 = $2; + $4374 = (($4373) + 272|0); + $4375 = $ind180; + $4376 = (($4374) + ($4375<<4)|0); + $4377 = +HEAPF64[$4376>>3]; + $wl5r189 = $4377; + $4378 = $2; + $4379 = (($4378) + 272|0); + $4380 = $ind180; + $4381 = (($4379) + ($4380<<4)|0); + $4382 = (($4381) + 8|0); + $4383 = +HEAPF64[$4382>>3]; + $wl5i190 = $4383; + $4384 = $ind180; + $4385 = (($4384) + 1)|0; + $ind180 = $4385; + $4386 = $2; + $4387 = (($4386) + 272|0); + $4388 = $ind180; + $4389 = (($4387) + ($4388<<4)|0); + $4390 = +HEAPF64[$4389>>3]; + $wl6r191 = $4390; + $4391 = $2; + $4392 = (($4391) + 272|0); + $4393 = $ind180; + $4394 = (($4392) + ($4393<<4)|0); + $4395 = (($4394) + 8|0); + $4396 = +HEAPF64[$4395>>3]; + $wl6i192 = $4396; + $4397 = $ind180; + $4398 = (($4397) + 1)|0; + $ind180 = $4398; + $4399 = $2; + $4400 = (($4399) + 272|0); + $4401 = $ind180; + $4402 = (($4400) + ($4401<<4)|0); + $4403 = +HEAPF64[$4402>>3]; + $wl7r = $4403; + $4404 = $2; + $4405 = (($4404) + 272|0); + $4406 = $ind180; + $4407 = (($4405) + ($4406<<4)|0); + $4408 = (($4407) + 8|0); + $4409 = +HEAPF64[$4408>>3]; + $wl7i = $4409; + $4410 = $k173; + $4411 = $m; + $4412 = (($4410) + ($4411))|0; + $tkm1174 = $4412; + $4413 = $tkm1174; + $4414 = $m; + $4415 = (($4413) + ($4414))|0; + $tkm2175 = $4415; + $4416 = $tkm2175; + $4417 = $m; + $4418 = (($4416) + ($4417))|0; + $tkm3176 = $4418; + $4419 = $tkm3176; + $4420 = $m; + $4421 = (($4419) + ($4420))|0; + $tkm4177 = $4421; + $4422 = $tkm4177; + $4423 = $m; + $4424 = (($4422) + ($4423))|0; + $tkm5178 = $4424; + $4425 = $tkm5178; + $4426 = $m; + $4427 = (($4425) + ($4426))|0; + $tkm6179 = $4427; + $4428 = $tkm6179; + $4429 = $m; + $4430 = (($4428) + ($4429))|0; + $tkm7 = $4430; + $4431 = $k173; + $4432 = $0; + $4433 = (($4432) + ($4431<<4)|0); + $4434 = +HEAPF64[$4433>>3]; + $ar201 = $4434; + $4435 = $k173; + $4436 = $0; + $4437 = (($4436) + ($4435<<4)|0); + $4438 = (($4437) + 8|0); + $4439 = +HEAPF64[$4438>>3]; + $ai202 = $4439; + $4440 = $tkm1174; + $4441 = $0; + $4442 = (($4441) + ($4440<<4)|0); + $4443 = +HEAPF64[$4442>>3]; + $4444 = $wlr181; + $4445 = $4443 * $4444; + $4446 = $tkm1174; + $4447 = $0; + $4448 = (($4447) + ($4446<<4)|0); + $4449 = (($4448) + 8|0); + $4450 = +HEAPF64[$4449>>3]; + $4451 = $wli182; + $4452 = $4450 * $4451; + $4453 = $4445 - $4452; + $br203 = $4453; + $4454 = $tkm1174; + $4455 = $0; + $4456 = (($4455) + ($4454<<4)|0); + $4457 = (($4456) + 8|0); + $4458 = +HEAPF64[$4457>>3]; + $4459 = $wlr181; + $4460 = $4458 * $4459; + $4461 = $tkm1174; + $4462 = $0; + $4463 = (($4462) + ($4461<<4)|0); + $4464 = +HEAPF64[$4463>>3]; + $4465 = $wli182; + $4466 = $4464 * $4465; + $4467 = $4460 + $4466; + $bi204 = $4467; + $4468 = $tkm2175; + $4469 = $0; + $4470 = (($4469) + ($4468<<4)|0); + $4471 = +HEAPF64[$4470>>3]; + $4472 = $wl2r183; + $4473 = $4471 * $4472; + $4474 = $tkm2175; + $4475 = $0; + $4476 = (($4475) + ($4474<<4)|0); + $4477 = (($4476) + 8|0); + $4478 = +HEAPF64[$4477>>3]; + $4479 = $wl2i184; + $4480 = $4478 * $4479; + $4481 = $4473 - $4480; + $cr205 = $4481; + $4482 = $tkm2175; + $4483 = $0; + $4484 = (($4483) + ($4482<<4)|0); + $4485 = (($4484) + 8|0); + $4486 = +HEAPF64[$4485>>3]; + $4487 = $wl2r183; + $4488 = $4486 * $4487; + $4489 = $tkm2175; + $4490 = $0; + $4491 = (($4490) + ($4489<<4)|0); + $4492 = +HEAPF64[$4491>>3]; + $4493 = $wl2i184; + $4494 = $4492 * $4493; + $4495 = $4488 + $4494; + $ci206 = $4495; + $4496 = $tkm3176; + $4497 = $0; + $4498 = (($4497) + ($4496<<4)|0); + $4499 = +HEAPF64[$4498>>3]; + $4500 = $wl3r185; + $4501 = $4499 * $4500; + $4502 = $tkm3176; + $4503 = $0; + $4504 = (($4503) + ($4502<<4)|0); + $4505 = (($4504) + 8|0); + $4506 = +HEAPF64[$4505>>3]; + $4507 = $wl3i186; + $4508 = $4506 * $4507; + $4509 = $4501 - $4508; + $dr207 = $4509; + $4510 = $tkm3176; + $4511 = $0; + $4512 = (($4511) + ($4510<<4)|0); + $4513 = (($4512) + 8|0); + $4514 = +HEAPF64[$4513>>3]; + $4515 = $wl3r185; + $4516 = $4514 * $4515; + $4517 = $tkm3176; + $4518 = $0; + $4519 = (($4518) + ($4517<<4)|0); + $4520 = +HEAPF64[$4519>>3]; + $4521 = $wl3i186; + $4522 = $4520 * $4521; + $4523 = $4516 + $4522; + $di208 = $4523; + $4524 = $tkm4177; + $4525 = $0; + $4526 = (($4525) + ($4524<<4)|0); + $4527 = +HEAPF64[$4526>>3]; + $4528 = $wl4r187; + $4529 = $4527 * $4528; + $4530 = $tkm4177; + $4531 = $0; + $4532 = (($4531) + ($4530<<4)|0); + $4533 = (($4532) + 8|0); + $4534 = +HEAPF64[$4533>>3]; + $4535 = $wl4i188; + $4536 = $4534 * $4535; + $4537 = $4529 - $4536; + $er209 = $4537; + $4538 = $tkm4177; + $4539 = $0; + $4540 = (($4539) + ($4538<<4)|0); + $4541 = (($4540) + 8|0); + $4542 = +HEAPF64[$4541>>3]; + $4543 = $wl4r187; + $4544 = $4542 * $4543; + $4545 = $tkm4177; + $4546 = $0; + $4547 = (($4546) + ($4545<<4)|0); + $4548 = +HEAPF64[$4547>>3]; + $4549 = $wl4i188; + $4550 = $4548 * $4549; + $4551 = $4544 + $4550; + $ei210 = $4551; + $4552 = $tkm5178; + $4553 = $0; + $4554 = (($4553) + ($4552<<4)|0); + $4555 = +HEAPF64[$4554>>3]; + $4556 = $wl5r189; + $4557 = $4555 * $4556; + $4558 = $tkm5178; + $4559 = $0; + $4560 = (($4559) + ($4558<<4)|0); + $4561 = (($4560) + 8|0); + $4562 = +HEAPF64[$4561>>3]; + $4563 = $wl5i190; + $4564 = $4562 * $4563; + $4565 = $4557 - $4564; + $fr211 = $4565; + $4566 = $tkm5178; + $4567 = $0; + $4568 = (($4567) + ($4566<<4)|0); + $4569 = (($4568) + 8|0); + $4570 = +HEAPF64[$4569>>3]; + $4571 = $wl5r189; + $4572 = $4570 * $4571; + $4573 = $tkm5178; + $4574 = $0; + $4575 = (($4574) + ($4573<<4)|0); + $4576 = +HEAPF64[$4575>>3]; + $4577 = $wl5i190; + $4578 = $4576 * $4577; + $4579 = $4572 + $4578; + $fi212 = $4579; + $4580 = $tkm6179; + $4581 = $0; + $4582 = (($4581) + ($4580<<4)|0); + $4583 = +HEAPF64[$4582>>3]; + $4584 = $wl6r191; + $4585 = $4583 * $4584; + $4586 = $tkm6179; + $4587 = $0; + $4588 = (($4587) + ($4586<<4)|0); + $4589 = (($4588) + 8|0); + $4590 = +HEAPF64[$4589>>3]; + $4591 = $wl6i192; + $4592 = $4590 * $4591; + $4593 = $4585 - $4592; + $gr213 = $4593; + $4594 = $tkm6179; + $4595 = $0; + $4596 = (($4595) + ($4594<<4)|0); + $4597 = (($4596) + 8|0); + $4598 = +HEAPF64[$4597>>3]; + $4599 = $wl6r191; + $4600 = $4598 * $4599; + $4601 = $tkm6179; + $4602 = $0; + $4603 = (($4602) + ($4601<<4)|0); + $4604 = +HEAPF64[$4603>>3]; + $4605 = $wl6i192; + $4606 = $4604 * $4605; + $4607 = $4600 + $4606; + $gi214 = $4607; + $4608 = $tkm7; + $4609 = $0; + $4610 = (($4609) + ($4608<<4)|0); + $4611 = +HEAPF64[$4610>>3]; + $4612 = $wl7r; + $4613 = $4611 * $4612; + $4614 = $tkm7; + $4615 = $0; + $4616 = (($4615) + ($4614<<4)|0); + $4617 = (($4616) + 8|0); + $4618 = +HEAPF64[$4617>>3]; + $4619 = $wl7i; + $4620 = $4618 * $4619; + $4621 = $4613 - $4620; + $hr = $4621; + $4622 = $tkm7; + $4623 = $0; + $4624 = (($4623) + ($4622<<4)|0); + $4625 = (($4624) + 8|0); + $4626 = +HEAPF64[$4625>>3]; + $4627 = $wl7r; + $4628 = $4626 * $4627; + $4629 = $tkm7; + $4630 = $0; + $4631 = (($4630) + ($4629<<4)|0); + $4632 = +HEAPF64[$4631>>3]; + $4633 = $wl7i; + $4634 = $4632 * $4633; + $4635 = $4628 + $4634; + $hi = $4635; + $4636 = $ar201; + $4637 = $er209; + $4638 = $4636 + $4637; + $tau0r193 = $4638; + $4639 = $ar201; + $4640 = $er209; + $4641 = $4639 - $4640; + $tau4r215 = $4641; + $4642 = $ai202; + $4643 = $ei210; + $4644 = $4642 + $4643; + $tau0i194 = $4644; + $4645 = $ai202; + $4646 = $ei210; + $4647 = $4645 - $4646; + $tau4i216 = $4647; + $4648 = $br203; + $4649 = $hr; + $4650 = $4648 + $4649; + $tau1r195 = $4650; + $4651 = $br203; + $4652 = $hr; + $4653 = $4651 - $4652; + $tau5r217 = $4653; + $4654 = $bi204; + $4655 = $hi; + $4656 = $4654 + $4655; + $tau1i196 = $4656; + $4657 = $bi204; + $4658 = $hi; + $4659 = $4657 - $4658; + $tau5i218 = $4659; + $4660 = $dr207; + $4661 = $fr211; + $4662 = $4660 + $4661; + $tau2r197 = $4662; + $4663 = $dr207; + $4664 = $fr211; + $4665 = $4663 - $4664; + $tau6r219 = $4665; + $4666 = $di208; + $4667 = $fi212; + $4668 = $4666 - $4667; + $tau6i220 = $4668; + $4669 = $di208; + $4670 = $fi212; + $4671 = $4669 + $4670; + $tau2i198 = $4671; + $4672 = $cr205; + $4673 = $gr213; + $4674 = $4672 + $4673; + $tau3r199 = $4674; + $4675 = $cr205; + $4676 = $gr213; + $4677 = $4675 - $4676; + $tau7r221 = $4677; + $4678 = $ci206; + $4679 = $gi214; + $4680 = $4678 - $4679; + $tau7i222 = $4680; + $4681 = $ci206; + $4682 = $gi214; + $4683 = $4681 + $4682; + $tau3i200 = $4683; + $4684 = $tau0r193; + $4685 = $tau1r195; + $4686 = $4684 + $4685; + $4687 = $tau2r197; + $4688 = $4686 + $4687; + $4689 = $tau3r199; + $4690 = $4688 + $4689; + $4691 = $k173; + $4692 = $0; + $4693 = (($4692) + ($4691<<4)|0); + HEAPF64[$4693>>3] = $4690; + $4694 = $tau0i194; + $4695 = $tau1i196; + $4696 = $4694 + $4695; + $4697 = $tau2i198; + $4698 = $4696 + $4697; + $4699 = $tau3i200; + $4700 = $4698 + $4699; + $4701 = $k173; + $4702 = $0; + $4703 = (($4702) + ($4701<<4)|0); + $4704 = (($4703) + 8|0); + HEAPF64[$4704>>3] = $4700; + $4705 = $tau0r193; + $4706 = $tau1r195; + $4707 = $4705 - $4706; + $4708 = $tau2r197; + $4709 = $4707 - $4708; + $4710 = $tau3r199; + $4711 = $4709 + $4710; + $4712 = $tkm4177; + $4713 = $0; + $4714 = (($4713) + ($4712<<4)|0); + HEAPF64[$4714>>3] = $4711; + $4715 = $tau0i194; + $4716 = $tau1i196; + $4717 = $4715 - $4716; + $4718 = $tau2i198; + $4719 = $4717 - $4718; + $4720 = $tau3i200; + $4721 = $4719 + $4720; + $4722 = $tkm4177; + $4723 = $0; + $4724 = (($4723) + ($4722<<4)|0); + $4725 = (($4724) + 8|0); + HEAPF64[$4725>>3] = $4721; + $4726 = $tau1r195; + $4727 = $tau2r197; + $4728 = $4726 - $4727; + $temp1r229 = $4728; + $4729 = $tau1i196; + $4730 = $tau2i198; + $4731 = $4729 - $4730; + $temp1i230 = $4731; + $4732 = $tau5r217; + $4733 = $tau6r219; + $4734 = $4732 + $4733; + $temp2r231 = $4734; + $4735 = $tau5i218; + $4736 = $tau6i220; + $4737 = $4735 + $4736; + $temp2i232 = $4737; + $4738 = $tau4r215; + $4739 = $c1227; + $4740 = $temp1r229; + $4741 = $4739 * $4740; + $4742 = $4738 + $4741; + $tau8r223 = $4742; + $4743 = $tau4i216; + $4744 = $c1227; + $4745 = $temp1i230; + $4746 = $4744 * $4745; + $4747 = $4743 + $4746; + $tau8i224 = $4747; + $4748 = $3; + $4749 = ($4748|0)==(1); + if ($4749) { + $4750 = $s1228; + $4751 = -$4750; + $4752 = $temp2r231; + $4753 = $4751 * $4752; + $4754 = $tau7r221; + $4755 = $4753 - $4754; + $tau9r225 = $4755; + $4756 = $s1228; + $4757 = -$4756; + $4758 = $temp2i232; + $4759 = $4757 * $4758; + $4760 = $tau7i222; + $4761 = $4759 - $4760; + $tau9i226 = $4761; + } else { + $4762 = $s1228; + $4763 = $temp2r231; + $4764 = $4762 * $4763; + $4765 = $tau7r221; + $4766 = $4764 + $4765; + $tau9r225 = $4766; + $4767 = $s1228; + $4768 = $temp2i232; + $4769 = $4767 * $4768; + $4770 = $tau7i222; + $4771 = $4769 + $4770; + $tau9i226 = $4771; + } + $4772 = $tau8r223; + $4773 = $tau9i226; + $4774 = $4772 - $4773; + $4775 = $tkm1174; + $4776 = $0; + $4777 = (($4776) + ($4775<<4)|0); + HEAPF64[$4777>>3] = $4774; + $4778 = $tau8i224; + $4779 = $tau9r225; + $4780 = $4778 + $4779; + $4781 = $tkm1174; + $4782 = $0; + $4783 = (($4782) + ($4781<<4)|0); + $4784 = (($4783) + 8|0); + HEAPF64[$4784>>3] = $4780; + $4785 = $tau8r223; + $4786 = $tau9i226; + $4787 = $4785 + $4786; + $4788 = $tkm7; + $4789 = $0; + $4790 = (($4789) + ($4788<<4)|0); + HEAPF64[$4790>>3] = $4787; + $4791 = $tau8i224; + $4792 = $tau9r225; + $4793 = $4791 - $4792; + $4794 = $tkm7; + $4795 = $0; + $4796 = (($4795) + ($4794<<4)|0); + $4797 = (($4796) + 8|0); + HEAPF64[$4797>>3] = $4793; + $4798 = $tau0r193; + $4799 = $tau3r199; + $4800 = $4798 - $4799; + $tau8r223 = $4800; + $4801 = $tau0i194; + $4802 = $tau3i200; + $4803 = $4801 - $4802; + $tau8i224 = $4803; + $4804 = $3; + $4805 = ($4804|0)==(1); + if ($4805) { + $4806 = $tau5r217; + $4807 = -$4806; + $4808 = $tau6r219; + $4809 = $4807 + $4808; + $tau9r225 = $4809; + $4810 = $tau5i218; + $4811 = -$4810; + $4812 = $tau6i220; + $4813 = $4811 + $4812; + $tau9i226 = $4813; + } else { + $4814 = $tau5r217; + $4815 = $tau6r219; + $4816 = $4814 - $4815; + $tau9r225 = $4816; + $4817 = $tau5i218; + $4818 = $tau6i220; + $4819 = $4817 - $4818; + $tau9i226 = $4819; + } + $4820 = $tau8r223; + $4821 = $tau9i226; + $4822 = $4820 - $4821; + $4823 = $tkm2175; + $4824 = $0; + $4825 = (($4824) + ($4823<<4)|0); + HEAPF64[$4825>>3] = $4822; + $4826 = $tau8i224; + $4827 = $tau9r225; + $4828 = $4826 + $4827; + $4829 = $tkm2175; + $4830 = $0; + $4831 = (($4830) + ($4829<<4)|0); + $4832 = (($4831) + 8|0); + HEAPF64[$4832>>3] = $4828; + $4833 = $tau8r223; + $4834 = $tau9i226; + $4835 = $4833 + $4834; + $4836 = $tkm6179; + $4837 = $0; + $4838 = (($4837) + ($4836<<4)|0); + HEAPF64[$4838>>3] = $4835; + $4839 = $tau8i224; + $4840 = $tau9r225; + $4841 = $4839 - $4840; + $4842 = $tkm6179; + $4843 = $0; + $4844 = (($4843) + ($4842<<4)|0); + $4845 = (($4844) + 8|0); + HEAPF64[$4845>>3] = $4841; + $4846 = $tau4r215; + $4847 = $c1227; + $4848 = $temp1r229; + $4849 = $4847 * $4848; + $4850 = $4846 - $4849; + $tau8r223 = $4850; + $4851 = $tau4i216; + $4852 = $c1227; + $4853 = $temp1i230; + $4854 = $4852 * $4853; + $4855 = $4851 - $4854; + $tau8i224 = $4855; + $4856 = $3; + $4857 = ($4856|0)==(1); + if ($4857) { + $4858 = $s1228; + $4859 = -$4858; + $4860 = $temp2r231; + $4861 = $4859 * $4860; + $4862 = $tau7r221; + $4863 = $4861 + $4862; + $tau9r225 = $4863; + $4864 = $s1228; + $4865 = -$4864; + $4866 = $temp2i232; + $4867 = $4865 * $4866; + $4868 = $tau7i222; + $4869 = $4867 + $4868; + $tau9i226 = $4869; + } else { + $4870 = $s1228; + $4871 = $temp2r231; + $4872 = $4870 * $4871; + $4873 = $tau7r221; + $4874 = $4872 - $4873; + $tau9r225 = $4874; + $4875 = $s1228; + $4876 = $temp2i232; + $4877 = $4875 * $4876; + $4878 = $tau7i222; + $4879 = $4877 - $4878; + $tau9i226 = $4879; + } + $4880 = $tau8r223; + $4881 = $tau9i226; + $4882 = $4880 - $4881; + $4883 = $tkm3176; + $4884 = $0; + $4885 = (($4884) + ($4883<<4)|0); + HEAPF64[$4885>>3] = $4882; + $4886 = $tau8i224; + $4887 = $tau9r225; + $4888 = $4886 + $4887; + $4889 = $tkm3176; + $4890 = $0; + $4891 = (($4890) + ($4889<<4)|0); + $4892 = (($4891) + 8|0); + HEAPF64[$4892>>3] = $4888; + $4893 = $tau8r223; + $4894 = $tau9i226; + $4895 = $4893 + $4894; + $4896 = $tkm5178; + $4897 = $0; + $4898 = (($4897) + ($4896<<4)|0); + HEAPF64[$4898>>3] = $4895; + $4899 = $tau8i224; + $4900 = $tau9r225; + $4901 = $4899 - $4900; + $4902 = $tkm5178; + $4903 = $0; + $4904 = (($4903) + ($4902<<4)|0); + $4905 = (($4904) + 8|0); + HEAPF64[$4905>>3] = $4901; + $4906 = $k173; + $4907 = (($4906) + 1)|0; + $k173 = $4907; + } + } else { + $4908 = $radix; + $4909 = (($4908) - 1)|0; + $4910 = $4909<<3; + $4911 = (_malloc($4910)|0); + $wlr239 = $4911; + $4912 = $radix; + $4913 = (($4912) - 1)|0; + $4914 = $4913<<3; + $4915 = (_malloc($4914)|0); + $wli240 = $4915; + $4916 = $radix; + $4917 = (($4916) - 1)|0; + $4918 = $4917<<3; + $4919 = (_malloc($4918)|0); + $taur = $4919; + $4920 = $radix; + $4921 = (($4920) - 1)|0; + $4922 = $4921<<3; + $4923 = (_malloc($4922)|0); + $taui = $4923; + $4924 = $radix; + $4925 = (($4924) - 1)|0; + $4926 = $4925<<3; + $4927 = (_malloc($4926)|0); + $c1241 = $4927; + $4928 = $radix; + $4929 = (($4928) - 1)|0; + $4930 = $4929<<3; + $4931 = (_malloc($4930)|0); + $s1242 = $4931; + $4932 = $radix; + $4933 = $4932<<3; + $4934 = (_malloc($4933)|0); + $yr = $4934; + $4935 = $radix; + $4936 = $4935<<3; + $4937 = (_malloc($4936)|0); + $yi = $4937; + $4938 = $4; + $4939 = $radix; + $4940 = (($4938|0) / ($4939|0))&-1; + $m = $4940; + $4941 = $radix; + $4942 = $5; + $4943 = Math_imul($4941, $4942)|0; + $ll = $4943; + $i = 0; + while(1) { + $4944 = $i; + $4945 = $radix; + $4946 = ($4944|0)<($4945|0); + if (!($4946)) { + break; + } + $4947 = $0; + $4948 = $i; + $4949 = $m; + $4950 = Math_imul($4948, $4949)|0; + $4951 = (($4947) + ($4950<<4)|0); + $4952 = $1; + $4953 = $i; + $4954 = $5; + $4955 = Math_imul($4953, $4954)|0; + $4956 = (($4952) + ($4955<<4)|0); + $4957 = $2; + $4958 = $3; + $4959 = $m; + $4960 = $ll; + $4961 = $6; + $4962 = (($4961) + 1)|0; + _mixed_radix_dit_rec($4951,$4956,$4957,$4958,$4959,$4960,$4962); + $4963 = $i; + $4964 = (($4963) + 1)|0; + $i = $4964; + } + $4965 = $radix; + $4966 = (($4965) - 1)|0; + $4967 = (($4966|0) / 2)&-1; + $M = $4967; + $i = 1; + while(1) { + $4968 = $i; + $4969 = $M; + $4970 = (($4969) + 1)|0; + $4971 = ($4968|0)<($4970|0); + if (!($4971)) { + break; + } + $4972 = $i; + $4973 = (+($4972|0)); + $4974 = $4973 * 6.283185307179586232; + $4975 = $radix; + $4976 = (+($4975|0)); + $4977 = $4974 / $4976; + $4978 = (+Math_cos((+$4977))); + $4979 = $i; + $4980 = (($4979) - 1)|0; + $4981 = $c1241; + $4982 = (($4981) + ($4980<<3)|0); + HEAPF64[$4982>>3] = $4978; + $4983 = $i; + $4984 = (+($4983|0)); + $4985 = $4984 * 6.283185307179586232; + $4986 = $radix; + $4987 = (+($4986|0)); + $4988 = $4985 / $4987; + $4989 = (+Math_sin((+$4988))); + $4990 = $i; + $4991 = (($4990) - 1)|0; + $4992 = $s1242; + $4993 = (($4992) + ($4991<<3)|0); + HEAPF64[$4993>>3] = $4989; + $4994 = $i; + $4995 = (($4994) + 1)|0; + $i = $4995; + } + $i = 0; + while(1) { + $4996 = $i; + $4997 = $M; + $4998 = ($4996|0)<($4997|0); + if (!($4998)) { + break; + } + $4999 = $M; + $5000 = (($4999) - 1)|0; + $5001 = $i; + $5002 = (($5000) - ($5001))|0; + $5003 = $s1242; + $5004 = (($5003) + ($5002<<3)|0); + $5005 = +HEAPF64[$5004>>3]; + $5006 = -$5005; + $5007 = $i; + $5008 = $M; + $5009 = (($5007) + ($5008))|0; + $5010 = $s1242; + $5011 = (($5010) + ($5009<<3)|0); + HEAPF64[$5011>>3] = $5006; + $5012 = $M; + $5013 = (($5012) - 1)|0; + $5014 = $i; + $5015 = (($5013) - ($5014))|0; + $5016 = $c1241; + $5017 = (($5016) + ($5015<<3)|0); + $5018 = +HEAPF64[$5017>>3]; + $5019 = $i; + $5020 = $M; + $5021 = (($5019) + ($5020))|0; + $5022 = $c1241; + $5023 = (($5022) + ($5021<<3)|0); + HEAPF64[$5023>>3] = $5018; + $5024 = $i; + $5025 = (($5024) + 1)|0; + $i = $5025; + } + $k233 = 0; + while(1) { + $5026 = $k233; + $5027 = $m; + $5028 = ($5026|0)<($5027|0); + if (!($5028)) { + break; + } + $5029 = $m; + $5030 = (($5029) - 1)|0; + $5031 = $radix; + $5032 = (($5031) - 1)|0; + $5033 = $k233; + $5034 = Math_imul($5032, $5033)|0; + $5035 = (($5030) + ($5034))|0; + $ind234 = $5035; + $5036 = $k233; + $5037 = $0; + $5038 = (($5037) + ($5036<<4)|0); + $5039 = +HEAPF64[$5038>>3]; + $5040 = $yr; + HEAPF64[$5040>>3] = $5039; + $5041 = $k233; + $5042 = $0; + $5043 = (($5042) + ($5041<<4)|0); + $5044 = (($5043) + 8|0); + $5045 = +HEAPF64[$5044>>3]; + $5046 = $yi; + HEAPF64[$5046>>3] = $5045; + $i = 0; + while(1) { + $5047 = $i; + $5048 = $radix; + $5049 = (($5048) - 1)|0; + $5050 = ($5047|0)<($5049|0); + if (!($5050)) { + break; + } + $5051 = $2; + $5052 = (($5051) + 272|0); + $5053 = $ind234; + $5054 = (($5052) + ($5053<<4)|0); + $5055 = +HEAPF64[$5054>>3]; + $5056 = $i; + $5057 = $wlr239; + $5058 = (($5057) + ($5056<<3)|0); + HEAPF64[$5058>>3] = $5055; + $5059 = $2; + $5060 = (($5059) + 272|0); + $5061 = $ind234; + $5062 = (($5060) + ($5061<<4)|0); + $5063 = (($5062) + 8|0); + $5064 = +HEAPF64[$5063>>3]; + $5065 = $i; + $5066 = $wli240; + $5067 = (($5066) + ($5065<<3)|0); + HEAPF64[$5067>>3] = $5064; + $5068 = $k233; + $5069 = $i; + $5070 = (($5069) + 1)|0; + $5071 = $m; + $5072 = Math_imul($5070, $5071)|0; + $5073 = (($5068) + ($5072))|0; + $tkm = $5073; + $5074 = $tkm; + $5075 = $0; + $5076 = (($5075) + ($5074<<4)|0); + $5077 = +HEAPF64[$5076>>3]; + $5078 = $i; + $5079 = $wlr239; + $5080 = (($5079) + ($5078<<3)|0); + $5081 = +HEAPF64[$5080>>3]; + $5082 = $5077 * $5081; + $5083 = $tkm; + $5084 = $0; + $5085 = (($5084) + ($5083<<4)|0); + $5086 = (($5085) + 8|0); + $5087 = +HEAPF64[$5086>>3]; + $5088 = $i; + $5089 = $wli240; + $5090 = (($5089) + ($5088<<3)|0); + $5091 = +HEAPF64[$5090>>3]; + $5092 = $5087 * $5091; + $5093 = $5082 - $5092; + $5094 = $i; + $5095 = (($5094) + 1)|0; + $5096 = $yr; + $5097 = (($5096) + ($5095<<3)|0); + HEAPF64[$5097>>3] = $5093; + $5098 = $tkm; + $5099 = $0; + $5100 = (($5099) + ($5098<<4)|0); + $5101 = (($5100) + 8|0); + $5102 = +HEAPF64[$5101>>3]; + $5103 = $i; + $5104 = $wlr239; + $5105 = (($5104) + ($5103<<3)|0); + $5106 = +HEAPF64[$5105>>3]; + $5107 = $5102 * $5106; + $5108 = $tkm; + $5109 = $0; + $5110 = (($5109) + ($5108<<4)|0); + $5111 = +HEAPF64[$5110>>3]; + $5112 = $i; + $5113 = $wli240; + $5114 = (($5113) + ($5112<<3)|0); + $5115 = +HEAPF64[$5114>>3]; + $5116 = $5111 * $5115; + $5117 = $5107 + $5116; + $5118 = $i; + $5119 = (($5118) + 1)|0; + $5120 = $yi; + $5121 = (($5120) + ($5119<<3)|0); + HEAPF64[$5121>>3] = $5117; + $5122 = $ind234; + $5123 = (($5122) + 1)|0; + $ind234 = $5123; + $5124 = $i; + $5125 = (($5124) + 1)|0; + $i = $5125; + } + $i = 0; + while(1) { + $5126 = $i; + $5127 = $M; + $5128 = ($5126|0)<($5127|0); + if (!($5128)) { + break; + } + $5129 = $i; + $5130 = (($5129) + 1)|0; + $5131 = $yr; + $5132 = (($5131) + ($5130<<3)|0); + $5133 = +HEAPF64[$5132>>3]; + $5134 = $radix; + $5135 = (($5134) - 1)|0; + $5136 = $i; + $5137 = (($5135) - ($5136))|0; + $5138 = $yr; + $5139 = (($5138) + ($5137<<3)|0); + $5140 = +HEAPF64[$5139>>3]; + $5141 = $5133 + $5140; + $5142 = $i; + $5143 = $taur; + $5144 = (($5143) + ($5142<<3)|0); + HEAPF64[$5144>>3] = $5141; + $5145 = $i; + $5146 = (($5145) + 1)|0; + $5147 = $yi; + $5148 = (($5147) + ($5146<<3)|0); + $5149 = +HEAPF64[$5148>>3]; + $5150 = $radix; + $5151 = (($5150) - 1)|0; + $5152 = $i; + $5153 = (($5151) - ($5152))|0; + $5154 = $yi; + $5155 = (($5154) + ($5153<<3)|0); + $5156 = +HEAPF64[$5155>>3]; + $5157 = $5149 - $5156; + $5158 = $i; + $5159 = $M; + $5160 = (($5158) + ($5159))|0; + $5161 = $taui; + $5162 = (($5161) + ($5160<<3)|0); + HEAPF64[$5162>>3] = $5157; + $5163 = $i; + $5164 = (($5163) + 1)|0; + $5165 = $yi; + $5166 = (($5165) + ($5164<<3)|0); + $5167 = +HEAPF64[$5166>>3]; + $5168 = $radix; + $5169 = (($5168) - 1)|0; + $5170 = $i; + $5171 = (($5169) - ($5170))|0; + $5172 = $yi; + $5173 = (($5172) + ($5171<<3)|0); + $5174 = +HEAPF64[$5173>>3]; + $5175 = $5167 + $5174; + $5176 = $i; + $5177 = $taui; + $5178 = (($5177) + ($5176<<3)|0); + HEAPF64[$5178>>3] = $5175; + $5179 = $i; + $5180 = (($5179) + 1)|0; + $5181 = $yr; + $5182 = (($5181) + ($5180<<3)|0); + $5183 = +HEAPF64[$5182>>3]; + $5184 = $radix; + $5185 = (($5184) - 1)|0; + $5186 = $i; + $5187 = (($5185) - ($5186))|0; + $5188 = $yr; + $5189 = (($5188) + ($5187<<3)|0); + $5190 = +HEAPF64[$5189>>3]; + $5191 = $5183 - $5190; + $5192 = $i; + $5193 = $M; + $5194 = (($5192) + ($5193))|0; + $5195 = $taur; + $5196 = (($5195) + ($5194<<3)|0); + HEAPF64[$5196>>3] = $5191; + $5197 = $i; + $5198 = (($5197) + 1)|0; + $i = $5198; + } + $5199 = $yr; + $5200 = +HEAPF64[$5199>>3]; + $temp1r235 = $5200; + $5201 = $yi; + $5202 = +HEAPF64[$5201>>3]; + $temp1i236 = $5202; + $i = 0; + while(1) { + $5203 = $i; + $5204 = $M; + $5205 = ($5203|0)<($5204|0); + if (!($5205)) { + break; + } + $5206 = $i; + $5207 = $taur; + $5208 = (($5207) + ($5206<<3)|0); + $5209 = +HEAPF64[$5208>>3]; + $5210 = $temp1r235; + $5211 = $5210 + $5209; + $temp1r235 = $5211; + $5212 = $i; + $5213 = $taui; + $5214 = (($5213) + ($5212<<3)|0); + $5215 = +HEAPF64[$5214>>3]; + $5216 = $temp1i236; + $5217 = $5216 + $5215; + $temp1i236 = $5217; + $5218 = $i; + $5219 = (($5218) + 1)|0; + $i = $5219; + } + $5220 = $temp1r235; + $5221 = $k233; + $5222 = $0; + $5223 = (($5222) + ($5221<<4)|0); + HEAPF64[$5223>>3] = $5220; + $5224 = $temp1i236; + $5225 = $k233; + $5226 = $0; + $5227 = (($5226) + ($5225<<4)|0); + $5228 = (($5227) + 8|0); + HEAPF64[$5228>>3] = $5224; + $u = 0; + while(1) { + $5229 = $u; + $5230 = $M; + $5231 = ($5229|0)<($5230|0); + if (!($5231)) { + break; + } + $5232 = $yr; + $5233 = +HEAPF64[$5232>>3]; + $temp1r235 = $5233; + $5234 = $yi; + $5235 = +HEAPF64[$5234>>3]; + $temp1i236 = $5235; + $temp2r237 = 0.0; + $temp2i238 = 0.0; + $v = 0; + while(1) { + $5236 = $v; + $5237 = $M; + $5238 = ($5236|0)<($5237|0); + if (!($5238)) { + break; + } + $5239 = $u; + $5240 = (($5239) + 1)|0; + $5241 = $v; + $5242 = (($5241) + 1)|0; + $5243 = Math_imul($5240, $5242)|0; + $t = $5243; + while(1) { + $5244 = $t; + $5245 = $radix; + $5246 = ($5244|0)>=($5245|0); + if (!($5246)) { + break; + } + $5247 = $radix; + $5248 = $t; + $5249 = (($5248) - ($5247))|0; + $t = $5249; + } + $5250 = $t; + $5251 = (($5250) - 1)|0; + $tt = $5251; + $5252 = $tt; + $5253 = $c1241; + $5254 = (($5253) + ($5252<<3)|0); + $5255 = +HEAPF64[$5254>>3]; + $5256 = $v; + $5257 = $taur; + $5258 = (($5257) + ($5256<<3)|0); + $5259 = +HEAPF64[$5258>>3]; + $5260 = $5255 * $5259; + $5261 = $temp1r235; + $5262 = $5261 + $5260; + $temp1r235 = $5262; + $5263 = $tt; + $5264 = $c1241; + $5265 = (($5264) + ($5263<<3)|0); + $5266 = +HEAPF64[$5265>>3]; + $5267 = $v; + $5268 = $taui; + $5269 = (($5268) + ($5267<<3)|0); + $5270 = +HEAPF64[$5269>>3]; + $5271 = $5266 * $5270; + $5272 = $temp1i236; + $5273 = $5272 + $5271; + $temp1i236 = $5273; + $5274 = $tt; + $5275 = $s1242; + $5276 = (($5275) + ($5274<<3)|0); + $5277 = +HEAPF64[$5276>>3]; + $5278 = $v; + $5279 = $M; + $5280 = (($5278) + ($5279))|0; + $5281 = $taur; + $5282 = (($5281) + ($5280<<3)|0); + $5283 = +HEAPF64[$5282>>3]; + $5284 = $5277 * $5283; + $5285 = $temp2r237; + $5286 = $5285 - $5284; + $temp2r237 = $5286; + $5287 = $tt; + $5288 = $s1242; + $5289 = (($5288) + ($5287<<3)|0); + $5290 = +HEAPF64[$5289>>3]; + $5291 = $v; + $5292 = $M; + $5293 = (($5291) + ($5292))|0; + $5294 = $taui; + $5295 = (($5294) + ($5293<<3)|0); + $5296 = +HEAPF64[$5295>>3]; + $5297 = $5290 * $5296; + $5298 = $temp2i238; + $5299 = $5298 - $5297; + $temp2i238 = $5299; + $5300 = $v; + $5301 = (($5300) + 1)|0; + $v = $5301; + } + $5302 = $3; + $5303 = (+($5302|0)); + $5304 = $temp2r237; + $5305 = $5303 * $5304; + $temp2r237 = $5305; + $5306 = $3; + $5307 = (+($5306|0)); + $5308 = $temp2i238; + $5309 = $5307 * $5308; + $temp2i238 = $5309; + $5310 = $temp1r235; + $5311 = $temp2i238; + $5312 = $5310 - $5311; + $5313 = $k233; + $5314 = $u; + $5315 = (($5314) + 1)|0; + $5316 = $m; + $5317 = Math_imul($5315, $5316)|0; + $5318 = (($5313) + ($5317))|0; + $5319 = $0; + $5320 = (($5319) + ($5318<<4)|0); + HEAPF64[$5320>>3] = $5312; + $5321 = $temp1i236; + $5322 = $temp2r237; + $5323 = $5321 + $5322; + $5324 = $k233; + $5325 = $u; + $5326 = (($5325) + 1)|0; + $5327 = $m; + $5328 = Math_imul($5326, $5327)|0; + $5329 = (($5324) + ($5328))|0; + $5330 = $0; + $5331 = (($5330) + ($5329<<4)|0); + $5332 = (($5331) + 8|0); + HEAPF64[$5332>>3] = $5323; + $5333 = $temp1r235; + $5334 = $temp2i238; + $5335 = $5333 + $5334; + $5336 = $k233; + $5337 = $radix; + $5338 = $u; + $5339 = (($5337) - ($5338))|0; + $5340 = (($5339) - 1)|0; + $5341 = $m; + $5342 = Math_imul($5340, $5341)|0; + $5343 = (($5336) + ($5342))|0; + $5344 = $0; + $5345 = (($5344) + ($5343<<4)|0); + HEAPF64[$5345>>3] = $5335; + $5346 = $temp1i236; + $5347 = $temp2r237; + $5348 = $5346 - $5347; + $5349 = $k233; + $5350 = $radix; + $5351 = $u; + $5352 = (($5350) - ($5351))|0; + $5353 = (($5352) - 1)|0; + $5354 = $m; + $5355 = Math_imul($5353, $5354)|0; + $5356 = (($5349) + ($5355))|0; + $5357 = $0; + $5358 = (($5357) + ($5356<<4)|0); + $5359 = (($5358) + 8|0); + HEAPF64[$5359>>3] = $5348; + $5360 = $u; + $5361 = (($5360) + 1)|0; + $u = $5361; + } + $5362 = $k233; + $5363 = (($5362) + 1)|0; + $k233 = $5363; + } + $5364 = $wlr239; + _free($5364); + $5365 = $wli240; + _free($5365); + $5366 = $taur; + _free($5366); + $5367 = $taui; + _free($5367); + $5368 = $c1241; + _free($5368); + $5369 = $s1242; + _free($5369); + $5370 = $yr; + _free($5370); + $5371 = $yi; + _free($5371); + } + } + } + } + } + } + } + } + } + } + } + STACKTOP = sp;return; +} +function _bluestein_fft($data,$oup,$obj,$sgn,$N) { + $data = $data|0; + $oup = $oup|0; + $obj = $obj|0; + $sgn = $sgn|0; + $N = $N|0; + var $0 = 0, $1 = 0, $10 = 0.0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0.0, $106 = 0.0, $107 = 0, $108 = 0, $109 = 0, $11 = 0.0, $110 = 0, $111 = 0.0, $112 = 0.0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0.0, $118 = 0, $119 = 0, $12 = 0.0, $120 = 0, $121 = 0.0, $122 = 0.0, $123 = 0.0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0.0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0.0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0.0, $141 = 0.0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0.0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0.0; + var $152 = 0.0, $153 = 0.0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0.0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0.0, $166 = 0.0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0, $171 = 0.0, $172 = 0, $173 = 0, $174 = 0, $175 = 0.0, $176 = 0.0, $177 = 0.0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; + var $206 = 0, $207 = 0, $208 = 0.0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0.0, $213 = 0.0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0.0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0.0; + var $224 = 0.0, $225 = 0.0, $226 = 0, $227 = 0, $228 = 0, $229 = 0.0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0.0, $235 = 0.0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0.0, $241 = 0; + var $242 = 0, $243 = 0, $244 = 0.0, $245 = 0.0, $246 = 0.0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0.0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0; + var $260 = 0, $261 = 0, $262 = 0, $263 = 0.0, $264 = 0, $265 = 0, $266 = 0, $267 = 0.0, $268 = 0.0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0.0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0.0; + var $279 = 0.0, $28 = 0, $280 = 0.0, $281 = 0, $282 = 0, $283 = 0, $284 = 0.0, $285 = 0.0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0.0, $291 = 0.0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0.0; + var $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0.0, $301 = 0.0, $302 = 0.0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0.0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0; + var $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0.0, $322 = 0.0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0; + var $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0.0, $346 = 0, $347 = 0, $348 = 0, $349 = 0.0, $35 = 0; + var $350 = 0.0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0.0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0.0, $361 = 0.0, $362 = 0.0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0; + var $369 = 0.0, $37 = 0, $370 = 0.0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0.0, $376 = 0.0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0.0, $382 = 0, $383 = 0, $384 = 0, $385 = 0.0, $386 = 0.0; + var $387 = 0.0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0.0, $401 = 0, $402 = 0, $403 = 0; + var $404 = 0.0, $405 = 0.0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0.0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0.0, $416 = 0.0, $417 = 0.0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0; + var $422 = 0, $423 = 0, $424 = 0.0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0.0, $43 = 0, $430 = 0.0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0.0, $436 = 0, $437 = 0, $438 = 0, $439 = 0.0, $44 = 0; + var $440 = 0.0, $441 = 0.0, $442 = 0, $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0; + var $459 = 0, $46 = 0, $460 = 0, $461 = 0, $462 = 0, $463 = 0, $464 = 0.0, $465 = 0.0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0; + var $477 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0.0, $51 = 0.0, $52 = 0, $53 = 0, $54 = 0, $55 = 0.0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0.0, $61 = 0.0, $62 = 0.0, $63 = 0, $64 = 0; + var $65 = 0, $66 = 0.0, $67 = 0.0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0.0, $80 = 0, $81 = 0.0, $82 = 0; + var $83 = 0, $84 = 0, $85 = 0.0, $86 = 0.0, $87 = 0, $88 = 0, $89 = 0, $9 = 0.0, $90 = 0, $91 = 0.0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0.0, $97 = 0.0, $98 = 0.0, $99 = 0, $K = 0, $M = 0; + var $def_N = 0, $def_lt = 0, $def_sgn = 0, $hk = 0, $hlt = 0, $i = 0, $ii = 0, $scale = 0.0, $temp = 0.0, $tempop = 0, $yn = 0, $yno = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $data; + $1 = $oup; + $2 = $obj; + $3 = $sgn; + $4 = $N; + $5 = $2; + $6 = (($5) + 268|0); + HEAP32[$6>>2] = 0; + $7 = $4; + $8 = (+($7|0)); + $9 = (+_log10((+$8))); + $10 = (+_log10(2.0)); + $11 = $9 / $10; + $12 = (+Math_ceil((+$11))); + $13 = (+Math_pow(2.0,(+$12))); + $14 = (~~(($13))); + $K = $14; + $def_lt = 1; + $15 = $2; + $16 = (($15) + 4|0); + $17 = HEAP32[$16>>2]|0; + $def_sgn = $17; + $18 = $2; + $19 = HEAP32[$18>>2]|0; + $def_N = $19; + $20 = $K; + $21 = $4; + $22 = $21<<1; + $23 = (($22) - 2)|0; + $24 = ($20|0)<($23|0); + if ($24) { + $25 = $K; + $26 = $25<<1; + $M = $26; + } else { + $27 = $K; + $M = $27; + } + $28 = $M; + $29 = $2; + HEAP32[$29>>2] = $28; + $30 = $M; + $31 = $30<<4; + $32 = (_malloc($31)|0); + $yn = $32; + $33 = $M; + $34 = $33<<4; + $35 = (_malloc($34)|0); + $hk = $35; + $36 = $M; + $37 = $36<<4; + $38 = (_malloc($37)|0); + $tempop = $38; + $39 = $M; + $40 = $39<<4; + $41 = (_malloc($40)|0); + $yno = $41; + $42 = $4; + $43 = $42<<4; + $44 = (_malloc($43)|0); + $hlt = $44; + $45 = $tempop; + $46 = $hlt; + $47 = $4; + $48 = $M; + _bluestein_exp($45,$46,$47,$48); + $49 = $M; + $50 = (+($49|0)); + $51 = 1.0 / $50; + $scale = $51; + $ii = 0; + while(1) { + $52 = $ii; + $53 = $M; + $54 = ($52|0)<($53|0); + if (!($54)) { + break; + } + $55 = $scale; + $56 = $ii; + $57 = $tempop; + $58 = (($57) + ($56<<4)|0); + $59 = (($58) + 8|0); + $60 = +HEAPF64[$59>>3]; + $61 = $60 * $55; + HEAPF64[$59>>3] = $61; + $62 = $scale; + $63 = $ii; + $64 = $tempop; + $65 = (($64) + ($63<<4)|0); + $66 = +HEAPF64[$65>>3]; + $67 = $66 * $62; + HEAPF64[$65>>3] = $67; + $68 = $ii; + $69 = (($68) + 1)|0; + $ii = $69; + } + $70 = $2; + $71 = $tempop; + $72 = $hk; + _fft_exec($70,$71,$72); + $73 = $3; + $74 = ($73|0)==(1); + if ($74) { + $i = 0; + while(1) { + $75 = $i; + $76 = $4; + $77 = ($75|0)<($76|0); + if (!($77)) { + break; + } + $78 = $i; + $79 = $0; + $80 = (($79) + ($78<<4)|0); + $81 = +HEAPF64[$80>>3]; + $82 = $i; + $83 = $hlt; + $84 = (($83) + ($82<<4)|0); + $85 = +HEAPF64[$84>>3]; + $86 = $81 * $85; + $87 = $i; + $88 = $0; + $89 = (($88) + ($87<<4)|0); + $90 = (($89) + 8|0); + $91 = +HEAPF64[$90>>3]; + $92 = $i; + $93 = $hlt; + $94 = (($93) + ($92<<4)|0); + $95 = (($94) + 8|0); + $96 = +HEAPF64[$95>>3]; + $97 = $91 * $96; + $98 = $86 + $97; + $99 = $i; + $100 = $tempop; + $101 = (($100) + ($99<<4)|0); + HEAPF64[$101>>3] = $98; + $102 = $i; + $103 = $0; + $104 = (($103) + ($102<<4)|0); + $105 = +HEAPF64[$104>>3]; + $106 = -$105; + $107 = $i; + $108 = $hlt; + $109 = (($108) + ($107<<4)|0); + $110 = (($109) + 8|0); + $111 = +HEAPF64[$110>>3]; + $112 = $106 * $111; + $113 = $i; + $114 = $0; + $115 = (($114) + ($113<<4)|0); + $116 = (($115) + 8|0); + $117 = +HEAPF64[$116>>3]; + $118 = $i; + $119 = $hlt; + $120 = (($119) + ($118<<4)|0); + $121 = +HEAPF64[$120>>3]; + $122 = $117 * $121; + $123 = $112 + $122; + $124 = $i; + $125 = $tempop; + $126 = (($125) + ($124<<4)|0); + $127 = (($126) + 8|0); + HEAPF64[$127>>3] = $123; + $128 = $i; + $129 = (($128) + 1)|0; + $i = $129; + } + } else { + $i = 0; + while(1) { + $130 = $i; + $131 = $4; + $132 = ($130|0)<($131|0); + if (!($132)) { + break; + } + $133 = $i; + $134 = $0; + $135 = (($134) + ($133<<4)|0); + $136 = +HEAPF64[$135>>3]; + $137 = $i; + $138 = $hlt; + $139 = (($138) + ($137<<4)|0); + $140 = +HEAPF64[$139>>3]; + $141 = $136 * $140; + $142 = $i; + $143 = $0; + $144 = (($143) + ($142<<4)|0); + $145 = (($144) + 8|0); + $146 = +HEAPF64[$145>>3]; + $147 = $i; + $148 = $hlt; + $149 = (($148) + ($147<<4)|0); + $150 = (($149) + 8|0); + $151 = +HEAPF64[$150>>3]; + $152 = $146 * $151; + $153 = $141 - $152; + $154 = $i; + $155 = $tempop; + $156 = (($155) + ($154<<4)|0); + HEAPF64[$156>>3] = $153; + $157 = $i; + $158 = $0; + $159 = (($158) + ($157<<4)|0); + $160 = +HEAPF64[$159>>3]; + $161 = $i; + $162 = $hlt; + $163 = (($162) + ($161<<4)|0); + $164 = (($163) + 8|0); + $165 = +HEAPF64[$164>>3]; + $166 = $160 * $165; + $167 = $i; + $168 = $0; + $169 = (($168) + ($167<<4)|0); + $170 = (($169) + 8|0); + $171 = +HEAPF64[$170>>3]; + $172 = $i; + $173 = $hlt; + $174 = (($173) + ($172<<4)|0); + $175 = +HEAPF64[$174>>3]; + $176 = $171 * $175; + $177 = $166 + $176; + $178 = $i; + $179 = $tempop; + $180 = (($179) + ($178<<4)|0); + $181 = (($180) + 8|0); + HEAPF64[$181>>3] = $177; + $182 = $i; + $183 = (($182) + 1)|0; + $i = $183; + } + } + $184 = $4; + $i = $184; + while(1) { + $185 = $i; + $186 = $M; + $187 = ($185|0)<($186|0); + if (!($187)) { + break; + } + $188 = $i; + $189 = $tempop; + $190 = (($189) + ($188<<4)|0); + HEAPF64[$190>>3] = 0.0; + $191 = $i; + $192 = $tempop; + $193 = (($192) + ($191<<4)|0); + $194 = (($193) + 8|0); + HEAPF64[$194>>3] = 0.0; + $195 = $i; + $196 = (($195) + 1)|0; + $i = $196; + } + $197 = $2; + $198 = $tempop; + $199 = $yn; + _fft_exec($197,$198,$199); + $200 = $3; + $201 = ($200|0)==(1); + if ($201) { + $i = 0; + while(1) { + $202 = $i; + $203 = $M; + $204 = ($202|0)<($203|0); + if (!($204)) { + break; + } + $205 = $i; + $206 = $yn; + $207 = (($206) + ($205<<4)|0); + $208 = +HEAPF64[$207>>3]; + $209 = $i; + $210 = $hk; + $211 = (($210) + ($209<<4)|0); + $212 = +HEAPF64[$211>>3]; + $213 = $208 * $212; + $214 = $i; + $215 = $yn; + $216 = (($215) + ($214<<4)|0); + $217 = (($216) + 8|0); + $218 = +HEAPF64[$217>>3]; + $219 = $i; + $220 = $hk; + $221 = (($220) + ($219<<4)|0); + $222 = (($221) + 8|0); + $223 = +HEAPF64[$222>>3]; + $224 = $218 * $223; + $225 = $213 - $224; + $temp = $225; + $226 = $i; + $227 = $yn; + $228 = (($227) + ($226<<4)|0); + $229 = +HEAPF64[$228>>3]; + $230 = $i; + $231 = $hk; + $232 = (($231) + ($230<<4)|0); + $233 = (($232) + 8|0); + $234 = +HEAPF64[$233>>3]; + $235 = $229 * $234; + $236 = $i; + $237 = $yn; + $238 = (($237) + ($236<<4)|0); + $239 = (($238) + 8|0); + $240 = +HEAPF64[$239>>3]; + $241 = $i; + $242 = $hk; + $243 = (($242) + ($241<<4)|0); + $244 = +HEAPF64[$243>>3]; + $245 = $240 * $244; + $246 = $235 + $245; + $247 = $i; + $248 = $yn; + $249 = (($248) + ($247<<4)|0); + $250 = (($249) + 8|0); + HEAPF64[$250>>3] = $246; + $251 = $temp; + $252 = $i; + $253 = $yn; + $254 = (($253) + ($252<<4)|0); + HEAPF64[$254>>3] = $251; + $255 = $i; + $256 = (($255) + 1)|0; + $i = $256; + } + } else { + $i = 0; + while(1) { + $257 = $i; + $258 = $M; + $259 = ($257|0)<($258|0); + if (!($259)) { + break; + } + $260 = $i; + $261 = $yn; + $262 = (($261) + ($260<<4)|0); + $263 = +HEAPF64[$262>>3]; + $264 = $i; + $265 = $hk; + $266 = (($265) + ($264<<4)|0); + $267 = +HEAPF64[$266>>3]; + $268 = $263 * $267; + $269 = $i; + $270 = $yn; + $271 = (($270) + ($269<<4)|0); + $272 = (($271) + 8|0); + $273 = +HEAPF64[$272>>3]; + $274 = $i; + $275 = $hk; + $276 = (($275) + ($274<<4)|0); + $277 = (($276) + 8|0); + $278 = +HEAPF64[$277>>3]; + $279 = $273 * $278; + $280 = $268 + $279; + $temp = $280; + $281 = $i; + $282 = $yn; + $283 = (($282) + ($281<<4)|0); + $284 = +HEAPF64[$283>>3]; + $285 = -$284; + $286 = $i; + $287 = $hk; + $288 = (($287) + ($286<<4)|0); + $289 = (($288) + 8|0); + $290 = +HEAPF64[$289>>3]; + $291 = $285 * $290; + $292 = $i; + $293 = $yn; + $294 = (($293) + ($292<<4)|0); + $295 = (($294) + 8|0); + $296 = +HEAPF64[$295>>3]; + $297 = $i; + $298 = $hk; + $299 = (($298) + ($297<<4)|0); + $300 = +HEAPF64[$299>>3]; + $301 = $296 * $300; + $302 = $291 + $301; + $303 = $i; + $304 = $yn; + $305 = (($304) + ($303<<4)|0); + $306 = (($305) + 8|0); + HEAPF64[$306>>3] = $302; + $307 = $temp; + $308 = $i; + $309 = $yn; + $310 = (($309) + ($308<<4)|0); + HEAPF64[$310>>3] = $307; + $311 = $i; + $312 = (($311) + 1)|0; + $i = $312; + } + } + $ii = 0; + while(1) { + $313 = $ii; + $314 = $M; + $315 = ($313|0)<($314|0); + if (!($315)) { + break; + } + $316 = $2; + $317 = (($316) + 272|0); + $318 = $ii; + $319 = (($317) + ($318<<4)|0); + $320 = (($319) + 8|0); + $321 = +HEAPF64[$320>>3]; + $322 = -$321; + $323 = $2; + $324 = (($323) + 272|0); + $325 = $ii; + $326 = (($324) + ($325<<4)|0); + $327 = (($326) + 8|0); + HEAPF64[$327>>3] = $322; + $328 = $ii; + $329 = (($328) + 1)|0; + $ii = $329; + } + $330 = $3; + $331 = Math_imul(-1, $330)|0; + $332 = $2; + $333 = (($332) + 4|0); + HEAP32[$333>>2] = $331; + $334 = $2; + $335 = $yn; + $336 = $yno; + _fft_exec($334,$335,$336); + $337 = $3; + $338 = ($337|0)==(1); + if ($338) { + $i = 0; + while(1) { + $339 = $i; + $340 = $4; + $341 = ($339|0)<($340|0); + if (!($341)) { + break; + } + $342 = $i; + $343 = $yno; + $344 = (($343) + ($342<<4)|0); + $345 = +HEAPF64[$344>>3]; + $346 = $i; + $347 = $hlt; + $348 = (($347) + ($346<<4)|0); + $349 = +HEAPF64[$348>>3]; + $350 = $345 * $349; + $351 = $i; + $352 = $yno; + $353 = (($352) + ($351<<4)|0); + $354 = (($353) + 8|0); + $355 = +HEAPF64[$354>>3]; + $356 = $i; + $357 = $hlt; + $358 = (($357) + ($356<<4)|0); + $359 = (($358) + 8|0); + $360 = +HEAPF64[$359>>3]; + $361 = $355 * $360; + $362 = $350 + $361; + $363 = $i; + $364 = $1; + $365 = (($364) + ($363<<4)|0); + HEAPF64[$365>>3] = $362; + $366 = $i; + $367 = $yno; + $368 = (($367) + ($366<<4)|0); + $369 = +HEAPF64[$368>>3]; + $370 = -$369; + $371 = $i; + $372 = $hlt; + $373 = (($372) + ($371<<4)|0); + $374 = (($373) + 8|0); + $375 = +HEAPF64[$374>>3]; + $376 = $370 * $375; + $377 = $i; + $378 = $yno; + $379 = (($378) + ($377<<4)|0); + $380 = (($379) + 8|0); + $381 = +HEAPF64[$380>>3]; + $382 = $i; + $383 = $hlt; + $384 = (($383) + ($382<<4)|0); + $385 = +HEAPF64[$384>>3]; + $386 = $381 * $385; + $387 = $376 + $386; + $388 = $i; + $389 = $1; + $390 = (($389) + ($388<<4)|0); + $391 = (($390) + 8|0); + HEAPF64[$391>>3] = $387; + $392 = $i; + $393 = (($392) + 1)|0; + $i = $393; + } + } else { + $i = 0; + while(1) { + $394 = $i; + $395 = $4; + $396 = ($394|0)<($395|0); + if (!($396)) { + break; + } + $397 = $i; + $398 = $yno; + $399 = (($398) + ($397<<4)|0); + $400 = +HEAPF64[$399>>3]; + $401 = $i; + $402 = $hlt; + $403 = (($402) + ($401<<4)|0); + $404 = +HEAPF64[$403>>3]; + $405 = $400 * $404; + $406 = $i; + $407 = $yno; + $408 = (($407) + ($406<<4)|0); + $409 = (($408) + 8|0); + $410 = +HEAPF64[$409>>3]; + $411 = $i; + $412 = $hlt; + $413 = (($412) + ($411<<4)|0); + $414 = (($413) + 8|0); + $415 = +HEAPF64[$414>>3]; + $416 = $410 * $415; + $417 = $405 - $416; + $418 = $i; + $419 = $1; + $420 = (($419) + ($418<<4)|0); + HEAPF64[$420>>3] = $417; + $421 = $i; + $422 = $yno; + $423 = (($422) + ($421<<4)|0); + $424 = +HEAPF64[$423>>3]; + $425 = $i; + $426 = $hlt; + $427 = (($426) + ($425<<4)|0); + $428 = (($427) + 8|0); + $429 = +HEAPF64[$428>>3]; + $430 = $424 * $429; + $431 = $i; + $432 = $yno; + $433 = (($432) + ($431<<4)|0); + $434 = (($433) + 8|0); + $435 = +HEAPF64[$434>>3]; + $436 = $i; + $437 = $hlt; + $438 = (($437) + ($436<<4)|0); + $439 = +HEAPF64[$438>>3]; + $440 = $435 * $439; + $441 = $430 + $440; + $442 = $i; + $443 = $1; + $444 = (($443) + ($442<<4)|0); + $445 = (($444) + 8|0); + HEAPF64[$445>>3] = $441; + $446 = $i; + $447 = (($446) + 1)|0; + $i = $447; + } + } + $448 = $def_sgn; + $449 = $2; + $450 = (($449) + 4|0); + HEAP32[$450>>2] = $448; + $451 = $def_N; + $452 = $2; + HEAP32[$452>>2] = $451; + $453 = $def_lt; + $454 = $2; + $455 = (($454) + 268|0); + HEAP32[$455>>2] = $453; + $ii = 0; + while(1) { + $456 = $ii; + $457 = $M; + $458 = ($456|0)<($457|0); + if (!($458)) { + break; + } + $459 = $2; + $460 = (($459) + 272|0); + $461 = $ii; + $462 = (($460) + ($461<<4)|0); + $463 = (($462) + 8|0); + $464 = +HEAPF64[$463>>3]; + $465 = -$464; + $466 = $2; + $467 = (($466) + 272|0); + $468 = $ii; + $469 = (($467) + ($468<<4)|0); + $470 = (($469) + 8|0); + HEAPF64[$470>>3] = $465; + $471 = $ii; + $472 = (($471) + 1)|0; + $ii = $472; + } + $473 = $yn; + _free($473); + $474 = $yno; + _free($474); + $475 = $tempop; + _free($475); + $476 = $hk; + _free($476); + $477 = $hlt; + _free($477); + STACKTOP = sp;return; +} +function _bluestein_exp($hl,$hlt,$len,$M) { + $hl = $hl|0; + $hlt = $hlt|0; + $len = $len|0; + $M = $M|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $11 = 0, $12 = 0, $13 = 0.0, $14 = 0, $15 = 0.0, $16 = 0.0, $17 = 0.0, $18 = 0.0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0.0, $23 = 0.0, $24 = 0; + var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0.0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0.0, $4 = 0.0, $40 = 0, $41 = 0, $42 = 0; + var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0.0, $60 = 0; + var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0.0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0; + var $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0.0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0.0, $96 = 0, $97 = 0; + var $98 = 0, $99 = 0, $PI = 0.0, $angle = 0.0, $i = 0, $l2 = 0, $len2 = 0, $theta = 0.0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $hl; + $1 = $hlt; + $2 = $len; + $3 = $M; + $PI = 3.141592653589793116; + $4 = $PI; + $5 = $2; + $6 = (+($5|0)); + $7 = $4 / $6; + $theta = $7; + $l2 = 0; + $8 = $2; + $9 = $8<<1; + $len2 = $9; + $i = 0; + while(1) { + $10 = $i; + $11 = $2; + $12 = ($10|0)<($11|0); + if (!($12)) { + break; + } + $13 = $theta; + $14 = $l2; + $15 = (+($14|0)); + $16 = $13 * $15; + $angle = $16; + $17 = $angle; + $18 = (+Math_cos((+$17))); + $19 = $i; + $20 = $1; + $21 = (($20) + ($19<<4)|0); + HEAPF64[$21>>3] = $18; + $22 = $angle; + $23 = (+Math_sin((+$22))); + $24 = $i; + $25 = $1; + $26 = (($25) + ($24<<4)|0); + $27 = (($26) + 8|0); + HEAPF64[$27>>3] = $23; + $28 = $i; + $29 = $1; + $30 = (($29) + ($28<<4)|0); + $31 = +HEAPF64[$30>>3]; + $32 = $i; + $33 = $0; + $34 = (($33) + ($32<<4)|0); + HEAPF64[$34>>3] = $31; + $35 = $i; + $36 = $1; + $37 = (($36) + ($35<<4)|0); + $38 = (($37) + 8|0); + $39 = +HEAPF64[$38>>3]; + $40 = $i; + $41 = $0; + $42 = (($41) + ($40<<4)|0); + $43 = (($42) + 8|0); + HEAPF64[$43>>3] = $39; + $44 = $i; + $45 = $44<<1; + $46 = (($45) + 1)|0; + $47 = $l2; + $48 = (($47) + ($46))|0; + $l2 = $48; + while(1) { + $49 = $l2; + $50 = $len2; + $51 = ($49|0)>($50|0); + if (!($51)) { + break; + } + $52 = $len2; + $53 = $l2; + $54 = (($53) - ($52))|0; + $l2 = $54; + } + $55 = $i; + $56 = (($55) + 1)|0; + $i = $56; + } + $57 = $2; + $i = $57; + while(1) { + $58 = $i; + $59 = $3; + $60 = $2; + $61 = (($59) - ($60))|0; + $62 = (($61) + 1)|0; + $63 = ($58|0)<($62|0); + if (!($63)) { + break; + } + $64 = $i; + $65 = $0; + $66 = (($65) + ($64<<4)|0); + HEAPF64[$66>>3] = 0.0; + $67 = $i; + $68 = $0; + $69 = (($68) + ($67<<4)|0); + $70 = (($69) + 8|0); + HEAPF64[$70>>3] = 0.0; + $71 = $i; + $72 = (($71) + 1)|0; + $i = $72; + } + $73 = $3; + $74 = $2; + $75 = (($73) - ($74))|0; + $76 = (($75) + 1)|0; + $i = $76; + while(1) { + $77 = $i; + $78 = $3; + $79 = ($77|0)<($78|0); + if (!($79)) { + break; + } + $80 = $3; + $81 = $i; + $82 = (($80) - ($81))|0; + $83 = $1; + $84 = (($83) + ($82<<4)|0); + $85 = +HEAPF64[$84>>3]; + $86 = $i; + $87 = $0; + $88 = (($87) + ($86<<4)|0); + HEAPF64[$88>>3] = $85; + $89 = $3; + $90 = $i; + $91 = (($89) - ($90))|0; + $92 = $1; + $93 = (($92) + ($91<<4)|0); + $94 = (($93) + 8|0); + $95 = +HEAPF64[$94>>3]; + $96 = $i; + $97 = $0; + $98 = (($97) + ($96<<4)|0); + $99 = (($98) + 8|0); + HEAPF64[$99>>3] = $95; + $100 = $i; + $101 = (($100) + 1)|0; + $i = $101; + } + STACKTOP = sp;return; +} +function _fft_real_init($N,$sgn) { + $N = $N|0; + $sgn = $sgn|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0.0, $18 = 0.0, $19 = 0, $2 = 0, $20 = 0.0, $21 = 0.0, $22 = 0.0, $23 = 0.0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0.0, $29 = 0.0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $PI = 0.0, $k = 0; + var $obj = 0, $theta = 0.0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $N; + $1 = $sgn; + $obj = 0; + $PI = 3.141592653589793116; + $2 = $0; + $3 = (($2|0) / 2)&-1; + $4 = $3<<4; + $5 = (24 + ($4))|0; + $6 = (_malloc($5)|0); + $obj = $6; + $7 = $0; + $8 = (($7|0) / 2)&-1; + $9 = $1; + $10 = (_fft_init($8,$9)|0); + $11 = $obj; + HEAP32[$11>>2] = $10; + $k = 0; + while(1) { + $12 = $k; + $13 = $0; + $14 = (($13|0) / 2)&-1; + $15 = ($12|0)<($14|0); + if (!($15)) { + break; + } + $16 = $k; + $17 = (+($16|0)); + $18 = 6.283185307179586232 * $17; + $19 = $0; + $20 = (+($19|0)); + $21 = $18 / $20; + $theta = $21; + $22 = $theta; + $23 = (+Math_cos((+$22))); + $24 = $k; + $25 = $obj; + $26 = (($25) + 8|0); + $27 = (($26) + ($24<<4)|0); + HEAPF64[$27>>3] = $23; + $28 = $theta; + $29 = (+Math_sin((+$28))); + $30 = $k; + $31 = $obj; + $32 = (($31) + 8|0); + $33 = (($32) + ($30<<4)|0); + $34 = (($33) + 8|0); + HEAPF64[$34>>3] = $29; + $35 = $k; + $36 = (($35) + 1)|0; + $k = $36; + } + $37 = $obj; + STACKTOP = sp;return ($37|0); +} +function _fft_r2c_exec($obj,$inp,$oup) { + $obj = $obj|0; + $inp = $inp|0; + $oup = $oup|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0.0, $103 = 0.0, $104 = 0.0, $105 = 0.0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0.0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0.0, $121 = 0.0, $122 = 0.0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0.0, $128 = 0.0, $129 = 0.0, $13 = 0, $130 = 0.0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0.0, $137 = 0.0, $138 = 0.0, $139 = 0.0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0.0, $148 = 0, $149 = 0, $15 = 0, $150 = 0.0, $151 = 0.0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0.0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0.0, $176 = 0.0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $19 = 0, $2 = 0; + var $20 = 0, $21 = 0.0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0.0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0; + var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0.0, $43 = 0, $44 = 0, $45 = 0.0, $46 = 0.0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0; + var $57 = 0.0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0.0, $65 = 0.0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0.0, $72 = 0, $73 = 0, $74 = 0; + var $75 = 0.0, $76 = 0.0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0.0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0.0, $87 = 0.0, $88 = 0.0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0; + var $93 = 0.0, $94 = 0.0, $95 = 0.0, $96 = 0.0, $97 = 0, $98 = 0, $99 = 0, $N = 0, $N2 = 0, $cinp = 0, $coup = 0, $i = 0, $temp1 = 0.0, $temp2 = 0.0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $obj; + $1 = $inp; + $2 = $oup; + $3 = $0; + $4 = HEAP32[$3>>2]|0; + $5 = HEAP32[$4>>2]|0; + $N2 = $5; + $6 = $N2; + $7 = $6<<1; + $N = $7; + $8 = $N2; + $9 = $8<<4; + $10 = (_malloc($9)|0); + $cinp = $10; + $11 = $N2; + $12 = $11<<4; + $13 = (_malloc($12)|0); + $coup = $13; + $i = 0; + while(1) { + $14 = $i; + $15 = $N2; + $16 = ($14|0)<($15|0); + if (!($16)) { + break; + } + $17 = $i; + $18 = $17<<1; + $19 = $1; + $20 = (($19) + ($18<<3)|0); + $21 = +HEAPF64[$20>>3]; + $22 = $i; + $23 = $cinp; + $24 = (($23) + ($22<<4)|0); + HEAPF64[$24>>3] = $21; + $25 = $i; + $26 = $25<<1; + $27 = (($26) + 1)|0; + $28 = $1; + $29 = (($28) + ($27<<3)|0); + $30 = +HEAPF64[$29>>3]; + $31 = $i; + $32 = $cinp; + $33 = (($32) + ($31<<4)|0); + $34 = (($33) + 8|0); + HEAPF64[$34>>3] = $30; + $35 = $i; + $36 = (($35) + 1)|0; + $i = $36; + } + $37 = $0; + $38 = HEAP32[$37>>2]|0; + $39 = $cinp; + $40 = $coup; + _fft_exec($38,$39,$40); + $41 = $coup; + $42 = +HEAPF64[$41>>3]; + $43 = $coup; + $44 = (($43) + 8|0); + $45 = +HEAPF64[$44>>3]; + $46 = $42 + $45; + $47 = $2; + HEAPF64[$47>>3] = $46; + $48 = $2; + $49 = (($48) + 8|0); + HEAPF64[$49>>3] = 0.0; + $i = 1; + while(1) { + $50 = $i; + $51 = $N2; + $52 = ($50|0)<($51|0); + if (!($52)) { + break; + } + $53 = $i; + $54 = $coup; + $55 = (($54) + ($53<<4)|0); + $56 = (($55) + 8|0); + $57 = +HEAPF64[$56>>3]; + $58 = $N2; + $59 = $i; + $60 = (($58) - ($59))|0; + $61 = $coup; + $62 = (($61) + ($60<<4)|0); + $63 = (($62) + 8|0); + $64 = +HEAPF64[$63>>3]; + $65 = $57 + $64; + $temp1 = $65; + $66 = $N2; + $67 = $i; + $68 = (($66) - ($67))|0; + $69 = $coup; + $70 = (($69) + ($68<<4)|0); + $71 = +HEAPF64[$70>>3]; + $72 = $i; + $73 = $coup; + $74 = (($73) + ($72<<4)|0); + $75 = +HEAPF64[$74>>3]; + $76 = $71 - $75; + $temp2 = $76; + $77 = $i; + $78 = $coup; + $79 = (($78) + ($77<<4)|0); + $80 = +HEAPF64[$79>>3]; + $81 = $N2; + $82 = $i; + $83 = (($81) - ($82))|0; + $84 = $coup; + $85 = (($84) + ($83<<4)|0); + $86 = +HEAPF64[$85>>3]; + $87 = $80 + $86; + $88 = $temp1; + $89 = $i; + $90 = $0; + $91 = (($90) + 8|0); + $92 = (($91) + ($89<<4)|0); + $93 = +HEAPF64[$92>>3]; + $94 = $88 * $93; + $95 = $87 + $94; + $96 = $temp2; + $97 = $i; + $98 = $0; + $99 = (($98) + 8|0); + $100 = (($99) + ($97<<4)|0); + $101 = (($100) + 8|0); + $102 = +HEAPF64[$101>>3]; + $103 = $96 * $102; + $104 = $95 + $103; + $105 = $104 / 2.0; + $106 = $i; + $107 = $2; + $108 = (($107) + ($106<<4)|0); + HEAPF64[$108>>3] = $105; + $109 = $i; + $110 = $coup; + $111 = (($110) + ($109<<4)|0); + $112 = (($111) + 8|0); + $113 = +HEAPF64[$112>>3]; + $114 = $N2; + $115 = $i; + $116 = (($114) - ($115))|0; + $117 = $coup; + $118 = (($117) + ($116<<4)|0); + $119 = (($118) + 8|0); + $120 = +HEAPF64[$119>>3]; + $121 = $113 - $120; + $122 = $temp2; + $123 = $i; + $124 = $0; + $125 = (($124) + 8|0); + $126 = (($125) + ($123<<4)|0); + $127 = +HEAPF64[$126>>3]; + $128 = $122 * $127; + $129 = $121 + $128; + $130 = $temp1; + $131 = $i; + $132 = $0; + $133 = (($132) + 8|0); + $134 = (($133) + ($131<<4)|0); + $135 = (($134) + 8|0); + $136 = +HEAPF64[$135>>3]; + $137 = $130 * $136; + $138 = $129 - $137; + $139 = $138 / 2.0; + $140 = $i; + $141 = $2; + $142 = (($141) + ($140<<4)|0); + $143 = (($142) + 8|0); + HEAPF64[$143>>3] = $139; + $144 = $i; + $145 = (($144) + 1)|0; + $i = $145; + } + $146 = $coup; + $147 = +HEAPF64[$146>>3]; + $148 = $coup; + $149 = (($148) + 8|0); + $150 = +HEAPF64[$149>>3]; + $151 = $147 - $150; + $152 = $N2; + $153 = $2; + $154 = (($153) + ($152<<4)|0); + HEAPF64[$154>>3] = $151; + $155 = $N2; + $156 = $2; + $157 = (($156) + ($155<<4)|0); + $158 = (($157) + 8|0); + HEAPF64[$158>>3] = 0.0; + $i = 1; + while(1) { + $159 = $i; + $160 = $N2; + $161 = ($159|0)<($160|0); + if (!($161)) { + break; + } + $162 = $i; + $163 = $2; + $164 = (($163) + ($162<<4)|0); + $165 = +HEAPF64[$164>>3]; + $166 = $N; + $167 = $i; + $168 = (($166) - ($167))|0; + $169 = $2; + $170 = (($169) + ($168<<4)|0); + HEAPF64[$170>>3] = $165; + $171 = $i; + $172 = $2; + $173 = (($172) + ($171<<4)|0); + $174 = (($173) + 8|0); + $175 = +HEAPF64[$174>>3]; + $176 = -$175; + $177 = $N; + $178 = $i; + $179 = (($177) - ($178))|0; + $180 = $2; + $181 = (($180) + ($179<<4)|0); + $182 = (($181) + 8|0); + HEAPF64[$182>>3] = $176; + $183 = $i; + $184 = (($183) + 1)|0; + $i = $184; + } + $185 = $cinp; + _free($185); + $186 = $coup; + _free($186); + STACKTOP = sp;return; +} +function _fft_c2r_exec($obj,$inp,$oup) { + $obj = $obj|0; + $inp = $inp|0; + $oup = $oup|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0.0, $102 = 0.0, $103 = 0.0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0.0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0.0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0.0, $22 = 0.0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; + var $28 = 0, $29 = 0.0, $3 = 0, $30 = 0.0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0.0, $37 = 0.0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0.0, $42 = 0.0, $43 = 0, $44 = 0, $45 = 0; + var $46 = 0.0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0.0, $53 = 0.0, $54 = 0.0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0.0, $6 = 0, $60 = 0.0, $61 = 0.0, $62 = 0.0, $63 = 0; + var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0.0, $69 = 0.0, $7 = 0, $70 = 0.0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0.0, $79 = 0, $8 = 0, $80 = 0, $81 = 0; + var $82 = 0, $83 = 0, $84 = 0, $85 = 0.0, $86 = 0.0, $87 = 0.0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0.0, $93 = 0.0, $94 = 0.0, $95 = 0.0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $N = 0; + var $N2 = 0, $cinp = 0, $coup = 0, $i = 0, $temp1 = 0.0, $temp2 = 0.0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $obj; + $1 = $inp; + $2 = $oup; + $3 = $0; + $4 = HEAP32[$3>>2]|0; + $5 = HEAP32[$4>>2]|0; + $N2 = $5; + $6 = $N2; + $7 = $6<<1; + $N = $7; + $8 = $N2; + $9 = $8<<4; + $10 = (_malloc($9)|0); + $cinp = $10; + $11 = $N2; + $12 = $11<<4; + $13 = (_malloc($12)|0); + $coup = $13; + $i = 0; + while(1) { + $14 = $i; + $15 = $N2; + $16 = ($14|0)<($15|0); + if (!($16)) { + break; + } + $17 = $i; + $18 = $1; + $19 = (($18) + ($17<<4)|0); + $20 = (($19) + 8|0); + $21 = +HEAPF64[$20>>3]; + $22 = -$21; + $23 = $N2; + $24 = $i; + $25 = (($23) - ($24))|0; + $26 = $1; + $27 = (($26) + ($25<<4)|0); + $28 = (($27) + 8|0); + $29 = +HEAPF64[$28>>3]; + $30 = $22 - $29; + $temp1 = $30; + $31 = $N2; + $32 = $i; + $33 = (($31) - ($32))|0; + $34 = $1; + $35 = (($34) + ($33<<4)|0); + $36 = +HEAPF64[$35>>3]; + $37 = -$36; + $38 = $i; + $39 = $1; + $40 = (($39) + ($38<<4)|0); + $41 = +HEAPF64[$40>>3]; + $42 = $37 + $41; + $temp2 = $42; + $43 = $i; + $44 = $1; + $45 = (($44) + ($43<<4)|0); + $46 = +HEAPF64[$45>>3]; + $47 = $N2; + $48 = $i; + $49 = (($47) - ($48))|0; + $50 = $1; + $51 = (($50) + ($49<<4)|0); + $52 = +HEAPF64[$51>>3]; + $53 = $46 + $52; + $54 = $temp1; + $55 = $i; + $56 = $0; + $57 = (($56) + 8|0); + $58 = (($57) + ($55<<4)|0); + $59 = +HEAPF64[$58>>3]; + $60 = $54 * $59; + $61 = $53 + $60; + $62 = $temp2; + $63 = $i; + $64 = $0; + $65 = (($64) + 8|0); + $66 = (($65) + ($63<<4)|0); + $67 = (($66) + 8|0); + $68 = +HEAPF64[$67>>3]; + $69 = $62 * $68; + $70 = $61 - $69; + $71 = $i; + $72 = $cinp; + $73 = (($72) + ($71<<4)|0); + HEAPF64[$73>>3] = $70; + $74 = $i; + $75 = $1; + $76 = (($75) + ($74<<4)|0); + $77 = (($76) + 8|0); + $78 = +HEAPF64[$77>>3]; + $79 = $N2; + $80 = $i; + $81 = (($79) - ($80))|0; + $82 = $1; + $83 = (($82) + ($81<<4)|0); + $84 = (($83) + 8|0); + $85 = +HEAPF64[$84>>3]; + $86 = $78 - $85; + $87 = $temp2; + $88 = $i; + $89 = $0; + $90 = (($89) + 8|0); + $91 = (($90) + ($88<<4)|0); + $92 = +HEAPF64[$91>>3]; + $93 = $87 * $92; + $94 = $86 + $93; + $95 = $temp1; + $96 = $i; + $97 = $0; + $98 = (($97) + 8|0); + $99 = (($98) + ($96<<4)|0); + $100 = (($99) + 8|0); + $101 = +HEAPF64[$100>>3]; + $102 = $95 * $101; + $103 = $94 + $102; + $104 = $i; + $105 = $cinp; + $106 = (($105) + ($104<<4)|0); + $107 = (($106) + 8|0); + HEAPF64[$107>>3] = $103; + $108 = $i; + $109 = (($108) + 1)|0; + $i = $109; + } + $110 = $0; + $111 = HEAP32[$110>>2]|0; + $112 = $cinp; + $113 = $coup; + _fft_exec($111,$112,$113); + $i = 0; + while(1) { + $114 = $i; + $115 = $N2; + $116 = ($114|0)<($115|0); + if (!($116)) { + break; + } + $117 = $i; + $118 = $coup; + $119 = (($118) + ($117<<4)|0); + $120 = +HEAPF64[$119>>3]; + $121 = $i; + $122 = $121<<1; + $123 = $2; + $124 = (($123) + ($122<<3)|0); + HEAPF64[$124>>3] = $120; + $125 = $i; + $126 = $coup; + $127 = (($126) + ($125<<4)|0); + $128 = (($127) + 8|0); + $129 = +HEAPF64[$128>>3]; + $130 = $i; + $131 = $130<<1; + $132 = (($131) + 1)|0; + $133 = $2; + $134 = (($133) + ($132<<3)|0); + HEAPF64[$134>>3] = $129; + $135 = $i; + $136 = (($135) + 1)|0; + $i = $136; + } + $137 = $cinp; + _free($137); + $138 = $coup; + _free($138); + STACKTOP = sp;return; +} +function _factorf($M) { + $M = $M|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0; + var $7 = 0, $8 = 0, $9 = 0, $N = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $M; + $1 = $0; + $N = $1; + while(1) { + $2 = $N; + $3 = (($2|0) % 7)&-1; + $4 = ($3|0)==(0); + if (!($4)) { + break; + } + $5 = $N; + $6 = (($5|0) / 7)&-1; + $N = $6; + } + while(1) { + $7 = $N; + $8 = (($7|0) % 3)&-1; + $9 = ($8|0)==(0); + if (!($9)) { + break; + } + $10 = $N; + $11 = (($10|0) / 3)&-1; + $N = $11; + } + while(1) { + $12 = $N; + $13 = (($12|0) % 5)&-1; + $14 = ($13|0)==(0); + if (!($14)) { + break; + } + $15 = $N; + $16 = (($15|0) / 5)&-1; + $N = $16; + } + while(1) { + $17 = $N; + $18 = (($17|0) % 2)&-1; + $19 = ($18|0)==(0); + if (!($19)) { + break; + } + $20 = $N; + $21 = (($20|0) / 2)&-1; + $N = $21; + } + $22 = $N; + STACKTOP = sp;return ($22|0); +} +function _findnexte($M) { + $M = $M|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $N = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $M; + $1 = $0; + $N = $1; + while(1) { + $2 = $N; + $3 = (_factorf($2)|0); + $4 = ($3|0)!=(1); + if ($4) { + $11 = 1; + } else { + $5 = $N; + $6 = (($5|0) % 2)&-1; + $7 = ($6|0)!=(0); + $11 = $7; + } + if (!($11)) { + break; + } + $8 = $N; + $9 = (($8) + 1)|0; + $N = $9; + } + $10 = $N; + STACKTOP = sp;return ($10|0); +} +function _conv_init($N,$L) { + $N = $N|0; + $L = $L|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $conv_len = 0, $obj = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $N; + $1 = $L; + $obj = 0; + $2 = $0; + $3 = $1; + $4 = (($2) + ($3))|0; + $5 = (($4) - 1)|0; + $conv_len = $5; + $6 = (_malloc(20)|0); + $obj = $6; + $7 = $conv_len; + $8 = (_findnexte($7)|0); + $9 = $obj; + $10 = (($9) + 16|0); + HEAP32[$10>>2] = $8; + $11 = $0; + $12 = $obj; + $13 = (($12) + 8|0); + HEAP32[$13>>2] = $11; + $14 = $1; + $15 = $obj; + $16 = (($15) + 12|0); + HEAP32[$16>>2] = $14; + $17 = $obj; + $18 = (($17) + 16|0); + $19 = HEAP32[$18>>2]|0; + $20 = (_fft_real_init($19,1)|0); + $21 = $obj; + HEAP32[$21>>2] = $20; + $22 = $obj; + $23 = (($22) + 16|0); + $24 = HEAP32[$23>>2]|0; + $25 = (_fft_real_init($24,-1)|0); + $26 = $obj; + $27 = (($26) + 4|0); + HEAP32[$27>>2] = $25; + $28 = $obj; + STACKTOP = sp;return ($28|0); +} +function _conv_direct($inp1,$N,$inp2,$L,$oup) { + $inp1 = $inp1|0; + $N = $N|0; + $inp2 = $inp2|0; + $L = $L|0; + $oup = $oup|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0.0, $106 = 0.0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0.0, $111 = 0.0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0.0, $129 = 0.0, $13 = 0, $130 = 0, $131 = 0.0, $132 = 0, $133 = 0.0; + var $134 = 0, $135 = 0.0, $136 = 0.0, $137 = 0, $138 = 0, $139 = 0.0, $14 = 0, $140 = 0.0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0.0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0.0; + var $152 = 0.0, $153 = 0, $154 = 0, $155 = 0, $156 = 0.0, $157 = 0.0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0.0; + var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0.0, $31 = 0.0, $32 = 0, $33 = 0, $34 = 0, $35 = 0.0, $36 = 0.0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0; + var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0.0, $54 = 0.0, $55 = 0, $56 = 0.0, $57 = 0, $58 = 0.0, $59 = 0, $6 = 0, $60 = 0.0; + var $61 = 0.0, $62 = 0, $63 = 0, $64 = 0.0, $65 = 0.0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0.0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0.0, $77 = 0.0, $78 = 0, $79 = 0; + var $8 = 0, $80 = 0, $81 = 0.0, $82 = 0.0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0; + var $98 = 0, $99 = 0.0, $M = 0, $i = 0, $k = 0, $m = 0, $t1 = 0.0, $tmin = 0.0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $inp1; + $1 = $N; + $2 = $inp2; + $3 = $L; + $4 = $oup; + $5 = $1; + $6 = $3; + $7 = (($5) + ($6))|0; + $8 = (($7) - 1)|0; + $M = $8; + $i = 0; + $9 = $1; + $10 = $3; + $11 = ($9|0)>=($10|0); + if ($11) { + $k = 0; + while(1) { + $12 = $k; + $13 = $3; + $14 = ($12|0)<($13|0); + if (!($14)) { + break; + } + $15 = $k; + $16 = $4; + $17 = (($16) + ($15<<3)|0); + HEAPF64[$17>>3] = 0.0; + $m = 0; + while(1) { + $18 = $m; + $19 = $k; + $20 = ($18|0)<=($19|0); + if (!($20)) { + break; + } + $21 = $m; + $22 = $0; + $23 = (($22) + ($21<<3)|0); + $24 = +HEAPF64[$23>>3]; + $25 = $k; + $26 = $m; + $27 = (($25) - ($26))|0; + $28 = $2; + $29 = (($28) + ($27<<3)|0); + $30 = +HEAPF64[$29>>3]; + $31 = $24 * $30; + $32 = $k; + $33 = $4; + $34 = (($33) + ($32<<3)|0); + $35 = +HEAPF64[$34>>3]; + $36 = $35 + $31; + HEAPF64[$34>>3] = $36; + $37 = $m; + $38 = (($37) + 1)|0; + $m = $38; + } + $39 = $k; + $40 = (($39) + 1)|0; + $k = $40; + } + $41 = $3; + $k = $41; + while(1) { + $42 = $k; + $43 = $M; + $44 = ($42|0)<($43|0); + if (!($44)) { + break; + } + $45 = $k; + $46 = $4; + $47 = (($46) + ($45<<3)|0); + HEAPF64[$47>>3] = 0.0; + $48 = $i; + $49 = (($48) + 1)|0; + $i = $49; + $50 = $3; + $51 = $i; + $52 = (($50) + ($51))|0; + $53 = (+($52|0)); + $t1 = $53; + $54 = $t1; + $55 = $1; + $56 = (+($55|0)); + $57 = $54 < $56; + if ($57) { + $58 = $t1; + $61 = $58; + } else { + $59 = $1; + $60 = (+($59|0)); + $61 = $60; + } + $tmin = $61; + $62 = $i; + $m = $62; + while(1) { + $63 = $m; + $64 = (+($63|0)); + $65 = $tmin; + $66 = $64 < $65; + if (!($66)) { + break; + } + $67 = $m; + $68 = $0; + $69 = (($68) + ($67<<3)|0); + $70 = +HEAPF64[$69>>3]; + $71 = $k; + $72 = $m; + $73 = (($71) - ($72))|0; + $74 = $2; + $75 = (($74) + ($73<<3)|0); + $76 = +HEAPF64[$75>>3]; + $77 = $70 * $76; + $78 = $k; + $79 = $4; + $80 = (($79) + ($78<<3)|0); + $81 = +HEAPF64[$80>>3]; + $82 = $81 + $77; + HEAPF64[$80>>3] = $82; + $83 = $m; + $84 = (($83) + 1)|0; + $m = $84; + } + $85 = $k; + $86 = (($85) + 1)|0; + $k = $86; + } + STACKTOP = sp;return; + } else { + $k = 0; + while(1) { + $87 = $k; + $88 = $1; + $89 = ($87|0)<($88|0); + if (!($89)) { + break; + } + $90 = $k; + $91 = $4; + $92 = (($91) + ($90<<3)|0); + HEAPF64[$92>>3] = 0.0; + $m = 0; + while(1) { + $93 = $m; + $94 = $k; + $95 = ($93|0)<=($94|0); + if (!($95)) { + break; + } + $96 = $m; + $97 = $2; + $98 = (($97) + ($96<<3)|0); + $99 = +HEAPF64[$98>>3]; + $100 = $k; + $101 = $m; + $102 = (($100) - ($101))|0; + $103 = $0; + $104 = (($103) + ($102<<3)|0); + $105 = +HEAPF64[$104>>3]; + $106 = $99 * $105; + $107 = $k; + $108 = $4; + $109 = (($108) + ($107<<3)|0); + $110 = +HEAPF64[$109>>3]; + $111 = $110 + $106; + HEAPF64[$109>>3] = $111; + $112 = $m; + $113 = (($112) + 1)|0; + $m = $113; + } + $114 = $k; + $115 = (($114) + 1)|0; + $k = $115; + } + $116 = $1; + $k = $116; + while(1) { + $117 = $k; + $118 = $M; + $119 = ($117|0)<($118|0); + if (!($119)) { + break; + } + $120 = $k; + $121 = $4; + $122 = (($121) + ($120<<3)|0); + HEAPF64[$122>>3] = 0.0; + $123 = $i; + $124 = (($123) + 1)|0; + $i = $124; + $125 = $1; + $126 = $i; + $127 = (($125) + ($126))|0; + $128 = (+($127|0)); + $t1 = $128; + $129 = $t1; + $130 = $3; + $131 = (+($130|0)); + $132 = $129 < $131; + if ($132) { + $133 = $t1; + $136 = $133; + } else { + $134 = $3; + $135 = (+($134|0)); + $136 = $135; + } + $tmin = $136; + $137 = $i; + $m = $137; + while(1) { + $138 = $m; + $139 = (+($138|0)); + $140 = $tmin; + $141 = $139 < $140; + if (!($141)) { + break; + } + $142 = $m; + $143 = $2; + $144 = (($143) + ($142<<3)|0); + $145 = +HEAPF64[$144>>3]; + $146 = $k; + $147 = $m; + $148 = (($146) - ($147))|0; + $149 = $0; + $150 = (($149) + ($148<<3)|0); + $151 = +HEAPF64[$150>>3]; + $152 = $145 * $151; + $153 = $k; + $154 = $4; + $155 = (($154) + ($153<<3)|0); + $156 = +HEAPF64[$155>>3]; + $157 = $156 + $152; + HEAPF64[$155>>3] = $157; + $158 = $m; + $159 = (($158) + 1)|0; + $m = $159; + } + $160 = $k; + $161 = (($160) + 1)|0; + $k = $161; + } + STACKTOP = sp;return; + } +} +function _conv_fft($obj,$inp1,$inp2,$oup) { + $obj = $obj|0; + $inp1 = $inp1|0; + $inp2 = $inp2|0; + $oup = $oup|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0.0, $106 = 0, $107 = 0, $108 = 0, $109 = 0.0, $11 = 0, $110 = 0.0, $111 = 0, $112 = 0, $113 = 0, $114 = 0.0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0.0, $12 = 0, $120 = 0.0, $121 = 0.0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0.0, $14 = 0, $140 = 0, $141 = 0.0, $142 = 0.0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0; + var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0.0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0; + var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0.0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0; + var $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0.0, $81 = 0, $82 = 0, $83 = 0, $84 = 0.0, $85 = 0.0, $86 = 0; + var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0.0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0.0, $96 = 0.0, $97 = 0.0, $98 = 0, $99 = 0, $L1 = 0, $L2 = 0, $N = 0, $a = 0, $ao = 0, $b = 0; + var $bo = 0, $c = 0, $co = 0, $i = 0, $ls = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $obj; + $1 = $inp1; + $2 = $inp2; + $3 = $oup; + $4 = $0; + $5 = (($4) + 16|0); + $6 = HEAP32[$5>>2]|0; + $N = $6; + $7 = $0; + $8 = (($7) + 8|0); + $9 = HEAP32[$8>>2]|0; + $L1 = $9; + $10 = $0; + $11 = (($10) + 12|0); + $12 = HEAP32[$11>>2]|0; + $L2 = $12; + $13 = $L1; + $14 = $L2; + $15 = (($13) + ($14))|0; + $16 = (($15) - 1)|0; + $ls = $16; + $17 = $N; + $18 = $17<<4; + $19 = (_malloc($18)|0); + $a = $19; + $20 = $N; + $21 = $20<<4; + $22 = (_malloc($21)|0); + $b = $22; + $23 = $N; + $24 = $23<<4; + $25 = (_malloc($24)|0); + $c = $25; + $26 = $N; + $27 = $26<<4; + $28 = (_malloc($27)|0); + $ao = $28; + $29 = $N; + $30 = $29<<4; + $31 = (_malloc($30)|0); + $bo = $31; + $32 = $N; + $33 = $32<<4; + $34 = (_malloc($33)|0); + $co = $34; + $i = 0; + while(1) { + $35 = $i; + $36 = $N; + $37 = ($35|0)<($36|0); + if (!($37)) { + break; + } + $38 = $i; + $39 = $L1; + $40 = ($38|0)<($39|0); + if ($40) { + $41 = $i; + $42 = $1; + $43 = (($42) + ($41<<3)|0); + $44 = +HEAPF64[$43>>3]; + $45 = $i; + $46 = $a; + $47 = (($46) + ($45<<3)|0); + HEAPF64[$47>>3] = $44; + } else { + $48 = $i; + $49 = $a; + $50 = (($49) + ($48<<3)|0); + HEAPF64[$50>>3] = 0.0; + } + $51 = $i; + $52 = $L2; + $53 = ($51|0)<($52|0); + if ($53) { + $54 = $i; + $55 = $2; + $56 = (($55) + ($54<<3)|0); + $57 = +HEAPF64[$56>>3]; + $58 = $i; + $59 = $b; + $60 = (($59) + ($58<<3)|0); + HEAPF64[$60>>3] = $57; + } else { + $61 = $i; + $62 = $b; + $63 = (($62) + ($61<<3)|0); + HEAPF64[$63>>3] = 0.0; + } + $64 = $i; + $65 = (($64) + 1)|0; + $i = $65; + } + $66 = $0; + $67 = HEAP32[$66>>2]|0; + $68 = $a; + $69 = $ao; + _fft_r2c_exec($67,$68,$69); + $70 = $0; + $71 = HEAP32[$70>>2]|0; + $72 = $b; + $73 = $bo; + _fft_r2c_exec($71,$72,$73); + $i = 0; + while(1) { + $74 = $i; + $75 = $N; + $76 = ($74|0)<($75|0); + if (!($76)) { + break; + } + $77 = $i; + $78 = $ao; + $79 = (($78) + ($77<<4)|0); + $80 = +HEAPF64[$79>>3]; + $81 = $i; + $82 = $bo; + $83 = (($82) + ($81<<4)|0); + $84 = +HEAPF64[$83>>3]; + $85 = $80 * $84; + $86 = $i; + $87 = $ao; + $88 = (($87) + ($86<<4)|0); + $89 = (($88) + 8|0); + $90 = +HEAPF64[$89>>3]; + $91 = $i; + $92 = $bo; + $93 = (($92) + ($91<<4)|0); + $94 = (($93) + 8|0); + $95 = +HEAPF64[$94>>3]; + $96 = $90 * $95; + $97 = $85 - $96; + $98 = $i; + $99 = $c; + $100 = (($99) + ($98<<4)|0); + HEAPF64[$100>>3] = $97; + $101 = $i; + $102 = $ao; + $103 = (($102) + ($101<<4)|0); + $104 = (($103) + 8|0); + $105 = +HEAPF64[$104>>3]; + $106 = $i; + $107 = $bo; + $108 = (($107) + ($106<<4)|0); + $109 = +HEAPF64[$108>>3]; + $110 = $105 * $109; + $111 = $i; + $112 = $ao; + $113 = (($112) + ($111<<4)|0); + $114 = +HEAPF64[$113>>3]; + $115 = $i; + $116 = $bo; + $117 = (($116) + ($115<<4)|0); + $118 = (($117) + 8|0); + $119 = +HEAPF64[$118>>3]; + $120 = $114 * $119; + $121 = $110 + $120; + $122 = $i; + $123 = $c; + $124 = (($123) + ($122<<4)|0); + $125 = (($124) + 8|0); + HEAPF64[$125>>3] = $121; + $126 = $i; + $127 = (($126) + 1)|0; + $i = $127; + } + $128 = $0; + $129 = (($128) + 4|0); + $130 = HEAP32[$129>>2]|0; + $131 = $c; + $132 = $co; + _fft_c2r_exec($130,$131,$132); + $i = 0; + while(1) { + $133 = $i; + $134 = $ls; + $135 = ($133|0)<($134|0); + if (!($135)) { + break; + } + $136 = $i; + $137 = $co; + $138 = (($137) + ($136<<3)|0); + $139 = +HEAPF64[$138>>3]; + $140 = $N; + $141 = (+($140|0)); + $142 = $139 / $141; + $143 = $i; + $144 = $3; + $145 = (($144) + ($143<<3)|0); + HEAPF64[$145>>3] = $142; + $146 = $i; + $147 = (($146) + 1)|0; + $i = $147; + } + $148 = $a; + _free($148); + $149 = $b; + _free($149); + $150 = $c; + _free($150); + $151 = $ao; + _free($151); + $152 = $bo; + _free($152); + $153 = $co; + _free($153); + STACKTOP = sp;return; +} +function _free_conv($object) { + $object = $object|0; + var $0 = 0, $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $object; + $1 = $0; + _free($1); + STACKTOP = sp;return; +} +function _filtlength($name) { + $name = $name|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; + var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; + var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; + var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; + var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $1 = $name; + $2 = $1; + $3 = (_strcmp($2,8)|0); + $4 = ($3|0)!=(0); + do { + if ($4) { + $5 = $1; + $6 = (_strcmp($5,16)|0); + $7 = ($6|0)!=(0); + if ($7) { + $8 = $1; + $9 = (_strcmp($8,24)|0); + $10 = ($9|0)!=(0); + if (!($10)) { + $0 = 4; + break; + } + $11 = $1; + $12 = (_strcmp($11,32)|0); + $13 = ($12|0)!=(0); + if (!($13)) { + $0 = 6; + break; + } + $14 = $1; + $15 = (_strcmp($14,40)|0); + $16 = ($15|0)!=(0); + if (!($16)) { + $0 = 8; + break; + } + $17 = $1; + $18 = (_strcmp($17,48)|0); + $19 = ($18|0)!=(0); + if (!($19)) { + $0 = 10; + break; + } + $20 = $1; + $21 = (_strcmp($20,56)|0); + $22 = ($21|0)!=(0); + if (!($22)) { + $0 = 12; + break; + } + $23 = $1; + $24 = (_strcmp($23,64)|0); + $25 = ($24|0)!=(0); + if (!($25)) { + $0 = 14; + break; + } + $26 = $1; + $27 = (_strcmp($26,72)|0); + $28 = ($27|0)!=(0); + if (!($28)) { + $0 = 16; + break; + } + $29 = $1; + $30 = (_strcmp($29,80)|0); + $31 = ($30|0)!=(0); + if (!($31)) { + $0 = 18; + break; + } + $32 = $1; + $33 = (_strcmp($32,88)|0); + $34 = ($33|0)!=(0); + if (!($34)) { + $0 = 20; + break; + } + $35 = $1; + $36 = (_strcmp($35,96)|0); + $37 = ($36|0)!=(0); + if (!($37)) { + $0 = 24; + break; + } + $38 = $1; + $39 = (_strcmp($38,104)|0); + $40 = ($39|0)!=(0); + if (!($40)) { + $0 = 26; + break; + } + $41 = $1; + $42 = (_strcmp($41,112)|0); + $43 = ($42|0)!=(0); + if (!($43)) { + $0 = 22; + break; + } + $44 = $1; + $45 = (_strcmp($44,120)|0); + $46 = ($45|0)!=(0); + if (!($46)) { + $0 = 28; + break; + } + $47 = $1; + $48 = (_strcmp($47,128)|0); + $49 = ($48|0)!=(0); + if (!($49)) { + $0 = 30; + break; + } + $50 = $1; + $51 = (_strcmp($50,136)|0); + $52 = ($51|0)!=(0); + if (!($52)) { + $0 = 2; + break; + } + $53 = $1; + $54 = (_strcmp($53,144)|0); + $55 = ($54|0)!=(0); + if (!($55)) { + $0 = 6; + break; + } + $56 = $1; + $57 = (_strcmp($56,152)|0); + $58 = ($57|0)!=(0); + if (!($58)) { + $0 = 10; + break; + } + $59 = $1; + $60 = (_strcmp($59,160)|0); + $61 = ($60|0)!=(0); + if (!($61)) { + $0 = 6; + break; + } + $62 = $1; + $63 = (_strcmp($62,168)|0); + $64 = ($63|0)!=(0); + if (!($64)) { + $0 = 10; + break; + } + $65 = $1; + $66 = (_strcmp($65,176)|0); + $67 = ($66|0)!=(0); + if (!($67)) { + $0 = 14; + break; + } + $68 = $1; + $69 = (_strcmp($68,184)|0); + $70 = ($69|0)!=(0); + if (!($70)) { + $0 = 18; + break; + } + $71 = $1; + $72 = (_strcmp($71,192)|0); + $73 = ($72|0)!=(0); + if (!($73)) { + $0 = 8; + break; + } + $74 = $1; + $75 = (_strcmp($74,200)|0); + $76 = ($75|0)!=(0); + if (!($76)) { + $0 = 12; + break; + } + $77 = $1; + $78 = (_strcmp($77,208)|0); + $79 = ($78|0)!=(0); + if (!($79)) { + $0 = 16; + break; + } + $80 = $1; + $81 = (_strcmp($80,216)|0); + $82 = ($81|0)!=(0); + if (!($82)) { + $0 = 20; + break; + } + $83 = $1; + $84 = (_strcmp($83,224)|0); + $85 = ($84|0)!=(0); + if (!($85)) { + $0 = 10; + break; + } + $86 = $1; + $87 = (_strcmp($86,232)|0); + $88 = ($87|0)!=(0); + if (!($88)) { + $0 = 12; + break; + } + $89 = $1; + $90 = (_strcmp($89,240)|0); + $91 = ($90|0)!=(0); + if (!($91)) { + $0 = 18; + break; + } + $92 = $1; + $93 = (_strcmp($92,248)|0); + $94 = ($93|0)!=(0); + if (!($94)) { + $0 = 6; + break; + } + $95 = $1; + $96 = (_strcmp($95,256)|0); + $97 = ($96|0)!=(0); + if (!($97)) { + $0 = 12; + break; + } + $98 = $1; + $99 = (_strcmp($98,264)|0); + $100 = ($99|0)!=(0); + if (!($100)) { + $0 = 18; + break; + } + $101 = $1; + $102 = (_strcmp($101,272)|0); + $103 = ($102|0)!=(0); + if (!($103)) { + $0 = 24; + break; + } + $104 = $1; + $105 = (_strcmp($104,280)|0); + $106 = ($105|0)!=(0); + if (!($106)) { + $0 = 30; + break; + } + $107 = $1; + $108 = (_strcmp($107,288)|0); + $109 = ($108|0)!=(0); + if (!($109)) { + $0 = 4; + break; + } + $110 = $1; + $111 = (_strcmp($110,296)|0); + $112 = ($111|0)!=(0); + if (!($112)) { + $0 = 6; + break; + } + $113 = $1; + $114 = (_strcmp($113,304)|0); + $115 = ($114|0)!=(0); + if (!($115)) { + $0 = 8; + break; + } + $116 = $1; + $117 = (_strcmp($116,312)|0); + $118 = ($117|0)!=(0); + if (!($118)) { + $0 = 10; + break; + } + $119 = $1; + $120 = (_strcmp($119,320)|0); + $121 = ($120|0)!=(0); + if (!($121)) { + $0 = 12; + break; + } + $122 = $1; + $123 = (_strcmp($122,328)|0); + $124 = ($123|0)!=(0); + if (!($124)) { + $0 = 14; + break; + } + $125 = $1; + $126 = (_strcmp($125,336)|0); + $127 = ($126|0)!=(0); + if (!($127)) { + $0 = 16; + break; + } + $128 = $1; + $129 = (_strcmp($128,344)|0); + $130 = ($129|0)!=(0); + if (!($130)) { + $0 = 18; + break; + } + $131 = $1; + $132 = (_strcmp($131,352)|0); + $133 = ($132|0)!=(0); + if ($133) { + (_printf((360|0),($vararg_buffer|0))|0); + $0 = -1; + break; + } else { + $0 = 20; + break; + } + } else { + label = 3; + } + } else { + label = 3; + } + } while(0); + if ((label|0) == 3) { + $0 = 2; + } + $134 = $0; + STACKTOP = sp;return ($134|0); +} +function _filtcoef($name,$lp1,$hp1,$lp2,$hp2) { + $name = $name|0; + $lp1 = $lp1|0; + $hp1 = $hp1|0; + $lp2 = $lp2|0; + $hp2 = $hp2|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $1000 = 0.0, $1001 = 0, $1002 = 0, $1003 = 0, $1004 = 0, $1005 = 0, $1006 = 0.0, $1007 = 0, $1008 = 0, $1009 = 0, $101 = 0, $1010 = 0, $1011 = 0, $1012 = 0, $1013 = 0, $1014 = 0; + var $1015 = 0, $1016 = 0, $1017 = 0, $1018 = 0, $1019 = 0.0, $102 = 0, $1020 = 0, $1021 = 0, $1022 = 0, $1023 = 0, $1024 = 0, $1025 = 0.0, $1026 = 0, $1027 = 0, $1028 = 0, $1029 = 0, $103 = 0, $1030 = 0, $1031 = 0.0, $1032 = 0; + var $1033 = 0, $1034 = 0, $1035 = 0, $1036 = 0, $1037 = 0.0, $1038 = 0, $1039 = 0, $104 = 0.0, $1040 = 0, $1041 = 0, $1042 = 0, $1043 = 0, $1044 = 0, $1045 = 0, $1046 = 0, $1047 = 0, $1048 = 0, $1049 = 0, $105 = 0, $1050 = 0; + var $1051 = 0, $1052 = 0, $1053 = 0, $1054 = 0, $1055 = 0, $1056 = 0, $1057 = 0, $1058 = 0, $1059 = 0, $106 = 0, $1060 = 0, $1061 = 0, $1062 = 0, $1063 = 0, $1064 = 0, $1065 = 0, $1066 = 0, $1067 = 0, $1068 = 0, $1069 = 0; + var $107 = 0, $1070 = 0.0, $1071 = 0, $1072 = 0, $1073 = 0, $1074 = 0, $1075 = 0, $1076 = 0.0, $1077 = 0, $1078 = 0, $1079 = 0, $108 = 0, $1080 = 0, $1081 = 0, $1082 = 0.0, $1083 = 0, $1084 = 0, $1085 = 0, $1086 = 0, $1087 = 0; + var $1088 = 0.0, $1089 = 0, $109 = 0, $1090 = 0, $1091 = 0, $1092 = 0, $1093 = 0, $1094 = 0, $1095 = 0, $1096 = 0, $1097 = 0, $1098 = 0, $1099 = 0, $11 = 0, $110 = 0.0, $1100 = 0, $1101 = 0.0, $1102 = 0, $1103 = 0, $1104 = 0; + var $1105 = 0, $1106 = 0, $1107 = 0.0, $1108 = 0, $1109 = 0, $111 = 0, $1110 = 0, $1111 = 0, $1112 = 0, $1113 = 0.0, $1114 = 0, $1115 = 0, $1116 = 0, $1117 = 0, $1118 = 0, $1119 = 0.0, $112 = 0, $1120 = 0, $1121 = 0, $1122 = 0; + var $1123 = 0, $1124 = 0, $1125 = 0, $1126 = 0, $1127 = 0, $1128 = 0, $1129 = 0, $113 = 0, $1130 = 0, $1131 = 0, $1132 = 0.0, $1133 = 0, $1134 = 0, $1135 = 0, $1136 = 0, $1137 = 0, $1138 = 0.0, $1139 = 0, $114 = 0, $1140 = 0; + var $1141 = 0, $1142 = 0, $1143 = 0, $1144 = 0.0, $1145 = 0, $1146 = 0, $1147 = 0, $1148 = 0, $1149 = 0, $115 = 0, $1150 = 0.0, $1151 = 0, $1152 = 0, $1153 = 0, $1154 = 0, $1155 = 0, $1156 = 0, $1157 = 0, $1158 = 0, $1159 = 0; + var $116 = 0.0, $1160 = 0, $1161 = 0, $1162 = 0, $1163 = 0.0, $1164 = 0, $1165 = 0, $1166 = 0, $1167 = 0, $1168 = 0, $1169 = 0.0, $117 = 0, $1170 = 0, $1171 = 0, $1172 = 0, $1173 = 0, $1174 = 0, $1175 = 0.0, $1176 = 0, $1177 = 0; + var $1178 = 0, $1179 = 0, $118 = 0, $1180 = 0, $1181 = 0.0, $1182 = 0, $1183 = 0, $1184 = 0, $1185 = 0, $1186 = 0, $1187 = 0, $1188 = 0, $1189 = 0, $119 = 0, $1190 = 0, $1191 = 0, $1192 = 0, $1193 = 0, $1194 = 0.0, $1195 = 0; + var $1196 = 0, $1197 = 0, $1198 = 0, $1199 = 0, $12 = 0, $120 = 0, $1200 = 0.0, $1201 = 0, $1202 = 0, $1203 = 0, $1204 = 0, $1205 = 0, $1206 = 0.0, $1207 = 0, $1208 = 0, $1209 = 0, $121 = 0, $1210 = 0, $1211 = 0, $1212 = 0.0; + var $1213 = 0, $1214 = 0, $1215 = 0, $1216 = 0, $1217 = 0, $1218 = 0, $1219 = 0, $122 = 0, $1220 = 0, $1221 = 0, $1222 = 0, $1223 = 0, $1224 = 0, $1225 = 0.0, $1226 = 0, $1227 = 0, $1228 = 0, $1229 = 0, $123 = 0, $1230 = 0; + var $1231 = 0.0, $1232 = 0, $1233 = 0, $1234 = 0, $1235 = 0, $1236 = 0, $1237 = 0.0, $1238 = 0, $1239 = 0, $124 = 0, $1240 = 0, $1241 = 0, $1242 = 0, $1243 = 0.0, $1244 = 0, $1245 = 0, $1246 = 0, $1247 = 0, $1248 = 0, $1249 = 0; + var $125 = 0, $1250 = 0, $1251 = 0, $1252 = 0, $1253 = 0, $1254 = 0, $1255 = 0, $1256 = 0, $1257 = 0, $1258 = 0, $1259 = 0, $126 = 0, $1260 = 0, $1261 = 0, $1262 = 0, $1263 = 0, $1264 = 0, $1265 = 0, $1266 = 0, $1267 = 0; + var $1268 = 0, $1269 = 0, $127 = 0, $1270 = 0, $1271 = 0, $1272 = 0, $1273 = 0, $1274 = 0, $1275 = 0, $1276 = 0.0, $1277 = 0, $1278 = 0, $1279 = 0, $128 = 0, $1280 = 0, $1281 = 0, $1282 = 0.0, $1283 = 0, $1284 = 0, $1285 = 0; + var $1286 = 0, $1287 = 0, $1288 = 0.0, $1289 = 0, $129 = 0.0, $1290 = 0, $1291 = 0, $1292 = 0, $1293 = 0, $1294 = 0.0, $1295 = 0, $1296 = 0, $1297 = 0, $1298 = 0, $1299 = 0, $13 = 0, $130 = 0, $1300 = 0, $1301 = 0, $1302 = 0; + var $1303 = 0, $1304 = 0, $1305 = 0, $1306 = 0, $1307 = 0.0, $1308 = 0, $1309 = 0, $131 = 0, $1310 = 0, $1311 = 0, $1312 = 0, $1313 = 0.0, $1314 = 0, $1315 = 0, $1316 = 0, $1317 = 0, $1318 = 0, $1319 = 0.0, $132 = 0, $1320 = 0; + var $1321 = 0, $1322 = 0, $1323 = 0, $1324 = 0, $1325 = 0.0, $1326 = 0, $1327 = 0, $1328 = 0, $1329 = 0, $133 = 0, $1330 = 0, $1331 = 0, $1332 = 0, $1333 = 0, $1334 = 0, $1335 = 0, $1336 = 0, $1337 = 0, $1338 = 0.0, $1339 = 0; + var $134 = 0, $1340 = 0, $1341 = 0, $1342 = 0, $1343 = 0, $1344 = 0.0, $1345 = 0, $1346 = 0, $1347 = 0, $1348 = 0, $1349 = 0, $135 = 0.0, $1350 = 0.0, $1351 = 0, $1352 = 0, $1353 = 0, $1354 = 0, $1355 = 0, $1356 = 0.0, $1357 = 0; + var $1358 = 0, $1359 = 0, $136 = 0, $1360 = 0, $1361 = 0, $1362 = 0, $1363 = 0, $1364 = 0, $1365 = 0, $1366 = 0, $1367 = 0, $1368 = 0, $1369 = 0.0, $137 = 0, $1370 = 0, $1371 = 0, $1372 = 0, $1373 = 0, $1374 = 0, $1375 = 0.0; + var $1376 = 0, $1377 = 0, $1378 = 0, $1379 = 0, $138 = 0, $1380 = 0, $1381 = 0.0, $1382 = 0, $1383 = 0, $1384 = 0, $1385 = 0, $1386 = 0, $1387 = 0.0, $1388 = 0, $1389 = 0, $139 = 0, $1390 = 0, $1391 = 0, $1392 = 0, $1393 = 0; + var $1394 = 0, $1395 = 0, $1396 = 0, $1397 = 0, $1398 = 0, $1399 = 0, $14 = 0, $140 = 0, $1400 = 0.0, $1401 = 0, $1402 = 0, $1403 = 0, $1404 = 0, $1405 = 0, $1406 = 0.0, $1407 = 0, $1408 = 0, $1409 = 0, $141 = 0.0, $1410 = 0; + var $1411 = 0, $1412 = 0.0, $1413 = 0, $1414 = 0, $1415 = 0, $1416 = 0, $1417 = 0, $1418 = 0.0, $1419 = 0, $142 = 0, $1420 = 0, $1421 = 0, $1422 = 0, $1423 = 0, $1424 = 0, $1425 = 0, $1426 = 0, $1427 = 0, $1428 = 0, $1429 = 0; + var $143 = 0, $1430 = 0, $1431 = 0.0, $1432 = 0, $1433 = 0, $1434 = 0, $1435 = 0, $1436 = 0, $1437 = 0.0, $1438 = 0, $1439 = 0, $144 = 0, $1440 = 0, $1441 = 0, $1442 = 0, $1443 = 0.0, $1444 = 0, $1445 = 0, $1446 = 0, $1447 = 0; + var $1448 = 0, $1449 = 0.0, $145 = 0, $1450 = 0, $1451 = 0, $1452 = 0, $1453 = 0, $1454 = 0, $1455 = 0, $1456 = 0, $1457 = 0, $1458 = 0, $1459 = 0, $146 = 0, $1460 = 0, $1461 = 0, $1462 = 0.0, $1463 = 0, $1464 = 0, $1465 = 0; + var $1466 = 0, $1467 = 0, $1468 = 0.0, $1469 = 0, $147 = 0.0, $1470 = 0, $1471 = 0, $1472 = 0, $1473 = 0, $1474 = 0.0, $1475 = 0, $1476 = 0, $1477 = 0, $1478 = 0, $1479 = 0, $148 = 0, $1480 = 0.0, $1481 = 0, $1482 = 0, $1483 = 0; + var $1484 = 0, $1485 = 0, $1486 = 0, $1487 = 0, $1488 = 0, $1489 = 0, $149 = 0, $1490 = 0, $1491 = 0, $1492 = 0, $1493 = 0.0, $1494 = 0, $1495 = 0, $1496 = 0, $1497 = 0, $1498 = 0, $1499 = 0.0, $15 = 0, $150 = 0, $1500 = 0; + var $1501 = 0, $1502 = 0, $1503 = 0, $1504 = 0, $1505 = 0.0, $1506 = 0, $1507 = 0, $1508 = 0, $1509 = 0, $151 = 0, $1510 = 0, $1511 = 0.0, $1512 = 0, $1513 = 0, $1514 = 0, $1515 = 0, $1516 = 0, $1517 = 0, $152 = 0, $153 = 0; + var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0.0, $160 = 0.0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0.0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0; + var $172 = 0.0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0.0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0; + var $190 = 0, $191 = 0.0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0.0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0.0, $204 = 0, $205 = 0, $206 = 0, $207 = 0; + var $208 = 0, $209 = 0.0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0.0, $220 = 0, $221 = 0, $222 = 0.0, $223 = 0, $224 = 0, $225 = 0; + var $226 = 0, $227 = 0, $228 = 0.0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0.0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0.0, $241 = 0, $242 = 0, $243 = 0; + var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0.0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0.0, $26 = 0, $260 = 0, $261 = 0; + var $262 = 0, $263 = 0, $264 = 0, $265 = 0.0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0.0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0.0; + var $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0.0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0.0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0.0, $297 = 0, $298 = 0; + var $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0.0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0.0; + var $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0.0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0.0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0.0; + var $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0.0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0.0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0; + var $352 = 0.0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0.0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0.0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0; + var $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0.0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0.0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0; + var $389 = 0.0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0.0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0; + var $406 = 0, $407 = 0, $408 = 0.0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0.0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0.0, $421 = 0, $422 = 0, $423 = 0; + var $424 = 0, $425 = 0, $426 = 0.0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0.0, $44 = 0, $440 = 0, $441 = 0; + var $442 = 0, $443 = 0, $444 = 0, $445 = 0.0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0.0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0.0, $458 = 0, $459 = 0, $46 = 0; + var $460 = 0, $461 = 0, $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0.0, $470 = 0.0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0.0, $477 = 0, $478 = 0; + var $479 = 0, $48 = 0, $480 = 0, $481 = 0, $482 = 0.0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0.0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0; + var $497 = 0, $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0.0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0.0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0.0; + var $514 = 0, $515 = 0, $516 = 0, $517 = 0, $518 = 0, $519 = 0.0, $52 = 0, $520 = 0, $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0, $528 = 0, $529 = 0, $53 = 0.0, $530 = 0, $531 = 0; + var $532 = 0, $533 = 0, $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0, $546 = 0.0, $547 = 0, $548 = 0, $549 = 0, $55 = 0; + var $550 = 0, $551 = 0, $552 = 0.0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0.0, $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0, $564 = 0.0, $565 = 0, $566 = 0, $567 = 0, $568 = 0; + var $569 = 0, $57 = 0, $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0.0, $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0; + var $587 = 0.0, $588 = 0, $589 = 0, $59 = 0.0, $590 = 0, $591 = 0, $592 = 0, $593 = 0.0, $594 = 0, $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0.0, $6 = 0, $60 = 0, $600 = 0, $601 = 0, $602 = 0, $603 = 0; + var $604 = 0, $605 = 0, $606 = 0, $607 = 0, $608 = 0, $609 = 0, $61 = 0, $610 = 0, $611 = 0, $612 = 0, $613 = 0, $614 = 0, $615 = 0, $616 = 0, $617 = 0, $618 = 0, $619 = 0, $62 = 0, $620 = 0, $621 = 0; + var $622 = 0, $623 = 0, $624 = 0, $625 = 0, $626 = 0, $627 = 0, $628 = 0.0, $629 = 0, $63 = 0, $630 = 0, $631 = 0, $632 = 0, $633 = 0, $634 = 0.0, $635 = 0, $636 = 0, $637 = 0, $638 = 0, $639 = 0, $64 = 0; + var $640 = 0.0, $641 = 0, $642 = 0, $643 = 0, $644 = 0, $645 = 0, $646 = 0.0, $647 = 0, $648 = 0, $649 = 0, $65 = 0.0, $650 = 0, $651 = 0, $652 = 0, $653 = 0, $654 = 0, $655 = 0, $656 = 0, $657 = 0, $658 = 0; + var $659 = 0, $66 = 0, $660 = 0, $661 = 0, $662 = 0, $663 = 0, $664 = 0, $665 = 0.0, $666 = 0, $667 = 0, $668 = 0, $669 = 0, $67 = 0, $670 = 0, $671 = 0.0, $672 = 0, $673 = 0, $674 = 0, $675 = 0, $676 = 0; + var $677 = 0.0, $678 = 0, $679 = 0, $68 = 0, $680 = 0, $681 = 0, $682 = 0, $683 = 0.0, $684 = 0, $685 = 0, $686 = 0, $687 = 0, $688 = 0, $689 = 0, $69 = 0, $690 = 0, $691 = 0, $692 = 0, $693 = 0, $694 = 0; + var $695 = 0, $696 = 0, $697 = 0, $698 = 0, $699 = 0, $7 = 0, $70 = 0, $700 = 0, $701 = 0, $702 = 0.0, $703 = 0, $704 = 0, $705 = 0, $706 = 0, $707 = 0, $708 = 0.0, $709 = 0, $71 = 0, $710 = 0, $711 = 0; + var $712 = 0, $713 = 0, $714 = 0.0, $715 = 0, $716 = 0, $717 = 0, $718 = 0, $719 = 0, $72 = 0, $720 = 0.0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0, $726 = 0, $727 = 0, $728 = 0, $729 = 0, $73 = 0; + var $730 = 0, $731 = 0, $732 = 0, $733 = 0, $734 = 0, $735 = 0, $736 = 0, $737 = 0, $738 = 0, $739 = 0.0, $74 = 0, $740 = 0, $741 = 0, $742 = 0, $743 = 0, $744 = 0, $745 = 0.0, $746 = 0, $747 = 0, $748 = 0; + var $749 = 0, $75 = 0, $750 = 0, $751 = 0.0, $752 = 0, $753 = 0, $754 = 0, $755 = 0, $756 = 0, $757 = 0.0, $758 = 0, $759 = 0, $76 = 0, $760 = 0, $761 = 0, $762 = 0, $763 = 0, $764 = 0, $765 = 0, $766 = 0; + var $767 = 0, $768 = 0, $769 = 0, $77 = 0, $770 = 0.0, $771 = 0, $772 = 0, $773 = 0, $774 = 0, $775 = 0, $776 = 0.0, $777 = 0, $778 = 0, $779 = 0, $78 = 0, $780 = 0, $781 = 0, $782 = 0.0, $783 = 0, $784 = 0; + var $785 = 0, $786 = 0, $787 = 0, $788 = 0.0, $789 = 0, $79 = 0, $790 = 0, $791 = 0, $792 = 0, $793 = 0, $794 = 0, $795 = 0, $796 = 0, $797 = 0, $798 = 0, $799 = 0, $8 = 0, $80 = 0, $800 = 0, $801 = 0; + var $802 = 0, $803 = 0, $804 = 0, $805 = 0, $806 = 0, $807 = 0, $808 = 0, $809 = 0.0, $81 = 0, $810 = 0, $811 = 0, $812 = 0, $813 = 0, $814 = 0, $815 = 0.0, $816 = 0, $817 = 0, $818 = 0, $819 = 0, $82 = 0; + var $820 = 0, $821 = 0.0, $822 = 0, $823 = 0, $824 = 0, $825 = 0, $826 = 0, $827 = 0.0, $828 = 0, $829 = 0, $83 = 0, $830 = 0, $831 = 0, $832 = 0, $833 = 0, $834 = 0, $835 = 0, $836 = 0, $837 = 0, $838 = 0; + var $839 = 0, $84 = 0, $840 = 0, $841 = 0, $842 = 0, $843 = 0, $844 = 0, $845 = 0, $846 = 0, $847 = 0, $848 = 0.0, $849 = 0, $85 = 0, $850 = 0, $851 = 0, $852 = 0, $853 = 0, $854 = 0.0, $855 = 0, $856 = 0; + var $857 = 0, $858 = 0, $859 = 0, $86 = 0, $860 = 0.0, $861 = 0, $862 = 0, $863 = 0, $864 = 0, $865 = 0, $866 = 0.0, $867 = 0, $868 = 0, $869 = 0, $87 = 0, $870 = 0, $871 = 0, $872 = 0, $873 = 0, $874 = 0; + var $875 = 0, $876 = 0, $877 = 0, $878 = 0, $879 = 0, $88 = 0, $880 = 0, $881 = 0, $882 = 0, $883 = 0, $884 = 0, $885 = 0, $886 = 0, $887 = 0.0, $888 = 0, $889 = 0, $89 = 0, $890 = 0, $891 = 0, $892 = 0; + var $893 = 0.0, $894 = 0, $895 = 0, $896 = 0, $897 = 0, $898 = 0, $899 = 0.0, $9 = 0, $90 = 0, $900 = 0, $901 = 0, $902 = 0, $903 = 0, $904 = 0, $905 = 0.0, $906 = 0, $907 = 0, $908 = 0, $909 = 0, $91 = 0; + var $910 = 0, $911 = 0, $912 = 0, $913 = 0, $914 = 0, $915 = 0, $916 = 0, $917 = 0, $918 = 0, $919 = 0, $92 = 0, $920 = 0, $921 = 0, $922 = 0, $923 = 0, $924 = 0, $925 = 0, $926 = 0.0, $927 = 0, $928 = 0; + var $929 = 0, $93 = 0, $930 = 0, $931 = 0, $932 = 0.0, $933 = 0, $934 = 0, $935 = 0, $936 = 0, $937 = 0, $938 = 0.0, $939 = 0, $94 = 0, $940 = 0, $941 = 0, $942 = 0, $943 = 0, $944 = 0.0, $945 = 0, $946 = 0; + var $947 = 0, $948 = 0, $949 = 0, $95 = 0, $950 = 0, $951 = 0, $952 = 0, $953 = 0, $954 = 0, $955 = 0, $956 = 0, $957 = 0.0, $958 = 0, $959 = 0, $96 = 0, $960 = 0, $961 = 0, $962 = 0, $963 = 0.0, $964 = 0; + var $965 = 0, $966 = 0, $967 = 0, $968 = 0, $969 = 0.0, $97 = 0, $970 = 0, $971 = 0, $972 = 0, $973 = 0, $974 = 0, $975 = 0.0, $976 = 0, $977 = 0, $978 = 0, $979 = 0, $98 = 0.0, $980 = 0, $981 = 0, $982 = 0; + var $983 = 0, $984 = 0, $985 = 0, $986 = 0, $987 = 0, $988 = 0.0, $989 = 0, $99 = 0, $990 = 0, $991 = 0, $992 = 0, $993 = 0, $994 = 0.0, $995 = 0, $996 = 0, $997 = 0, $998 = 0, $999 = 0, $hp1_a = 0, $hp1_a10 = 0; + var $hp1_a102 = 0, $hp1_a106 = 0, $hp1_a110 = 0, $hp1_a114 = 0, $hp1_a118 = 0, $hp1_a122 = 0, $hp1_a126 = 0, $hp1_a130 = 0, $hp1_a134 = 0, $hp1_a138 = 0, $hp1_a14 = 0, $hp1_a142 = 0, $hp1_a146 = 0, $hp1_a150 = 0, $hp1_a154 = 0, $hp1_a158 = 0, $hp1_a162 = 0, $hp1_a166 = 0, $hp1_a170 = 0, $hp1_a18 = 0; + var $hp1_a2 = 0, $hp1_a22 = 0, $hp1_a26 = 0, $hp1_a30 = 0, $hp1_a34 = 0, $hp1_a38 = 0, $hp1_a42 = 0, $hp1_a46 = 0, $hp1_a50 = 0, $hp1_a54 = 0, $hp1_a58 = 0, $hp1_a6 = 0, $hp1_a62 = 0, $hp1_a66 = 0, $hp1_a70 = 0, $hp1_a74 = 0, $hp1_a78 = 0, $hp1_a82 = 0, $hp1_a86 = 0, $hp1_a90 = 0; + var $hp1_a94 = 0, $hp1_a98 = 0, $hp2_a = 0, $hp2_a100 = 0, $hp2_a104 = 0, $hp2_a108 = 0, $hp2_a112 = 0, $hp2_a116 = 0, $hp2_a12 = 0, $hp2_a120 = 0, $hp2_a124 = 0, $hp2_a128 = 0, $hp2_a132 = 0, $hp2_a136 = 0, $hp2_a140 = 0, $hp2_a144 = 0, $hp2_a148 = 0, $hp2_a152 = 0, $hp2_a156 = 0, $hp2_a16 = 0; + var $hp2_a160 = 0, $hp2_a164 = 0, $hp2_a168 = 0, $hp2_a172 = 0, $hp2_a20 = 0, $hp2_a24 = 0, $hp2_a28 = 0, $hp2_a32 = 0, $hp2_a36 = 0, $hp2_a4 = 0, $hp2_a40 = 0, $hp2_a44 = 0, $hp2_a48 = 0, $hp2_a52 = 0, $hp2_a56 = 0, $hp2_a60 = 0, $hp2_a64 = 0, $hp2_a68 = 0, $hp2_a72 = 0, $hp2_a76 = 0; + var $hp2_a8 = 0, $hp2_a80 = 0, $hp2_a84 = 0, $hp2_a88 = 0, $hp2_a92 = 0, $hp2_a96 = 0, $i = 0, $lp1_a = 0, $lp1_a1 = 0, $lp1_a101 = 0, $lp1_a105 = 0, $lp1_a109 = 0, $lp1_a113 = 0, $lp1_a117 = 0, $lp1_a121 = 0, $lp1_a125 = 0, $lp1_a129 = 0, $lp1_a13 = 0, $lp1_a133 = 0, $lp1_a137 = 0; + var $lp1_a141 = 0, $lp1_a145 = 0, $lp1_a149 = 0, $lp1_a153 = 0, $lp1_a157 = 0, $lp1_a161 = 0, $lp1_a165 = 0, $lp1_a169 = 0, $lp1_a17 = 0, $lp1_a21 = 0, $lp1_a25 = 0, $lp1_a29 = 0, $lp1_a33 = 0, $lp1_a37 = 0, $lp1_a41 = 0, $lp1_a45 = 0, $lp1_a49 = 0, $lp1_a5 = 0, $lp1_a53 = 0, $lp1_a57 = 0; + var $lp1_a61 = 0, $lp1_a65 = 0, $lp1_a69 = 0, $lp1_a73 = 0, $lp1_a77 = 0, $lp1_a81 = 0, $lp1_a85 = 0, $lp1_a89 = 0, $lp1_a9 = 0, $lp1_a93 = 0, $lp1_a97 = 0, $lp2_a = 0, $lp2_a103 = 0, $lp2_a107 = 0, $lp2_a11 = 0, $lp2_a111 = 0, $lp2_a115 = 0, $lp2_a119 = 0, $lp2_a123 = 0, $lp2_a127 = 0; + var $lp2_a131 = 0, $lp2_a135 = 0, $lp2_a139 = 0, $lp2_a143 = 0, $lp2_a147 = 0, $lp2_a15 = 0, $lp2_a151 = 0, $lp2_a155 = 0, $lp2_a159 = 0, $lp2_a163 = 0, $lp2_a167 = 0, $lp2_a171 = 0, $lp2_a19 = 0, $lp2_a23 = 0, $lp2_a27 = 0, $lp2_a3 = 0, $lp2_a31 = 0, $lp2_a35 = 0, $lp2_a39 = 0, $lp2_a43 = 0; + var $lp2_a47 = 0, $lp2_a51 = 0, $lp2_a55 = 0, $lp2_a59 = 0, $lp2_a63 = 0, $lp2_a67 = 0, $lp2_a7 = 0, $lp2_a71 = 0, $lp2_a75 = 0, $lp2_a79 = 0, $lp2_a83 = 0, $lp2_a87 = 0, $lp2_a91 = 0, $lp2_a95 = 0, $lp2_a99 = 0, $vararg_buffer = 0, dest = 0, label = 0, sp = 0, src = 0; + var stop = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 19360|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp + 19328|0; + $lp1_a = sp + 19312|0; + $hp1_a = sp + 19296|0; + $lp2_a = sp + 19280|0; + $hp2_a = sp + 19264|0; + $lp1_a1 = sp + 19232|0; + $hp1_a2 = sp + 19200|0; + $lp2_a3 = sp + 19168|0; + $hp2_a4 = sp + 19136|0; + $lp1_a5 = sp + 19088|0; + $hp1_a6 = sp + 19040|0; + $lp2_a7 = sp + 18992|0; + $hp2_a8 = sp + 18944|0; + $lp1_a9 = sp + 18880|0; + $hp1_a10 = sp + 18816|0; + $lp2_a11 = sp + 18752|0; + $hp2_a12 = sp + 18688|0; + $lp1_a13 = sp + 18608|0; + $hp1_a14 = sp + 18528|0; + $lp2_a15 = sp + 18448|0; + $hp2_a16 = sp + 18368|0; + $lp1_a17 = sp + 18272|0; + $hp1_a18 = sp + 18176|0; + $lp2_a19 = sp + 18080|0; + $hp2_a20 = sp + 17984|0; + $lp1_a21 = sp + 17872|0; + $hp1_a22 = sp + 17760|0; + $lp2_a23 = sp + 17648|0; + $hp2_a24 = sp + 17536|0; + $lp1_a25 = sp + 17408|0; + $hp1_a26 = sp + 17280|0; + $lp2_a27 = sp + 17152|0; + $hp2_a28 = sp + 17024|0; + $lp1_a29 = sp + 16880|0; + $hp1_a30 = sp + 16736|0; + $lp2_a31 = sp + 16592|0; + $hp2_a32 = sp + 16448|0; + $lp1_a33 = sp + 16288|0; + $hp1_a34 = sp + 16128|0; + $lp2_a35 = sp + 15968|0; + $hp2_a36 = sp + 15808|0; + $lp1_a37 = sp + 15616|0; + $hp1_a38 = sp + 15424|0; + $lp2_a39 = sp + 15232|0; + $hp2_a40 = sp + 15040|0; + $lp1_a41 = sp + 14832|0; + $hp1_a42 = sp + 14624|0; + $lp2_a43 = sp + 14416|0; + $hp2_a44 = sp + 14208|0; + $lp1_a45 = sp + 14032|0; + $hp1_a46 = sp + 13856|0; + $lp2_a47 = sp + 13680|0; + $hp2_a48 = sp + 13504|0; + $lp1_a49 = sp + 13280|0; + $hp1_a50 = sp + 13056|0; + $lp2_a51 = sp + 12832|0; + $hp2_a52 = sp + 12608|0; + $lp1_a53 = sp + 12368|0; + $hp1_a54 = sp + 12128|0; + $lp2_a55 = sp + 11888|0; + $hp2_a56 = sp + 11648|0; + $lp1_a57 = sp + 11632|0; + $hp1_a58 = sp + 11616|0; + $lp2_a59 = sp + 11600|0; + $hp2_a60 = sp + 11584|0; + $lp1_a61 = sp + 11536|0; + $hp1_a62 = sp + 11488|0; + $lp2_a63 = sp + 11440|0; + $hp2_a64 = sp + 11392|0; + $lp1_a65 = sp + 11312|0; + $hp1_a66 = sp + 11232|0; + $lp2_a67 = sp + 11152|0; + $hp2_a68 = sp + 11072|0; + $lp1_a69 = sp + 11024|0; + $hp1_a70 = sp + 10976|0; + $lp2_a71 = sp + 10928|0; + $hp2_a72 = sp + 10880|0; + $lp1_a73 = sp + 10800|0; + $hp1_a74 = sp + 10720|0; + $lp2_a75 = sp + 10640|0; + $hp2_a76 = sp + 10560|0; + $lp1_a77 = sp + 10448|0; + $hp1_a78 = sp + 10336|0; + $lp2_a79 = sp + 10224|0; + $hp2_a80 = sp + 10112|0; + $lp1_a81 = sp + 9968|0; + $hp1_a82 = sp + 4352|0; + $lp2_a83 = sp + 4208|0; + $hp2_a84 = sp + 4064|0; + $lp1_a85 = sp + 4032|0; + $hp1_a86 = sp + 4000|0; + $lp2_a87 = sp + 3968|0; + $hp2_a88 = sp + 3936|0; + $lp1_a89 = sp + 3872|0; + $hp1_a90 = sp + 3808|0; + $lp2_a91 = sp + 3744|0; + $hp2_a92 = sp + 3680|0; + $lp1_a93 = sp + 3584|0; + $hp1_a94 = sp + 3488|0; + $lp2_a95 = sp + 3392|0; + $hp2_a96 = sp + 3296|0; + $lp1_a97 = sp + 3168|0; + $hp1_a98 = sp + 3040|0; + $lp2_a99 = sp + 2912|0; + $hp2_a100 = sp + 2784|0; + $lp1_a101 = sp + 2624|0; + $hp1_a102 = sp + 2464|0; + $lp2_a103 = sp + 2304|0; + $hp2_a104 = sp + 2144|0; + $lp1_a105 = sp + 912|0; + $hp1_a106 = sp + 832|0; + $lp2_a107 = sp + 752|0; + $hp2_a108 = sp + 672|0; + $lp1_a109 = sp + 576|0; + $hp1_a110 = sp + 480|0; + $lp2_a111 = sp + 240|0; + $hp2_a112 = sp + 144|0; + $lp1_a113 = sp; + $hp1_a114 = sp + 336|0; + $lp2_a115 = sp + 992|0; + $hp2_a116 = sp + 1136|0; + $lp1_a117 = sp + 1280|0; + $hp1_a118 = sp + 1328|0; + $lp2_a119 = sp + 1376|0; + $hp2_a120 = sp + 1424|0; + $lp1_a121 = sp + 1472|0; + $hp1_a122 = sp + 1568|0; + $lp2_a123 = sp + 1664|0; + $hp2_a124 = sp + 1760|0; + $lp1_a125 = sp + 1856|0; + $hp1_a126 = sp + 2000|0; + $lp2_a127 = sp + 4496|0; + $hp2_a128 = sp + 4640|0; + $lp1_a129 = sp + 4784|0; + $hp1_a130 = sp + 4976|0; + $lp2_a131 = sp + 5168|0; + $hp2_a132 = sp + 5360|0; + $lp1_a133 = sp + 5552|0; + $hp1_a134 = sp + 5792|0; + $lp2_a135 = sp + 6032|0; + $hp2_a136 = sp + 6272|0; + $lp1_a137 = sp + 6512|0; + $hp1_a138 = sp + 6544|0; + $lp2_a139 = sp + 6576|0; + $hp2_a140 = sp + 6608|0; + $lp1_a141 = sp + 6640|0; + $hp1_a142 = sp + 6688|0; + $lp2_a143 = sp + 6736|0; + $hp2_a144 = sp + 6784|0; + $lp1_a145 = sp + 6832|0; + $hp1_a146 = sp + 6896|0; + $lp2_a147 = sp + 6960|0; + $hp2_a148 = sp + 7024|0; + $lp1_a149 = sp + 7088|0; + $hp1_a150 = sp + 7168|0; + $lp2_a151 = sp + 7248|0; + $hp2_a152 = sp + 7328|0; + $lp1_a153 = sp + 7408|0; + $hp1_a154 = sp + 7504|0; + $lp2_a155 = sp + 7600|0; + $hp2_a156 = sp + 7696|0; + $lp1_a157 = sp + 7792|0; + $hp1_a158 = sp + 7904|0; + $lp2_a159 = sp + 8016|0; + $hp2_a160 = sp + 8128|0; + $lp1_a161 = sp + 8240|0; + $hp1_a162 = sp + 8368|0; + $lp2_a163 = sp + 8496|0; + $hp2_a164 = sp + 8624|0; + $lp1_a165 = sp + 8752|0; + $hp1_a166 = sp + 8896|0; + $lp2_a167 = sp + 9040|0; + $hp2_a168 = sp + 9184|0; + $lp1_a169 = sp + 9328|0; + $hp1_a170 = sp + 9488|0; + $lp2_a171 = sp + 9648|0; + $hp2_a172 = sp + 9808|0; + $1 = $name; + $2 = $lp1; + $3 = $hp1; + $4 = $lp2; + $5 = $hp2; + $6 = $1; + $7 = (_strcmp($6,8)|0); + $8 = ($7|0)!=(0); + if ($8) { + $9 = $1; + $10 = (_strcmp($9,16)|0); + $11 = ($10|0)!=(0); + if ($11) { + $40 = $1; + $41 = (_strcmp($40,24)|0); + $42 = ($41|0)!=(0); + if (!($42)) { + ;HEAP32[$lp1_a1+0>>2]=HEAP32[456+0>>2]|0;HEAP32[$lp1_a1+4>>2]=HEAP32[456+4>>2]|0;HEAP32[$lp1_a1+8>>2]=HEAP32[456+8>>2]|0;HEAP32[$lp1_a1+12>>2]=HEAP32[456+12>>2]|0;HEAP32[$lp1_a1+16>>2]=HEAP32[456+16>>2]|0;HEAP32[$lp1_a1+20>>2]=HEAP32[456+20>>2]|0;HEAP32[$lp1_a1+24>>2]=HEAP32[456+24>>2]|0;HEAP32[$lp1_a1+28>>2]=HEAP32[456+28>>2]|0; + ;HEAP32[$hp1_a2+0>>2]=HEAP32[488+0>>2]|0;HEAP32[$hp1_a2+4>>2]=HEAP32[488+4>>2]|0;HEAP32[$hp1_a2+8>>2]=HEAP32[488+8>>2]|0;HEAP32[$hp1_a2+12>>2]=HEAP32[488+12>>2]|0;HEAP32[$hp1_a2+16>>2]=HEAP32[488+16>>2]|0;HEAP32[$hp1_a2+20>>2]=HEAP32[488+20>>2]|0;HEAP32[$hp1_a2+24>>2]=HEAP32[488+24>>2]|0;HEAP32[$hp1_a2+28>>2]=HEAP32[488+28>>2]|0; + ;HEAP32[$lp2_a3+0>>2]=HEAP32[520+0>>2]|0;HEAP32[$lp2_a3+4>>2]=HEAP32[520+4>>2]|0;HEAP32[$lp2_a3+8>>2]=HEAP32[520+8>>2]|0;HEAP32[$lp2_a3+12>>2]=HEAP32[520+12>>2]|0;HEAP32[$lp2_a3+16>>2]=HEAP32[520+16>>2]|0;HEAP32[$lp2_a3+20>>2]=HEAP32[520+20>>2]|0;HEAP32[$lp2_a3+24>>2]=HEAP32[520+24>>2]|0;HEAP32[$lp2_a3+28>>2]=HEAP32[520+28>>2]|0; + ;HEAP32[$hp2_a4+0>>2]=HEAP32[552+0>>2]|0;HEAP32[$hp2_a4+4>>2]=HEAP32[552+4>>2]|0;HEAP32[$hp2_a4+8>>2]=HEAP32[552+8>>2]|0;HEAP32[$hp2_a4+12>>2]=HEAP32[552+12>>2]|0;HEAP32[$hp2_a4+16>>2]=HEAP32[552+16>>2]|0;HEAP32[$hp2_a4+20>>2]=HEAP32[552+20>>2]|0;HEAP32[$hp2_a4+24>>2]=HEAP32[552+24>>2]|0;HEAP32[$hp2_a4+28>>2]=HEAP32[552+28>>2]|0; + $i = 0; + while(1) { + $43 = $i; + $44 = ($43|0)<(4); + if (!($44)) { + break; + } + $45 = $i; + $46 = (($lp1_a1) + ($45<<3)|0); + $47 = +HEAPF64[$46>>3]; + $48 = $i; + $49 = $2; + $50 = (($49) + ($48<<3)|0); + HEAPF64[$50>>3] = $47; + $51 = $i; + $52 = (($hp1_a2) + ($51<<3)|0); + $53 = +HEAPF64[$52>>3]; + $54 = $i; + $55 = $3; + $56 = (($55) + ($54<<3)|0); + HEAPF64[$56>>3] = $53; + $57 = $i; + $58 = (($lp2_a3) + ($57<<3)|0); + $59 = +HEAPF64[$58>>3]; + $60 = $i; + $61 = $4; + $62 = (($61) + ($60<<3)|0); + HEAPF64[$62>>3] = $59; + $63 = $i; + $64 = (($hp2_a4) + ($63<<3)|0); + $65 = +HEAPF64[$64>>3]; + $66 = $i; + $67 = $5; + $68 = (($67) + ($66<<3)|0); + HEAPF64[$68>>3] = $65; + $69 = $i; + $70 = (($69) + 1)|0; + $i = $70; + } + $0 = 4; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $71 = $1; + $72 = (_strcmp($71,32)|0); + $73 = ($72|0)!=(0); + if (!($73)) { + dest=$lp1_a5+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$lp1_a5>>3] = 0.0352262918821006562609; + $74 = (($lp1_a5) + 8|0); + HEAPF64[$74>>3] = -0.0854412738822414863371; + $75 = (($lp1_a5) + 16|0); + HEAPF64[$75>>3] = -0.135011020010390836443; + $76 = (($lp1_a5) + 24|0); + HEAPF64[$76>>3] = 0.459877502119331316166; + $77 = (($lp1_a5) + 32|0); + HEAPF64[$77>>3] = 0.806891509313338750609; + $78 = (($lp1_a5) + 40|0); + HEAPF64[$78>>3] = 0.332670552950956877059; + dest=$hp1_a6+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$hp1_a6>>3] = -0.332670552950956877059; + $79 = (($hp1_a6) + 8|0); + HEAPF64[$79>>3] = 0.806891509313338750609; + $80 = (($hp1_a6) + 16|0); + HEAPF64[$80>>3] = -0.459877502119331316166; + $81 = (($hp1_a6) + 24|0); + HEAPF64[$81>>3] = -0.135011020010390836443; + $82 = (($hp1_a6) + 32|0); + HEAPF64[$82>>3] = 0.0854412738822414863371; + $83 = (($hp1_a6) + 40|0); + HEAPF64[$83>>3] = 0.0352262918821006562609; + dest=$lp2_a7+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$lp2_a7>>3] = 0.332670552950956877059; + $84 = (($lp2_a7) + 8|0); + HEAPF64[$84>>3] = 0.806891509313338750609; + $85 = (($lp2_a7) + 16|0); + HEAPF64[$85>>3] = 0.459877502119331316166; + $86 = (($lp2_a7) + 24|0); + HEAPF64[$86>>3] = -0.135011020010390836443; + $87 = (($lp2_a7) + 32|0); + HEAPF64[$87>>3] = -0.0854412738822414863371; + $88 = (($lp2_a7) + 40|0); + HEAPF64[$88>>3] = 0.0352262918821006562609; + dest=$hp2_a8+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$hp2_a8>>3] = 0.0352262918821006562609; + $89 = (($hp2_a8) + 8|0); + HEAPF64[$89>>3] = 0.0854412738822414863371; + $90 = (($hp2_a8) + 16|0); + HEAPF64[$90>>3] = -0.135011020010390836443; + $91 = (($hp2_a8) + 24|0); + HEAPF64[$91>>3] = -0.459877502119331316166; + $92 = (($hp2_a8) + 32|0); + HEAPF64[$92>>3] = 0.806891509313338750609; + $93 = (($hp2_a8) + 40|0); + HEAPF64[$93>>3] = -0.332670552950956877059; + $i = 0; + while(1) { + $94 = $i; + $95 = ($94|0)<(6); + if (!($95)) { + break; + } + $96 = $i; + $97 = (($lp1_a5) + ($96<<3)|0); + $98 = +HEAPF64[$97>>3]; + $99 = $i; + $100 = $2; + $101 = (($100) + ($99<<3)|0); + HEAPF64[$101>>3] = $98; + $102 = $i; + $103 = (($hp1_a6) + ($102<<3)|0); + $104 = +HEAPF64[$103>>3]; + $105 = $i; + $106 = $3; + $107 = (($106) + ($105<<3)|0); + HEAPF64[$107>>3] = $104; + $108 = $i; + $109 = (($lp2_a7) + ($108<<3)|0); + $110 = +HEAPF64[$109>>3]; + $111 = $i; + $112 = $4; + $113 = (($112) + ($111<<3)|0); + HEAPF64[$113>>3] = $110; + $114 = $i; + $115 = (($hp2_a8) + ($114<<3)|0); + $116 = +HEAPF64[$115>>3]; + $117 = $i; + $118 = $5; + $119 = (($118) + ($117<<3)|0); + HEAPF64[$119>>3] = $116; + $120 = $i; + $121 = (($120) + 1)|0; + $i = $121; + } + $0 = 6; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $122 = $1; + $123 = (_strcmp($122,40)|0); + $124 = ($123|0)!=(0); + if (!($124)) { + dest=$lp1_a9+0|0; src=584+0|0; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a10+0|0; src=648+0|0; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a11+0|0; src=712+0|0; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a12+0|0; src=776+0|0; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $125 = $i; + $126 = ($125|0)<(8); + if (!($126)) { + break; + } + $127 = $i; + $128 = (($lp1_a9) + ($127<<3)|0); + $129 = +HEAPF64[$128>>3]; + $130 = $i; + $131 = $2; + $132 = (($131) + ($130<<3)|0); + HEAPF64[$132>>3] = $129; + $133 = $i; + $134 = (($hp1_a10) + ($133<<3)|0); + $135 = +HEAPF64[$134>>3]; + $136 = $i; + $137 = $3; + $138 = (($137) + ($136<<3)|0); + HEAPF64[$138>>3] = $135; + $139 = $i; + $140 = (($lp2_a11) + ($139<<3)|0); + $141 = +HEAPF64[$140>>3]; + $142 = $i; + $143 = $4; + $144 = (($143) + ($142<<3)|0); + HEAPF64[$144>>3] = $141; + $145 = $i; + $146 = (($hp2_a12) + ($145<<3)|0); + $147 = +HEAPF64[$146>>3]; + $148 = $i; + $149 = $5; + $150 = (($149) + ($148<<3)|0); + HEAPF64[$150>>3] = $147; + $151 = $i; + $152 = (($151) + 1)|0; + $i = $152; + } + $0 = 8; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $153 = $1; + $154 = (_strcmp($153,48)|0); + $155 = ($154|0)!=(0); + if (!($155)) { + dest=$lp1_a13+0|0; src=840+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a14+0|0; src=920+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a15+0|0; src=1000+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a16+0|0; src=1080+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $156 = $i; + $157 = ($156|0)<(10); + if (!($157)) { + break; + } + $158 = $i; + $159 = (($lp1_a13) + ($158<<3)|0); + $160 = +HEAPF64[$159>>3]; + $161 = $i; + $162 = $2; + $163 = (($162) + ($161<<3)|0); + HEAPF64[$163>>3] = $160; + $164 = $i; + $165 = (($hp1_a14) + ($164<<3)|0); + $166 = +HEAPF64[$165>>3]; + $167 = $i; + $168 = $3; + $169 = (($168) + ($167<<3)|0); + HEAPF64[$169>>3] = $166; + $170 = $i; + $171 = (($lp2_a15) + ($170<<3)|0); + $172 = +HEAPF64[$171>>3]; + $173 = $i; + $174 = $4; + $175 = (($174) + ($173<<3)|0); + HEAPF64[$175>>3] = $172; + $176 = $i; + $177 = (($hp2_a16) + ($176<<3)|0); + $178 = +HEAPF64[$177>>3]; + $179 = $i; + $180 = $5; + $181 = (($180) + ($179<<3)|0); + HEAPF64[$181>>3] = $178; + $182 = $i; + $183 = (($182) + 1)|0; + $i = $183; + } + $0 = 10; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $184 = $1; + $185 = (_strcmp($184,56)|0); + $186 = ($185|0)!=(0); + if (!($186)) { + dest=$lp1_a17+0|0; src=1160+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a18+0|0; src=1256+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a19+0|0; src=1352+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a20+0|0; src=1448+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $187 = $i; + $188 = ($187|0)<(12); + if (!($188)) { + break; + } + $189 = $i; + $190 = (($lp1_a17) + ($189<<3)|0); + $191 = +HEAPF64[$190>>3]; + $192 = $i; + $193 = $2; + $194 = (($193) + ($192<<3)|0); + HEAPF64[$194>>3] = $191; + $195 = $i; + $196 = (($hp1_a18) + ($195<<3)|0); + $197 = +HEAPF64[$196>>3]; + $198 = $i; + $199 = $3; + $200 = (($199) + ($198<<3)|0); + HEAPF64[$200>>3] = $197; + $201 = $i; + $202 = (($lp2_a19) + ($201<<3)|0); + $203 = +HEAPF64[$202>>3]; + $204 = $i; + $205 = $4; + $206 = (($205) + ($204<<3)|0); + HEAPF64[$206>>3] = $203; + $207 = $i; + $208 = (($hp2_a20) + ($207<<3)|0); + $209 = +HEAPF64[$208>>3]; + $210 = $i; + $211 = $5; + $212 = (($211) + ($210<<3)|0); + HEAPF64[$212>>3] = $209; + $213 = $i; + $214 = (($213) + 1)|0; + $i = $214; + } + $0 = 12; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $215 = $1; + $216 = (_strcmp($215,64)|0); + $217 = ($216|0)!=(0); + if (!($217)) { + dest=$lp1_a21+0|0; src=1544+0|0; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a22+0|0; src=1656+0|0; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a23+0|0; src=1768+0|0; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a24+0|0; src=1880+0|0; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $218 = $i; + $219 = ($218|0)<(14); + if (!($219)) { + break; + } + $220 = $i; + $221 = (($lp1_a21) + ($220<<3)|0); + $222 = +HEAPF64[$221>>3]; + $223 = $i; + $224 = $2; + $225 = (($224) + ($223<<3)|0); + HEAPF64[$225>>3] = $222; + $226 = $i; + $227 = (($hp1_a22) + ($226<<3)|0); + $228 = +HEAPF64[$227>>3]; + $229 = $i; + $230 = $3; + $231 = (($230) + ($229<<3)|0); + HEAPF64[$231>>3] = $228; + $232 = $i; + $233 = (($lp2_a23) + ($232<<3)|0); + $234 = +HEAPF64[$233>>3]; + $235 = $i; + $236 = $4; + $237 = (($236) + ($235<<3)|0); + HEAPF64[$237>>3] = $234; + $238 = $i; + $239 = (($hp2_a24) + ($238<<3)|0); + $240 = +HEAPF64[$239>>3]; + $241 = $i; + $242 = $5; + $243 = (($242) + ($241<<3)|0); + HEAPF64[$243>>3] = $240; + $244 = $i; + $245 = (($244) + 1)|0; + $i = $245; + } + $0 = 14; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $246 = $1; + $247 = (_strcmp($246,72)|0); + $248 = ($247|0)!=(0); + if (!($248)) { + dest=$lp1_a25+0|0; src=1992+0|0; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a26+0|0; src=2120+0|0; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a27+0|0; src=2248+0|0; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a28+0|0; src=2376+0|0; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $249 = $i; + $250 = ($249|0)<(16); + if (!($250)) { + break; + } + $251 = $i; + $252 = (($lp1_a25) + ($251<<3)|0); + $253 = +HEAPF64[$252>>3]; + $254 = $i; + $255 = $2; + $256 = (($255) + ($254<<3)|0); + HEAPF64[$256>>3] = $253; + $257 = $i; + $258 = (($hp1_a26) + ($257<<3)|0); + $259 = +HEAPF64[$258>>3]; + $260 = $i; + $261 = $3; + $262 = (($261) + ($260<<3)|0); + HEAPF64[$262>>3] = $259; + $263 = $i; + $264 = (($lp2_a27) + ($263<<3)|0); + $265 = +HEAPF64[$264>>3]; + $266 = $i; + $267 = $4; + $268 = (($267) + ($266<<3)|0); + HEAPF64[$268>>3] = $265; + $269 = $i; + $270 = (($hp2_a28) + ($269<<3)|0); + $271 = +HEAPF64[$270>>3]; + $272 = $i; + $273 = $5; + $274 = (($273) + ($272<<3)|0); + HEAPF64[$274>>3] = $271; + $275 = $i; + $276 = (($275) + 1)|0; + $i = $276; + } + $0 = 16; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $277 = $1; + $278 = (_strcmp($277,80)|0); + $279 = ($278|0)!=(0); + if (!($279)) { + _memcpy(($lp1_a29|0),(2504|0),144)|0; + _memcpy(($hp1_a30|0),(2648|0),144)|0; + _memcpy(($lp2_a31|0),(2792|0),144)|0; + _memcpy(($hp2_a32|0),(2936|0),144)|0; + $i = 0; + while(1) { + $280 = $i; + $281 = ($280|0)<(18); + if (!($281)) { + break; + } + $282 = $i; + $283 = (($lp1_a29) + ($282<<3)|0); + $284 = +HEAPF64[$283>>3]; + $285 = $i; + $286 = $2; + $287 = (($286) + ($285<<3)|0); + HEAPF64[$287>>3] = $284; + $288 = $i; + $289 = (($hp1_a30) + ($288<<3)|0); + $290 = +HEAPF64[$289>>3]; + $291 = $i; + $292 = $3; + $293 = (($292) + ($291<<3)|0); + HEAPF64[$293>>3] = $290; + $294 = $i; + $295 = (($lp2_a31) + ($294<<3)|0); + $296 = +HEAPF64[$295>>3]; + $297 = $i; + $298 = $4; + $299 = (($298) + ($297<<3)|0); + HEAPF64[$299>>3] = $296; + $300 = $i; + $301 = (($hp2_a32) + ($300<<3)|0); + $302 = +HEAPF64[$301>>3]; + $303 = $i; + $304 = $5; + $305 = (($304) + ($303<<3)|0); + HEAPF64[$305>>3] = $302; + $306 = $i; + $307 = (($306) + 1)|0; + $i = $307; + } + $0 = 18; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $308 = $1; + $309 = (_strcmp($308,88)|0); + $310 = ($309|0)!=(0); + if (!($310)) { + _memcpy(($lp1_a33|0),(3080|0),160)|0; + _memcpy(($hp1_a34|0),(3240|0),160)|0; + _memcpy(($lp2_a35|0),(3400|0),160)|0; + _memcpy(($hp2_a36|0),(3560|0),160)|0; + $i = 0; + while(1) { + $311 = $i; + $312 = ($311|0)<(20); + if (!($312)) { + break; + } + $313 = $i; + $314 = (($lp1_a33) + ($313<<3)|0); + $315 = +HEAPF64[$314>>3]; + $316 = $i; + $317 = $2; + $318 = (($317) + ($316<<3)|0); + HEAPF64[$318>>3] = $315; + $319 = $i; + $320 = (($hp1_a34) + ($319<<3)|0); + $321 = +HEAPF64[$320>>3]; + $322 = $i; + $323 = $3; + $324 = (($323) + ($322<<3)|0); + HEAPF64[$324>>3] = $321; + $325 = $i; + $326 = (($lp2_a35) + ($325<<3)|0); + $327 = +HEAPF64[$326>>3]; + $328 = $i; + $329 = $4; + $330 = (($329) + ($328<<3)|0); + HEAPF64[$330>>3] = $327; + $331 = $i; + $332 = (($hp2_a36) + ($331<<3)|0); + $333 = +HEAPF64[$332>>3]; + $334 = $i; + $335 = $5; + $336 = (($335) + ($334<<3)|0); + HEAPF64[$336>>3] = $333; + $337 = $i; + $338 = (($337) + 1)|0; + $i = $338; + } + $0 = 20; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $339 = $1; + $340 = (_strcmp($339,96)|0); + $341 = ($340|0)!=(0); + if (!($341)) { + _memcpy(($lp1_a37|0),(3720|0),192)|0; + _memcpy(($hp1_a38|0),(3912|0),192)|0; + _memcpy(($lp2_a39|0),(4104|0),192)|0; + _memcpy(($hp2_a40|0),(4296|0),192)|0; + $i = 0; + while(1) { + $342 = $i; + $343 = ($342|0)<(24); + if (!($343)) { + break; + } + $344 = $i; + $345 = (($lp1_a37) + ($344<<3)|0); + $346 = +HEAPF64[$345>>3]; + $347 = $i; + $348 = $2; + $349 = (($348) + ($347<<3)|0); + HEAPF64[$349>>3] = $346; + $350 = $i; + $351 = (($hp1_a38) + ($350<<3)|0); + $352 = +HEAPF64[$351>>3]; + $353 = $i; + $354 = $3; + $355 = (($354) + ($353<<3)|0); + HEAPF64[$355>>3] = $352; + $356 = $i; + $357 = (($lp2_a39) + ($356<<3)|0); + $358 = +HEAPF64[$357>>3]; + $359 = $i; + $360 = $4; + $361 = (($360) + ($359<<3)|0); + HEAPF64[$361>>3] = $358; + $362 = $i; + $363 = (($hp2_a40) + ($362<<3)|0); + $364 = +HEAPF64[$363>>3]; + $365 = $i; + $366 = $5; + $367 = (($366) + ($365<<3)|0); + HEAPF64[$367>>3] = $364; + $368 = $i; + $369 = (($368) + 1)|0; + $i = $369; + } + $0 = 24; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $370 = $1; + $371 = (_strcmp($370,104)|0); + $372 = ($371|0)!=(0); + if (!($372)) { + _memcpy(($lp1_a41|0),(4488|0),208)|0; + _memcpy(($hp1_a42|0),(4696|0),208)|0; + _memcpy(($lp2_a43|0),(4904|0),208)|0; + _memcpy(($hp2_a44|0),(5112|0),208)|0; + $i = 0; + while(1) { + $373 = $i; + $374 = ($373|0)<(26); + if (!($374)) { + break; + } + $375 = $i; + $376 = (($lp1_a41) + ($375<<3)|0); + $377 = +HEAPF64[$376>>3]; + $378 = $i; + $379 = $2; + $380 = (($379) + ($378<<3)|0); + HEAPF64[$380>>3] = $377; + $381 = $i; + $382 = (($hp1_a42) + ($381<<3)|0); + $383 = +HEAPF64[$382>>3]; + $384 = $i; + $385 = $3; + $386 = (($385) + ($384<<3)|0); + HEAPF64[$386>>3] = $383; + $387 = $i; + $388 = (($lp2_a43) + ($387<<3)|0); + $389 = +HEAPF64[$388>>3]; + $390 = $i; + $391 = $4; + $392 = (($391) + ($390<<3)|0); + HEAPF64[$392>>3] = $389; + $393 = $i; + $394 = (($hp2_a44) + ($393<<3)|0); + $395 = +HEAPF64[$394>>3]; + $396 = $i; + $397 = $5; + $398 = (($397) + ($396<<3)|0); + HEAPF64[$398>>3] = $395; + $399 = $i; + $400 = (($399) + 1)|0; + $i = $400; + } + $0 = 26; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $401 = $1; + $402 = (_strcmp($401,112)|0); + $403 = ($402|0)!=(0); + if (!($403)) { + _memcpy(($lp1_a45|0),(5320|0),176)|0; + _memcpy(($hp1_a46|0),(5496|0),176)|0; + _memcpy(($lp2_a47|0),(5672|0),176)|0; + _memcpy(($hp2_a48|0),(5848|0),176)|0; + $i = 0; + while(1) { + $404 = $i; + $405 = ($404|0)<(22); + if (!($405)) { + break; + } + $406 = $i; + $407 = (($lp1_a45) + ($406<<3)|0); + $408 = +HEAPF64[$407>>3]; + $409 = $i; + $410 = $2; + $411 = (($410) + ($409<<3)|0); + HEAPF64[$411>>3] = $408; + $412 = $i; + $413 = (($hp1_a46) + ($412<<3)|0); + $414 = +HEAPF64[$413>>3]; + $415 = $i; + $416 = $3; + $417 = (($416) + ($415<<3)|0); + HEAPF64[$417>>3] = $414; + $418 = $i; + $419 = (($lp2_a47) + ($418<<3)|0); + $420 = +HEAPF64[$419>>3]; + $421 = $i; + $422 = $4; + $423 = (($422) + ($421<<3)|0); + HEAPF64[$423>>3] = $420; + $424 = $i; + $425 = (($hp2_a48) + ($424<<3)|0); + $426 = +HEAPF64[$425>>3]; + $427 = $i; + $428 = $5; + $429 = (($428) + ($427<<3)|0); + HEAPF64[$429>>3] = $426; + $430 = $i; + $431 = (($430) + 1)|0; + $i = $431; + } + $0 = 22; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $432 = $1; + $433 = (_strcmp($432,120)|0); + $434 = ($433|0)!=(0); + if (!($434)) { + _memcpy(($lp1_a49|0),(6024|0),224)|0; + _memcpy(($hp1_a50|0),(6248|0),224)|0; + _memcpy(($lp2_a51|0),(6472|0),224)|0; + _memcpy(($hp2_a52|0),(6696|0),224)|0; + $i = 0; + while(1) { + $435 = $i; + $436 = ($435|0)<(28); + if (!($436)) { + break; + } + $437 = $i; + $438 = (($lp1_a49) + ($437<<3)|0); + $439 = +HEAPF64[$438>>3]; + $440 = $i; + $441 = $2; + $442 = (($441) + ($440<<3)|0); + HEAPF64[$442>>3] = $439; + $443 = $i; + $444 = (($hp1_a50) + ($443<<3)|0); + $445 = +HEAPF64[$444>>3]; + $446 = $i; + $447 = $3; + $448 = (($447) + ($446<<3)|0); + HEAPF64[$448>>3] = $445; + $449 = $i; + $450 = (($lp2_a51) + ($449<<3)|0); + $451 = +HEAPF64[$450>>3]; + $452 = $i; + $453 = $4; + $454 = (($453) + ($452<<3)|0); + HEAPF64[$454>>3] = $451; + $455 = $i; + $456 = (($hp2_a52) + ($455<<3)|0); + $457 = +HEAPF64[$456>>3]; + $458 = $i; + $459 = $5; + $460 = (($459) + ($458<<3)|0); + HEAPF64[$460>>3] = $457; + $461 = $i; + $462 = (($461) + 1)|0; + $i = $462; + } + $0 = 28; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $463 = $1; + $464 = (_strcmp($463,128)|0); + $465 = ($464|0)!=(0); + if (!($465)) { + _memcpy(($lp1_a53|0),(6920|0),240)|0; + _memcpy(($hp1_a54|0),(7160|0),240)|0; + _memcpy(($lp2_a55|0),(7400|0),240)|0; + _memcpy(($hp2_a56|0),(7640|0),240)|0; + $i = 0; + while(1) { + $466 = $i; + $467 = ($466|0)<(30); + if (!($467)) { + break; + } + $468 = $i; + $469 = (($lp1_a53) + ($468<<3)|0); + $470 = +HEAPF64[$469>>3]; + $471 = $i; + $472 = $2; + $473 = (($472) + ($471<<3)|0); + HEAPF64[$473>>3] = $470; + $474 = $i; + $475 = (($hp1_a54) + ($474<<3)|0); + $476 = +HEAPF64[$475>>3]; + $477 = $i; + $478 = $3; + $479 = (($478) + ($477<<3)|0); + HEAPF64[$479>>3] = $476; + $480 = $i; + $481 = (($lp2_a55) + ($480<<3)|0); + $482 = +HEAPF64[$481>>3]; + $483 = $i; + $484 = $4; + $485 = (($484) + ($483<<3)|0); + HEAPF64[$485>>3] = $482; + $486 = $i; + $487 = (($hp2_a56) + ($486<<3)|0); + $488 = +HEAPF64[$487>>3]; + $489 = $i; + $490 = $5; + $491 = (($490) + ($489<<3)|0); + HEAPF64[$491>>3] = $488; + $492 = $i; + $493 = (($492) + 1)|0; + $i = $493; + } + $0 = 30; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $494 = $1; + $495 = (_strcmp($494,136)|0); + $496 = ($495|0)!=(0); + if (!($496)) { + ;HEAP32[$lp1_a57+0>>2]=HEAP32[7880+0>>2]|0;HEAP32[$lp1_a57+4>>2]=HEAP32[7880+4>>2]|0;HEAP32[$lp1_a57+8>>2]=HEAP32[7880+8>>2]|0;HEAP32[$lp1_a57+12>>2]=HEAP32[7880+12>>2]|0; + ;HEAP32[$hp1_a58+0>>2]=HEAP32[7896+0>>2]|0;HEAP32[$hp1_a58+4>>2]=HEAP32[7896+4>>2]|0;HEAP32[$hp1_a58+8>>2]=HEAP32[7896+8>>2]|0;HEAP32[$hp1_a58+12>>2]=HEAP32[7896+12>>2]|0; + ;HEAP32[$lp2_a59+0>>2]=HEAP32[7912+0>>2]|0;HEAP32[$lp2_a59+4>>2]=HEAP32[7912+4>>2]|0;HEAP32[$lp2_a59+8>>2]=HEAP32[7912+8>>2]|0;HEAP32[$lp2_a59+12>>2]=HEAP32[7912+12>>2]|0; + ;HEAP32[$hp2_a60+0>>2]=HEAP32[7928+0>>2]|0;HEAP32[$hp2_a60+4>>2]=HEAP32[7928+4>>2]|0;HEAP32[$hp2_a60+8>>2]=HEAP32[7928+8>>2]|0;HEAP32[$hp2_a60+12>>2]=HEAP32[7928+12>>2]|0; + $i = 0; + while(1) { + $497 = $i; + $498 = ($497|0)<(2); + if (!($498)) { + break; + } + $499 = $i; + $500 = (($lp1_a57) + ($499<<3)|0); + $501 = +HEAPF64[$500>>3]; + $502 = $i; + $503 = $2; + $504 = (($503) + ($502<<3)|0); + HEAPF64[$504>>3] = $501; + $505 = $i; + $506 = (($hp1_a58) + ($505<<3)|0); + $507 = +HEAPF64[$506>>3]; + $508 = $i; + $509 = $3; + $510 = (($509) + ($508<<3)|0); + HEAPF64[$510>>3] = $507; + $511 = $i; + $512 = (($lp2_a59) + ($511<<3)|0); + $513 = +HEAPF64[$512>>3]; + $514 = $i; + $515 = $4; + $516 = (($515) + ($514<<3)|0); + HEAPF64[$516>>3] = $513; + $517 = $i; + $518 = (($hp2_a60) + ($517<<3)|0); + $519 = +HEAPF64[$518>>3]; + $520 = $i; + $521 = $5; + $522 = (($521) + ($520<<3)|0); + HEAPF64[$522>>3] = $519; + $523 = $i; + $524 = (($523) + 1)|0; + $i = $524; + } + $0 = 2; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $525 = $1; + $526 = (_strcmp($525,144)|0); + $527 = ($526|0)!=(0); + if (!($527)) { + dest=$lp1_a61+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$lp1_a61>>3] = -0.0883883476483184465921; + $528 = (($lp1_a61) + 8|0); + HEAPF64[$528>>3] = 0.0883883476483184465921; + $529 = (($lp1_a61) + 16|0); + HEAPF64[$529>>3] = 0.707106781186547572737; + $530 = (($lp1_a61) + 24|0); + HEAPF64[$530>>3] = 0.707106781186547572737; + $531 = (($lp1_a61) + 32|0); + HEAPF64[$531>>3] = 0.0883883476483184465921; + $532 = (($lp1_a61) + 40|0); + HEAPF64[$532>>3] = -0.0883883476483184465921; + dest=$hp1_a62+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $533 = (($hp1_a62) + 16|0); + HEAPF64[$533>>3] = -0.707106781186547572737; + $534 = (($hp1_a62) + 24|0); + HEAPF64[$534>>3] = 0.707106781186547572737; + dest=$lp2_a63+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $535 = (($lp2_a63) + 16|0); + HEAPF64[$535>>3] = 0.707106781186547572737; + $536 = (($lp2_a63) + 24|0); + HEAPF64[$536>>3] = 0.707106781186547572737; + dest=$hp2_a64+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$hp2_a64>>3] = -0.0883883476483184465921; + $537 = (($hp2_a64) + 8|0); + HEAPF64[$537>>3] = -0.0883883476483184465921; + $538 = (($hp2_a64) + 16|0); + HEAPF64[$538>>3] = 0.707106781186547572737; + $539 = (($hp2_a64) + 24|0); + HEAPF64[$539>>3] = -0.707106781186547572737; + $540 = (($hp2_a64) + 32|0); + HEAPF64[$540>>3] = 0.0883883476483184465921; + $541 = (($hp2_a64) + 40|0); + HEAPF64[$541>>3] = 0.0883883476483184465921; + $i = 0; + while(1) { + $542 = $i; + $543 = ($542|0)<(6); + if (!($543)) { + break; + } + $544 = $i; + $545 = (($lp1_a61) + ($544<<3)|0); + $546 = +HEAPF64[$545>>3]; + $547 = $i; + $548 = $2; + $549 = (($548) + ($547<<3)|0); + HEAPF64[$549>>3] = $546; + $550 = $i; + $551 = (($hp1_a62) + ($550<<3)|0); + $552 = +HEAPF64[$551>>3]; + $553 = $i; + $554 = $3; + $555 = (($554) + ($553<<3)|0); + HEAPF64[$555>>3] = $552; + $556 = $i; + $557 = (($lp2_a63) + ($556<<3)|0); + $558 = +HEAPF64[$557>>3]; + $559 = $i; + $560 = $4; + $561 = (($560) + ($559<<3)|0); + HEAPF64[$561>>3] = $558; + $562 = $i; + $563 = (($hp2_a64) + ($562<<3)|0); + $564 = +HEAPF64[$563>>3]; + $565 = $i; + $566 = $5; + $567 = (($566) + ($565<<3)|0); + HEAPF64[$567>>3] = $564; + $568 = $i; + $569 = (($568) + 1)|0; + $i = $569; + } + $0 = 6; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $570 = $1; + $571 = (_strcmp($570,152)|0); + $572 = ($571|0)!=(0); + if (!($572)) { + dest=$lp1_a65+0|0; src=7944+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a66+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $573 = (($hp1_a66) + 32|0); + HEAPF64[$573>>3] = -0.707106781186547572737; + $574 = (($hp1_a66) + 40|0); + HEAPF64[$574>>3] = 0.707106781186547572737; + dest=$lp2_a67+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $575 = (($lp2_a67) + 32|0); + HEAPF64[$575>>3] = 0.707106781186547572737; + $576 = (($lp2_a67) + 40|0); + HEAPF64[$576>>3] = 0.707106781186547572737; + dest=$hp2_a68+0|0; src=8024+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $577 = $i; + $578 = ($577|0)<(10); + if (!($578)) { + break; + } + $579 = $i; + $580 = (($lp1_a65) + ($579<<3)|0); + $581 = +HEAPF64[$580>>3]; + $582 = $i; + $583 = $2; + $584 = (($583) + ($582<<3)|0); + HEAPF64[$584>>3] = $581; + $585 = $i; + $586 = (($hp1_a66) + ($585<<3)|0); + $587 = +HEAPF64[$586>>3]; + $588 = $i; + $589 = $3; + $590 = (($589) + ($588<<3)|0); + HEAPF64[$590>>3] = $587; + $591 = $i; + $592 = (($lp2_a67) + ($591<<3)|0); + $593 = +HEAPF64[$592>>3]; + $594 = $i; + $595 = $4; + $596 = (($595) + ($594<<3)|0); + HEAPF64[$596>>3] = $593; + $597 = $i; + $598 = (($hp2_a68) + ($597<<3)|0); + $599 = +HEAPF64[$598>>3]; + $600 = $i; + $601 = $5; + $602 = (($601) + ($600<<3)|0); + HEAPF64[$602>>3] = $599; + $603 = $i; + $604 = (($603) + 1)|0; + $i = $604; + } + $0 = 10; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $605 = $1; + $606 = (_strcmp($605,160)|0); + $607 = ($606|0)!=(0); + if (!($607)) { + dest=$lp1_a69+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $608 = (($lp1_a69) + 8|0); + HEAPF64[$608>>3] = -0.176776695296636893184; + $609 = (($lp1_a69) + 16|0); + HEAPF64[$609>>3] = 0.353553390593273786369; + $610 = (($lp1_a69) + 24|0); + HEAPF64[$610>>3] = 1.06066017177982141462; + $611 = (($lp1_a69) + 32|0); + HEAPF64[$611>>3] = 0.353553390593273786369; + $612 = (($lp1_a69) + 40|0); + HEAPF64[$612>>3] = -0.176776695296636893184; + dest=$hp1_a70+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $613 = (($hp1_a70) + 8|0); + HEAPF64[$613>>3] = 0.353553390593273786369; + $614 = (($hp1_a70) + 16|0); + HEAPF64[$614>>3] = -0.707106781186547572737; + $615 = (($hp1_a70) + 24|0); + HEAPF64[$615>>3] = 0.353553390593273786369; + dest=$lp2_a71+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $616 = (($lp2_a71) + 8|0); + HEAPF64[$616>>3] = 0.353553390593273786369; + $617 = (($lp2_a71) + 16|0); + HEAPF64[$617>>3] = 0.707106781186547572737; + $618 = (($lp2_a71) + 24|0); + HEAPF64[$618>>3] = 0.353553390593273786369; + dest=$hp2_a72+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $619 = (($hp2_a72) + 8|0); + HEAPF64[$619>>3] = 0.176776695296636893184; + $620 = (($hp2_a72) + 16|0); + HEAPF64[$620>>3] = 0.353553390593273786369; + $621 = (($hp2_a72) + 24|0); + HEAPF64[$621>>3] = -1.06066017177982141462; + $622 = (($hp2_a72) + 32|0); + HEAPF64[$622>>3] = 0.353553390593273786369; + $623 = (($hp2_a72) + 40|0); + HEAPF64[$623>>3] = 0.176776695296636893184; + $i = 0; + while(1) { + $624 = $i; + $625 = ($624|0)<(6); + if (!($625)) { + break; + } + $626 = $i; + $627 = (($lp1_a69) + ($626<<3)|0); + $628 = +HEAPF64[$627>>3]; + $629 = $i; + $630 = $2; + $631 = (($630) + ($629<<3)|0); + HEAPF64[$631>>3] = $628; + $632 = $i; + $633 = (($hp1_a70) + ($632<<3)|0); + $634 = +HEAPF64[$633>>3]; + $635 = $i; + $636 = $3; + $637 = (($636) + ($635<<3)|0); + HEAPF64[$637>>3] = $634; + $638 = $i; + $639 = (($lp2_a71) + ($638<<3)|0); + $640 = +HEAPF64[$639>>3]; + $641 = $i; + $642 = $4; + $643 = (($642) + ($641<<3)|0); + HEAPF64[$643>>3] = $640; + $644 = $i; + $645 = (($hp2_a72) + ($644<<3)|0); + $646 = +HEAPF64[$645>>3]; + $647 = $i; + $648 = $5; + $649 = (($648) + ($647<<3)|0); + HEAPF64[$649>>3] = $646; + $650 = $i; + $651 = (($650) + 1)|0; + $i = $651; + } + $0 = 6; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $652 = $1; + $653 = (_strcmp($652,168)|0); + $654 = ($653|0)!=(0); + if (!($654)) { + dest=$lp1_a73+0|0; src=8104+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a74+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $655 = (($hp1_a74) + 24|0); + HEAPF64[$655>>3] = 0.353553390593273786369; + $656 = (($hp1_a74) + 32|0); + HEAPF64[$656>>3] = -0.707106781186547572737; + $657 = (($hp1_a74) + 40|0); + HEAPF64[$657>>3] = 0.353553390593273786369; + dest=$lp2_a75+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $658 = (($lp2_a75) + 24|0); + HEAPF64[$658>>3] = 0.353553390593273786369; + $659 = (($lp2_a75) + 32|0); + HEAPF64[$659>>3] = 0.707106781186547572737; + $660 = (($lp2_a75) + 40|0); + HEAPF64[$660>>3] = 0.353553390593273786369; + dest=$hp2_a76+0|0; src=8184+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $661 = $i; + $662 = ($661|0)<(10); + if (!($662)) { + break; + } + $663 = $i; + $664 = (($lp1_a73) + ($663<<3)|0); + $665 = +HEAPF64[$664>>3]; + $666 = $i; + $667 = $2; + $668 = (($667) + ($666<<3)|0); + HEAPF64[$668>>3] = $665; + $669 = $i; + $670 = (($hp1_a74) + ($669<<3)|0); + $671 = +HEAPF64[$670>>3]; + $672 = $i; + $673 = $3; + $674 = (($673) + ($672<<3)|0); + HEAPF64[$674>>3] = $671; + $675 = $i; + $676 = (($lp2_a75) + ($675<<3)|0); + $677 = +HEAPF64[$676>>3]; + $678 = $i; + $679 = $4; + $680 = (($679) + ($678<<3)|0); + HEAPF64[$680>>3] = $677; + $681 = $i; + $682 = (($hp2_a76) + ($681<<3)|0); + $683 = +HEAPF64[$682>>3]; + $684 = $i; + $685 = $5; + $686 = (($685) + ($684<<3)|0); + HEAPF64[$686>>3] = $683; + $687 = $i; + $688 = (($687) + 1)|0; + $i = $688; + } + $0 = 10; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $689 = $1; + $690 = (_strcmp($689,176)|0); + $691 = ($690|0)!=(0); + if (!($691)) { + dest=$lp1_a77+0|0; src=8264+0|0; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a78+0|0; stop=dest+112|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $692 = (($hp1_a78) + 40|0); + HEAPF64[$692>>3] = 0.353553390593273786369; + $693 = (($hp1_a78) + 48|0); + HEAPF64[$693>>3] = -0.707106781186547572737; + $694 = (($hp1_a78) + 56|0); + HEAPF64[$694>>3] = 0.353553390593273786369; + dest=$lp2_a79+0|0; stop=dest+112|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $695 = (($lp2_a79) + 40|0); + HEAPF64[$695>>3] = 0.353553390593273786369; + $696 = (($lp2_a79) + 48|0); + HEAPF64[$696>>3] = 0.707106781186547572737; + $697 = (($lp2_a79) + 56|0); + HEAPF64[$697>>3] = 0.353553390593273786369; + dest=$hp2_a80+0|0; src=8376+0|0; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $698 = $i; + $699 = ($698|0)<(14); + if (!($699)) { + break; + } + $700 = $i; + $701 = (($lp1_a77) + ($700<<3)|0); + $702 = +HEAPF64[$701>>3]; + $703 = $i; + $704 = $2; + $705 = (($704) + ($703<<3)|0); + HEAPF64[$705>>3] = $702; + $706 = $i; + $707 = (($hp1_a78) + ($706<<3)|0); + $708 = +HEAPF64[$707>>3]; + $709 = $i; + $710 = $3; + $711 = (($710) + ($709<<3)|0); + HEAPF64[$711>>3] = $708; + $712 = $i; + $713 = (($lp2_a79) + ($712<<3)|0); + $714 = +HEAPF64[$713>>3]; + $715 = $i; + $716 = $4; + $717 = (($716) + ($715<<3)|0); + HEAPF64[$717>>3] = $714; + $718 = $i; + $719 = (($hp2_a80) + ($718<<3)|0); + $720 = +HEAPF64[$719>>3]; + $721 = $i; + $722 = $5; + $723 = (($722) + ($721<<3)|0); + HEAPF64[$723>>3] = $720; + $724 = $i; + $725 = (($724) + 1)|0; + $i = $725; + } + $0 = 14; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $726 = $1; + $727 = (_strcmp($726,184)|0); + $728 = ($727|0)!=(0); + if (!($728)) { + _memcpy(($lp1_a81|0),(8488|0),144)|0; + _memset(($hp1_a82|0),0,144)|0; + $729 = (($hp1_a82) + 56|0); + HEAPF64[$729>>3] = 0.353553390593273786369; + $730 = (($hp1_a82) + 64|0); + HEAPF64[$730>>3] = -0.707106781186547572737; + $731 = (($hp1_a82) + 72|0); + HEAPF64[$731>>3] = 0.353553390593273786369; + _memset(($lp2_a83|0),0,144)|0; + $732 = (($lp2_a83) + 56|0); + HEAPF64[$732>>3] = 0.353553390593273786369; + $733 = (($lp2_a83) + 64|0); + HEAPF64[$733>>3] = 0.707106781186547572737; + $734 = (($lp2_a83) + 72|0); + HEAPF64[$734>>3] = 0.353553390593273786369; + _memcpy(($hp2_a84|0),(8632|0),144)|0; + $i = 0; + while(1) { + $735 = $i; + $736 = ($735|0)<(18); + if (!($736)) { + break; + } + $737 = $i; + $738 = (($lp1_a81) + ($737<<3)|0); + $739 = +HEAPF64[$738>>3]; + $740 = $i; + $741 = $2; + $742 = (($741) + ($740<<3)|0); + HEAPF64[$742>>3] = $739; + $743 = $i; + $744 = (($hp1_a82) + ($743<<3)|0); + $745 = +HEAPF64[$744>>3]; + $746 = $i; + $747 = $3; + $748 = (($747) + ($746<<3)|0); + HEAPF64[$748>>3] = $745; + $749 = $i; + $750 = (($lp2_a83) + ($749<<3)|0); + $751 = +HEAPF64[$750>>3]; + $752 = $i; + $753 = $4; + $754 = (($753) + ($752<<3)|0); + HEAPF64[$754>>3] = $751; + $755 = $i; + $756 = (($hp2_a84) + ($755<<3)|0); + $757 = +HEAPF64[$756>>3]; + $758 = $i; + $759 = $5; + $760 = (($759) + ($758<<3)|0); + HEAPF64[$760>>3] = $757; + $761 = $i; + $762 = (($761) + 1)|0; + $i = $762; + } + $0 = 18; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $763 = $1; + $764 = (_strcmp($763,192)|0); + $765 = ($764|0)!=(0); + if (!($765)) { + ;HEAP32[$lp1_a85+0>>2]=HEAP32[8776+0>>2]|0;HEAP32[$lp1_a85+4>>2]=HEAP32[8776+4>>2]|0;HEAP32[$lp1_a85+8>>2]=HEAP32[8776+8>>2]|0;HEAP32[$lp1_a85+12>>2]=HEAP32[8776+12>>2]|0;HEAP32[$lp1_a85+16>>2]=HEAP32[8776+16>>2]|0;HEAP32[$lp1_a85+20>>2]=HEAP32[8776+20>>2]|0;HEAP32[$lp1_a85+24>>2]=HEAP32[8776+24>>2]|0;HEAP32[$lp1_a85+28>>2]=HEAP32[8776+28>>2]|0; + ;HEAP32[$hp1_a86+0>>2]=HEAP32[8808+0>>2]|0;HEAP32[$hp1_a86+4>>2]=HEAP32[8808+4>>2]|0;HEAP32[$hp1_a86+8>>2]=HEAP32[8808+8>>2]|0;HEAP32[$hp1_a86+12>>2]=HEAP32[8808+12>>2]|0;HEAP32[$hp1_a86+16>>2]=HEAP32[8808+16>>2]|0;HEAP32[$hp1_a86+20>>2]=HEAP32[8808+20>>2]|0;HEAP32[$hp1_a86+24>>2]=HEAP32[8808+24>>2]|0;HEAP32[$hp1_a86+28>>2]=HEAP32[8808+28>>2]|0; + ;HEAP32[$lp2_a87+0>>2]=HEAP32[8840+0>>2]|0;HEAP32[$lp2_a87+4>>2]=HEAP32[8840+4>>2]|0;HEAP32[$lp2_a87+8>>2]=HEAP32[8840+8>>2]|0;HEAP32[$lp2_a87+12>>2]=HEAP32[8840+12>>2]|0;HEAP32[$lp2_a87+16>>2]=HEAP32[8840+16>>2]|0;HEAP32[$lp2_a87+20>>2]=HEAP32[8840+20>>2]|0;HEAP32[$lp2_a87+24>>2]=HEAP32[8840+24>>2]|0;HEAP32[$lp2_a87+28>>2]=HEAP32[8840+28>>2]|0; + ;HEAP32[$hp2_a88+0>>2]=HEAP32[8872+0>>2]|0;HEAP32[$hp2_a88+4>>2]=HEAP32[8872+4>>2]|0;HEAP32[$hp2_a88+8>>2]=HEAP32[8872+8>>2]|0;HEAP32[$hp2_a88+12>>2]=HEAP32[8872+12>>2]|0;HEAP32[$hp2_a88+16>>2]=HEAP32[8872+16>>2]|0;HEAP32[$hp2_a88+20>>2]=HEAP32[8872+20>>2]|0;HEAP32[$hp2_a88+24>>2]=HEAP32[8872+24>>2]|0;HEAP32[$hp2_a88+28>>2]=HEAP32[8872+28>>2]|0; + $i = 0; + while(1) { + $766 = $i; + $767 = ($766|0)<(4); + if (!($767)) { + break; + } + $768 = $i; + $769 = (($lp1_a85) + ($768<<3)|0); + $770 = +HEAPF64[$769>>3]; + $771 = $i; + $772 = $2; + $773 = (($772) + ($771<<3)|0); + HEAPF64[$773>>3] = $770; + $774 = $i; + $775 = (($hp1_a86) + ($774<<3)|0); + $776 = +HEAPF64[$775>>3]; + $777 = $i; + $778 = $3; + $779 = (($778) + ($777<<3)|0); + HEAPF64[$779>>3] = $776; + $780 = $i; + $781 = (($lp2_a87) + ($780<<3)|0); + $782 = +HEAPF64[$781>>3]; + $783 = $i; + $784 = $4; + $785 = (($784) + ($783<<3)|0); + HEAPF64[$785>>3] = $782; + $786 = $i; + $787 = (($hp2_a88) + ($786<<3)|0); + $788 = +HEAPF64[$787>>3]; + $789 = $i; + $790 = $5; + $791 = (($790) + ($789<<3)|0); + HEAPF64[$791>>3] = $788; + $792 = $i; + $793 = (($792) + 1)|0; + $i = $793; + } + $0 = 4; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $794 = $1; + $795 = (_strcmp($794,8904)|0); + $796 = ($795|0)!=(0); + if (!($796)) { + dest=$lp1_a89+0|0; src=8912+0|0; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a90+0|0; stop=dest+64|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $797 = (($hp1_a90) + 16|0); + HEAPF64[$797>>3] = -0.176776695296636893184; + $798 = (($hp1_a90) + 24|0); + HEAPF64[$798>>3] = 0.530330085889910707309; + $799 = (($hp1_a90) + 32|0); + HEAPF64[$799>>3] = -0.530330085889910707309; + $800 = (($hp1_a90) + 40|0); + HEAPF64[$800>>3] = 0.176776695296636893184; + dest=$lp2_a91+0|0; stop=dest+64|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $801 = (($lp2_a91) + 16|0); + HEAPF64[$801>>3] = 0.176776695296636893184; + $802 = (($lp2_a91) + 24|0); + HEAPF64[$802>>3] = 0.530330085889910707309; + $803 = (($lp2_a91) + 32|0); + HEAPF64[$803>>3] = 0.530330085889910707309; + $804 = (($lp2_a91) + 40|0); + HEAPF64[$804>>3] = 0.176776695296636893184; + dest=$hp2_a92+0|0; src=8976+0|0; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $805 = $i; + $806 = ($805|0)<(8); + if (!($806)) { + break; + } + $807 = $i; + $808 = (($lp1_a89) + ($807<<3)|0); + $809 = +HEAPF64[$808>>3]; + $810 = $i; + $811 = $2; + $812 = (($811) + ($810<<3)|0); + HEAPF64[$812>>3] = $809; + $813 = $i; + $814 = (($hp1_a90) + ($813<<3)|0); + $815 = +HEAPF64[$814>>3]; + $816 = $i; + $817 = $3; + $818 = (($817) + ($816<<3)|0); + HEAPF64[$818>>3] = $815; + $819 = $i; + $820 = (($lp2_a91) + ($819<<3)|0); + $821 = +HEAPF64[$820>>3]; + $822 = $i; + $823 = $4; + $824 = (($823) + ($822<<3)|0); + HEAPF64[$824>>3] = $821; + $825 = $i; + $826 = (($hp2_a92) + ($825<<3)|0); + $827 = +HEAPF64[$826>>3]; + $828 = $i; + $829 = $5; + $830 = (($829) + ($828<<3)|0); + HEAPF64[$830>>3] = $827; + $831 = $i; + $832 = (($831) + 1)|0; + $i = $832; + } + $0 = 8; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $833 = $1; + $834 = (_strcmp($833,200)|0); + $835 = ($834|0)!=(0); + if (!($835)) { + dest=$lp1_a93+0|0; src=9040+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a94+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $836 = (($hp1_a94) + 32|0); + HEAPF64[$836>>3] = -0.176776695296636893184; + $837 = (($hp1_a94) + 40|0); + HEAPF64[$837>>3] = 0.530330085889910707309; + $838 = (($hp1_a94) + 48|0); + HEAPF64[$838>>3] = -0.530330085889910707309; + $839 = (($hp1_a94) + 56|0); + HEAPF64[$839>>3] = 0.176776695296636893184; + dest=$lp2_a95+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $840 = (($lp2_a95) + 32|0); + HEAPF64[$840>>3] = 0.176776695296636893184; + $841 = (($lp2_a95) + 40|0); + HEAPF64[$841>>3] = 0.530330085889910707309; + $842 = (($lp2_a95) + 48|0); + HEAPF64[$842>>3] = 0.530330085889910707309; + $843 = (($lp2_a95) + 56|0); + HEAPF64[$843>>3] = 0.176776695296636893184; + dest=$hp2_a96+0|0; src=9136+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $844 = $i; + $845 = ($844|0)<(12); + if (!($845)) { + break; + } + $846 = $i; + $847 = (($lp1_a93) + ($846<<3)|0); + $848 = +HEAPF64[$847>>3]; + $849 = $i; + $850 = $2; + $851 = (($850) + ($849<<3)|0); + HEAPF64[$851>>3] = $848; + $852 = $i; + $853 = (($hp1_a94) + ($852<<3)|0); + $854 = +HEAPF64[$853>>3]; + $855 = $i; + $856 = $3; + $857 = (($856) + ($855<<3)|0); + HEAPF64[$857>>3] = $854; + $858 = $i; + $859 = (($lp2_a95) + ($858<<3)|0); + $860 = +HEAPF64[$859>>3]; + $861 = $i; + $862 = $4; + $863 = (($862) + ($861<<3)|0); + HEAPF64[$863>>3] = $860; + $864 = $i; + $865 = (($hp2_a96) + ($864<<3)|0); + $866 = +HEAPF64[$865>>3]; + $867 = $i; + $868 = $5; + $869 = (($868) + ($867<<3)|0); + HEAPF64[$869>>3] = $866; + $870 = $i; + $871 = (($870) + 1)|0; + $i = $871; + } + $0 = 12; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $872 = $1; + $873 = (_strcmp($872,208)|0); + $874 = ($873|0)!=(0); + if (!($874)) { + dest=$lp1_a97+0|0; src=9232+0|0; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a98+0|0; stop=dest+128|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $875 = (($hp1_a98) + 48|0); + HEAPF64[$875>>3] = -0.176776695296636893184; + $876 = (($hp1_a98) + 56|0); + HEAPF64[$876>>3] = 0.530330085889910707309; + $877 = (($hp1_a98) + 64|0); + HEAPF64[$877>>3] = -0.530330085889910707309; + $878 = (($hp1_a98) + 72|0); + HEAPF64[$878>>3] = 0.176776695296636893184; + dest=$lp2_a99+0|0; stop=dest+128|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $879 = (($lp2_a99) + 48|0); + HEAPF64[$879>>3] = 0.176776695296636893184; + $880 = (($lp2_a99) + 56|0); + HEAPF64[$880>>3] = 0.530330085889910707309; + $881 = (($lp2_a99) + 64|0); + HEAPF64[$881>>3] = 0.530330085889910707309; + $882 = (($lp2_a99) + 72|0); + HEAPF64[$882>>3] = 0.176776695296636893184; + dest=$hp2_a100+0|0; src=9360+0|0; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $883 = $i; + $884 = ($883|0)<(16); + if (!($884)) { + break; + } + $885 = $i; + $886 = (($lp1_a97) + ($885<<3)|0); + $887 = +HEAPF64[$886>>3]; + $888 = $i; + $889 = $2; + $890 = (($889) + ($888<<3)|0); + HEAPF64[$890>>3] = $887; + $891 = $i; + $892 = (($hp1_a98) + ($891<<3)|0); + $893 = +HEAPF64[$892>>3]; + $894 = $i; + $895 = $3; + $896 = (($895) + ($894<<3)|0); + HEAPF64[$896>>3] = $893; + $897 = $i; + $898 = (($lp2_a99) + ($897<<3)|0); + $899 = +HEAPF64[$898>>3]; + $900 = $i; + $901 = $4; + $902 = (($901) + ($900<<3)|0); + HEAPF64[$902>>3] = $899; + $903 = $i; + $904 = (($hp2_a100) + ($903<<3)|0); + $905 = +HEAPF64[$904>>3]; + $906 = $i; + $907 = $5; + $908 = (($907) + ($906<<3)|0); + HEAPF64[$908>>3] = $905; + $909 = $i; + $910 = (($909) + 1)|0; + $i = $910; + } + $0 = 16; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $911 = $1; + $912 = (_strcmp($911,216)|0); + $913 = ($912|0)!=(0); + if (!($913)) { + _memcpy(($lp1_a101|0),(9488|0),160)|0; + _memset(($hp1_a102|0),0,160)|0; + $914 = (($hp1_a102) + 64|0); + HEAPF64[$914>>3] = -0.176776695296636893184; + $915 = (($hp1_a102) + 72|0); + HEAPF64[$915>>3] = 0.530330085889910707309; + $916 = (($hp1_a102) + 80|0); + HEAPF64[$916>>3] = -0.530330085889910707309; + $917 = (($hp1_a102) + 88|0); + HEAPF64[$917>>3] = 0.176776695296636893184; + _memset(($lp2_a103|0),0,160)|0; + $918 = (($lp2_a103) + 64|0); + HEAPF64[$918>>3] = 0.176776695296636893184; + $919 = (($lp2_a103) + 72|0); + HEAPF64[$919>>3] = 0.530330085889910707309; + $920 = (($lp2_a103) + 80|0); + HEAPF64[$920>>3] = 0.530330085889910707309; + $921 = (($lp2_a103) + 88|0); + HEAPF64[$921>>3] = 0.176776695296636893184; + _memcpy(($hp2_a104|0),(9648|0),160)|0; + $i = 0; + while(1) { + $922 = $i; + $923 = ($922|0)<(20); + if (!($923)) { + break; + } + $924 = $i; + $925 = (($lp1_a101) + ($924<<3)|0); + $926 = +HEAPF64[$925>>3]; + $927 = $i; + $928 = $2; + $929 = (($928) + ($927<<3)|0); + HEAPF64[$929>>3] = $926; + $930 = $i; + $931 = (($hp1_a102) + ($930<<3)|0); + $932 = +HEAPF64[$931>>3]; + $933 = $i; + $934 = $3; + $935 = (($934) + ($933<<3)|0); + HEAPF64[$935>>3] = $932; + $936 = $i; + $937 = (($lp2_a103) + ($936<<3)|0); + $938 = +HEAPF64[$937>>3]; + $939 = $i; + $940 = $4; + $941 = (($940) + ($939<<3)|0); + HEAPF64[$941>>3] = $938; + $942 = $i; + $943 = (($hp2_a104) + ($942<<3)|0); + $944 = +HEAPF64[$943>>3]; + $945 = $i; + $946 = $5; + $947 = (($946) + ($945<<3)|0); + HEAPF64[$947>>3] = $944; + $948 = $i; + $949 = (($948) + 1)|0; + $i = $949; + } + $0 = 20; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $950 = $1; + $951 = (_strcmp($950,224)|0); + $952 = ($951|0)!=(0); + if (!($952)) { + dest=$lp1_a105+0|0; src=9808+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a106+0|0; src=9888+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a107+0|0; src=9968+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a108+0|0; src=10048+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $953 = $i; + $954 = ($953|0)<(10); + if (!($954)) { + break; + } + $955 = $i; + $956 = (($lp1_a105) + ($955<<3)|0); + $957 = +HEAPF64[$956>>3]; + $958 = $i; + $959 = $2; + $960 = (($959) + ($958<<3)|0); + HEAPF64[$960>>3] = $957; + $961 = $i; + $962 = (($hp1_a106) + ($961<<3)|0); + $963 = +HEAPF64[$962>>3]; + $964 = $i; + $965 = $3; + $966 = (($965) + ($964<<3)|0); + HEAPF64[$966>>3] = $963; + $967 = $i; + $968 = (($lp2_a107) + ($967<<3)|0); + $969 = +HEAPF64[$968>>3]; + $970 = $i; + $971 = $4; + $972 = (($971) + ($970<<3)|0); + HEAPF64[$972>>3] = $969; + $973 = $i; + $974 = (($hp2_a108) + ($973<<3)|0); + $975 = +HEAPF64[$974>>3]; + $976 = $i; + $977 = $5; + $978 = (($977) + ($976<<3)|0); + HEAPF64[$978>>3] = $975; + $979 = $i; + $980 = (($979) + 1)|0; + $i = $980; + } + $0 = 10; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $981 = $1; + $982 = (_strcmp($981,232)|0); + $983 = ($982|0)!=(0); + if (!($983)) { + dest=$lp1_a109+0|0; src=10128+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a110+0|0; src=10224+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a111+0|0; src=10320+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a112+0|0; src=10416+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $984 = $i; + $985 = ($984|0)<(12); + if (!($985)) { + break; + } + $986 = $i; + $987 = (($lp1_a109) + ($986<<3)|0); + $988 = +HEAPF64[$987>>3]; + $989 = $i; + $990 = $2; + $991 = (($990) + ($989<<3)|0); + HEAPF64[$991>>3] = $988; + $992 = $i; + $993 = (($hp1_a110) + ($992<<3)|0); + $994 = +HEAPF64[$993>>3]; + $995 = $i; + $996 = $3; + $997 = (($996) + ($995<<3)|0); + HEAPF64[$997>>3] = $994; + $998 = $i; + $999 = (($lp2_a111) + ($998<<3)|0); + $1000 = +HEAPF64[$999>>3]; + $1001 = $i; + $1002 = $4; + $1003 = (($1002) + ($1001<<3)|0); + HEAPF64[$1003>>3] = $1000; + $1004 = $i; + $1005 = (($hp2_a112) + ($1004<<3)|0); + $1006 = +HEAPF64[$1005>>3]; + $1007 = $i; + $1008 = $5; + $1009 = (($1008) + ($1007<<3)|0); + HEAPF64[$1009>>3] = $1006; + $1010 = $i; + $1011 = (($1010) + 1)|0; + $i = $1011; + } + $0 = 12; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1012 = $1; + $1013 = (_strcmp($1012,240)|0); + $1014 = ($1013|0)!=(0); + if (!($1014)) { + _memcpy(($lp1_a113|0),(10512|0),144)|0; + _memcpy(($hp1_a114|0),(10656|0),144)|0; + _memcpy(($lp2_a115|0),(10800|0),144)|0; + _memcpy(($hp2_a116|0),(10944|0),144)|0; + $i = 0; + while(1) { + $1015 = $i; + $1016 = ($1015|0)<(18); + if (!($1016)) { + break; + } + $1017 = $i; + $1018 = (($lp1_a113) + ($1017<<3)|0); + $1019 = +HEAPF64[$1018>>3]; + $1020 = $i; + $1021 = $2; + $1022 = (($1021) + ($1020<<3)|0); + HEAPF64[$1022>>3] = $1019; + $1023 = $i; + $1024 = (($hp1_a114) + ($1023<<3)|0); + $1025 = +HEAPF64[$1024>>3]; + $1026 = $i; + $1027 = $3; + $1028 = (($1027) + ($1026<<3)|0); + HEAPF64[$1028>>3] = $1025; + $1029 = $i; + $1030 = (($lp2_a115) + ($1029<<3)|0); + $1031 = +HEAPF64[$1030>>3]; + $1032 = $i; + $1033 = $4; + $1034 = (($1033) + ($1032<<3)|0); + HEAPF64[$1034>>3] = $1031; + $1035 = $i; + $1036 = (($hp2_a116) + ($1035<<3)|0); + $1037 = +HEAPF64[$1036>>3]; + $1038 = $i; + $1039 = $5; + $1040 = (($1039) + ($1038<<3)|0); + HEAPF64[$1040>>3] = $1037; + $1041 = $i; + $1042 = (($1041) + 1)|0; + $i = $1042; + } + $0 = 18; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1043 = $1; + $1044 = (_strcmp($1043,248)|0); + $1045 = ($1044|0)!=(0); + if (!($1045)) { + dest=$lp1_a117+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$lp1_a117>>3] = -0.015655728135464539591; + $1046 = (($lp1_a117) + 8|0); + HEAPF64[$1046>>3] = -0.0727326195128538965928; + $1047 = (($lp1_a117) + 16|0); + HEAPF64[$1047>>3] = 0.384864846864202858612; + $1048 = (($lp1_a117) + 24|0); + HEAPF64[$1048>>3] = 0.852572020212255421434; + $1049 = (($lp1_a117) + 32|0); + HEAPF64[$1049>>3] = 0.337897662457809222492; + $1050 = (($lp1_a117) + 40|0); + HEAPF64[$1050>>3] = -0.0727326195128538965928; + dest=$hp1_a118+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$hp1_a118>>3] = 0.0727326195128538965928; + $1051 = (($hp1_a118) + 8|0); + HEAPF64[$1051>>3] = 0.337897662457809222492; + $1052 = (($hp1_a118) + 16|0); + HEAPF64[$1052>>3] = -0.852572020212255421434; + $1053 = (($hp1_a118) + 24|0); + HEAPF64[$1053>>3] = 0.384864846864202858612; + $1054 = (($hp1_a118) + 32|0); + HEAPF64[$1054>>3] = 0.0727326195128538965928; + $1055 = (($hp1_a118) + 40|0); + HEAPF64[$1055>>3] = -0.015655728135464539591; + dest=$lp2_a119+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$lp2_a119>>3] = -0.0727326195128538965928; + $1056 = (($lp2_a119) + 8|0); + HEAPF64[$1056>>3] = 0.337897662457809222492; + $1057 = (($lp2_a119) + 16|0); + HEAPF64[$1057>>3] = 0.852572020212255421434; + $1058 = (($lp2_a119) + 24|0); + HEAPF64[$1058>>3] = 0.384864846864202858612; + $1059 = (($lp2_a119) + 32|0); + HEAPF64[$1059>>3] = -0.0727326195128538965928; + $1060 = (($lp2_a119) + 40|0); + HEAPF64[$1060>>3] = -0.015655728135464539591; + dest=$hp2_a120+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$hp2_a120>>3] = -0.015655728135464539591; + $1061 = (($hp2_a120) + 8|0); + HEAPF64[$1061>>3] = 0.0727326195128538965928; + $1062 = (($hp2_a120) + 16|0); + HEAPF64[$1062>>3] = 0.384864846864202858612; + $1063 = (($hp2_a120) + 24|0); + HEAPF64[$1063>>3] = -0.852572020212255421434; + $1064 = (($hp2_a120) + 32|0); + HEAPF64[$1064>>3] = 0.337897662457809222492; + $1065 = (($hp2_a120) + 40|0); + HEAPF64[$1065>>3] = 0.0727326195128538965928; + $i = 0; + while(1) { + $1066 = $i; + $1067 = ($1066|0)<(6); + if (!($1067)) { + break; + } + $1068 = $i; + $1069 = (($lp1_a117) + ($1068<<3)|0); + $1070 = +HEAPF64[$1069>>3]; + $1071 = $i; + $1072 = $2; + $1073 = (($1072) + ($1071<<3)|0); + HEAPF64[$1073>>3] = $1070; + $1074 = $i; + $1075 = (($hp1_a118) + ($1074<<3)|0); + $1076 = +HEAPF64[$1075>>3]; + $1077 = $i; + $1078 = $3; + $1079 = (($1078) + ($1077<<3)|0); + HEAPF64[$1079>>3] = $1076; + $1080 = $i; + $1081 = (($lp2_a119) + ($1080<<3)|0); + $1082 = +HEAPF64[$1081>>3]; + $1083 = $i; + $1084 = $4; + $1085 = (($1084) + ($1083<<3)|0); + HEAPF64[$1085>>3] = $1082; + $1086 = $i; + $1087 = (($hp2_a120) + ($1086<<3)|0); + $1088 = +HEAPF64[$1087>>3]; + $1089 = $i; + $1090 = $5; + $1091 = (($1090) + ($1089<<3)|0); + HEAPF64[$1091>>3] = $1088; + $1092 = $i; + $1093 = (($1092) + 1)|0; + $i = $1093; + } + $0 = 6; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1094 = $1; + $1095 = (_strcmp($1094,256)|0); + $1096 = ($1095|0)!=(0); + if (!($1096)) { + dest=$lp1_a121+0|0; src=11088+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a122+0|0; src=11184+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a123+0|0; src=11280+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a124+0|0; src=11376+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $1097 = $i; + $1098 = ($1097|0)<(12); + if (!($1098)) { + break; + } + $1099 = $i; + $1100 = (($lp1_a121) + ($1099<<3)|0); + $1101 = +HEAPF64[$1100>>3]; + $1102 = $i; + $1103 = $2; + $1104 = (($1103) + ($1102<<3)|0); + HEAPF64[$1104>>3] = $1101; + $1105 = $i; + $1106 = (($hp1_a122) + ($1105<<3)|0); + $1107 = +HEAPF64[$1106>>3]; + $1108 = $i; + $1109 = $3; + $1110 = (($1109) + ($1108<<3)|0); + HEAPF64[$1110>>3] = $1107; + $1111 = $i; + $1112 = (($lp2_a123) + ($1111<<3)|0); + $1113 = +HEAPF64[$1112>>3]; + $1114 = $i; + $1115 = $4; + $1116 = (($1115) + ($1114<<3)|0); + HEAPF64[$1116>>3] = $1113; + $1117 = $i; + $1118 = (($hp2_a124) + ($1117<<3)|0); + $1119 = +HEAPF64[$1118>>3]; + $1120 = $i; + $1121 = $5; + $1122 = (($1121) + ($1120<<3)|0); + HEAPF64[$1122>>3] = $1119; + $1123 = $i; + $1124 = (($1123) + 1)|0; + $i = $1124; + } + $0 = 12; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1125 = $1; + $1126 = (_strcmp($1125,264)|0); + $1127 = ($1126|0)!=(0); + if (!($1127)) { + _memcpy(($lp1_a125|0),(11472|0),144)|0; + _memcpy(($hp1_a126|0),(11616|0),144)|0; + _memcpy(($lp2_a127|0),(11760|0),144)|0; + _memcpy(($hp2_a128|0),(11904|0),144)|0; + $i = 0; + while(1) { + $1128 = $i; + $1129 = ($1128|0)<(18); + if (!($1129)) { + break; + } + $1130 = $i; + $1131 = (($lp1_a125) + ($1130<<3)|0); + $1132 = +HEAPF64[$1131>>3]; + $1133 = $i; + $1134 = $2; + $1135 = (($1134) + ($1133<<3)|0); + HEAPF64[$1135>>3] = $1132; + $1136 = $i; + $1137 = (($hp1_a126) + ($1136<<3)|0); + $1138 = +HEAPF64[$1137>>3]; + $1139 = $i; + $1140 = $3; + $1141 = (($1140) + ($1139<<3)|0); + HEAPF64[$1141>>3] = $1138; + $1142 = $i; + $1143 = (($lp2_a127) + ($1142<<3)|0); + $1144 = +HEAPF64[$1143>>3]; + $1145 = $i; + $1146 = $4; + $1147 = (($1146) + ($1145<<3)|0); + HEAPF64[$1147>>3] = $1144; + $1148 = $i; + $1149 = (($hp2_a128) + ($1148<<3)|0); + $1150 = +HEAPF64[$1149>>3]; + $1151 = $i; + $1152 = $5; + $1153 = (($1152) + ($1151<<3)|0); + HEAPF64[$1153>>3] = $1150; + $1154 = $i; + $1155 = (($1154) + 1)|0; + $i = $1155; + } + $0 = 18; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1156 = $1; + $1157 = (_strcmp($1156,272)|0); + $1158 = ($1157|0)!=(0); + if (!($1158)) { + _memcpy(($lp1_a129|0),(12048|0),192)|0; + _memcpy(($hp1_a130|0),(12240|0),192)|0; + _memcpy(($lp2_a131|0),(12432|0),192)|0; + _memcpy(($hp2_a132|0),(12624|0),192)|0; + $i = 0; + while(1) { + $1159 = $i; + $1160 = ($1159|0)<(24); + if (!($1160)) { + break; + } + $1161 = $i; + $1162 = (($lp1_a129) + ($1161<<3)|0); + $1163 = +HEAPF64[$1162>>3]; + $1164 = $i; + $1165 = $2; + $1166 = (($1165) + ($1164<<3)|0); + HEAPF64[$1166>>3] = $1163; + $1167 = $i; + $1168 = (($hp1_a130) + ($1167<<3)|0); + $1169 = +HEAPF64[$1168>>3]; + $1170 = $i; + $1171 = $3; + $1172 = (($1171) + ($1170<<3)|0); + HEAPF64[$1172>>3] = $1169; + $1173 = $i; + $1174 = (($lp2_a131) + ($1173<<3)|0); + $1175 = +HEAPF64[$1174>>3]; + $1176 = $i; + $1177 = $4; + $1178 = (($1177) + ($1176<<3)|0); + HEAPF64[$1178>>3] = $1175; + $1179 = $i; + $1180 = (($hp2_a132) + ($1179<<3)|0); + $1181 = +HEAPF64[$1180>>3]; + $1182 = $i; + $1183 = $5; + $1184 = (($1183) + ($1182<<3)|0); + HEAPF64[$1184>>3] = $1181; + $1185 = $i; + $1186 = (($1185) + 1)|0; + $i = $1186; + } + $0 = 24; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1187 = $1; + $1188 = (_strcmp($1187,280)|0); + $1189 = ($1188|0)!=(0); + if (!($1189)) { + _memcpy(($lp1_a133|0),(12816|0),240)|0; + _memcpy(($hp1_a134|0),(13056|0),240)|0; + _memcpy(($lp2_a135|0),(13296|0),240)|0; + _memcpy(($hp2_a136|0),(13536|0),240)|0; + $i = 0; + while(1) { + $1190 = $i; + $1191 = ($1190|0)<(30); + if (!($1191)) { + break; + } + $1192 = $i; + $1193 = (($lp1_a133) + ($1192<<3)|0); + $1194 = +HEAPF64[$1193>>3]; + $1195 = $i; + $1196 = $2; + $1197 = (($1196) + ($1195<<3)|0); + HEAPF64[$1197>>3] = $1194; + $1198 = $i; + $1199 = (($hp1_a134) + ($1198<<3)|0); + $1200 = +HEAPF64[$1199>>3]; + $1201 = $i; + $1202 = $3; + $1203 = (($1202) + ($1201<<3)|0); + HEAPF64[$1203>>3] = $1200; + $1204 = $i; + $1205 = (($lp2_a135) + ($1204<<3)|0); + $1206 = +HEAPF64[$1205>>3]; + $1207 = $i; + $1208 = $4; + $1209 = (($1208) + ($1207<<3)|0); + HEAPF64[$1209>>3] = $1206; + $1210 = $i; + $1211 = (($hp2_a136) + ($1210<<3)|0); + $1212 = +HEAPF64[$1211>>3]; + $1213 = $i; + $1214 = $5; + $1215 = (($1214) + ($1213<<3)|0); + HEAPF64[$1215>>3] = $1212; + $1216 = $i; + $1217 = (($1216) + 1)|0; + $i = $1217; + } + $0 = 30; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1218 = $1; + $1219 = (_strcmp($1218,288)|0); + $1220 = ($1219|0)!=(0); + if (!($1220)) { + ;HEAP32[$lp1_a137+0>>2]=HEAP32[13776+0>>2]|0;HEAP32[$lp1_a137+4>>2]=HEAP32[13776+4>>2]|0;HEAP32[$lp1_a137+8>>2]=HEAP32[13776+8>>2]|0;HEAP32[$lp1_a137+12>>2]=HEAP32[13776+12>>2]|0;HEAP32[$lp1_a137+16>>2]=HEAP32[13776+16>>2]|0;HEAP32[$lp1_a137+20>>2]=HEAP32[13776+20>>2]|0;HEAP32[$lp1_a137+24>>2]=HEAP32[13776+24>>2]|0;HEAP32[$lp1_a137+28>>2]=HEAP32[13776+28>>2]|0; + ;HEAP32[$hp1_a138+0>>2]=HEAP32[13808+0>>2]|0;HEAP32[$hp1_a138+4>>2]=HEAP32[13808+4>>2]|0;HEAP32[$hp1_a138+8>>2]=HEAP32[13808+8>>2]|0;HEAP32[$hp1_a138+12>>2]=HEAP32[13808+12>>2]|0;HEAP32[$hp1_a138+16>>2]=HEAP32[13808+16>>2]|0;HEAP32[$hp1_a138+20>>2]=HEAP32[13808+20>>2]|0;HEAP32[$hp1_a138+24>>2]=HEAP32[13808+24>>2]|0;HEAP32[$hp1_a138+28>>2]=HEAP32[13808+28>>2]|0; + ;HEAP32[$lp2_a139+0>>2]=HEAP32[13840+0>>2]|0;HEAP32[$lp2_a139+4>>2]=HEAP32[13840+4>>2]|0;HEAP32[$lp2_a139+8>>2]=HEAP32[13840+8>>2]|0;HEAP32[$lp2_a139+12>>2]=HEAP32[13840+12>>2]|0;HEAP32[$lp2_a139+16>>2]=HEAP32[13840+16>>2]|0;HEAP32[$lp2_a139+20>>2]=HEAP32[13840+20>>2]|0;HEAP32[$lp2_a139+24>>2]=HEAP32[13840+24>>2]|0;HEAP32[$lp2_a139+28>>2]=HEAP32[13840+28>>2]|0; + ;HEAP32[$hp2_a140+0>>2]=HEAP32[13872+0>>2]|0;HEAP32[$hp2_a140+4>>2]=HEAP32[13872+4>>2]|0;HEAP32[$hp2_a140+8>>2]=HEAP32[13872+8>>2]|0;HEAP32[$hp2_a140+12>>2]=HEAP32[13872+12>>2]|0;HEAP32[$hp2_a140+16>>2]=HEAP32[13872+16>>2]|0;HEAP32[$hp2_a140+20>>2]=HEAP32[13872+20>>2]|0;HEAP32[$hp2_a140+24>>2]=HEAP32[13872+24>>2]|0;HEAP32[$hp2_a140+28>>2]=HEAP32[13872+28>>2]|0; + $i = 0; + while(1) { + $1221 = $i; + $1222 = ($1221|0)<(4); + if (!($1222)) { + break; + } + $1223 = $i; + $1224 = (($lp1_a137) + ($1223<<3)|0); + $1225 = +HEAPF64[$1224>>3]; + $1226 = $i; + $1227 = $2; + $1228 = (($1227) + ($1226<<3)|0); + HEAPF64[$1228>>3] = $1225; + $1229 = $i; + $1230 = (($hp1_a138) + ($1229<<3)|0); + $1231 = +HEAPF64[$1230>>3]; + $1232 = $i; + $1233 = $3; + $1234 = (($1233) + ($1232<<3)|0); + HEAPF64[$1234>>3] = $1231; + $1235 = $i; + $1236 = (($lp2_a139) + ($1235<<3)|0); + $1237 = +HEAPF64[$1236>>3]; + $1238 = $i; + $1239 = $4; + $1240 = (($1239) + ($1238<<3)|0); + HEAPF64[$1240>>3] = $1237; + $1241 = $i; + $1242 = (($hp2_a140) + ($1241<<3)|0); + $1243 = +HEAPF64[$1242>>3]; + $1244 = $i; + $1245 = $5; + $1246 = (($1245) + ($1244<<3)|0); + HEAPF64[$1246>>3] = $1243; + $1247 = $i; + $1248 = (($1247) + 1)|0; + $i = $1248; + } + $0 = 4; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1249 = $1; + $1250 = (_strcmp($1249,296)|0); + $1251 = ($1250|0)!=(0); + if (!($1251)) { + dest=$lp1_a141+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$lp1_a141>>3] = 0.0352262918821006562609; + $1252 = (($lp1_a141) + 8|0); + HEAPF64[$1252>>3] = -0.0854412738822414863371; + $1253 = (($lp1_a141) + 16|0); + HEAPF64[$1253>>3] = -0.135011020010390836443; + $1254 = (($lp1_a141) + 24|0); + HEAPF64[$1254>>3] = 0.459877502119331316166; + $1255 = (($lp1_a141) + 32|0); + HEAPF64[$1255>>3] = 0.806891509313338750609; + $1256 = (($lp1_a141) + 40|0); + HEAPF64[$1256>>3] = 0.332670552950956877059; + dest=$hp1_a142+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$hp1_a142>>3] = -0.332670552950956877059; + $1257 = (($hp1_a142) + 8|0); + HEAPF64[$1257>>3] = 0.806891509313338750609; + $1258 = (($hp1_a142) + 16|0); + HEAPF64[$1258>>3] = -0.459877502119331316166; + $1259 = (($hp1_a142) + 24|0); + HEAPF64[$1259>>3] = -0.135011020010390836443; + $1260 = (($hp1_a142) + 32|0); + HEAPF64[$1260>>3] = 0.0854412738822414863371; + $1261 = (($hp1_a142) + 40|0); + HEAPF64[$1261>>3] = 0.0352262918821006562609; + dest=$lp2_a143+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$lp2_a143>>3] = 0.332670552950956877059; + $1262 = (($lp2_a143) + 8|0); + HEAPF64[$1262>>3] = 0.806891509313338750609; + $1263 = (($lp2_a143) + 16|0); + HEAPF64[$1263>>3] = 0.459877502119331316166; + $1264 = (($lp2_a143) + 24|0); + HEAPF64[$1264>>3] = -0.135011020010390836443; + $1265 = (($lp2_a143) + 32|0); + HEAPF64[$1265>>3] = -0.0854412738822414863371; + $1266 = (($lp2_a143) + 40|0); + HEAPF64[$1266>>3] = 0.0352262918821006562609; + dest=$hp2_a144+0|0; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$hp2_a144>>3] = 0.0352262918821006562609; + $1267 = (($hp2_a144) + 8|0); + HEAPF64[$1267>>3] = 0.0854412738822414863371; + $1268 = (($hp2_a144) + 16|0); + HEAPF64[$1268>>3] = -0.135011020010390836443; + $1269 = (($hp2_a144) + 24|0); + HEAPF64[$1269>>3] = -0.459877502119331316166; + $1270 = (($hp2_a144) + 32|0); + HEAPF64[$1270>>3] = 0.806891509313338750609; + $1271 = (($hp2_a144) + 40|0); + HEAPF64[$1271>>3] = -0.332670552950956877059; + $i = 0; + while(1) { + $1272 = $i; + $1273 = ($1272|0)<(6); + if (!($1273)) { + break; + } + $1274 = $i; + $1275 = (($lp1_a141) + ($1274<<3)|0); + $1276 = +HEAPF64[$1275>>3]; + $1277 = $i; + $1278 = $2; + $1279 = (($1278) + ($1277<<3)|0); + HEAPF64[$1279>>3] = $1276; + $1280 = $i; + $1281 = (($hp1_a142) + ($1280<<3)|0); + $1282 = +HEAPF64[$1281>>3]; + $1283 = $i; + $1284 = $3; + $1285 = (($1284) + ($1283<<3)|0); + HEAPF64[$1285>>3] = $1282; + $1286 = $i; + $1287 = (($lp2_a143) + ($1286<<3)|0); + $1288 = +HEAPF64[$1287>>3]; + $1289 = $i; + $1290 = $4; + $1291 = (($1290) + ($1289<<3)|0); + HEAPF64[$1291>>3] = $1288; + $1292 = $i; + $1293 = (($hp2_a144) + ($1292<<3)|0); + $1294 = +HEAPF64[$1293>>3]; + $1295 = $i; + $1296 = $5; + $1297 = (($1296) + ($1295<<3)|0); + HEAPF64[$1297>>3] = $1294; + $1298 = $i; + $1299 = (($1298) + 1)|0; + $i = $1299; + } + $0 = 6; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1300 = $1; + $1301 = (_strcmp($1300,304)|0); + $1302 = ($1301|0)!=(0); + if (!($1302)) { + dest=$lp1_a145+0|0; src=13904+0|0; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a146+0|0; src=13968+0|0; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a147+0|0; src=14032+0|0; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a148+0|0; src=14096+0|0; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $1303 = $i; + $1304 = ($1303|0)<(8); + if (!($1304)) { + break; + } + $1305 = $i; + $1306 = (($lp1_a145) + ($1305<<3)|0); + $1307 = +HEAPF64[$1306>>3]; + $1308 = $i; + $1309 = $2; + $1310 = (($1309) + ($1308<<3)|0); + HEAPF64[$1310>>3] = $1307; + $1311 = $i; + $1312 = (($hp1_a146) + ($1311<<3)|0); + $1313 = +HEAPF64[$1312>>3]; + $1314 = $i; + $1315 = $3; + $1316 = (($1315) + ($1314<<3)|0); + HEAPF64[$1316>>3] = $1313; + $1317 = $i; + $1318 = (($lp2_a147) + ($1317<<3)|0); + $1319 = +HEAPF64[$1318>>3]; + $1320 = $i; + $1321 = $4; + $1322 = (($1321) + ($1320<<3)|0); + HEAPF64[$1322>>3] = $1319; + $1323 = $i; + $1324 = (($hp2_a148) + ($1323<<3)|0); + $1325 = +HEAPF64[$1324>>3]; + $1326 = $i; + $1327 = $5; + $1328 = (($1327) + ($1326<<3)|0); + HEAPF64[$1328>>3] = $1325; + $1329 = $i; + $1330 = (($1329) + 1)|0; + $i = $1330; + } + $0 = 8; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1331 = $1; + $1332 = (_strcmp($1331,312)|0); + $1333 = ($1332|0)!=(0); + if (!($1333)) { + dest=$lp1_a149+0|0; src=14160+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a150+0|0; src=14240+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a151+0|0; src=14320+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a152+0|0; src=14400+0|0; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $1334 = $i; + $1335 = ($1334|0)<(10); + if (!($1335)) { + break; + } + $1336 = $i; + $1337 = (($lp1_a149) + ($1336<<3)|0); + $1338 = +HEAPF64[$1337>>3]; + $1339 = $i; + $1340 = $2; + $1341 = (($1340) + ($1339<<3)|0); + HEAPF64[$1341>>3] = $1338; + $1342 = $i; + $1343 = (($hp1_a150) + ($1342<<3)|0); + $1344 = +HEAPF64[$1343>>3]; + $1345 = $i; + $1346 = $3; + $1347 = (($1346) + ($1345<<3)|0); + HEAPF64[$1347>>3] = $1344; + $1348 = $i; + $1349 = (($lp2_a151) + ($1348<<3)|0); + $1350 = +HEAPF64[$1349>>3]; + $1351 = $i; + $1352 = $4; + $1353 = (($1352) + ($1351<<3)|0); + HEAPF64[$1353>>3] = $1350; + $1354 = $i; + $1355 = (($hp2_a152) + ($1354<<3)|0); + $1356 = +HEAPF64[$1355>>3]; + $1357 = $i; + $1358 = $5; + $1359 = (($1358) + ($1357<<3)|0); + HEAPF64[$1359>>3] = $1356; + $1360 = $i; + $1361 = (($1360) + 1)|0; + $i = $1361; + } + $0 = 10; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1362 = $1; + $1363 = (_strcmp($1362,320)|0); + $1364 = ($1363|0)!=(0); + if (!($1364)) { + dest=$lp1_a153+0|0; src=14480+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a154+0|0; src=14576+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a155+0|0; src=14672+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a156+0|0; src=14768+0|0; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $1365 = $i; + $1366 = ($1365|0)<(12); + if (!($1366)) { + break; + } + $1367 = $i; + $1368 = (($lp1_a153) + ($1367<<3)|0); + $1369 = +HEAPF64[$1368>>3]; + $1370 = $i; + $1371 = $2; + $1372 = (($1371) + ($1370<<3)|0); + HEAPF64[$1372>>3] = $1369; + $1373 = $i; + $1374 = (($hp1_a154) + ($1373<<3)|0); + $1375 = +HEAPF64[$1374>>3]; + $1376 = $i; + $1377 = $3; + $1378 = (($1377) + ($1376<<3)|0); + HEAPF64[$1378>>3] = $1375; + $1379 = $i; + $1380 = (($lp2_a155) + ($1379<<3)|0); + $1381 = +HEAPF64[$1380>>3]; + $1382 = $i; + $1383 = $4; + $1384 = (($1383) + ($1382<<3)|0); + HEAPF64[$1384>>3] = $1381; + $1385 = $i; + $1386 = (($hp2_a156) + ($1385<<3)|0); + $1387 = +HEAPF64[$1386>>3]; + $1388 = $i; + $1389 = $5; + $1390 = (($1389) + ($1388<<3)|0); + HEAPF64[$1390>>3] = $1387; + $1391 = $i; + $1392 = (($1391) + 1)|0; + $i = $1392; + } + $0 = 12; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1393 = $1; + $1394 = (_strcmp($1393,328)|0); + $1395 = ($1394|0)!=(0); + if (!($1395)) { + dest=$lp1_a157+0|0; src=14864+0|0; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a158+0|0; src=14976+0|0; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a159+0|0; src=15088+0|0; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a160+0|0; src=15200+0|0; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $1396 = $i; + $1397 = ($1396|0)<(14); + if (!($1397)) { + break; + } + $1398 = $i; + $1399 = (($lp1_a157) + ($1398<<3)|0); + $1400 = +HEAPF64[$1399>>3]; + $1401 = $i; + $1402 = $2; + $1403 = (($1402) + ($1401<<3)|0); + HEAPF64[$1403>>3] = $1400; + $1404 = $i; + $1405 = (($hp1_a158) + ($1404<<3)|0); + $1406 = +HEAPF64[$1405>>3]; + $1407 = $i; + $1408 = $3; + $1409 = (($1408) + ($1407<<3)|0); + HEAPF64[$1409>>3] = $1406; + $1410 = $i; + $1411 = (($lp2_a159) + ($1410<<3)|0); + $1412 = +HEAPF64[$1411>>3]; + $1413 = $i; + $1414 = $4; + $1415 = (($1414) + ($1413<<3)|0); + HEAPF64[$1415>>3] = $1412; + $1416 = $i; + $1417 = (($hp2_a160) + ($1416<<3)|0); + $1418 = +HEAPF64[$1417>>3]; + $1419 = $i; + $1420 = $5; + $1421 = (($1420) + ($1419<<3)|0); + HEAPF64[$1421>>3] = $1418; + $1422 = $i; + $1423 = (($1422) + 1)|0; + $i = $1423; + } + $0 = 14; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1424 = $1; + $1425 = (_strcmp($1424,336)|0); + $1426 = ($1425|0)!=(0); + if (!($1426)) { + dest=$lp1_a161+0|0; src=15312+0|0; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a162+0|0; src=15440+0|0; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a163+0|0; src=15568+0|0; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a164+0|0; src=15696+0|0; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $1427 = $i; + $1428 = ($1427|0)<(16); + if (!($1428)) { + break; + } + $1429 = $i; + $1430 = (($lp1_a161) + ($1429<<3)|0); + $1431 = +HEAPF64[$1430>>3]; + $1432 = $i; + $1433 = $2; + $1434 = (($1433) + ($1432<<3)|0); + HEAPF64[$1434>>3] = $1431; + $1435 = $i; + $1436 = (($hp1_a162) + ($1435<<3)|0); + $1437 = +HEAPF64[$1436>>3]; + $1438 = $i; + $1439 = $3; + $1440 = (($1439) + ($1438<<3)|0); + HEAPF64[$1440>>3] = $1437; + $1441 = $i; + $1442 = (($lp2_a163) + ($1441<<3)|0); + $1443 = +HEAPF64[$1442>>3]; + $1444 = $i; + $1445 = $4; + $1446 = (($1445) + ($1444<<3)|0); + HEAPF64[$1446>>3] = $1443; + $1447 = $i; + $1448 = (($hp2_a164) + ($1447<<3)|0); + $1449 = +HEAPF64[$1448>>3]; + $1450 = $i; + $1451 = $5; + $1452 = (($1451) + ($1450<<3)|0); + HEAPF64[$1452>>3] = $1449; + $1453 = $i; + $1454 = (($1453) + 1)|0; + $i = $1454; + } + $0 = 16; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1455 = $1; + $1456 = (_strcmp($1455,344)|0); + $1457 = ($1456|0)!=(0); + if (!($1457)) { + _memcpy(($lp1_a165|0),(15824|0),144)|0; + _memcpy(($hp1_a166|0),(15968|0),144)|0; + _memcpy(($lp2_a167|0),(16112|0),144)|0; + _memcpy(($hp2_a168|0),(16256|0),144)|0; + $i = 0; + while(1) { + $1458 = $i; + $1459 = ($1458|0)<(18); + if (!($1459)) { + break; + } + $1460 = $i; + $1461 = (($lp1_a165) + ($1460<<3)|0); + $1462 = +HEAPF64[$1461>>3]; + $1463 = $i; + $1464 = $2; + $1465 = (($1464) + ($1463<<3)|0); + HEAPF64[$1465>>3] = $1462; + $1466 = $i; + $1467 = (($hp1_a166) + ($1466<<3)|0); + $1468 = +HEAPF64[$1467>>3]; + $1469 = $i; + $1470 = $3; + $1471 = (($1470) + ($1469<<3)|0); + HEAPF64[$1471>>3] = $1468; + $1472 = $i; + $1473 = (($lp2_a167) + ($1472<<3)|0); + $1474 = +HEAPF64[$1473>>3]; + $1475 = $i; + $1476 = $4; + $1477 = (($1476) + ($1475<<3)|0); + HEAPF64[$1477>>3] = $1474; + $1478 = $i; + $1479 = (($hp2_a168) + ($1478<<3)|0); + $1480 = +HEAPF64[$1479>>3]; + $1481 = $i; + $1482 = $5; + $1483 = (($1482) + ($1481<<3)|0); + HEAPF64[$1483>>3] = $1480; + $1484 = $i; + $1485 = (($1484) + 1)|0; + $i = $1485; + } + $0 = 18; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1486 = $1; + $1487 = (_strcmp($1486,352)|0); + $1488 = ($1487|0)!=(0); + if ($1488) { + (_printf((360|0),($vararg_buffer|0))|0); + $0 = -1; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + _memcpy(($lp1_a169|0),(16400|0),160)|0; + _memcpy(($hp1_a170|0),(16560|0),160)|0; + _memcpy(($lp2_a171|0),(16720|0),160)|0; + _memcpy(($hp2_a172|0),(16880|0),160)|0; + $i = 0; + while(1) { + $1489 = $i; + $1490 = ($1489|0)<(20); + if (!($1490)) { + break; + } + $1491 = $i; + $1492 = (($lp1_a169) + ($1491<<3)|0); + $1493 = +HEAPF64[$1492>>3]; + $1494 = $i; + $1495 = $2; + $1496 = (($1495) + ($1494<<3)|0); + HEAPF64[$1496>>3] = $1493; + $1497 = $i; + $1498 = (($hp1_a170) + ($1497<<3)|0); + $1499 = +HEAPF64[$1498>>3]; + $1500 = $i; + $1501 = $3; + $1502 = (($1501) + ($1500<<3)|0); + HEAPF64[$1502>>3] = $1499; + $1503 = $i; + $1504 = (($lp2_a171) + ($1503<<3)|0); + $1505 = +HEAPF64[$1504>>3]; + $1506 = $i; + $1507 = $4; + $1508 = (($1507) + ($1506<<3)|0); + HEAPF64[$1508>>3] = $1505; + $1509 = $i; + $1510 = (($hp2_a172) + ($1509<<3)|0); + $1511 = +HEAPF64[$1510>>3]; + $1512 = $i; + $1513 = $5; + $1514 = (($1513) + ($1512<<3)|0); + HEAPF64[$1514>>3] = $1511; + $1515 = $i; + $1516 = (($1515) + 1)|0; + $i = $1516; + } + $0 = 20; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + } + ;HEAP32[$lp1_a+0>>2]=HEAP32[392+0>>2]|0;HEAP32[$lp1_a+4>>2]=HEAP32[392+4>>2]|0;HEAP32[$lp1_a+8>>2]=HEAP32[392+8>>2]|0;HEAP32[$lp1_a+12>>2]=HEAP32[392+12>>2]|0; + ;HEAP32[$hp1_a+0>>2]=HEAP32[408+0>>2]|0;HEAP32[$hp1_a+4>>2]=HEAP32[408+4>>2]|0;HEAP32[$hp1_a+8>>2]=HEAP32[408+8>>2]|0;HEAP32[$hp1_a+12>>2]=HEAP32[408+12>>2]|0; + ;HEAP32[$lp2_a+0>>2]=HEAP32[424+0>>2]|0;HEAP32[$lp2_a+4>>2]=HEAP32[424+4>>2]|0;HEAP32[$lp2_a+8>>2]=HEAP32[424+8>>2]|0;HEAP32[$lp2_a+12>>2]=HEAP32[424+12>>2]|0; + ;HEAP32[$hp2_a+0>>2]=HEAP32[440+0>>2]|0;HEAP32[$hp2_a+4>>2]=HEAP32[440+4>>2]|0;HEAP32[$hp2_a+8>>2]=HEAP32[440+8>>2]|0;HEAP32[$hp2_a+12>>2]=HEAP32[440+12>>2]|0; + $i = 0; + while(1) { + $12 = $i; + $13 = ($12|0)<(2); + if (!($13)) { + break; + } + $14 = $i; + $15 = (($lp1_a) + ($14<<3)|0); + $16 = +HEAPF64[$15>>3]; + $17 = $i; + $18 = $2; + $19 = (($18) + ($17<<3)|0); + HEAPF64[$19>>3] = $16; + $20 = $i; + $21 = (($hp1_a) + ($20<<3)|0); + $22 = +HEAPF64[$21>>3]; + $23 = $i; + $24 = $3; + $25 = (($24) + ($23<<3)|0); + HEAPF64[$25>>3] = $22; + $26 = $i; + $27 = (($lp2_a) + ($26<<3)|0); + $28 = +HEAPF64[$27>>3]; + $29 = $i; + $30 = $4; + $31 = (($30) + ($29<<3)|0); + HEAPF64[$31>>3] = $28; + $32 = $i; + $33 = (($hp2_a) + ($32<<3)|0); + $34 = +HEAPF64[$33>>3]; + $35 = $i; + $36 = $5; + $37 = (($36) + ($35<<3)|0); + HEAPF64[$37>>3] = $34; + $38 = $i; + $39 = (($38) + 1)|0; + $i = $39; + } + $0 = 2; + $1517 = $0; + STACKTOP = sp;return ($1517|0); +} +function _upsamp($x,$lenx,$M,$y) { + $x = $x|0; + $lenx = $lenx|0; + $M = $M|0; + $y = $y|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0.0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0.0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $N = 0, $i = 0, $j = 0, $k = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $1 = $x; + $2 = $lenx; + $3 = $M; + $4 = $y; + $5 = $3; + $6 = ($5|0)<(0); + if ($6) { + $0 = -1; + $50 = $0; + STACKTOP = sp;return ($50|0); + } + $7 = $3; + $8 = ($7|0)==(0); + if ($8) { + $i = 0; + while(1) { + $9 = $i; + $10 = $2; + $11 = ($9|0)<($10|0); + if (!($11)) { + break; + } + $12 = $i; + $13 = $1; + $14 = (($13) + ($12<<3)|0); + $15 = +HEAPF64[$14>>3]; + $16 = $i; + $17 = $4; + $18 = (($17) + ($16<<3)|0); + HEAPF64[$18>>3] = $15; + $19 = $i; + $20 = (($19) + 1)|0; + $i = $20; + } + $21 = $2; + $0 = $21; + $50 = $0; + STACKTOP = sp;return ($50|0); + } + $22 = $3; + $23 = $2; + $24 = (($23) - 1)|0; + $25 = Math_imul($22, $24)|0; + $26 = (($25) + 1)|0; + $N = $26; + $j = 1; + $k = 0; + $i = 0; + while(1) { + $27 = $i; + $28 = $N; + $29 = ($27|0)<($28|0); + if (!($29)) { + break; + } + $30 = $j; + $31 = (($30) + -1)|0; + $j = $31; + $32 = $i; + $33 = $4; + $34 = (($33) + ($32<<3)|0); + HEAPF64[$34>>3] = 0.0; + $35 = $j; + $36 = ($35|0)==(0); + if ($36) { + $37 = $k; + $38 = $1; + $39 = (($38) + ($37<<3)|0); + $40 = +HEAPF64[$39>>3]; + $41 = $i; + $42 = $4; + $43 = (($42) + ($41<<3)|0); + HEAPF64[$43>>3] = $40; + $44 = $k; + $45 = (($44) + 1)|0; + $k = $45; + $46 = $3; + $j = $46; + } + $47 = $i; + $48 = (($47) + 1)|0; + $i = $48; + } + $49 = $N; + $0 = $49; + $50 = $0; + STACKTOP = sp;return ($50|0); +} +function _upsamp2($x,$lenx,$M,$y) { + $x = $x|0; + $lenx = $lenx|0; + $M = $M|0; + $y = $y|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0.0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0.0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $N = 0, $i = 0, $j = 0, $k = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $1 = $x; + $2 = $lenx; + $3 = $M; + $4 = $y; + $5 = $3; + $6 = ($5|0)<(0); + if ($6) { + $0 = -1; + $48 = $0; + STACKTOP = sp;return ($48|0); + } + $7 = $3; + $8 = ($7|0)==(0); + if ($8) { + $i = 0; + while(1) { + $9 = $i; + $10 = $2; + $11 = ($9|0)<($10|0); + if (!($11)) { + break; + } + $12 = $i; + $13 = $1; + $14 = (($13) + ($12<<3)|0); + $15 = +HEAPF64[$14>>3]; + $16 = $i; + $17 = $4; + $18 = (($17) + ($16<<3)|0); + HEAPF64[$18>>3] = $15; + $19 = $i; + $20 = (($19) + 1)|0; + $i = $20; + } + $21 = $2; + $0 = $21; + $48 = $0; + STACKTOP = sp;return ($48|0); + } + $22 = $3; + $23 = $2; + $24 = Math_imul($22, $23)|0; + $N = $24; + $j = 1; + $k = 0; + $i = 0; + while(1) { + $25 = $i; + $26 = $N; + $27 = ($25|0)<($26|0); + if (!($27)) { + break; + } + $28 = $j; + $29 = (($28) + -1)|0; + $j = $29; + $30 = $i; + $31 = $4; + $32 = (($31) + ($30<<3)|0); + HEAPF64[$32>>3] = 0.0; + $33 = $j; + $34 = ($33|0)==(0); + if ($34) { + $35 = $k; + $36 = $1; + $37 = (($36) + ($35<<3)|0); + $38 = +HEAPF64[$37>>3]; + $39 = $i; + $40 = $4; + $41 = (($40) + ($39<<3)|0); + HEAPF64[$41>>3] = $38; + $42 = $k; + $43 = (($42) + 1)|0; + $k = $43; + $44 = $3; + $j = $44; + } + $45 = $i; + $46 = (($45) + 1)|0; + $i = $46; + } + $47 = $N; + $0 = $47; + $48 = $0; + STACKTOP = sp;return ($48|0); +} +function _downsamp($x,$lenx,$M,$y) { + $x = $x|0; + $lenx = $lenx|0; + $M = $M|0; + $y = $y|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0.0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0.0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $5 = 0, $6 = 0; + var $7 = 0, $8 = 0, $9 = 0, $N = 0, $i = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $1 = $x; + $2 = $lenx; + $3 = $M; + $4 = $y; + $5 = $3; + $6 = ($5|0)<(0); + if ($6) { + $0 = -1; + $42 = $0; + STACKTOP = sp;return ($42|0); + } + $7 = $3; + $8 = ($7|0)==(0); + if ($8) { + $i = 0; + while(1) { + $9 = $i; + $10 = $2; + $11 = ($9|0)<($10|0); + if (!($11)) { + break; + } + $12 = $i; + $13 = $1; + $14 = (($13) + ($12<<3)|0); + $15 = +HEAPF64[$14>>3]; + $16 = $i; + $17 = $4; + $18 = (($17) + ($16<<3)|0); + HEAPF64[$18>>3] = $15; + $19 = $i; + $20 = (($19) + 1)|0; + $i = $20; + } + $21 = $2; + $0 = $21; + $42 = $0; + STACKTOP = sp;return ($42|0); + } else { + $22 = $2; + $23 = (($22) - 1)|0; + $24 = $3; + $25 = (($23|0) / ($24|0))&-1; + $26 = (($25) + 1)|0; + $N = $26; + $i = 0; + while(1) { + $27 = $i; + $28 = $N; + $29 = ($27|0)<($28|0); + if (!($29)) { + break; + } + $30 = $i; + $31 = $3; + $32 = Math_imul($30, $31)|0; + $33 = $1; + $34 = (($33) + ($32<<3)|0); + $35 = +HEAPF64[$34>>3]; + $36 = $i; + $37 = $4; + $38 = (($37) + ($36<<3)|0); + HEAPF64[$38>>3] = $35; + $39 = $i; + $40 = (($39) + 1)|0; + $i = $40; + } + $41 = $N; + $0 = $41; + $42 = $0; + STACKTOP = sp;return ($42|0); + } + return 0|0; +} +function _per_ext($sig,$len,$a,$oup) { + $sig = $sig|0; + $len = $len|0; + $a = $a|0; + $oup = $oup|0; + var $0 = 0, $1 = 0, $10 = 0.0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0.0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0.0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0.0, $52 = 0.0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0.0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $8 = 0, $9 = 0, $i = 0, $len2 = 0, $temp1 = 0.0, $temp2 = 0.0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $sig; + $1 = $len; + $2 = $a; + $3 = $oup; + $i = 0; + while(1) { + $4 = $i; + $5 = $1; + $6 = ($4|0)<($5|0); + if (!($6)) { + break; + } + $7 = $i; + $8 = $0; + $9 = (($8) + ($7<<3)|0); + $10 = +HEAPF64[$9>>3]; + $11 = $2; + $12 = $i; + $13 = (($11) + ($12))|0; + $14 = $3; + $15 = (($14) + ($13<<3)|0); + HEAPF64[$15>>3] = $10; + $16 = $i; + $17 = (($16) + 1)|0; + $i = $17; + } + $18 = $1; + $len2 = $18; + $19 = $1; + $20 = (($19|0) % 2)&-1; + $21 = ($20|0)!=(0); + if ($21) { + $22 = $1; + $23 = (($22) + 1)|0; + $len2 = $23; + $24 = $1; + $25 = (($24) - 1)|0; + $26 = $0; + $27 = (($26) + ($25<<3)|0); + $28 = +HEAPF64[$27>>3]; + $29 = $2; + $30 = $1; + $31 = (($29) + ($30))|0; + $32 = $3; + $33 = (($32) + ($31<<3)|0); + HEAPF64[$33>>3] = $28; + } + $i = 0; + while(1) { + $34 = $i; + $35 = $2; + $36 = ($34|0)<($35|0); + if (!($36)) { + break; + } + $37 = $2; + $38 = $i; + $39 = (($37) + ($38))|0; + $40 = $3; + $41 = (($40) + ($39<<3)|0); + $42 = +HEAPF64[$41>>3]; + $temp1 = $42; + $43 = $2; + $44 = $len2; + $45 = (($43) + ($44))|0; + $46 = (($45) - 1)|0; + $47 = $i; + $48 = (($46) - ($47))|0; + $49 = $3; + $50 = (($49) + ($48<<3)|0); + $51 = +HEAPF64[$50>>3]; + $temp2 = $51; + $52 = $temp2; + $53 = $2; + $54 = (($53) - 1)|0; + $55 = $i; + $56 = (($54) - ($55))|0; + $57 = $3; + $58 = (($57) + ($56<<3)|0); + HEAPF64[$58>>3] = $52; + $59 = $temp1; + $60 = $len2; + $61 = $2; + $62 = (($60) + ($61))|0; + $63 = $i; + $64 = (($62) + ($63))|0; + $65 = $3; + $66 = (($65) + ($64<<3)|0); + HEAPF64[$66>>3] = $59; + $67 = $i; + $68 = (($67) + 1)|0; + $i = $68; + } + $69 = $len2; + STACKTOP = sp;return ($69|0); +} +function _symm_ext($sig,$len,$a,$oup) { + $sig = $sig|0; + $len = $len|0; + $a = $a|0; + $oup = $oup|0; + var $0 = 0, $1 = 0, $10 = 0.0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0.0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0.0, $37 = 0.0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0.0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $i = 0, $len2 = 0, $temp1 = 0.0, $temp2 = 0.0, label = 0; + var sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $sig; + $1 = $len; + $2 = $a; + $3 = $oup; + $i = 0; + while(1) { + $4 = $i; + $5 = $1; + $6 = ($4|0)<($5|0); + if (!($6)) { + break; + } + $7 = $i; + $8 = $0; + $9 = (($8) + ($7<<3)|0); + $10 = +HEAPF64[$9>>3]; + $11 = $2; + $12 = $i; + $13 = (($11) + ($12))|0; + $14 = $3; + $15 = (($14) + ($13<<3)|0); + HEAPF64[$15>>3] = $10; + $16 = $i; + $17 = (($16) + 1)|0; + $i = $17; + } + $18 = $1; + $len2 = $18; + $i = 0; + while(1) { + $19 = $i; + $20 = $2; + $21 = ($19|0)<($20|0); + if (!($21)) { + break; + } + $22 = $2; + $23 = $i; + $24 = (($22) + ($23))|0; + $25 = $3; + $26 = (($25) + ($24<<3)|0); + $27 = +HEAPF64[$26>>3]; + $temp1 = $27; + $28 = $2; + $29 = $len2; + $30 = (($28) + ($29))|0; + $31 = (($30) - 1)|0; + $32 = $i; + $33 = (($31) - ($32))|0; + $34 = $3; + $35 = (($34) + ($33<<3)|0); + $36 = +HEAPF64[$35>>3]; + $temp2 = $36; + $37 = $temp1; + $38 = $2; + $39 = (($38) - 1)|0; + $40 = $i; + $41 = (($39) - ($40))|0; + $42 = $3; + $43 = (($42) + ($41<<3)|0); + HEAPF64[$43>>3] = $37; + $44 = $temp2; + $45 = $len2; + $46 = $2; + $47 = (($45) + ($46))|0; + $48 = $i; + $49 = (($47) + ($48))|0; + $50 = $3; + $51 = (($50) + ($49<<3)|0); + HEAPF64[$51>>3] = $44; + $52 = $i; + $53 = (($52) + 1)|0; + $i = $53; + } + $54 = $len2; + STACKTOP = sp;return ($54|0); +} +function _circshift($array,$N,$L) { + $array = $array|0; + $N = $N|0; + $L = $L|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0.0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0.0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0.0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $7 = 0, $8 = 0, $9 = 0, $i = 0, $temp = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $array; + $1 = $N; + $2 = $L; + $3 = $2; + $4 = (_iabs($3)|0); + $5 = $1; + $6 = ($4|0)>($5|0); + if ($6) { + $7 = $2; + $8 = (_isign($7)|0); + $9 = $2; + $10 = (_iabs($9)|0); + $11 = $1; + $12 = (($10|0) % ($11|0))&-1; + $13 = Math_imul($8, $12)|0; + $2 = $13; + } + $14 = $2; + $15 = ($14|0)<(0); + if ($15) { + $16 = $1; + $17 = $2; + $18 = (($16) + ($17))|0; + $19 = $1; + $20 = (($18|0) % ($19|0))&-1; + $2 = $20; + } + $21 = $2; + $22 = $21<<3; + $23 = (_malloc($22)|0); + $temp = $23; + $i = 0; + while(1) { + $24 = $i; + $25 = $2; + $26 = ($24|0)<($25|0); + if (!($26)) { + break; + } + $27 = $i; + $28 = $0; + $29 = (($28) + ($27<<3)|0); + $30 = +HEAPF64[$29>>3]; + $31 = $i; + $32 = $temp; + $33 = (($32) + ($31<<3)|0); + HEAPF64[$33>>3] = $30; + $34 = $i; + $35 = (($34) + 1)|0; + $i = $35; + } + $i = 0; + while(1) { + $36 = $i; + $37 = $1; + $38 = $2; + $39 = (($37) - ($38))|0; + $40 = ($36|0)<($39|0); + if (!($40)) { + break; + } + $41 = $i; + $42 = $2; + $43 = (($41) + ($42))|0; + $44 = $0; + $45 = (($44) + ($43<<3)|0); + $46 = +HEAPF64[$45>>3]; + $47 = $i; + $48 = $0; + $49 = (($48) + ($47<<3)|0); + HEAPF64[$49>>3] = $46; + $50 = $i; + $51 = (($50) + 1)|0; + $i = $51; + } + $i = 0; + while(1) { + $52 = $i; + $53 = $2; + $54 = ($52|0)<($53|0); + if (!($54)) { + break; + } + $55 = $i; + $56 = $temp; + $57 = (($56) + ($55<<3)|0); + $58 = +HEAPF64[$57>>3]; + $59 = $1; + $60 = $2; + $61 = (($59) - ($60))|0; + $62 = $i; + $63 = (($61) + ($62))|0; + $64 = $0; + $65 = (($64) + ($63<<3)|0); + HEAPF64[$65>>3] = $58; + $66 = $i; + $67 = (($66) + 1)|0; + $i = $67; + } + $68 = $temp; + _free($68); + STACKTOP = sp;return; +} +function _iabs($N) { + $N = $N|0; + var $0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $1 = $N; + $2 = $1; + $3 = ($2|0)>=(0); + if ($3) { + $4 = $1; + $0 = $4; + } else { + $5 = $1; + $6 = (0 - ($5))|0; + $0 = $6; + } + $7 = $0; + STACKTOP = sp;return ($7|0); +} +function _isign($N) { + $N = $N|0; + var $0 = 0, $1 = 0, $2 = 0, $3 = 0, $M = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $N; + $1 = $0; + $2 = ($1|0)>=(0); + if ($2) { + $M = 1; + } else { + $M = -1; + } + $3 = $M; + STACKTOP = sp;return ($3|0); +} +function _testSWTlength($N,$J) { + $N = $N|0; + $J = $J|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $div = 0, $i = 0, $ret = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $N; + $1 = $J; + $ret = 1; + $div = 1; + $i = 0; + while(1) { + $2 = $i; + $3 = $1; + $4 = ($2|0)<($3|0); + if (!($4)) { + break; + } + $5 = $div; + $6 = $5<<1; + $div = $6; + $7 = $i; + $8 = (($7) + 1)|0; + $i = $8; + } + $9 = $0; + $10 = $div; + $11 = (($9|0) % ($10|0))&-1; + $12 = ($11|0)!=(0); + if (!($12)) { + $13 = $ret; + STACKTOP = sp;return ($13|0); + } + $ret = 0; + $13 = $ret; + STACKTOP = sp;return ($13|0); +} +function _wmaxiter($sig_len,$filt_len) { + $sig_len = $sig_len|0; + $filt_len = $filt_len|0; + var $0 = 0, $1 = 0, $10 = 0.0, $11 = 0.0, $12 = 0, $13 = 0, $2 = 0, $3 = 0.0, $4 = 0, $5 = 0.0, $6 = 0.0, $7 = 0.0, $8 = 0.0, $9 = 0.0, $lev = 0, $temp = 0.0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $sig_len; + $1 = $filt_len; + $2 = $0; + $3 = (+($2|0)); + $4 = $1; + $5 = (+($4|0)); + $6 = $5 - 1.0; + $7 = $3 / $6; + $8 = (+Math_log((+$7))); + $9 = (+Math_log(2.0)); + $10 = $8 / $9; + $temp = $10; + $11 = $temp; + $12 = (~~(($11))); + $lev = $12; + $13 = $lev; + STACKTOP = sp;return ($13|0); +} +function _wave_init($wname) { + $wname = $wname|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $7 = 0, $8 = 0, $9 = 0, $obj = 0, $retval = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wname; + $obj = 0; + $retval = 0; + $1 = $0; + $2 = ($1|0)!=(0|0); + if ($2) { + $3 = $0; + $4 = (_filtlength($3)|0); + $retval = $4; + } + $5 = $retval; + $6 = $5<<5; + $7 = (88 + ($6))|0; + $8 = (_malloc($7)|0); + $obj = $8; + $9 = $retval; + $10 = $obj; + $11 = (($10) + 52|0); + HEAP32[$11>>2] = $9; + $12 = $obj; + $13 = (($12) + 52|0); + $14 = HEAP32[$13>>2]|0; + $15 = $obj; + $16 = (($15) + 68|0); + HEAP32[$16>>2] = $14; + $17 = $obj; + $18 = (($17) + 64|0); + HEAP32[$18>>2] = $14; + $19 = $obj; + $20 = (($19) + 60|0); + HEAP32[$20>>2] = $14; + $21 = $obj; + $22 = (($21) + 56|0); + HEAP32[$22>>2] = $14; + $23 = $obj; + $24 = $0; + (_strcpy(($23|0),($24|0))|0); + $25 = $0; + $26 = ($25|0)!=(0|0); + if ($26) { + $27 = $0; + $28 = $obj; + $29 = (($28) + 88|0); + $30 = $obj; + $31 = (($30) + 88|0); + $32 = $retval; + $33 = (($31) + ($32<<3)|0); + $34 = $obj; + $35 = (($34) + 88|0); + $36 = $retval; + $37 = $36<<1; + $38 = (($35) + ($37<<3)|0); + $39 = $obj; + $40 = (($39) + 88|0); + $41 = $retval; + $42 = ($41*3)|0; + $43 = (($40) + ($42<<3)|0); + (_filtcoef($27,$29,$33,$38,$43)|0); + } + $44 = $obj; + $45 = (($44) + 88|0); + $46 = $obj; + $47 = (($46) + 72|0); + HEAP32[$47>>2] = $45; + $48 = $retval; + $49 = $obj; + $50 = (($49) + 88|0); + $51 = (($50) + ($48<<3)|0); + $52 = $obj; + $53 = (($52) + 76|0); + HEAP32[$53>>2] = $51; + $54 = $retval; + $55 = $54<<1; + $56 = $obj; + $57 = (($56) + 88|0); + $58 = (($57) + ($55<<3)|0); + $59 = $obj; + $60 = (($59) + 80|0); + HEAP32[$60>>2] = $58; + $61 = $retval; + $62 = ($61*3)|0; + $63 = $obj; + $64 = (($63) + 88|0); + $65 = (($64) + ($62<<3)|0); + $66 = $obj; + $67 = (($66) + 84|0); + HEAP32[$67>>2] = $65; + $68 = $obj; + STACKTOP = sp;return ($68|0); +} +function _wt_init($wave,$method,$siglength,$J) { + $wave = $wave|0; + $method = $method|0; + $siglength = $siglength|0; + $J = $J|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0; + var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0; + var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0; + var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0; + var $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0; + var $98 = 0, $99 = 0, $MaxIter = 0, $i = 0, $obj = 0, $size = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, $vararg_buffer3 = 0, $vararg_buffer5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer5 = sp + 24|0; + $vararg_buffer3 = sp; + $vararg_buffer1 = sp + 8|0; + $vararg_buffer = sp + 16|0; + $0 = $wave; + $1 = $method; + $2 = $siglength; + $3 = $J; + $obj = 0; + $4 = $0; + $5 = (($4) + 52|0); + $6 = HEAP32[$5>>2]|0; + $size = $6; + $7 = $3; + $8 = ($7|0)>(100); + if ($8) { + (_printf((17040|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + $9 = $2; + $10 = $size; + $11 = (_wmaxiter($9,$10)|0); + $MaxIter = $11; + $12 = $3; + $13 = $MaxIter; + $14 = ($12|0)>($13|0); + if ($14) { + $15 = $MaxIter; + HEAP32[$vararg_buffer1>>2] = $15; + (_printf((17104|0),($vararg_buffer1|0))|0); + _exit(-1); + // unreachable; + } + $16 = $1; + $17 = ($16|0)==(0|0); + if ($17) { + $18 = $2; + $19 = $3; + $20 = $19<<1; + $21 = $size; + $22 = (($21) + 1)|0; + $23 = Math_imul($20, $22)|0; + $24 = (($18) + ($23))|0; + $25 = $24<<3; + $26 = (488 + ($25))|0; + $27 = (_malloc($26)|0); + $obj = $27; + $28 = $2; + $29 = $3; + $30 = $29<<1; + $31 = $size; + $32 = (($31) + 1)|0; + $33 = Math_imul($30, $32)|0; + $34 = (($28) + ($33))|0; + $35 = $obj; + $36 = (($35) + 24|0); + HEAP32[$36>>2] = $34; + $37 = $obj; + $38 = (($37) + 44|0); + (_strcpy(($38|0),(17184|0))|0); + } else { + $39 = $1; + $40 = (_strcmp($39,17192)|0); + $41 = ($40|0)!=(0); + if ($41) { + $42 = $1; + $43 = (_strcmp($42,17200)|0); + $44 = ($43|0)!=(0); + if ($44) { + $66 = $1; + $67 = (_strcmp($66,17208)|0); + $68 = ($67|0)!=(0); + if ($68) { + $69 = $1; + $70 = (_strcmp($69,17216)|0); + $71 = ($70|0)!=(0); + if ($71) { + $91 = $1; + $92 = (_strcmp($91,17296)|0); + $93 = ($92|0)!=(0); + if ($93) { + $94 = $1; + $95 = (_strcmp($94,17304)|0); + $96 = ($95|0)!=(0); + if (!($96)) { + label = 17; + } + } else { + label = 17; + } + if ((label|0) == 17) { + $97 = $0; + $98 = (_strstr($97,17312)|0); + $99 = ($98|0)!=(0|0); + if (!($99)) { + $100 = $0; + $101 = (_strstr($100,17184)|0); + $102 = ($101|0)!=(0|0); + do { + if (!($102)) { + $103 = $0; + $104 = (_strstr($103,17320)|0); + $105 = ($104|0)!=(0|0); + if ($105) { + break; + } else { + (_printf((17328|0),($vararg_buffer5|0))|0); + _exit(-1); + // unreachable; + } + } + } while(0); + } + $106 = $2; + $107 = $3; + $108 = (($107) + 1)|0; + $109 = Math_imul($106, $108)|0; + $110 = $109<<3; + $111 = (488 + ($110))|0; + $112 = (_malloc($111)|0); + $obj = $112; + $113 = $2; + $114 = $3; + $115 = (($114) + 1)|0; + $116 = Math_imul($113, $115)|0; + $117 = $obj; + $118 = (($117) + 24|0); + HEAP32[$118>>2] = $116; + $119 = $obj; + $120 = (($119) + 44|0); + (_strcpy(($120|0),(17288|0))|0); + } + } else { + label = 12; + } + } else { + label = 12; + } + do { + if ((label|0) == 12) { + $72 = $2; + $73 = $3; + $74 = (_testSWTlength($72,$73)|0); + $75 = ($74|0)!=(0); + if ($75) { + $76 = $2; + $77 = $3; + $78 = (($77) + 1)|0; + $79 = Math_imul($76, $78)|0; + $80 = $79<<3; + $81 = (488 + ($80))|0; + $82 = (_malloc($81)|0); + $obj = $82; + $83 = $2; + $84 = $3; + $85 = (($84) + 1)|0; + $86 = Math_imul($83, $85)|0; + $87 = $obj; + $88 = (($87) + 24|0); + HEAP32[$88>>2] = $86; + $89 = $obj; + $90 = (($89) + 44|0); + (_strcpy(($90|0),(17288|0))|0); + break; + } else { + (_printf((17224|0),($vararg_buffer3|0))|0); + _exit(-1); + // unreachable; + } + } + } while(0); + } else { + label = 9; + } + } else { + label = 9; + } + if ((label|0) == 9) { + $45 = $2; + $46 = $3; + $47 = $46<<1; + $48 = $size; + $49 = (($48) + 1)|0; + $50 = Math_imul($47, $49)|0; + $51 = (($45) + ($50))|0; + $52 = $51<<3; + $53 = (488 + ($52))|0; + $54 = (_malloc($53)|0); + $obj = $54; + $55 = $2; + $56 = $3; + $57 = $56<<1; + $58 = $size; + $59 = (($58) + 1)|0; + $60 = Math_imul($57, $59)|0; + $61 = (($55) + ($60))|0; + $62 = $obj; + $63 = (($62) + 24|0); + HEAP32[$63>>2] = $61; + $64 = $obj; + $65 = (($64) + 44|0); + (_strcpy(($65|0),(17184|0))|0); + } + } + $121 = $0; + $122 = $obj; + HEAP32[$122>>2] = $121; + $123 = $2; + $124 = $obj; + $125 = (($124) + 20|0); + HEAP32[$125>>2] = $123; + $126 = $3; + $127 = $obj; + $128 = (($127) + 32|0); + HEAP32[$128>>2] = $126; + $129 = $MaxIter; + $130 = $obj; + $131 = (($130) + 36|0); + HEAP32[$131>>2] = $129; + $132 = $obj; + $133 = (($132) + 8|0); + $134 = $1; + (_strcpy(($133|0),($134|0))|0); + $135 = $2; + $136 = (($135|0) % 2)&-1; + $137 = ($136|0)==(0); + if ($137) { + $138 = $obj; + $139 = (($138) + 40|0); + HEAP32[$139>>2] = 1; + } else { + $140 = $obj; + $141 = (($140) + 40|0); + HEAP32[$141>>2] = 0; + } + $142 = $obj; + $143 = (($142) + 4|0); + HEAP32[$143>>2] = 0; + $144 = $obj; + $145 = (($144) + 54|0); + (_strcpy(($145|0),(17416|0))|0); + $146 = $obj; + $147 = (($146) + 68|0); + HEAP32[$147>>2] = 0; + $148 = $3; + $149 = (($148) + 2)|0; + $150 = $obj; + $151 = (($150) + 28|0); + HEAP32[$151>>2] = $149; + $152 = $obj; + $153 = (($152) + 488|0); + $154 = $obj; + $155 = (($154) + 484|0); + HEAP32[$155>>2] = $153; + $156 = $1; + $157 = (_strcmp($156,17192)|0); + $158 = ($157|0)!=(0); + if ($158) { + $159 = $1; + $160 = (_strcmp($159,17200)|0); + $161 = ($160|0)!=(0); + if ($161) { + $177 = $1; + $178 = (_strcmp($177,17208)|0); + $179 = ($178|0)!=(0); + if ($179) { + $180 = $1; + $181 = (_strcmp($180,17216)|0); + $182 = ($181|0)!=(0); + if ($182) { + $183 = $1; + $184 = (_strcmp($183,17296)|0); + $185 = ($184|0)!=(0); + if ($185) { + $186 = $1; + $187 = (_strcmp($186,17304)|0); + $188 = ($187|0)!=(0); + if (!($188)) { + label = 41; + } + } else { + label = 41; + } + } else { + label = 41; + } + } else { + label = 41; + } + if ((label|0) == 41) { + $i = 0; + while(1) { + $189 = $i; + $190 = $2; + $191 = $3; + $192 = (($191) + 1)|0; + $193 = Math_imul($190, $192)|0; + $194 = ($189|0)<($193|0); + if (!($194)) { + break; + } + $195 = $i; + $196 = $obj; + $197 = (($196) + 488|0); + $198 = (($197) + ($195<<3)|0); + HEAPF64[$198>>3] = 0.0; + $199 = $i; + $200 = (($199) + 1)|0; + $i = $200; + } + } + $201 = $obj; + STACKTOP = sp;return ($201|0); + } + } + $i = 0; + while(1) { + $162 = $i; + $163 = $2; + $164 = $3; + $165 = $164<<1; + $166 = $size; + $167 = (($166) + 1)|0; + $168 = Math_imul($165, $167)|0; + $169 = (($163) + ($168))|0; + $170 = ($162|0)<($169|0); + if (!($170)) { + break; + } + $171 = $i; + $172 = $obj; + $173 = (($172) + 488|0); + $174 = (($173) + ($171<<3)|0); + HEAPF64[$174>>3] = 0.0; + $175 = $i; + $176 = (($175) + 1)|0; + $i = $176; + } + $201 = $obj; + STACKTOP = sp;return ($201|0); +} +function _dwt($wt,$inp) { + $wt = $wt|0; + $inp = $inp|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0, $171 = 0.0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0.0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0.0, $205 = 0.0; + var $206 = 0.0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; + var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; + var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0; + var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0; + var $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0; + var $297 = 0, $298 = 0.0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0.0, $312 = 0, $313 = 0; + var $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0; + var $44 = 0, $45 = 0.0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0.0, $6 = 0, $60 = 0, $61 = 0; + var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0.0, $78 = 0.0, $79 = 0.0, $8 = 0; + var $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0; + var $99 = 0, $J = 0, $N = 0, $i = 0, $iter = 0, $len_cA = 0, $lp = 0, $orig = 0, $orig2 = 0, $temp_len = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $0 = $wt; + $1 = $inp; + $2 = $0; + $3 = (($2) + 20|0); + $4 = HEAP32[$3>>2]|0; + $temp_len = $4; + $5 = $0; + $6 = (($5) + 32|0); + $7 = HEAP32[$6>>2]|0; + $J = $7; + $8 = $temp_len; + $9 = $J; + $10 = (($9) + 1)|0; + $11 = $0; + $12 = (($11) + 76|0); + $13 = (($12) + ($10<<2)|0); + HEAP32[$13>>2] = $8; + $14 = $0; + $15 = (($14) + 24|0); + HEAP32[$15>>2] = 0; + $16 = $temp_len; + $17 = (($16|0) % 2)&-1; + $18 = ($17|0)==(0); + if ($18) { + $19 = $0; + $20 = (($19) + 72|0); + HEAP32[$20>>2] = 0; + $21 = $temp_len; + $22 = $21<<3; + $23 = (_malloc($22)|0); + $orig = $23; + $24 = $temp_len; + $25 = $24<<3; + $26 = (_malloc($25)|0); + $orig2 = $26; + } else { + $27 = $0; + $28 = (($27) + 72|0); + HEAP32[$28>>2] = 1; + $29 = $temp_len; + $30 = (($29) + 1)|0; + $temp_len = $30; + $31 = $temp_len; + $32 = $31<<3; + $33 = (_malloc($32)|0); + $orig = $33; + $34 = $temp_len; + $35 = $34<<3; + $36 = (_malloc($35)|0); + $orig2 = $36; + } + $i = 0; + while(1) { + $37 = $i; + $38 = $0; + $39 = (($38) + 20|0); + $40 = HEAP32[$39>>2]|0; + $41 = ($37|0)<($40|0); + if (!($41)) { + break; + } + $42 = $i; + $43 = $1; + $44 = (($43) + ($42<<3)|0); + $45 = +HEAPF64[$44>>3]; + $46 = $i; + $47 = $orig; + $48 = (($47) + ($46<<3)|0); + HEAPF64[$48>>3] = $45; + $49 = $i; + $50 = (($49) + 1)|0; + $i = $50; + } + $51 = $0; + $52 = (($51) + 72|0); + $53 = HEAP32[$52>>2]|0; + $54 = ($53|0)==(1); + if ($54) { + $55 = $temp_len; + $56 = (($55) - 2)|0; + $57 = $orig; + $58 = (($57) + ($56<<3)|0); + $59 = +HEAPF64[$58>>3]; + $60 = $temp_len; + $61 = (($60) - 1)|0; + $62 = $orig; + $63 = (($62) + ($61<<3)|0); + HEAPF64[$63>>3] = $59; + } + $64 = $temp_len; + $N = $64; + $65 = $0; + $66 = HEAP32[$65>>2]|0; + $67 = (($66) + 56|0); + $68 = HEAP32[$67>>2]|0; + $lp = $68; + $69 = $0; + $70 = (($69) + 44|0); + $71 = (_strcmp($70,17288)|0); + $72 = ($71|0)!=(0); + if (!($72)) { + $73 = $J; + $i = $73; + while(1) { + $74 = $i; + $75 = ($74|0)>(0); + if (!($75)) { + break; + } + $76 = $N; + $77 = (+($76|0)); + $78 = $77 / 2.0; + $79 = (+Math_ceil((+$78))); + $80 = (~~(($79))); + $N = $80; + $81 = $N; + $82 = $i; + $83 = $0; + $84 = (($83) + 76|0); + $85 = (($84) + ($82<<2)|0); + HEAP32[$85>>2] = $81; + $86 = $i; + $87 = $0; + $88 = (($87) + 76|0); + $89 = (($88) + ($86<<2)|0); + $90 = HEAP32[$89>>2]|0; + $91 = $0; + $92 = (($91) + 24|0); + $93 = HEAP32[$92>>2]|0; + $94 = (($93) + ($90))|0; + HEAP32[$92>>2] = $94; + $95 = $i; + $96 = (($95) + -1)|0; + $i = $96; + } + $97 = $0; + $98 = (($97) + 76|0); + $99 = (($98) + 4|0); + $100 = HEAP32[$99>>2]|0; + $101 = $0; + $102 = (($101) + 76|0); + HEAP32[$102>>2] = $100; + $103 = $0; + $104 = (($103) + 76|0); + $105 = HEAP32[$104>>2]|0; + $106 = $0; + $107 = (($106) + 24|0); + $108 = HEAP32[$107>>2]|0; + $109 = (($108) + ($105))|0; + HEAP32[$107>>2] = $109; + $110 = $0; + $111 = (($110) + 24|0); + $112 = HEAP32[$111>>2]|0; + $N = $112; + $iter = 0; + while(1) { + $113 = $iter; + $114 = $J; + $115 = ($113|0)<($114|0); + if (!($115)) { + break; + } + $116 = $J; + $117 = $iter; + $118 = (($116) - ($117))|0; + $119 = $0; + $120 = (($119) + 76|0); + $121 = (($120) + ($118<<2)|0); + $122 = HEAP32[$121>>2]|0; + $len_cA = $122; + $123 = $len_cA; + $124 = $N; + $125 = (($124) - ($123))|0; + $N = $125; + $126 = $0; + $127 = (($126) + 54|0); + $128 = (_strcmp($127,17424)|0); + $129 = ($128|0)!=(0); + if ($129) { + $130 = $0; + $131 = (($130) + 54|0); + $132 = (_strcmp($131,17432)|0); + $133 = ($132|0)!=(0); + if ($133) { + $144 = $0; + $145 = $orig; + $146 = $temp_len; + $147 = $orig2; + $148 = $len_cA; + $149 = $0; + $150 = (($149) + 488|0); + $151 = $N; + $152 = (($150) + ($151<<3)|0); + $153 = $len_cA; + _dwt_per($144,$145,$146,$147,$148,$152,$153); + } else { + label = 18; + } + } else { + label = 18; + } + if ((label|0) == 18) { + label = 0; + $134 = $0; + $135 = $orig; + $136 = $temp_len; + $137 = $orig2; + $138 = $len_cA; + $139 = $0; + $140 = (($139) + 488|0); + $141 = $N; + $142 = (($140) + ($141<<3)|0); + $143 = $len_cA; + _dwt1($134,$135,$136,$137,$138,$142,$143); + } + $154 = $J; + $155 = $iter; + $156 = (($154) - ($155))|0; + $157 = $0; + $158 = (($157) + 76|0); + $159 = (($158) + ($156<<2)|0); + $160 = HEAP32[$159>>2]|0; + $temp_len = $160; + $161 = $iter; + $162 = $J; + $163 = (($162) - 1)|0; + $164 = ($161|0)==($163|0); + if ($164) { + $i = 0; + while(1) { + $165 = $i; + $166 = $len_cA; + $167 = ($165|0)<($166|0); + if (!($167)) { + break; + } + $168 = $i; + $169 = $orig2; + $170 = (($169) + ($168<<3)|0); + $171 = +HEAPF64[$170>>3]; + $172 = $i; + $173 = $0; + $174 = (($173) + 488|0); + $175 = (($174) + ($172<<3)|0); + HEAPF64[$175>>3] = $171; + $176 = $i; + $177 = (($176) + 1)|0; + $i = $177; + } + } else { + $i = 0; + while(1) { + $178 = $i; + $179 = $len_cA; + $180 = ($178|0)<($179|0); + if (!($180)) { + break; + } + $181 = $i; + $182 = $orig2; + $183 = (($182) + ($181<<3)|0); + $184 = +HEAPF64[$183>>3]; + $185 = $i; + $186 = $orig; + $187 = (($186) + ($185<<3)|0); + HEAPF64[$187>>3] = $184; + $188 = $i; + $189 = (($188) + 1)|0; + $i = $189; + } + } + $190 = $iter; + $191 = (($190) + 1)|0; + $iter = $191; + } + $319 = $orig; + _free($319); + $320 = $orig2; + _free($320); + STACKTOP = sp;return; + } + $192 = $0; + $193 = (($192) + 44|0); + $194 = (_strcmp($193,17184)|0); + $195 = ($194|0)!=(0); + if ($195) { + (_printf((17440|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + $196 = $J; + $i = $196; + while(1) { + $197 = $i; + $198 = ($197|0)>(0); + if (!($198)) { + break; + } + $199 = $N; + $200 = $lp; + $201 = (($199) + ($200))|0; + $202 = (($201) - 2)|0; + $N = $202; + $203 = $N; + $204 = (+($203|0)); + $205 = $204 / 2.0; + $206 = (+Math_ceil((+$205))); + $207 = (~~(($206))); + $N = $207; + $208 = $N; + $209 = $i; + $210 = $0; + $211 = (($210) + 76|0); + $212 = (($211) + ($209<<2)|0); + HEAP32[$212>>2] = $208; + $213 = $i; + $214 = $0; + $215 = (($214) + 76|0); + $216 = (($215) + ($213<<2)|0); + $217 = HEAP32[$216>>2]|0; + $218 = $0; + $219 = (($218) + 24|0); + $220 = HEAP32[$219>>2]|0; + $221 = (($220) + ($217))|0; + HEAP32[$219>>2] = $221; + $222 = $i; + $223 = (($222) + -1)|0; + $i = $223; + } + $224 = $0; + $225 = (($224) + 76|0); + $226 = (($225) + 4|0); + $227 = HEAP32[$226>>2]|0; + $228 = $0; + $229 = (($228) + 76|0); + HEAP32[$229>>2] = $227; + $230 = $0; + $231 = (($230) + 76|0); + $232 = HEAP32[$231>>2]|0; + $233 = $0; + $234 = (($233) + 24|0); + $235 = HEAP32[$234>>2]|0; + $236 = (($235) + ($232))|0; + HEAP32[$234>>2] = $236; + $237 = $0; + $238 = (($237) + 24|0); + $239 = HEAP32[$238>>2]|0; + $N = $239; + $iter = 0; + while(1) { + $240 = $iter; + $241 = $J; + $242 = ($240|0)<($241|0); + if (!($242)) { + break; + } + $243 = $J; + $244 = $iter; + $245 = (($243) - ($244))|0; + $246 = $0; + $247 = (($246) + 76|0); + $248 = (($247) + ($245<<2)|0); + $249 = HEAP32[$248>>2]|0; + $len_cA = $249; + $250 = $len_cA; + $251 = $N; + $252 = (($251) - ($250))|0; + $N = $252; + $253 = $0; + $254 = (($253) + 54|0); + $255 = (_strcmp($254,17424)|0); + $256 = ($255|0)!=(0); + if ($256) { + $257 = $0; + $258 = (($257) + 54|0); + $259 = (_strcmp($258,17432)|0); + $260 = ($259|0)!=(0); + if ($260) { + $271 = $0; + $272 = $orig; + $273 = $temp_len; + $274 = $orig2; + $275 = $len_cA; + $276 = $0; + $277 = (($276) + 488|0); + $278 = $N; + $279 = (($277) + ($278<<3)|0); + $280 = $len_cA; + _dwt_sym($271,$272,$273,$274,$275,$279,$280); + } else { + label = 42; + } + } else { + label = 42; + } + if ((label|0) == 42) { + label = 0; + $261 = $0; + $262 = $orig; + $263 = $temp_len; + $264 = $orig2; + $265 = $len_cA; + $266 = $0; + $267 = (($266) + 488|0); + $268 = $N; + $269 = (($267) + ($268<<3)|0); + $270 = $len_cA; + _dwt1($261,$262,$263,$264,$265,$269,$270); + } + $281 = $J; + $282 = $iter; + $283 = (($281) - ($282))|0; + $284 = $0; + $285 = (($284) + 76|0); + $286 = (($285) + ($283<<2)|0); + $287 = HEAP32[$286>>2]|0; + $temp_len = $287; + $288 = $iter; + $289 = $J; + $290 = (($289) - 1)|0; + $291 = ($288|0)==($290|0); + if ($291) { + $i = 0; + while(1) { + $292 = $i; + $293 = $len_cA; + $294 = ($292|0)<($293|0); + if (!($294)) { + break; + } + $295 = $i; + $296 = $orig2; + $297 = (($296) + ($295<<3)|0); + $298 = +HEAPF64[$297>>3]; + $299 = $i; + $300 = $0; + $301 = (($300) + 488|0); + $302 = (($301) + ($299<<3)|0); + HEAPF64[$302>>3] = $298; + $303 = $i; + $304 = (($303) + 1)|0; + $i = $304; + } + } else { + $i = 0; + while(1) { + $305 = $i; + $306 = $len_cA; + $307 = ($305|0)<($306|0); + if (!($307)) { + break; + } + $308 = $i; + $309 = $orig2; + $310 = (($309) + ($308<<3)|0); + $311 = +HEAPF64[$310>>3]; + $312 = $i; + $313 = $orig; + $314 = (($313) + ($312<<3)|0); + HEAPF64[$314>>3] = $311; + $315 = $i; + $316 = (($315) + 1)|0; + $i = $316; + } + } + $317 = $iter; + $318 = (($317) + 1)|0; + $iter = $318; + } + $319 = $orig; + _free($319); + $320 = $orig2; + _free($320); + STACKTOP = sp;return; +} +function _dwt1($wt,$sig,$len_sig,$cA,$len_cA,$cD,$len_cD) { + $wt = $wt|0; + $sig = $sig|0; + $len_sig = $len_sig|0; + $cA = $cA|0; + $len_cA = $len_cA|0; + $cD = $cD|0; + $len_cD = $len_cD|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; + var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; + var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; + var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0; + var $260 = 0, $261 = 0, $262 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0; + var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0; + var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0; + var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0; + var $97 = 0, $98 = 0, $99 = 0, $D = 0, $cA_undec = 0, $len_avg = 0, $lf = 0, $signal = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, $vararg_buffer3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer3 = sp + 16|0; + $vararg_buffer1 = sp; + $vararg_buffer = sp + 8|0; + $0 = $wt; + $1 = $sig; + $2 = $len_sig; + $3 = $cA; + $4 = $len_cA; + $5 = $cD; + $6 = $len_cD; + $7 = $0; + $8 = HEAP32[$7>>2]|0; + $9 = (($8) + 56|0); + $10 = HEAP32[$9>>2]|0; + $11 = $0; + $12 = HEAP32[$11>>2]|0; + $13 = (($12) + 60|0); + $14 = HEAP32[$13>>2]|0; + $15 = (($10) + ($14))|0; + $16 = (($15|0) / 2)&-1; + $len_avg = $16; + $D = 2; + $17 = $0; + $18 = (($17) + 44|0); + $19 = (_strcmp($18,17288)|0); + $20 = ($19|0)!=(0); + if ($20) { + $124 = $0; + $125 = (($124) + 44|0); + $126 = (_strcmp($125,17184)|0); + $127 = ($126|0)!=(0); + if ($127) { + (_printf((17440|0),($vararg_buffer3|0))|0); + _exit(-1); + // unreachable; + } + $128 = $0; + $129 = HEAP32[$128>>2]|0; + $130 = (($129) + 56|0); + $131 = HEAP32[$130>>2]|0; + $lf = $131; + $132 = $2; + $133 = $lf; + $134 = (($133) - 1)|0; + $135 = $134<<1; + $136 = (($132) + ($135))|0; + $137 = $136<<3; + $138 = (_malloc($137)|0); + $signal = $138; + $139 = $1; + $140 = $2; + $141 = $lf; + $142 = (($141) - 1)|0; + $143 = $signal; + $144 = (_symm_ext($139,$140,$142,$143)|0); + $2 = $144; + $145 = $2; + $146 = $lf; + $147 = (($146) - 1)|0; + $148 = ($147*3)|0; + $149 = (($145) + ($148))|0; + $150 = $149<<3; + $151 = (_malloc($150)|0); + $cA_undec = $151; + $152 = $0; + $153 = HEAP32[$152>>2]|0; + $154 = (($153) + 56|0); + $155 = HEAP32[$154>>2]|0; + $156 = $0; + $157 = HEAP32[$156>>2]|0; + $158 = (($157) + 60|0); + $159 = HEAP32[$158>>2]|0; + $160 = ($155|0)==($159|0); + do { + if ($160) { + $161 = $0; + $162 = (($161) + 54|0); + $163 = (_strcmp($162,17424)|0); + $164 = ($163|0)!=(0); + if ($164) { + $165 = $0; + $166 = (($165) + 54|0); + $167 = (_strcmp($166,17432)|0); + $168 = ($167|0)!=(0); + if ($168) { + label = 15; + break; + } + } + $169 = $2; + $170 = $lf; + $171 = (($170) - 1)|0; + $172 = $171<<1; + $173 = (($169) + ($172))|0; + $174 = $lf; + $175 = (_conv_init($173,$174)|0); + $176 = $0; + $177 = (($176) + 4|0); + HEAP32[$177>>2] = $175; + $178 = $0; + $179 = (($178) + 68|0); + HEAP32[$179>>2] = 1; + } else { + label = 15; + } + } while(0); + do { + if ((label|0) == 15) { + $180 = $0; + $181 = HEAP32[$180>>2]|0; + $182 = (($181) + 56|0); + $183 = HEAP32[$182>>2]|0; + $184 = $0; + $185 = HEAP32[$184>>2]|0; + $186 = (($185) + 60|0); + $187 = HEAP32[$186>>2]|0; + $188 = ($183|0)==($187|0); + if ($188) { + break; + } else { + (_printf((17488|0),($vararg_buffer1|0))|0); + _exit(-1); + // unreachable; + } + } + } while(0); + $189 = $0; + $190 = $signal; + $191 = $2; + $192 = $lf; + $193 = (($192) - 1)|0; + $194 = $193<<1; + $195 = (($191) + ($194))|0; + $196 = $0; + $197 = HEAP32[$196>>2]|0; + $198 = (($197) + 72|0); + $199 = HEAP32[$198>>2]|0; + $200 = $0; + $201 = HEAP32[$200>>2]|0; + $202 = (($201) + 56|0); + $203 = HEAP32[$202>>2]|0; + $204 = $cA_undec; + _wconv($189,$190,$195,$199,$203,$204); + $205 = $cA_undec; + $206 = $lf; + $207 = (($205) + ($206<<3)|0); + $208 = $2; + $209 = $lf; + $210 = (($208) + ($209))|0; + $211 = (($210) - 2)|0; + $212 = $D; + $213 = $3; + (_downsamp($207,$211,$212,$213)|0); + $214 = $0; + $215 = $signal; + $216 = $2; + $217 = $lf; + $218 = (($217) - 1)|0; + $219 = $218<<1; + $220 = (($216) + ($219))|0; + $221 = $0; + $222 = HEAP32[$221>>2]|0; + $223 = (($222) + 76|0); + $224 = HEAP32[$223>>2]|0; + $225 = $0; + $226 = HEAP32[$225>>2]|0; + $227 = (($226) + 60|0); + $228 = HEAP32[$227>>2]|0; + $229 = $cA_undec; + _wconv($214,$215,$220,$224,$228,$229); + $230 = $cA_undec; + $231 = $lf; + $232 = (($230) + ($231<<3)|0); + $233 = $2; + $234 = $lf; + $235 = (($233) + ($234))|0; + $236 = (($235) - 2)|0; + $237 = $D; + $238 = $5; + (_downsamp($232,$236,$237,$238)|0); + } else { + $21 = $2; + $22 = $len_avg; + $23 = (($21) + ($22))|0; + $24 = $2; + $25 = (($24|0) % 2)&-1; + $26 = (($23) + ($25))|0; + $27 = $26<<3; + $28 = (_malloc($27)|0); + $signal = $28; + $29 = $1; + $30 = $2; + $31 = $len_avg; + $32 = (($31|0) / 2)&-1; + $33 = $signal; + $34 = (_per_ext($29,$30,$32,$33)|0); + $2 = $34; + $35 = $2; + $36 = $len_avg; + $37 = (($35) + ($36))|0; + $38 = $0; + $39 = HEAP32[$38>>2]|0; + $40 = (($39) + 56|0); + $41 = HEAP32[$40>>2]|0; + $42 = (($37) + ($41))|0; + $43 = (($42) - 1)|0; + $44 = $43<<3; + $45 = (_malloc($44)|0); + $cA_undec = $45; + $46 = $0; + $47 = HEAP32[$46>>2]|0; + $48 = (($47) + 56|0); + $49 = HEAP32[$48>>2]|0; + $50 = $0; + $51 = HEAP32[$50>>2]|0; + $52 = (($51) + 60|0); + $53 = HEAP32[$52>>2]|0; + $54 = ($49|0)==($53|0); + do { + if ($54) { + $55 = $0; + $56 = (($55) + 54|0); + $57 = (_strcmp($56,17424)|0); + $58 = ($57|0)!=(0); + if ($58) { + $59 = $0; + $60 = (($59) + 54|0); + $61 = (_strcmp($60,17432)|0); + $62 = ($61|0)!=(0); + if ($62) { + label = 6; + break; + } + } + $63 = $2; + $64 = $len_avg; + $65 = (($63) + ($64))|0; + $66 = $0; + $67 = HEAP32[$66>>2]|0; + $68 = (($67) + 56|0); + $69 = HEAP32[$68>>2]|0; + $70 = (_conv_init($65,$69)|0); + $71 = $0; + $72 = (($71) + 4|0); + HEAP32[$72>>2] = $70; + $73 = $0; + $74 = (($73) + 68|0); + HEAP32[$74>>2] = 1; + } else { + label = 6; + } + } while(0); + do { + if ((label|0) == 6) { + $75 = $0; + $76 = HEAP32[$75>>2]|0; + $77 = (($76) + 56|0); + $78 = HEAP32[$77>>2]|0; + $79 = $0; + $80 = HEAP32[$79>>2]|0; + $81 = (($80) + 60|0); + $82 = HEAP32[$81>>2]|0; + $83 = ($78|0)==($82|0); + if ($83) { + break; + } else { + (_printf((17488|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + } + } while(0); + $84 = $0; + $85 = $signal; + $86 = $2; + $87 = $len_avg; + $88 = (($86) + ($87))|0; + $89 = $0; + $90 = HEAP32[$89>>2]|0; + $91 = (($90) + 72|0); + $92 = HEAP32[$91>>2]|0; + $93 = $0; + $94 = HEAP32[$93>>2]|0; + $95 = (($94) + 56|0); + $96 = HEAP32[$95>>2]|0; + $97 = $cA_undec; + _wconv($84,$85,$88,$92,$96,$97); + $98 = $cA_undec; + $99 = $len_avg; + $100 = (($98) + ($99<<3)|0); + $101 = $2; + $102 = $D; + $103 = $3; + (_downsamp($100,$101,$102,$103)|0); + $104 = $0; + $105 = $signal; + $106 = $2; + $107 = $len_avg; + $108 = (($106) + ($107))|0; + $109 = $0; + $110 = HEAP32[$109>>2]|0; + $111 = (($110) + 76|0); + $112 = HEAP32[$111>>2]|0; + $113 = $0; + $114 = HEAP32[$113>>2]|0; + $115 = (($114) + 60|0); + $116 = HEAP32[$115>>2]|0; + $117 = $cA_undec; + _wconv($104,$105,$108,$112,$116,$117); + $118 = $cA_undec; + $119 = $len_avg; + $120 = (($118) + ($119<<3)|0); + $121 = $2; + $122 = $D; + $123 = $5; + (_downsamp($120,$121,$122,$123)|0); + } + $239 = $0; + $240 = HEAP32[$239>>2]|0; + $241 = (($240) + 56|0); + $242 = HEAP32[$241>>2]|0; + $243 = $0; + $244 = HEAP32[$243>>2]|0; + $245 = (($244) + 60|0); + $246 = HEAP32[$245>>2]|0; + $247 = ($242|0)==($246|0); + if (!($247)) { + $261 = $signal; + _free($261); + $262 = $cA_undec; + _free($262); + STACKTOP = sp;return; + } + $248 = $0; + $249 = (($248) + 54|0); + $250 = (_strcmp($249,17424)|0); + $251 = ($250|0)!=(0); + if ($251) { + $252 = $0; + $253 = (($252) + 54|0); + $254 = (_strcmp($253,17432)|0); + $255 = ($254|0)!=(0); + if ($255) { + $261 = $signal; + _free($261); + $262 = $cA_undec; + _free($262); + STACKTOP = sp;return; + } + } + $256 = $0; + $257 = (($256) + 4|0); + $258 = HEAP32[$257>>2]|0; + _free_conv($258); + $259 = $0; + $260 = (($259) + 68|0); + HEAP32[$260>>2] = 0; + $261 = $signal; + _free($261); + $262 = $cA_undec; + _free($262); + STACKTOP = sp;return; +} +function _dwt_per($wt,$inp,$N,$cA,$len_cA,$cD,$len_cD) { + $wt = $wt|0; + $inp = $inp|0; + $N = $N|0; + $cA = $cA|0; + $len_cA = $len_cA|0; + $cD = $cD|0; + $len_cD = $len_cD|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0.0, $101 = 0.0, $102 = 0, $103 = 0, $104 = 0, $105 = 0.0, $106 = 0.0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0.0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0.0, $12 = 0, $120 = 0.0, $121 = 0, $122 = 0, $123 = 0, $124 = 0.0, $125 = 0.0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0.0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0.0, $145 = 0.0, $146 = 0, $147 = 0, $148 = 0, $149 = 0.0, $15 = 0, $150 = 0.0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0.0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0.0, $166 = 0.0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0.0, $171 = 0.0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0.0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0.0, $194 = 0.0, $195 = 0, $196 = 0, $197 = 0, $198 = 0.0, $199 = 0.0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; + var $206 = 0.0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0.0, $215 = 0.0, $216 = 0, $217 = 0, $218 = 0, $219 = 0.0, $22 = 0, $220 = 0.0, $221 = 0, $222 = 0, $223 = 0; + var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0.0, $24 = 0, $240 = 0, $241 = 0; + var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0.0, $249 = 0.0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0.0, $254 = 0.0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0; + var $260 = 0, $261 = 0.0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0.0, $271 = 0.0, $272 = 0, $273 = 0, $274 = 0, $275 = 0.0, $276 = 0.0, $277 = 0, $278 = 0; + var $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0.0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0.0, $289 = 0.0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0.0, $294 = 0.0, $295 = 0, $296 = 0; + var $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0.0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0.0, $307 = 0.0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0.0, $312 = 0.0, $313 = 0; + var $314 = 0, $315 = 0, $316 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0.0; + var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0.0, $54 = 0.0, $55 = 0, $56 = 0, $57 = 0, $58 = 0.0, $59 = 0.0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0; + var $66 = 0.0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0.0, $73 = 0.0, $74 = 0, $75 = 0, $76 = 0, $77 = 0.0, $78 = 0.0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0; + var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0.0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $i = 0, $isodd = 0, $l = 0; + var $l2 = 0, $len_avg = 0, $t = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $inp; + $2 = $N; + $3 = $cA; + $4 = $len_cA; + $5 = $cD; + $6 = $len_cD; + $7 = $0; + $8 = HEAP32[$7>>2]|0; + $9 = (($8) + 56|0); + $10 = HEAP32[$9>>2]|0; + $len_avg = $10; + $11 = $len_avg; + $12 = (($11|0) / 2)&-1; + $l2 = $12; + $13 = $2; + $14 = (($13|0) % 2)&-1; + $isodd = $14; + $i = 0; + while(1) { + $15 = $i; + $16 = $4; + $17 = ($15|0)<($16|0); + if (!($17)) { + break; + } + $18 = $i; + $19 = $18<<1; + $20 = $l2; + $21 = (($19) + ($20))|0; + $t = $21; + $22 = $i; + $23 = $3; + $24 = (($23) + ($22<<3)|0); + HEAPF64[$24>>3] = 0.0; + $25 = $i; + $26 = $5; + $27 = (($26) + ($25<<3)|0); + HEAPF64[$27>>3] = 0.0; + $l = 0; + while(1) { + $28 = $l; + $29 = $len_avg; + $30 = ($28|0)<($29|0); + if (!($30)) { + break; + } + $31 = $t; + $32 = $l; + $33 = (($31) - ($32))|0; + $34 = $l2; + $35 = ($33|0)>=($34|0); + if ($35) { + $36 = $t; + $37 = $l; + $38 = (($36) - ($37))|0; + $39 = $2; + $40 = ($38|0)<($39|0); + if ($40) { + $41 = $l; + $42 = $0; + $43 = HEAP32[$42>>2]|0; + $44 = (($43) + 72|0); + $45 = HEAP32[$44>>2]|0; + $46 = (($45) + ($41<<3)|0); + $47 = +HEAPF64[$46>>3]; + $48 = $t; + $49 = $l; + $50 = (($48) - ($49))|0; + $51 = $1; + $52 = (($51) + ($50<<3)|0); + $53 = +HEAPF64[$52>>3]; + $54 = $47 * $53; + $55 = $i; + $56 = $3; + $57 = (($56) + ($55<<3)|0); + $58 = +HEAPF64[$57>>3]; + $59 = $58 + $54; + HEAPF64[$57>>3] = $59; + $60 = $l; + $61 = $0; + $62 = HEAP32[$61>>2]|0; + $63 = (($62) + 76|0); + $64 = HEAP32[$63>>2]|0; + $65 = (($64) + ($60<<3)|0); + $66 = +HEAPF64[$65>>3]; + $67 = $t; + $68 = $l; + $69 = (($67) - ($68))|0; + $70 = $1; + $71 = (($70) + ($69<<3)|0); + $72 = +HEAPF64[$71>>3]; + $73 = $66 * $72; + $74 = $i; + $75 = $5; + $76 = (($75) + ($74<<3)|0); + $77 = +HEAPF64[$76>>3]; + $78 = $77 + $73; + HEAPF64[$76>>3] = $78; + } else { + label = 8; + } + } else { + label = 8; + } + if ((label|0) == 8) { + label = 0; + $79 = $t; + $80 = $l; + $81 = (($79) - ($80))|0; + $82 = $l2; + $83 = ($81|0)<($82|0); + if ($83) { + $84 = $t; + $85 = $l; + $86 = (($84) - ($85))|0; + $87 = ($86|0)>=(0); + if ($87) { + $88 = $l; + $89 = $0; + $90 = HEAP32[$89>>2]|0; + $91 = (($90) + 72|0); + $92 = HEAP32[$91>>2]|0; + $93 = (($92) + ($88<<3)|0); + $94 = +HEAPF64[$93>>3]; + $95 = $t; + $96 = $l; + $97 = (($95) - ($96))|0; + $98 = $1; + $99 = (($98) + ($97<<3)|0); + $100 = +HEAPF64[$99>>3]; + $101 = $94 * $100; + $102 = $i; + $103 = $3; + $104 = (($103) + ($102<<3)|0); + $105 = +HEAPF64[$104>>3]; + $106 = $105 + $101; + HEAPF64[$104>>3] = $106; + $107 = $l; + $108 = $0; + $109 = HEAP32[$108>>2]|0; + $110 = (($109) + 76|0); + $111 = HEAP32[$110>>2]|0; + $112 = (($111) + ($107<<3)|0); + $113 = +HEAPF64[$112>>3]; + $114 = $t; + $115 = $l; + $116 = (($114) - ($115))|0; + $117 = $1; + $118 = (($117) + ($116<<3)|0); + $119 = +HEAPF64[$118>>3]; + $120 = $113 * $119; + $121 = $i; + $122 = $5; + $123 = (($122) + ($121<<3)|0); + $124 = +HEAPF64[$123>>3]; + $125 = $124 + $120; + HEAPF64[$123>>3] = $125; + } else { + label = 11; + } + } else { + label = 11; + } + if ((label|0) == 11) { + label = 0; + $126 = $t; + $127 = $l; + $128 = (($126) - ($127))|0; + $129 = ($128|0)<(0); + if ($129) { + $130 = $l; + $131 = $0; + $132 = HEAP32[$131>>2]|0; + $133 = (($132) + 72|0); + $134 = HEAP32[$133>>2]|0; + $135 = (($134) + ($130<<3)|0); + $136 = +HEAPF64[$135>>3]; + $137 = $t; + $138 = $l; + $139 = (($137) - ($138))|0; + $140 = $2; + $141 = (($139) + ($140))|0; + $142 = $1; + $143 = (($142) + ($141<<3)|0); + $144 = +HEAPF64[$143>>3]; + $145 = $136 * $144; + $146 = $i; + $147 = $3; + $148 = (($147) + ($146<<3)|0); + $149 = +HEAPF64[$148>>3]; + $150 = $149 + $145; + HEAPF64[$148>>3] = $150; + $151 = $l; + $152 = $0; + $153 = HEAP32[$152>>2]|0; + $154 = (($153) + 76|0); + $155 = HEAP32[$154>>2]|0; + $156 = (($155) + ($151<<3)|0); + $157 = +HEAPF64[$156>>3]; + $158 = $t; + $159 = $l; + $160 = (($158) - ($159))|0; + $161 = $2; + $162 = (($160) + ($161))|0; + $163 = $1; + $164 = (($163) + ($162<<3)|0); + $165 = +HEAPF64[$164>>3]; + $166 = $157 * $165; + $167 = $i; + $168 = $5; + $169 = (($168) + ($167<<3)|0); + $170 = +HEAPF64[$169>>3]; + $171 = $170 + $166; + HEAPF64[$169>>3] = $171; + } else { + $172 = $t; + $173 = $l; + $174 = (($172) - ($173))|0; + $175 = $2; + $176 = ($174|0)>=($175|0); + if ($176) { + $177 = $isodd; + $178 = ($177|0)==(0); + if ($178) { + $179 = $l; + $180 = $0; + $181 = HEAP32[$180>>2]|0; + $182 = (($181) + 72|0); + $183 = HEAP32[$182>>2]|0; + $184 = (($183) + ($179<<3)|0); + $185 = +HEAPF64[$184>>3]; + $186 = $t; + $187 = $l; + $188 = (($186) - ($187))|0; + $189 = $2; + $190 = (($188) - ($189))|0; + $191 = $1; + $192 = (($191) + ($190<<3)|0); + $193 = +HEAPF64[$192>>3]; + $194 = $185 * $193; + $195 = $i; + $196 = $3; + $197 = (($196) + ($195<<3)|0); + $198 = +HEAPF64[$197>>3]; + $199 = $198 + $194; + HEAPF64[$197>>3] = $199; + $200 = $l; + $201 = $0; + $202 = HEAP32[$201>>2]|0; + $203 = (($202) + 76|0); + $204 = HEAP32[$203>>2]|0; + $205 = (($204) + ($200<<3)|0); + $206 = +HEAPF64[$205>>3]; + $207 = $t; + $208 = $l; + $209 = (($207) - ($208))|0; + $210 = $2; + $211 = (($209) - ($210))|0; + $212 = $1; + $213 = (($212) + ($211<<3)|0); + $214 = +HEAPF64[$213>>3]; + $215 = $206 * $214; + $216 = $i; + $217 = $5; + $218 = (($217) + ($216<<3)|0); + $219 = +HEAPF64[$218>>3]; + $220 = $219 + $215; + HEAPF64[$218>>3] = $220; + } else { + label = 16; + } + } else { + label = 16; + } + if ((label|0) == 16) { + label = 0; + $221 = $t; + $222 = $l; + $223 = (($221) - ($222))|0; + $224 = $2; + $225 = ($223|0)>=($224|0); + if ($225) { + $226 = $isodd; + $227 = ($226|0)==(1); + if ($227) { + $228 = $t; + $229 = $l; + $230 = (($228) - ($229))|0; + $231 = $2; + $232 = ($230|0)!=($231|0); + if ($232) { + $233 = $l; + $234 = $0; + $235 = HEAP32[$234>>2]|0; + $236 = (($235) + 72|0); + $237 = HEAP32[$236>>2]|0; + $238 = (($237) + ($233<<3)|0); + $239 = +HEAPF64[$238>>3]; + $240 = $t; + $241 = $l; + $242 = (($240) - ($241))|0; + $243 = $2; + $244 = (($243) + 1)|0; + $245 = (($242) - ($244))|0; + $246 = $1; + $247 = (($246) + ($245<<3)|0); + $248 = +HEAPF64[$247>>3]; + $249 = $239 * $248; + $250 = $i; + $251 = $3; + $252 = (($251) + ($250<<3)|0); + $253 = +HEAPF64[$252>>3]; + $254 = $253 + $249; + HEAPF64[$252>>3] = $254; + $255 = $l; + $256 = $0; + $257 = HEAP32[$256>>2]|0; + $258 = (($257) + 76|0); + $259 = HEAP32[$258>>2]|0; + $260 = (($259) + ($255<<3)|0); + $261 = +HEAPF64[$260>>3]; + $262 = $t; + $263 = $l; + $264 = (($262) - ($263))|0; + $265 = $2; + $266 = (($265) + 1)|0; + $267 = (($264) - ($266))|0; + $268 = $1; + $269 = (($268) + ($267<<3)|0); + $270 = +HEAPF64[$269>>3]; + $271 = $261 * $270; + $272 = $i; + $273 = $5; + $274 = (($273) + ($272<<3)|0); + $275 = +HEAPF64[$274>>3]; + $276 = $275 + $271; + HEAPF64[$274>>3] = $276; + } else { + $277 = $l; + $278 = $0; + $279 = HEAP32[$278>>2]|0; + $280 = (($279) + 72|0); + $281 = HEAP32[$280>>2]|0; + $282 = (($281) + ($277<<3)|0); + $283 = +HEAPF64[$282>>3]; + $284 = $2; + $285 = (($284) - 1)|0; + $286 = $1; + $287 = (($286) + ($285<<3)|0); + $288 = +HEAPF64[$287>>3]; + $289 = $283 * $288; + $290 = $i; + $291 = $3; + $292 = (($291) + ($290<<3)|0); + $293 = +HEAPF64[$292>>3]; + $294 = $293 + $289; + HEAPF64[$292>>3] = $294; + $295 = $l; + $296 = $0; + $297 = HEAP32[$296>>2]|0; + $298 = (($297) + 76|0); + $299 = HEAP32[$298>>2]|0; + $300 = (($299) + ($295<<3)|0); + $301 = +HEAPF64[$300>>3]; + $302 = $2; + $303 = (($302) - 1)|0; + $304 = $1; + $305 = (($304) + ($303<<3)|0); + $306 = +HEAPF64[$305>>3]; + $307 = $301 * $306; + $308 = $i; + $309 = $5; + $310 = (($309) + ($308<<3)|0); + $311 = +HEAPF64[$310>>3]; + $312 = $311 + $307; + HEAPF64[$310>>3] = $312; + } + } + } + } + } + } + } + $313 = $l; + $314 = (($313) + 1)|0; + $l = $314; + } + $315 = $i; + $316 = (($315) + 1)|0; + $i = $316; + } + STACKTOP = sp;return; +} +function _dwt_sym($wt,$inp,$N,$cA,$len_cA,$cD,$len_cD) { + $wt = $wt|0; + $inp = $inp|0; + $N = $N|0; + $cA = $cA|0; + $len_cA = $len_cA|0; + $cD = $cD|0; + $len_cD = $len_cD|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0.0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0.0, $113 = 0.0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0.0, $118 = 0.0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0.0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0.0, $141 = 0.0, $142 = 0, $143 = 0, $144 = 0, $145 = 0.0, $146 = 0.0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0.0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0.0, $164 = 0.0, $165 = 0, $166 = 0, $167 = 0, $168 = 0.0, $169 = 0.0, $17 = 0; + var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0; + var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0.0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0.0, $48 = 0.0, $49 = 0, $5 = 0; + var $50 = 0, $51 = 0, $52 = 0.0, $53 = 0.0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0.0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0.0, $67 = 0.0, $68 = 0; + var $69 = 0, $7 = 0, $70 = 0, $71 = 0.0, $72 = 0.0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0.0, $84 = 0, $85 = 0, $86 = 0; + var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0.0, $92 = 0.0, $93 = 0, $94 = 0, $95 = 0, $96 = 0.0, $97 = 0.0, $98 = 0, $99 = 0, $i = 0, $l = 0, $len_avg = 0, $t = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $inp; + $2 = $N; + $3 = $cA; + $4 = $len_cA; + $5 = $cD; + $6 = $len_cD; + $7 = $0; + $8 = HEAP32[$7>>2]|0; + $9 = (($8) + 56|0); + $10 = HEAP32[$9>>2]|0; + $len_avg = $10; + $i = 0; + while(1) { + $11 = $i; + $12 = $4; + $13 = ($11|0)<($12|0); + if (!($13)) { + break; + } + $14 = $i; + $15 = $14<<1; + $16 = (($15) + 1)|0; + $t = $16; + $17 = $i; + $18 = $3; + $19 = (($18) + ($17<<3)|0); + HEAPF64[$19>>3] = 0.0; + $20 = $i; + $21 = $5; + $22 = (($21) + ($20<<3)|0); + HEAPF64[$22>>3] = 0.0; + $l = 0; + while(1) { + $23 = $l; + $24 = $len_avg; + $25 = ($23|0)<($24|0); + if (!($25)) { + break; + } + $26 = $t; + $27 = $l; + $28 = (($26) - ($27))|0; + $29 = ($28|0)>=(0); + if ($29) { + $30 = $t; + $31 = $l; + $32 = (($30) - ($31))|0; + $33 = $2; + $34 = ($32|0)<($33|0); + if ($34) { + $35 = $l; + $36 = $0; + $37 = HEAP32[$36>>2]|0; + $38 = (($37) + 72|0); + $39 = HEAP32[$38>>2]|0; + $40 = (($39) + ($35<<3)|0); + $41 = +HEAPF64[$40>>3]; + $42 = $t; + $43 = $l; + $44 = (($42) - ($43))|0; + $45 = $1; + $46 = (($45) + ($44<<3)|0); + $47 = +HEAPF64[$46>>3]; + $48 = $41 * $47; + $49 = $i; + $50 = $3; + $51 = (($50) + ($49<<3)|0); + $52 = +HEAPF64[$51>>3]; + $53 = $52 + $48; + HEAPF64[$51>>3] = $53; + $54 = $l; + $55 = $0; + $56 = HEAP32[$55>>2]|0; + $57 = (($56) + 76|0); + $58 = HEAP32[$57>>2]|0; + $59 = (($58) + ($54<<3)|0); + $60 = +HEAPF64[$59>>3]; + $61 = $t; + $62 = $l; + $63 = (($61) - ($62))|0; + $64 = $1; + $65 = (($64) + ($63<<3)|0); + $66 = +HEAPF64[$65>>3]; + $67 = $60 * $66; + $68 = $i; + $69 = $5; + $70 = (($69) + ($68<<3)|0); + $71 = +HEAPF64[$70>>3]; + $72 = $71 + $67; + HEAPF64[$70>>3] = $72; + } else { + label = 8; + } + } else { + label = 8; + } + if ((label|0) == 8) { + label = 0; + $73 = $t; + $74 = $l; + $75 = (($73) - ($74))|0; + $76 = ($75|0)<(0); + if ($76) { + $77 = $l; + $78 = $0; + $79 = HEAP32[$78>>2]|0; + $80 = (($79) + 72|0); + $81 = HEAP32[$80>>2]|0; + $82 = (($81) + ($77<<3)|0); + $83 = +HEAPF64[$82>>3]; + $84 = $t; + $85 = (0 - ($84))|0; + $86 = $l; + $87 = (($85) + ($86))|0; + $88 = (($87) - 1)|0; + $89 = $1; + $90 = (($89) + ($88<<3)|0); + $91 = +HEAPF64[$90>>3]; + $92 = $83 * $91; + $93 = $i; + $94 = $3; + $95 = (($94) + ($93<<3)|0); + $96 = +HEAPF64[$95>>3]; + $97 = $96 + $92; + HEAPF64[$95>>3] = $97; + $98 = $l; + $99 = $0; + $100 = HEAP32[$99>>2]|0; + $101 = (($100) + 76|0); + $102 = HEAP32[$101>>2]|0; + $103 = (($102) + ($98<<3)|0); + $104 = +HEAPF64[$103>>3]; + $105 = $t; + $106 = (0 - ($105))|0; + $107 = $l; + $108 = (($106) + ($107))|0; + $109 = (($108) - 1)|0; + $110 = $1; + $111 = (($110) + ($109<<3)|0); + $112 = +HEAPF64[$111>>3]; + $113 = $104 * $112; + $114 = $i; + $115 = $5; + $116 = (($115) + ($114<<3)|0); + $117 = +HEAPF64[$116>>3]; + $118 = $117 + $113; + HEAPF64[$116>>3] = $118; + } else { + $119 = $t; + $120 = $l; + $121 = (($119) - ($120))|0; + $122 = $2; + $123 = ($121|0)>=($122|0); + if ($123) { + $124 = $l; + $125 = $0; + $126 = HEAP32[$125>>2]|0; + $127 = (($126) + 72|0); + $128 = HEAP32[$127>>2]|0; + $129 = (($128) + ($124<<3)|0); + $130 = +HEAPF64[$129>>3]; + $131 = $2; + $132 = $131<<1; + $133 = $t; + $134 = (($132) - ($133))|0; + $135 = $l; + $136 = (($134) + ($135))|0; + $137 = (($136) - 1)|0; + $138 = $1; + $139 = (($138) + ($137<<3)|0); + $140 = +HEAPF64[$139>>3]; + $141 = $130 * $140; + $142 = $i; + $143 = $3; + $144 = (($143) + ($142<<3)|0); + $145 = +HEAPF64[$144>>3]; + $146 = $145 + $141; + HEAPF64[$144>>3] = $146; + $147 = $l; + $148 = $0; + $149 = HEAP32[$148>>2]|0; + $150 = (($149) + 76|0); + $151 = HEAP32[$150>>2]|0; + $152 = (($151) + ($147<<3)|0); + $153 = +HEAPF64[$152>>3]; + $154 = $2; + $155 = $154<<1; + $156 = $t; + $157 = (($155) - ($156))|0; + $158 = $l; + $159 = (($157) + ($158))|0; + $160 = (($159) - 1)|0; + $161 = $1; + $162 = (($161) + ($160<<3)|0); + $163 = +HEAPF64[$162>>3]; + $164 = $153 * $163; + $165 = $i; + $166 = $5; + $167 = (($166) + ($165<<3)|0); + $168 = +HEAPF64[$167>>3]; + $169 = $168 + $164; + HEAPF64[$167>>3] = $169; + } + } + } + $170 = $l; + $171 = (($170) + 1)|0; + $l = $171; + } + $172 = $i; + $173 = (($172) + 1)|0; + $i = $173; + } + STACKTOP = sp;return; +} +function _idwt($wt,$dwtop) { + $wt = $wt|0; + $dwtop = $dwtop|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0.0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0.0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; + var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; + var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; + var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0; + var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0.0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0; + var $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0.0; + var $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0; + var $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0; + var $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0; + var $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0.0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0; + var $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0; + var $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0; + var $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0; + var $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0; + var $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0; + var $459 = 0.0, $46 = 0, $460 = 0, $461 = 0, $462 = 0, $463 = 0.0, $464 = 0.0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0; + var $477 = 0, $478 = 0, $479 = 0, $48 = 0, $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0; + var $495 = 0, $496 = 0, $497 = 0, $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0.0; + var $512 = 0, $513 = 0, $514 = 0, $515 = 0, $516 = 0, $517 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0; + var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0.0, $81 = 0, $82 = 0; + var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $J = 0, $N = 0; + var $N2 = 0, $U = 0, $X_hp = 0, $X_lp = 0, $app_len = 0, $cA_up = 0, $det_len = 0, $i = 0, $iter = 0, $k = 0, $lf = 0, $out = 0, $temp = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer1 = sp + 8|0; + $vararg_buffer = sp; + $0 = $wt; + $1 = $dwtop; + $2 = $0; + $3 = (($2) + 32|0); + $4 = HEAP32[$3>>2]|0; + $J = $4; + $U = 2; + $5 = $0; + $6 = (($5) + 76|0); + $7 = HEAP32[$6>>2]|0; + $app_len = $7; + $8 = $0; + $9 = (($8) + 20|0); + $10 = HEAP32[$9>>2]|0; + $11 = (($10) + 1)|0; + $12 = $11<<3; + $13 = (_malloc($12)|0); + $out = $13; + $14 = $0; + $15 = (($14) + 44|0); + $16 = (_strcmp($15,17288)|0); + $17 = ($16|0)!=(0); + do { + if ($17) { + label = 13; + } else { + $18 = $0; + $19 = (($18) + 54|0); + $20 = (_strcmp($19,17424)|0); + $21 = ($20|0)!=(0); + if ($21) { + $22 = $0; + $23 = (($22) + 54|0); + $24 = (_strcmp($23,17432)|0); + $25 = ($24|0)!=(0); + if ($25) { + label = 13; + break; + } + } + $26 = $0; + $27 = (($26) + 76|0); + $28 = HEAP32[$27>>2]|0; + $app_len = $28; + $29 = $0; + $30 = (($29) + 76|0); + $31 = (($30) + 4|0); + $32 = HEAP32[$31>>2]|0; + $det_len = $32; + $33 = $J; + $34 = $0; + $35 = (($34) + 76|0); + $36 = (($35) + ($33<<2)|0); + $37 = HEAP32[$36>>2]|0; + $38 = $37<<1; + $N = $38; + $39 = $0; + $40 = HEAP32[$39>>2]|0; + $41 = (($40) + 64|0); + $42 = HEAP32[$41>>2]|0; + $43 = $0; + $44 = HEAP32[$43>>2]|0; + $45 = (($44) + 68|0); + $46 = HEAP32[$45>>2]|0; + $47 = (($42) + ($46))|0; + $48 = (($47|0) / 2)&-1; + $lf = $48; + $49 = $N; + $50 = $49<<3; + $51 = (_malloc($50)|0); + $cA_up = $51; + $52 = $N; + $53 = $lf; + $54 = (($52) + ($53))|0; + $55 = $54<<3; + $56 = (_malloc($55)|0); + $temp = $56; + $57 = $N; + $58 = $lf; + $59 = $58<<1; + $60 = (($57) + ($59))|0; + $61 = (($60) - 1)|0; + $62 = $61<<3; + $63 = (_malloc($62)|0); + $X_lp = $63; + $64 = $N; + $65 = $lf; + $66 = $65<<1; + $67 = (($64) + ($66))|0; + $68 = (($67) - 1)|0; + $69 = $68<<3; + $70 = (_malloc($69)|0); + $X_hp = $70; + $71 = $app_len; + $iter = $71; + $i = 0; + while(1) { + $72 = $i; + $73 = $app_len; + $74 = ($72|0)<($73|0); + if (!($74)) { + break; + } + $75 = $i; + $76 = $0; + $77 = (($76) + 484|0); + $78 = HEAP32[$77>>2]|0; + $79 = (($78) + ($75<<3)|0); + $80 = +HEAPF64[$79>>3]; + $81 = $i; + $82 = $out; + $83 = (($82) + ($81<<3)|0); + HEAPF64[$83>>3] = $80; + $84 = $i; + $85 = (($84) + 1)|0; + $i = $85; + } + $i = 0; + while(1) { + $86 = $i; + $87 = $J; + $88 = ($86|0)<($87|0); + if (!($88)) { + break; + } + $89 = $0; + $90 = $temp; + $91 = $cA_up; + $92 = $out; + $93 = $det_len; + $94 = $0; + $95 = (($94) + 484|0); + $96 = HEAP32[$95>>2]|0; + $97 = $iter; + $98 = (($96) + ($97<<3)|0); + $99 = $det_len; + $100 = $X_lp; + $101 = $X_hp; + $102 = $out; + _idwt1($89,$90,$91,$92,$93,$98,$99,$100,$101,$102); + $103 = $det_len; + $104 = $iter; + $105 = (($104) + ($103))|0; + $iter = $105; + $106 = $i; + $107 = (($106) + 2)|0; + $108 = $0; + $109 = (($108) + 76|0); + $110 = (($109) + ($107<<2)|0); + $111 = HEAP32[$110>>2]|0; + $det_len = $111; + $112 = $i; + $113 = (($112) + 1)|0; + $i = $113; + } + $114 = $cA_up; + _free($114); + $115 = $X_lp; + _free($115); + $116 = $X_hp; + _free($116); + $117 = $temp; + _free($117); + } + } while(0); + if ((label|0) == 13) { + $118 = $0; + $119 = (($118) + 44|0); + $120 = (_strcmp($119,17288)|0); + $121 = ($120|0)!=(0); + if ($121) { + label = 28; + } else { + $122 = $0; + $123 = (($122) + 54|0); + $124 = (_strcmp($123,17416)|0); + $125 = ($124|0)!=(0); + if ($125) { + label = 28; + } else { + $126 = $0; + $127 = (($126) + 76|0); + $128 = HEAP32[$127>>2]|0; + $app_len = $128; + $129 = $0; + $130 = (($129) + 76|0); + $131 = (($130) + 4|0); + $132 = HEAP32[$131>>2]|0; + $det_len = $132; + $133 = $J; + $134 = $0; + $135 = (($134) + 76|0); + $136 = (($135) + ($133<<2)|0); + $137 = HEAP32[$136>>2]|0; + $138 = $137<<1; + $N = $138; + $139 = $0; + $140 = HEAP32[$139>>2]|0; + $141 = (($140) + 64|0); + $142 = HEAP32[$141>>2]|0; + $143 = $0; + $144 = HEAP32[$143>>2]|0; + $145 = (($144) + 68|0); + $146 = HEAP32[$145>>2]|0; + $147 = (($142) + ($146))|0; + $148 = (($147|0) / 2)&-1; + $lf = $148; + $149 = $N; + $150 = $lf; + $151 = $150<<1; + $152 = (($149) + ($151))|0; + $153 = (($152) - 1)|0; + $154 = $153<<3; + $155 = (_malloc($154)|0); + $X_lp = $155; + $156 = $app_len; + $iter = $156; + $i = 0; + while(1) { + $157 = $i; + $158 = $app_len; + $159 = ($157|0)<($158|0); + if (!($159)) { + break; + } + $160 = $i; + $161 = $0; + $162 = (($161) + 484|0); + $163 = HEAP32[$162>>2]|0; + $164 = (($163) + ($160<<3)|0); + $165 = +HEAPF64[$164>>3]; + $166 = $i; + $167 = $out; + $168 = (($167) + ($166<<3)|0); + HEAPF64[$168>>3] = $165; + $169 = $i; + $170 = (($169) + 1)|0; + $i = $170; + } + $i = 0; + while(1) { + $171 = $i; + $172 = $J; + $173 = ($171|0)<($172|0); + if (!($173)) { + break; + } + $174 = $0; + $175 = $out; + $176 = $det_len; + $177 = $0; + $178 = (($177) + 484|0); + $179 = HEAP32[$178>>2]|0; + $180 = $iter; + $181 = (($179) + ($180<<3)|0); + $182 = $det_len; + $183 = $X_lp; + _idwt_per($174,$175,$176,$181,$182,$183); + $184 = $lf; + $185 = (($184|0) / 2)&-1; + $186 = (($185) - 1)|0; + $k = $186; + while(1) { + $187 = $k; + $188 = $det_len; + $189 = $188<<1; + $190 = $lf; + $191 = (($190|0) / 2)&-1; + $192 = (($189) + ($191))|0; + $193 = (($192) - 1)|0; + $194 = ($187|0)<($193|0); + if (!($194)) { + break; + } + $195 = $k; + $196 = $X_lp; + $197 = (($196) + ($195<<3)|0); + $198 = +HEAPF64[$197>>3]; + $199 = $k; + $200 = $lf; + $201 = (($200|0) / 2)&-1; + $202 = (($199) - ($201))|0; + $203 = (($202) + 1)|0; + $204 = $out; + $205 = (($204) + ($203<<3)|0); + HEAPF64[$205>>3] = $198; + $206 = $k; + $207 = (($206) + 1)|0; + $k = $207; + } + $208 = $det_len; + $209 = $iter; + $210 = (($209) + ($208))|0; + $iter = $210; + $211 = $i; + $212 = (($211) + 2)|0; + $213 = $0; + $214 = (($213) + 76|0); + $215 = (($214) + ($212<<2)|0); + $216 = HEAP32[$215>>2]|0; + $det_len = $216; + $217 = $i; + $218 = (($217) + 1)|0; + $i = $218; + } + $219 = $X_lp; + _free($219); + } + } + if ((label|0) == 28) { + $220 = $0; + $221 = (($220) + 44|0); + $222 = (_strcmp($221,17184)|0); + $223 = ($222|0)!=(0); + if ($223) { + label = 43; + } else { + $224 = $0; + $225 = (($224) + 54|0); + $226 = (_strcmp($225,17416)|0); + $227 = ($226|0)!=(0); + if ($227) { + label = 43; + } else { + $228 = $0; + $229 = (($228) + 76|0); + $230 = HEAP32[$229>>2]|0; + $app_len = $230; + $231 = $0; + $232 = (($231) + 76|0); + $233 = (($232) + 4|0); + $234 = HEAP32[$233>>2]|0; + $det_len = $234; + $235 = $J; + $236 = $0; + $237 = (($236) + 76|0); + $238 = (($237) + ($235<<2)|0); + $239 = HEAP32[$238>>2]|0; + $240 = $239<<1; + $241 = (($240) - 1)|0; + $N = $241; + $242 = $0; + $243 = HEAP32[$242>>2]|0; + $244 = (($243) + 64|0); + $245 = HEAP32[$244>>2]|0; + $246 = $0; + $247 = HEAP32[$246>>2]|0; + $248 = (($247) + 68|0); + $249 = HEAP32[$248>>2]|0; + $250 = (($245) + ($249))|0; + $251 = (($250|0) / 2)&-1; + $lf = $251; + $252 = $N; + $253 = $lf; + $254 = $253<<1; + $255 = (($252) + ($254))|0; + $256 = (($255) - 1)|0; + $257 = $256<<3; + $258 = (_malloc($257)|0); + $X_lp = $258; + $259 = $app_len; + $iter = $259; + $i = 0; + while(1) { + $260 = $i; + $261 = $app_len; + $262 = ($260|0)<($261|0); + if (!($262)) { + break; + } + $263 = $i; + $264 = $0; + $265 = (($264) + 484|0); + $266 = HEAP32[$265>>2]|0; + $267 = (($266) + ($263<<3)|0); + $268 = +HEAPF64[$267>>3]; + $269 = $i; + $270 = $out; + $271 = (($270) + ($269<<3)|0); + HEAPF64[$271>>3] = $268; + $272 = $i; + $273 = (($272) + 1)|0; + $i = $273; + } + $i = 0; + while(1) { + $274 = $i; + $275 = $J; + $276 = ($274|0)<($275|0); + if (!($276)) { + break; + } + $277 = $0; + $278 = $out; + $279 = $det_len; + $280 = $0; + $281 = (($280) + 484|0); + $282 = HEAP32[$281>>2]|0; + $283 = $iter; + $284 = (($282) + ($283<<3)|0); + $285 = $det_len; + $286 = $X_lp; + _idwt_sym($277,$278,$279,$284,$285,$286); + $287 = $lf; + $288 = (($287) - 2)|0; + $k = $288; + while(1) { + $289 = $k; + $290 = $det_len; + $291 = $290<<1; + $292 = ($289|0)<($291|0); + if (!($292)) { + break; + } + $293 = $k; + $294 = $X_lp; + $295 = (($294) + ($293<<3)|0); + $296 = +HEAPF64[$295>>3]; + $297 = $k; + $298 = $lf; + $299 = (($297) - ($298))|0; + $300 = (($299) + 2)|0; + $301 = $out; + $302 = (($301) + ($300<<3)|0); + HEAPF64[$302>>3] = $296; + $303 = $k; + $304 = (($303) + 1)|0; + $k = $304; + } + $305 = $det_len; + $306 = $iter; + $307 = (($306) + ($305))|0; + $iter = $307; + $308 = $i; + $309 = (($308) + 2)|0; + $310 = $0; + $311 = (($310) + 76|0); + $312 = (($311) + ($309<<2)|0); + $313 = HEAP32[$312>>2]|0; + $det_len = $313; + $314 = $i; + $315 = (($314) + 1)|0; + $i = $315; + } + $316 = $X_lp; + _free($316); + } + } + if ((label|0) == 43) { + $317 = $0; + $318 = (($317) + 44|0); + $319 = (_strcmp($318,17184)|0); + $320 = ($319|0)!=(0); + if ($320) { + (_printf((17440|0),($vararg_buffer1|0))|0); + _exit(-1); + // unreachable; + } + $321 = $0; + $322 = (($321) + 54|0); + $323 = (_strcmp($322,17424)|0); + $324 = ($323|0)!=(0); + if ($324) { + $325 = $0; + $326 = (($325) + 54|0); + $327 = (_strcmp($326,17432)|0); + $328 = ($327|0)!=(0); + if ($328) { + (_printf((17440|0),($vararg_buffer1|0))|0); + _exit(-1); + // unreachable; + } + } + $329 = $0; + $330 = HEAP32[$329>>2]|0; + $331 = (($330) + 56|0); + $332 = HEAP32[$331>>2]|0; + $lf = $332; + $333 = $J; + $334 = $0; + $335 = (($334) + 76|0); + $336 = (($335) + ($333<<2)|0); + $337 = HEAP32[$336>>2]|0; + $338 = $337<<1; + $339 = (($338) - 1)|0; + $N = $339; + $340 = $N; + $341 = $340<<3; + $342 = (_malloc($341)|0); + $cA_up = $342; + $343 = $N; + $344 = $lf; + $345 = (($343) + ($344))|0; + $346 = (($345) - 1)|0; + $347 = $346<<3; + $348 = (_malloc($347)|0); + $X_lp = $348; + $349 = $N; + $350 = $lf; + $351 = (($349) + ($350))|0; + $352 = (($351) - 1)|0; + $353 = $352<<3; + $354 = (_malloc($353)|0); + $X_hp = $354; + $i = 0; + while(1) { + $355 = $i; + $356 = $app_len; + $357 = ($355|0)<($356|0); + if (!($357)) { + break; + } + $358 = $i; + $359 = $0; + $360 = (($359) + 484|0); + $361 = HEAP32[$360>>2]|0; + $362 = (($361) + ($358<<3)|0); + $363 = +HEAPF64[$362>>3]; + $364 = $i; + $365 = $out; + $366 = (($365) + ($364<<3)|0); + HEAPF64[$366>>3] = $363; + $367 = $i; + $368 = (($367) + 1)|0; + $i = $368; + } + $369 = $app_len; + $iter = $369; + $i = 0; + while(1) { + $370 = $i; + $371 = $J; + $372 = ($370|0)<($371|0); + if (!($372)) { + break; + } + $373 = $i; + $374 = (($373) + 1)|0; + $375 = $0; + $376 = (($375) + 76|0); + $377 = (($376) + ($374<<2)|0); + $378 = HEAP32[$377>>2]|0; + $det_len = $378; + $379 = $out; + $380 = $det_len; + $381 = $U; + $382 = $cA_up; + (_upsamp($379,$380,$381,$382)|0); + $383 = $i; + $384 = (($383) + 1)|0; + $385 = $0; + $386 = (($385) + 76|0); + $387 = (($386) + ($384<<2)|0); + $388 = HEAP32[$387>>2]|0; + $389 = $388<<1; + $390 = (($389) - 1)|0; + $N2 = $390; + $391 = $0; + $392 = HEAP32[$391>>2]|0; + $393 = (($392) + 64|0); + $394 = HEAP32[$393>>2]|0; + $395 = $0; + $396 = HEAP32[$395>>2]|0; + $397 = (($396) + 68|0); + $398 = HEAP32[$397>>2]|0; + $399 = ($394|0)==($398|0); + do { + if ($399) { + $400 = $0; + $401 = (($400) + 54|0); + $402 = (_strcmp($401,17424)|0); + $403 = ($402|0)!=(0); + if ($403) { + $404 = $0; + $405 = (($404) + 54|0); + $406 = (_strcmp($405,17432)|0); + $407 = ($406|0)!=(0); + if ($407) { + label = 56; + break; + } + } + $408 = $N2; + $409 = $lf; + $410 = (_conv_init($408,$409)|0); + $411 = $0; + $412 = (($411) + 4|0); + HEAP32[$412>>2] = $410; + $413 = $0; + $414 = (($413) + 68|0); + HEAP32[$414>>2] = 1; + } else { + label = 56; + } + } while(0); + if ((label|0) == 56) { + label = 0; + $415 = $0; + $416 = HEAP32[$415>>2]|0; + $417 = (($416) + 64|0); + $418 = HEAP32[$417>>2]|0; + $419 = $0; + $420 = HEAP32[$419>>2]|0; + $421 = (($420) + 68|0); + $422 = HEAP32[$421>>2]|0; + $423 = ($418|0)==($422|0); + if (!($423)) { + label = 57; + break; + } + } + $424 = $0; + $425 = $cA_up; + $426 = $N2; + $427 = $0; + $428 = HEAP32[$427>>2]|0; + $429 = (($428) + 80|0); + $430 = HEAP32[$429>>2]|0; + $431 = $lf; + $432 = $X_lp; + _wconv($424,$425,$426,$430,$431,$432); + $433 = $0; + $434 = (($433) + 484|0); + $435 = HEAP32[$434>>2]|0; + $436 = $iter; + $437 = (($435) + ($436<<3)|0); + $438 = $det_len; + $439 = $U; + $440 = $cA_up; + (_upsamp($437,$438,$439,$440)|0); + $441 = $0; + $442 = $cA_up; + $443 = $N2; + $444 = $0; + $445 = HEAP32[$444>>2]|0; + $446 = (($445) + 84|0); + $447 = HEAP32[$446>>2]|0; + $448 = $lf; + $449 = $X_hp; + _wconv($441,$442,$443,$447,$448,$449); + $450 = $lf; + $451 = (($450) - 2)|0; + $k = $451; + while(1) { + $452 = $k; + $453 = $N2; + $454 = (($453) + 1)|0; + $455 = ($452|0)<($454|0); + if (!($455)) { + break; + } + $456 = $k; + $457 = $X_lp; + $458 = (($457) + ($456<<3)|0); + $459 = +HEAPF64[$458>>3]; + $460 = $k; + $461 = $X_hp; + $462 = (($461) + ($460<<3)|0); + $463 = +HEAPF64[$462>>3]; + $464 = $459 + $463; + $465 = $k; + $466 = $lf; + $467 = (($465) - ($466))|0; + $468 = (($467) + 2)|0; + $469 = $out; + $470 = (($469) + ($468<<3)|0); + HEAPF64[$470>>3] = $464; + $471 = $k; + $472 = (($471) + 1)|0; + $k = $472; + } + $473 = $det_len; + $474 = $iter; + $475 = (($474) + ($473))|0; + $iter = $475; + $476 = $0; + $477 = HEAP32[$476>>2]|0; + $478 = (($477) + 64|0); + $479 = HEAP32[$478>>2]|0; + $480 = $0; + $481 = HEAP32[$480>>2]|0; + $482 = (($481) + 68|0); + $483 = HEAP32[$482>>2]|0; + $484 = ($479|0)==($483|0); + do { + if ($484) { + $485 = $0; + $486 = (($485) + 54|0); + $487 = (_strcmp($486,17424)|0); + $488 = ($487|0)!=(0); + if ($488) { + $489 = $0; + $490 = (($489) + 54|0); + $491 = (_strcmp($490,17432)|0); + $492 = ($491|0)!=(0); + if ($492) { + break; + } + } + $493 = $0; + $494 = (($493) + 4|0); + $495 = HEAP32[$494>>2]|0; + _free_conv($495); + $496 = $0; + $497 = (($496) + 68|0); + HEAP32[$497>>2] = 0; + } + } while(0); + $498 = $i; + $499 = (($498) + 1)|0; + $i = $499; + } + if ((label|0) == 57) { + (_printf((17488|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + $500 = $cA_up; + _free($500); + $501 = $X_lp; + _free($501); + $502 = $X_hp; + _free($502); + } + } + } + $i = 0; + while(1) { + $503 = $i; + $504 = $0; + $505 = (($504) + 20|0); + $506 = HEAP32[$505>>2]|0; + $507 = ($503|0)<($506|0); + if (!($507)) { + break; + } + $508 = $i; + $509 = $out; + $510 = (($509) + ($508<<3)|0); + $511 = +HEAPF64[$510>>3]; + $512 = $i; + $513 = $1; + $514 = (($513) + ($512<<3)|0); + HEAPF64[$514>>3] = $511; + $515 = $i; + $516 = (($515) + 1)|0; + $i = $516; + } + $517 = $out; + _free($517); + STACKTOP = sp;return; +} +function _idwt1($wt,$temp,$cA_up,$cA,$len_cA,$cD,$len_cD,$X_lp,$X_hp,$X) { + $wt = $wt|0; + $temp = $temp|0; + $cA_up = $cA_up|0; + $cA = $cA|0; + $len_cA = $len_cA|0; + $cD = $cD|0; + $len_cD = $len_cD|0; + $X_lp = $X_lp|0; + $X_hp = $X_hp|0; + $X = $X|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0.0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0.0, $117 = 0.0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0; + var $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0; + var $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0; + var $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0; + var $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0; + var $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $N = 0, $N2 = 0, $U = 0, $i = 0, $len_avg = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $0 = $wt; + $1 = $temp; + $2 = $cA_up; + $3 = $cA; + $4 = $len_cA; + $5 = $cD; + $6 = $len_cD; + $7 = $X_lp; + $8 = $X_hp; + $9 = $X; + $10 = $0; + $11 = HEAP32[$10>>2]|0; + $12 = (($11) + 64|0); + $13 = HEAP32[$12>>2]|0; + $14 = $0; + $15 = HEAP32[$14>>2]|0; + $16 = (($15) + 68|0); + $17 = HEAP32[$16>>2]|0; + $18 = (($13) + ($17))|0; + $19 = (($18|0) / 2)&-1; + $len_avg = $19; + $20 = $6; + $21 = $20<<1; + $N = $21; + $U = 2; + $22 = $3; + $23 = $4; + $24 = $U; + $25 = $2; + (_upsamp2($22,$23,$24,$25)|0); + $26 = $2; + $27 = $4; + $28 = $27<<1; + $29 = $len_avg; + $30 = (($29|0) / 2)&-1; + $31 = $1; + (_per_ext($26,$28,$30,$31)|0); + $32 = $4; + $33 = $32<<1; + $34 = $len_avg; + $35 = (($33) + ($34))|0; + $N2 = $35; + $36 = $0; + $37 = HEAP32[$36>>2]|0; + $38 = (($37) + 64|0); + $39 = HEAP32[$38>>2]|0; + $40 = $0; + $41 = HEAP32[$40>>2]|0; + $42 = (($41) + 68|0); + $43 = HEAP32[$42>>2]|0; + $44 = ($39|0)==($43|0); + do { + if ($44) { + $45 = $0; + $46 = (($45) + 54|0); + $47 = (_strcmp($46,17424)|0); + $48 = ($47|0)!=(0); + if ($48) { + $49 = $0; + $50 = (($49) + 54|0); + $51 = (_strcmp($50,17432)|0); + $52 = ($51|0)!=(0); + if ($52) { + label = 5; + break; + } + } + $53 = $N2; + $54 = $len_avg; + $55 = (_conv_init($53,$54)|0); + $56 = $0; + $57 = (($56) + 4|0); + HEAP32[$57>>2] = $55; + $58 = $0; + $59 = (($58) + 68|0); + HEAP32[$59>>2] = 1; + } else { + label = 5; + } + } while(0); + do { + if ((label|0) == 5) { + $60 = $0; + $61 = HEAP32[$60>>2]|0; + $62 = (($61) + 64|0); + $63 = HEAP32[$62>>2]|0; + $64 = $0; + $65 = HEAP32[$64>>2]|0; + $66 = (($65) + 68|0); + $67 = HEAP32[$66>>2]|0; + $68 = ($63|0)==($67|0); + if ($68) { + break; + } else { + (_printf((17488|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + } + } while(0); + $69 = $0; + $70 = $1; + $71 = $N2; + $72 = $0; + $73 = HEAP32[$72>>2]|0; + $74 = (($73) + 80|0); + $75 = HEAP32[$74>>2]|0; + $76 = $len_avg; + $77 = $7; + _wconv($69,$70,$71,$75,$76,$77); + $78 = $5; + $79 = $6; + $80 = $U; + $81 = $2; + (_upsamp2($78,$79,$80,$81)|0); + $82 = $2; + $83 = $6; + $84 = $83<<1; + $85 = $len_avg; + $86 = (($85|0) / 2)&-1; + $87 = $1; + (_per_ext($82,$84,$86,$87)|0); + $88 = $6; + $89 = $88<<1; + $90 = $len_avg; + $91 = (($89) + ($90))|0; + $N2 = $91; + $92 = $0; + $93 = $1; + $94 = $N2; + $95 = $0; + $96 = HEAP32[$95>>2]|0; + $97 = (($96) + 84|0); + $98 = HEAP32[$97>>2]|0; + $99 = $len_avg; + $100 = $8; + _wconv($92,$93,$94,$98,$99,$100); + $101 = $len_avg; + $102 = (($101) - 1)|0; + $i = $102; + while(1) { + $103 = $i; + $104 = $N; + $105 = $len_avg; + $106 = (($104) + ($105))|0; + $107 = (($106) - 1)|0; + $108 = ($103|0)<($107|0); + if (!($108)) { + break; + } + $109 = $i; + $110 = $7; + $111 = (($110) + ($109<<3)|0); + $112 = +HEAPF64[$111>>3]; + $113 = $i; + $114 = $8; + $115 = (($114) + ($113<<3)|0); + $116 = +HEAPF64[$115>>3]; + $117 = $112 + $116; + $118 = $i; + $119 = $len_avg; + $120 = (($118) - ($119))|0; + $121 = (($120) + 1)|0; + $122 = $9; + $123 = (($122) + ($121<<3)|0); + HEAPF64[$123>>3] = $117; + $124 = $i; + $125 = (($124) + 1)|0; + $i = $125; + } + $126 = $0; + $127 = HEAP32[$126>>2]|0; + $128 = (($127) + 64|0); + $129 = HEAP32[$128>>2]|0; + $130 = $0; + $131 = HEAP32[$130>>2]|0; + $132 = (($131) + 68|0); + $133 = HEAP32[$132>>2]|0; + $134 = ($129|0)==($133|0); + if (!($134)) { + STACKTOP = sp;return; + } + $135 = $0; + $136 = (($135) + 54|0); + $137 = (_strcmp($136,17424)|0); + $138 = ($137|0)!=(0); + if ($138) { + $139 = $0; + $140 = (($139) + 54|0); + $141 = (_strcmp($140,17432)|0); + $142 = ($141|0)!=(0); + if ($142) { + STACKTOP = sp;return; + } + } + $143 = $0; + $144 = (($143) + 4|0); + $145 = HEAP32[$144>>2]|0; + _free_conv($145); + $146 = $0; + $147 = (($146) + 68|0); + HEAP32[$147>>2] = 0; + STACKTOP = sp;return; +} +function _idwt_per($wt,$cA,$len_cA,$cD,$len_cD,$X) { + $wt = $wt|0; + $cA = $cA|0; + $len_cA = $len_cA|0; + $cD = $cD|0; + $len_cD = $len_cD|0; + $X = $X|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0.0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0.0, $113 = 0.0, $114 = 0.0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0.0, $119 = 0.0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0.0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0.0, $148 = 0.0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0.0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0.0, $164 = 0.0, $165 = 0.0, $166 = 0, $167 = 0, $168 = 0, $169 = 0.0, $17 = 0; + var $170 = 0.0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0.0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0.0, $187 = 0.0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0.0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0.0, $204 = 0.0, $205 = 0.0; + var $206 = 0, $207 = 0, $208 = 0, $209 = 0.0, $21 = 0, $210 = 0.0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; + var $224 = 0, $225 = 0, $226 = 0, $227 = 0.0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0.0, $236 = 0.0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; + var $242 = 0, $243 = 0.0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0.0, $252 = 0.0, $253 = 0.0, $254 = 0, $255 = 0, $256 = 0, $257 = 0.0, $258 = 0.0, $259 = 0, $26 = 0; + var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0.0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0.0, $275 = 0.0, $276 = 0, $277 = 0, $278 = 0; + var $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0.0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0.0, $292 = 0.0, $293 = 0.0, $294 = 0, $295 = 0, $296 = 0; + var $297 = 0.0, $298 = 0.0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0; + var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0.0, $57 = 0, $58 = 0, $59 = 0, $6 = 0; + var $60 = 0, $61 = 0, $62 = 0.0, $63 = 0.0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0.0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0.0, $77 = 0.0, $78 = 0.0; + var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0.0, $83 = 0.0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0.0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0; + var $97 = 0.0, $98 = 0.0, $99 = 0, $N = 0, $i = 0, $l = 0, $l2 = 0, $len_avg = 0, $m = 0, $n = 0, $t = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $cA; + $2 = $len_cA; + $3 = $cD; + $4 = $len_cD; + $5 = $X; + $6 = $0; + $7 = HEAP32[$6>>2]|0; + $8 = (($7) + 64|0); + $9 = HEAP32[$8>>2]|0; + $10 = $0; + $11 = HEAP32[$10>>2]|0; + $12 = (($11) + 68|0); + $13 = HEAP32[$12>>2]|0; + $14 = (($9) + ($13))|0; + $15 = (($14|0) / 2)&-1; + $len_avg = $15; + $16 = $2; + $17 = $16<<1; + $N = $17; + $18 = $len_avg; + $19 = (($18|0) / 2)&-1; + $l2 = $19; + $m = -2; + $n = -1; + $i = 0; + while(1) { + $20 = $i; + $21 = $2; + $22 = $l2; + $23 = (($21) + ($22))|0; + $24 = (($23) - 1)|0; + $25 = ($20|0)<($24|0); + if (!($25)) { + break; + } + $26 = $m; + $27 = (($26) + 2)|0; + $m = $27; + $28 = $n; + $29 = (($28) + 2)|0; + $n = $29; + $30 = $m; + $31 = $5; + $32 = (($31) + ($30<<3)|0); + HEAPF64[$32>>3] = 0.0; + $33 = $n; + $34 = $5; + $35 = (($34) + ($33<<3)|0); + HEAPF64[$35>>3] = 0.0; + $l = 0; + while(1) { + $36 = $l; + $37 = $l2; + $38 = ($36|0)<($37|0); + if (!($38)) { + break; + } + $39 = $l; + $40 = $39<<1; + $t = $40; + $41 = $i; + $42 = $l; + $43 = (($41) - ($42))|0; + $44 = ($43|0)>=(0); + if ($44) { + $45 = $i; + $46 = $l; + $47 = (($45) - ($46))|0; + $48 = $2; + $49 = ($47|0)<($48|0); + if ($49) { + $50 = $t; + $51 = $0; + $52 = HEAP32[$51>>2]|0; + $53 = (($52) + 80|0); + $54 = HEAP32[$53>>2]|0; + $55 = (($54) + ($50<<3)|0); + $56 = +HEAPF64[$55>>3]; + $57 = $i; + $58 = $l; + $59 = (($57) - ($58))|0; + $60 = $1; + $61 = (($60) + ($59<<3)|0); + $62 = +HEAPF64[$61>>3]; + $63 = $56 * $62; + $64 = $t; + $65 = $0; + $66 = HEAP32[$65>>2]|0; + $67 = (($66) + 84|0); + $68 = HEAP32[$67>>2]|0; + $69 = (($68) + ($64<<3)|0); + $70 = +HEAPF64[$69>>3]; + $71 = $i; + $72 = $l; + $73 = (($71) - ($72))|0; + $74 = $3; + $75 = (($74) + ($73<<3)|0); + $76 = +HEAPF64[$75>>3]; + $77 = $70 * $76; + $78 = $63 + $77; + $79 = $m; + $80 = $5; + $81 = (($80) + ($79<<3)|0); + $82 = +HEAPF64[$81>>3]; + $83 = $82 + $78; + HEAPF64[$81>>3] = $83; + $84 = $t; + $85 = (($84) + 1)|0; + $86 = $0; + $87 = HEAP32[$86>>2]|0; + $88 = (($87) + 80|0); + $89 = HEAP32[$88>>2]|0; + $90 = (($89) + ($85<<3)|0); + $91 = +HEAPF64[$90>>3]; + $92 = $i; + $93 = $l; + $94 = (($92) - ($93))|0; + $95 = $1; + $96 = (($95) + ($94<<3)|0); + $97 = +HEAPF64[$96>>3]; + $98 = $91 * $97; + $99 = $t; + $100 = (($99) + 1)|0; + $101 = $0; + $102 = HEAP32[$101>>2]|0; + $103 = (($102) + 84|0); + $104 = HEAP32[$103>>2]|0; + $105 = (($104) + ($100<<3)|0); + $106 = +HEAPF64[$105>>3]; + $107 = $i; + $108 = $l; + $109 = (($107) - ($108))|0; + $110 = $3; + $111 = (($110) + ($109<<3)|0); + $112 = +HEAPF64[$111>>3]; + $113 = $106 * $112; + $114 = $98 + $113; + $115 = $n; + $116 = $5; + $117 = (($116) + ($115<<3)|0); + $118 = +HEAPF64[$117>>3]; + $119 = $118 + $114; + HEAPF64[$117>>3] = $119; + } else { + label = 8; + } + } else { + label = 8; + } + if ((label|0) == 8) { + label = 0; + $120 = $i; + $121 = $l; + $122 = (($120) - ($121))|0; + $123 = $2; + $124 = ($122|0)>=($123|0); + if ($124) { + $125 = $i; + $126 = $l; + $127 = (($125) - ($126))|0; + $128 = $2; + $129 = $len_avg; + $130 = (($128) + ($129))|0; + $131 = (($130) - 1)|0; + $132 = ($127|0)<($131|0); + if ($132) { + $133 = $t; + $134 = $0; + $135 = HEAP32[$134>>2]|0; + $136 = (($135) + 80|0); + $137 = HEAP32[$136>>2]|0; + $138 = (($137) + ($133<<3)|0); + $139 = +HEAPF64[$138>>3]; + $140 = $i; + $141 = $l; + $142 = (($140) - ($141))|0; + $143 = $2; + $144 = (($142) - ($143))|0; + $145 = $1; + $146 = (($145) + ($144<<3)|0); + $147 = +HEAPF64[$146>>3]; + $148 = $139 * $147; + $149 = $t; + $150 = $0; + $151 = HEAP32[$150>>2]|0; + $152 = (($151) + 84|0); + $153 = HEAP32[$152>>2]|0; + $154 = (($153) + ($149<<3)|0); + $155 = +HEAPF64[$154>>3]; + $156 = $i; + $157 = $l; + $158 = (($156) - ($157))|0; + $159 = $2; + $160 = (($158) - ($159))|0; + $161 = $3; + $162 = (($161) + ($160<<3)|0); + $163 = +HEAPF64[$162>>3]; + $164 = $155 * $163; + $165 = $148 + $164; + $166 = $m; + $167 = $5; + $168 = (($167) + ($166<<3)|0); + $169 = +HEAPF64[$168>>3]; + $170 = $169 + $165; + HEAPF64[$168>>3] = $170; + $171 = $t; + $172 = (($171) + 1)|0; + $173 = $0; + $174 = HEAP32[$173>>2]|0; + $175 = (($174) + 80|0); + $176 = HEAP32[$175>>2]|0; + $177 = (($176) + ($172<<3)|0); + $178 = +HEAPF64[$177>>3]; + $179 = $i; + $180 = $l; + $181 = (($179) - ($180))|0; + $182 = $2; + $183 = (($181) - ($182))|0; + $184 = $1; + $185 = (($184) + ($183<<3)|0); + $186 = +HEAPF64[$185>>3]; + $187 = $178 * $186; + $188 = $t; + $189 = (($188) + 1)|0; + $190 = $0; + $191 = HEAP32[$190>>2]|0; + $192 = (($191) + 84|0); + $193 = HEAP32[$192>>2]|0; + $194 = (($193) + ($189<<3)|0); + $195 = +HEAPF64[$194>>3]; + $196 = $i; + $197 = $l; + $198 = (($196) - ($197))|0; + $199 = $2; + $200 = (($198) - ($199))|0; + $201 = $3; + $202 = (($201) + ($200<<3)|0); + $203 = +HEAPF64[$202>>3]; + $204 = $195 * $203; + $205 = $187 + $204; + $206 = $n; + $207 = $5; + $208 = (($207) + ($206<<3)|0); + $209 = +HEAPF64[$208>>3]; + $210 = $209 + $205; + HEAPF64[$208>>3] = $210; + } else { + label = 11; + } + } else { + label = 11; + } + if ((label|0) == 11) { + label = 0; + $211 = $i; + $212 = $l; + $213 = (($211) - ($212))|0; + $214 = ($213|0)<(0); + if ($214) { + $215 = $i; + $216 = $l; + $217 = (($215) - ($216))|0; + $218 = $l2; + $219 = (0 - ($218))|0; + $220 = ($217|0)>($219|0); + if ($220) { + $221 = $t; + $222 = $0; + $223 = HEAP32[$222>>2]|0; + $224 = (($223) + 80|0); + $225 = HEAP32[$224>>2]|0; + $226 = (($225) + ($221<<3)|0); + $227 = +HEAPF64[$226>>3]; + $228 = $2; + $229 = $i; + $230 = (($228) + ($229))|0; + $231 = $l; + $232 = (($230) - ($231))|0; + $233 = $1; + $234 = (($233) + ($232<<3)|0); + $235 = +HEAPF64[$234>>3]; + $236 = $227 * $235; + $237 = $t; + $238 = $0; + $239 = HEAP32[$238>>2]|0; + $240 = (($239) + 84|0); + $241 = HEAP32[$240>>2]|0; + $242 = (($241) + ($237<<3)|0); + $243 = +HEAPF64[$242>>3]; + $244 = $2; + $245 = $i; + $246 = (($244) + ($245))|0; + $247 = $l; + $248 = (($246) - ($247))|0; + $249 = $3; + $250 = (($249) + ($248<<3)|0); + $251 = +HEAPF64[$250>>3]; + $252 = $243 * $251; + $253 = $236 + $252; + $254 = $m; + $255 = $5; + $256 = (($255) + ($254<<3)|0); + $257 = +HEAPF64[$256>>3]; + $258 = $257 + $253; + HEAPF64[$256>>3] = $258; + $259 = $t; + $260 = (($259) + 1)|0; + $261 = $0; + $262 = HEAP32[$261>>2]|0; + $263 = (($262) + 80|0); + $264 = HEAP32[$263>>2]|0; + $265 = (($264) + ($260<<3)|0); + $266 = +HEAPF64[$265>>3]; + $267 = $2; + $268 = $i; + $269 = (($267) + ($268))|0; + $270 = $l; + $271 = (($269) - ($270))|0; + $272 = $1; + $273 = (($272) + ($271<<3)|0); + $274 = +HEAPF64[$273>>3]; + $275 = $266 * $274; + $276 = $t; + $277 = (($276) + 1)|0; + $278 = $0; + $279 = HEAP32[$278>>2]|0; + $280 = (($279) + 84|0); + $281 = HEAP32[$280>>2]|0; + $282 = (($281) + ($277<<3)|0); + $283 = +HEAPF64[$282>>3]; + $284 = $2; + $285 = $i; + $286 = (($284) + ($285))|0; + $287 = $l; + $288 = (($286) - ($287))|0; + $289 = $3; + $290 = (($289) + ($288<<3)|0); + $291 = +HEAPF64[$290>>3]; + $292 = $283 * $291; + $293 = $275 + $292; + $294 = $n; + $295 = $5; + $296 = (($295) + ($294<<3)|0); + $297 = +HEAPF64[$296>>3]; + $298 = $297 + $293; + HEAPF64[$296>>3] = $298; + } + } + } + } + $299 = $l; + $300 = (($299) + 1)|0; + $l = $300; + } + $301 = $i; + $302 = (($301) + 1)|0; + $i = $302; + } + STACKTOP = sp;return; +} +function _idwt_sym($wt,$cA,$len_cA,$cD,$len_cD,$X) { + $wt = $wt|0; + $cA = $cA|0; + $len_cA = $len_cA|0; + $cD = $cD|0; + $len_cD = $len_cD|0; + $X = $X|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0.0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0.0, $114 = 0.0, $115 = 0.0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0.0, $12 = 0, $120 = 0.0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0; + var $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0; + var $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0.0, $58 = 0; + var $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0.0, $64 = 0.0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0.0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0; + var $77 = 0.0, $78 = 0.0, $79 = 0.0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0.0, $84 = 0.0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0.0, $93 = 0, $94 = 0; + var $95 = 0, $96 = 0, $97 = 0, $98 = 0.0, $99 = 0.0, $N = 0, $i = 0, $l = 0, $l2 = 0, $len_avg = 0, $m = 0, $n = 0, $t = 0, $v = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $cA; + $2 = $len_cA; + $3 = $cD; + $4 = $len_cD; + $5 = $X; + $6 = $0; + $7 = HEAP32[$6>>2]|0; + $8 = (($7) + 64|0); + $9 = HEAP32[$8>>2]|0; + $10 = $0; + $11 = HEAP32[$10>>2]|0; + $12 = (($11) + 68|0); + $13 = HEAP32[$12>>2]|0; + $14 = (($9) + ($13))|0; + $15 = (($14|0) / 2)&-1; + $len_avg = $15; + $16 = $2; + $17 = $16<<1; + $18 = (($17) - 1)|0; + $N = $18; + $m = -2; + $n = -1; + $19 = $len_avg; + $20 = (($19) - 2)|0; + $21 = (($20|0) / 2)&-1; + $l2 = $21; + $v = 0; + while(1) { + $22 = $v; + $23 = $2; + $24 = ($22|0)<($23|0); + if (!($24)) { + break; + } + $25 = $v; + $i = $25; + $26 = $m; + $27 = (($26) + 2)|0; + $m = $27; + $28 = $n; + $29 = (($28) + 2)|0; + $n = $29; + $30 = $m; + $31 = $5; + $32 = (($31) + ($30<<3)|0); + HEAPF64[$32>>3] = 0.0; + $33 = $n; + $34 = $5; + $35 = (($34) + ($33<<3)|0); + HEAPF64[$35>>3] = 0.0; + $l = 0; + while(1) { + $36 = $l; + $37 = $len_avg; + $38 = (($37|0) / 2)&-1; + $39 = ($36|0)<($38|0); + if (!($39)) { + break; + } + $40 = $l; + $41 = $40<<1; + $t = $41; + $42 = $i; + $43 = $l; + $44 = (($42) - ($43))|0; + $45 = ($44|0)>=(0); + if ($45) { + $46 = $i; + $47 = $l; + $48 = (($46) - ($47))|0; + $49 = $2; + $50 = ($48|0)<($49|0); + if ($50) { + $51 = $t; + $52 = $0; + $53 = HEAP32[$52>>2]|0; + $54 = (($53) + 80|0); + $55 = HEAP32[$54>>2]|0; + $56 = (($55) + ($51<<3)|0); + $57 = +HEAPF64[$56>>3]; + $58 = $i; + $59 = $l; + $60 = (($58) - ($59))|0; + $61 = $1; + $62 = (($61) + ($60<<3)|0); + $63 = +HEAPF64[$62>>3]; + $64 = $57 * $63; + $65 = $t; + $66 = $0; + $67 = HEAP32[$66>>2]|0; + $68 = (($67) + 84|0); + $69 = HEAP32[$68>>2]|0; + $70 = (($69) + ($65<<3)|0); + $71 = +HEAPF64[$70>>3]; + $72 = $i; + $73 = $l; + $74 = (($72) - ($73))|0; + $75 = $3; + $76 = (($75) + ($74<<3)|0); + $77 = +HEAPF64[$76>>3]; + $78 = $71 * $77; + $79 = $64 + $78; + $80 = $m; + $81 = $5; + $82 = (($81) + ($80<<3)|0); + $83 = +HEAPF64[$82>>3]; + $84 = $83 + $79; + HEAPF64[$82>>3] = $84; + $85 = $t; + $86 = (($85) + 1)|0; + $87 = $0; + $88 = HEAP32[$87>>2]|0; + $89 = (($88) + 80|0); + $90 = HEAP32[$89>>2]|0; + $91 = (($90) + ($86<<3)|0); + $92 = +HEAPF64[$91>>3]; + $93 = $i; + $94 = $l; + $95 = (($93) - ($94))|0; + $96 = $1; + $97 = (($96) + ($95<<3)|0); + $98 = +HEAPF64[$97>>3]; + $99 = $92 * $98; + $100 = $t; + $101 = (($100) + 1)|0; + $102 = $0; + $103 = HEAP32[$102>>2]|0; + $104 = (($103) + 84|0); + $105 = HEAP32[$104>>2]|0; + $106 = (($105) + ($101<<3)|0); + $107 = +HEAPF64[$106>>3]; + $108 = $i; + $109 = $l; + $110 = (($108) - ($109))|0; + $111 = $3; + $112 = (($111) + ($110<<3)|0); + $113 = +HEAPF64[$112>>3]; + $114 = $107 * $113; + $115 = $99 + $114; + $116 = $n; + $117 = $5; + $118 = (($117) + ($116<<3)|0); + $119 = +HEAPF64[$118>>3]; + $120 = $119 + $115; + HEAPF64[$118>>3] = $120; + } + } + $121 = $l; + $122 = (($121) + 1)|0; + $l = $122; + } + $123 = $v; + $124 = (($123) + 1)|0; + $v = $124; + } + STACKTOP = sp;return; +} +function _wconv($wt,$sig,$N,$filt,$L,$oup) { + $wt = $wt|0; + $sig = $sig|0; + $N = $N|0; + $filt = $filt|0; + $L = $L|0; + $oup = $oup|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $0 = $wt; + $1 = $sig; + $2 = $N; + $3 = $filt; + $4 = $L; + $5 = $oup; + $6 = $0; + $7 = (($6) + 54|0); + $8 = (_strcmp($7,17416)|0); + $9 = ($8|0)!=(0); + if (!($9)) { + $10 = $1; + $11 = $2; + $12 = $3; + $13 = $4; + $14 = $5; + _conv_direct($10,$11,$12,$13,$14); + STACKTOP = sp;return; + } + $15 = $0; + $16 = (($15) + 54|0); + $17 = (_strcmp($16,17424)|0); + $18 = ($17|0)!=(0); + if ($18) { + $19 = $0; + $20 = (($19) + 54|0); + $21 = (_strcmp($20,17432)|0); + $22 = ($21|0)!=(0); + if ($22) { + (_printf((17592|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + } + $23 = $0; + $24 = (($23) + 68|0); + $25 = HEAP32[$24>>2]|0; + $26 = ($25|0)==(0); + if ($26) { + $27 = $2; + $28 = $4; + $29 = (_conv_init($27,$28)|0); + $30 = $0; + $31 = (($30) + 4|0); + HEAP32[$31>>2] = $29; + $32 = $0; + $33 = (($32) + 4|0); + $34 = HEAP32[$33>>2]|0; + $35 = $1; + $36 = $3; + $37 = $5; + _conv_fft($34,$35,$36,$37); + $38 = $0; + $39 = (($38) + 4|0); + $40 = HEAP32[$39>>2]|0; + _free_conv($40); + } else { + $41 = $0; + $42 = (($41) + 4|0); + $43 = HEAP32[$42>>2]|0; + $44 = $1; + $45 = $3; + $46 = $5; + _conv_fft($43,$44,$45,$46); + } + STACKTOP = sp;return; +} +function _swt($wt,$inp) { + $wt = $wt|0; + $inp = $inp|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $3 = 0; + var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $0 = $wt; + $1 = $inp; + $2 = $0; + $3 = (($2) + 8|0); + $4 = (_strcmp($3,17208)|0); + $5 = ($4|0)!=(0); + if (!($5)) { + $6 = $0; + $7 = (($6) + 54|0); + $8 = (_strcmp($7,17416)|0); + $9 = ($8|0)!=(0); + if (!($9)) { + $10 = $0; + $11 = $1; + _swt_direct($10,$11); + STACKTOP = sp;return; + } + } + $12 = $0; + $13 = (($12) + 8|0); + $14 = (_strcmp($13,17208)|0); + $15 = ($14|0)!=(0); + if ($15) { + (_printf((17544|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + $16 = $0; + $17 = (($16) + 54|0); + $18 = (_strcmp($17,17424)|0); + $19 = ($18|0)!=(0); + if ($19) { + $20 = $0; + $21 = (($20) + 54|0); + $22 = (_strcmp($21,17432)|0); + $23 = ($22|0)!=(0); + if ($23) { + (_printf((17544|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + } + $24 = $0; + $25 = $1; + _swt_fft($24,$25); + STACKTOP = sp;return; +} +function _swt_direct($wt,$inp) { + $wt = $wt|0; + $inp = $inp|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0.0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $12 = 0, $13 = 0; + var $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0; + var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0; + var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0.0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0; + var $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0; + var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0.0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $J = 0, $M = 0, $N = 0, $cA = 0, $cD = 0, $i = 0; + var $iter = 0, $len_filt = 0, $lenacc = 0, $temp_len = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $inp; + $2 = $0; + $3 = (($2) + 20|0); + $4 = HEAP32[$3>>2]|0; + $temp_len = $4; + $5 = $0; + $6 = (($5) + 32|0); + $7 = HEAP32[$6>>2]|0; + $J = $7; + $8 = $temp_len; + $9 = $J; + $10 = $0; + $11 = (($10) + 76|0); + $12 = (($11) + ($9<<2)|0); + HEAP32[$12>>2] = $8; + $13 = $0; + $14 = (($13) + 76|0); + HEAP32[$14>>2] = $8; + $15 = $J; + $16 = (($15) + 1)|0; + $17 = $temp_len; + $18 = Math_imul($16, $17)|0; + $19 = $J; + $20 = (($19) + 1)|0; + $21 = $0; + $22 = (($21) + 76|0); + $23 = (($22) + ($20<<2)|0); + HEAP32[$23>>2] = $18; + $24 = $0; + $25 = (($24) + 24|0); + HEAP32[$25>>2] = $18; + $26 = $0; + $27 = HEAP32[$26>>2]|0; + $28 = (($27) + 52|0); + $29 = HEAP32[$28>>2]|0; + $len_filt = $29; + $M = 1; + $iter = 1; + while(1) { + $30 = $iter; + $31 = $J; + $32 = ($30|0)<($31|0); + if (!($32)) { + break; + } + $33 = $M; + $34 = $33<<1; + $M = $34; + $35 = $temp_len; + $36 = $iter; + $37 = $0; + $38 = (($37) + 76|0); + $39 = (($38) + ($36<<2)|0); + HEAP32[$39>>2] = $35; + $40 = $iter; + $41 = (($40) + 1)|0; + $iter = $41; + } + $42 = $temp_len; + $43 = $42<<3; + $44 = (_malloc($43)|0); + $cA = $44; + $45 = $temp_len; + $46 = $45<<3; + $47 = (_malloc($46)|0); + $cD = $47; + $M = 1; + $i = 0; + while(1) { + $48 = $i; + $49 = $temp_len; + $50 = ($48|0)<($49|0); + if (!($50)) { + break; + } + $51 = $i; + $52 = $1; + $53 = (($52) + ($51<<3)|0); + $54 = +HEAPF64[$53>>3]; + $55 = $i; + $56 = $0; + $57 = (($56) + 488|0); + $58 = (($57) + ($55<<3)|0); + HEAPF64[$58>>3] = $54; + $59 = $i; + $60 = (($59) + 1)|0; + $i = $60; + } + $61 = $0; + $62 = (($61) + 24|0); + $63 = HEAP32[$62>>2]|0; + $lenacc = $63; + $iter = 0; + while(1) { + $64 = $iter; + $65 = $J; + $66 = ($64|0)<($65|0); + if (!($66)) { + break; + } + $67 = $temp_len; + $68 = $lenacc; + $69 = (($68) - ($67))|0; + $lenacc = $69; + $70 = $iter; + $71 = ($70|0)>(0); + if ($71) { + $72 = $M; + $73 = $72<<1; + $M = $73; + $74 = $M; + $75 = $len_filt; + $76 = Math_imul($74, $75)|0; + $N = $76; + } else { + $77 = $len_filt; + $N = $77; + } + $78 = $0; + $79 = $M; + $80 = $0; + $81 = (($80) + 488|0); + $82 = $temp_len; + $83 = $cA; + $84 = $temp_len; + $85 = $cD; + $86 = $temp_len; + _swt_per($78,$79,$81,$82,$83,$84,$85,$86); + $i = 0; + while(1) { + $87 = $i; + $88 = $temp_len; + $89 = ($87|0)<($88|0); + if (!($89)) { + break; + } + $90 = $i; + $91 = $cA; + $92 = (($91) + ($90<<3)|0); + $93 = +HEAPF64[$92>>3]; + $94 = $i; + $95 = $0; + $96 = (($95) + 488|0); + $97 = (($96) + ($94<<3)|0); + HEAPF64[$97>>3] = $93; + $98 = $i; + $99 = $cD; + $100 = (($99) + ($98<<3)|0); + $101 = +HEAPF64[$100>>3]; + $102 = $lenacc; + $103 = $i; + $104 = (($102) + ($103))|0; + $105 = $0; + $106 = (($105) + 488|0); + $107 = (($106) + ($104<<3)|0); + HEAPF64[$107>>3] = $101; + $108 = $i; + $109 = (($108) + 1)|0; + $i = $109; + } + $110 = $iter; + $111 = (($110) + 1)|0; + $iter = $111; + } + $112 = $cA; + _free($112); + $113 = $cD; + _free($113); + STACKTOP = sp;return; +} +function _swt_fft($wt,$inp) { + $wt = $wt|0; + $inp = $inp|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0.0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0.0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; + var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; + var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; + var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0.0, $258 = 0, $259 = 0, $26 = 0; + var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0.0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0; + var $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0; + var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0; + var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0; + var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0.0, $93 = 0, $94 = 0, $95 = 0, $96 = 0; + var $97 = 0, $98 = 0, $99 = 0, $J = 0, $M = 0, $N = 0, $cA = 0, $cD = 0, $high_pass = 0, $i = 0, $iter = 0, $len_filt = 0, $lenacc = 0, $low_pass = 0, $sig = 0, $temp_len = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $0 = $wt; + $1 = $inp; + $2 = $0; + $3 = (($2) + 20|0); + $4 = HEAP32[$3>>2]|0; + $temp_len = $4; + $5 = $0; + $6 = (($5) + 32|0); + $7 = HEAP32[$6>>2]|0; + $J = $7; + $8 = $temp_len; + $9 = $J; + $10 = $0; + $11 = (($10) + 76|0); + $12 = (($11) + ($9<<2)|0); + HEAP32[$12>>2] = $8; + $13 = $0; + $14 = (($13) + 76|0); + HEAP32[$14>>2] = $8; + $15 = $J; + $16 = (($15) + 1)|0; + $17 = $temp_len; + $18 = Math_imul($16, $17)|0; + $19 = $J; + $20 = (($19) + 1)|0; + $21 = $0; + $22 = (($21) + 76|0); + $23 = (($22) + ($20<<2)|0); + HEAP32[$23>>2] = $18; + $24 = $0; + $25 = (($24) + 24|0); + HEAP32[$25>>2] = $18; + $M = 1; + $iter = 1; + while(1) { + $26 = $iter; + $27 = $J; + $28 = ($26|0)<($27|0); + if (!($28)) { + break; + } + $29 = $M; + $30 = $29<<1; + $M = $30; + $31 = $temp_len; + $32 = $iter; + $33 = $0; + $34 = (($33) + 76|0); + $35 = (($34) + ($32<<2)|0); + HEAP32[$35>>2] = $31; + $36 = $iter; + $37 = (($36) + 1)|0; + $iter = $37; + } + $38 = $0; + $39 = HEAP32[$38>>2]|0; + $40 = (($39) + 52|0); + $41 = HEAP32[$40>>2]|0; + $len_filt = $41; + $42 = $M; + $43 = $42<<3; + $44 = $len_filt; + $45 = Math_imul($43, $44)|0; + $46 = (_malloc($45)|0); + $low_pass = $46; + $47 = $M; + $48 = $47<<3; + $49 = $len_filt; + $50 = Math_imul($48, $49)|0; + $51 = (_malloc($50)|0); + $high_pass = $51; + $52 = $M; + $53 = $len_filt; + $54 = Math_imul($52, $53)|0; + $55 = $temp_len; + $56 = (($54) + ($55))|0; + $57 = $temp_len; + $58 = (($57|0) % 2)&-1; + $59 = (($56) + ($58))|0; + $60 = $59<<3; + $61 = (_malloc($60)|0); + $sig = $61; + $62 = $M; + $63 = $62<<1; + $64 = $len_filt; + $65 = Math_imul($63, $64)|0; + $66 = $temp_len; + $67 = (($65) + ($66))|0; + $68 = $temp_len; + $69 = (($68|0) % 2)&-1; + $70 = (($67) + ($69))|0; + $71 = $70<<3; + $72 = (($71) - 1)|0; + $73 = (_malloc($72)|0); + $cA = $73; + $74 = $M; + $75 = $74<<1; + $76 = $len_filt; + $77 = Math_imul($75, $76)|0; + $78 = $temp_len; + $79 = (($77) + ($78))|0; + $80 = $temp_len; + $81 = (($80|0) % 2)&-1; + $82 = (($79) + ($81))|0; + $83 = $82<<3; + $84 = (($83) - 1)|0; + $85 = (_malloc($84)|0); + $cD = $85; + $M = 1; + $i = 0; + while(1) { + $86 = $i; + $87 = $temp_len; + $88 = ($86|0)<($87|0); + if (!($88)) { + break; + } + $89 = $i; + $90 = $1; + $91 = (($90) + ($89<<3)|0); + $92 = +HEAPF64[$91>>3]; + $93 = $i; + $94 = $0; + $95 = (($94) + 488|0); + $96 = (($95) + ($93<<3)|0); + HEAPF64[$96>>3] = $92; + $97 = $i; + $98 = (($97) + 1)|0; + $i = $98; + } + $99 = $0; + $100 = (($99) + 24|0); + $101 = HEAP32[$100>>2]|0; + $lenacc = $101; + $iter = 0; + while(1) { + $102 = $iter; + $103 = $J; + $104 = ($102|0)<($103|0); + if (!($104)) { + label = 35; + break; + } + $105 = $temp_len; + $106 = $lenacc; + $107 = (($106) - ($105))|0; + $lenacc = $107; + $108 = $iter; + $109 = ($108|0)>(0); + if ($109) { + $110 = $M; + $111 = $110<<1; + $M = $111; + $112 = $M; + $113 = $len_filt; + $114 = Math_imul($112, $113)|0; + $N = $114; + $115 = $0; + $116 = HEAP32[$115>>2]|0; + $117 = (($116) + 72|0); + $118 = HEAP32[$117>>2]|0; + $119 = $0; + $120 = HEAP32[$119>>2]|0; + $121 = (($120) + 56|0); + $122 = HEAP32[$121>>2]|0; + $123 = $M; + $124 = $low_pass; + (_upsamp2($118,$122,$123,$124)|0); + $125 = $0; + $126 = HEAP32[$125>>2]|0; + $127 = (($126) + 76|0); + $128 = HEAP32[$127>>2]|0; + $129 = $0; + $130 = HEAP32[$129>>2]|0; + $131 = (($130) + 60|0); + $132 = HEAP32[$131>>2]|0; + $133 = $M; + $134 = $high_pass; + (_upsamp2($128,$132,$133,$134)|0); + } else { + $135 = $len_filt; + $N = $135; + $i = 0; + while(1) { + $136 = $i; + $137 = $N; + $138 = ($136|0)<($137|0); + if (!($138)) { + break; + } + $139 = $i; + $140 = $0; + $141 = HEAP32[$140>>2]|0; + $142 = (($141) + 72|0); + $143 = HEAP32[$142>>2]|0; + $144 = (($143) + ($139<<3)|0); + $145 = +HEAPF64[$144>>3]; + $146 = $i; + $147 = $low_pass; + $148 = (($147) + ($146<<3)|0); + HEAPF64[$148>>3] = $145; + $149 = $i; + $150 = $0; + $151 = HEAP32[$150>>2]|0; + $152 = (($151) + 76|0); + $153 = HEAP32[$152>>2]|0; + $154 = (($153) + ($149<<3)|0); + $155 = +HEAPF64[$154>>3]; + $156 = $i; + $157 = $high_pass; + $158 = (($157) + ($156<<3)|0); + HEAPF64[$158>>3] = $155; + $159 = $i; + $160 = (($159) + 1)|0; + $i = $160; + } + } + $161 = $0; + $162 = (($161) + 488|0); + $163 = $temp_len; + $164 = $N; + $165 = (($164|0) / 2)&-1; + $166 = $sig; + (_per_ext($162,$163,$165,$166)|0); + $167 = $0; + $168 = HEAP32[$167>>2]|0; + $169 = (($168) + 56|0); + $170 = HEAP32[$169>>2]|0; + $171 = $0; + $172 = HEAP32[$171>>2]|0; + $173 = (($172) + 60|0); + $174 = HEAP32[$173>>2]|0; + $175 = ($170|0)==($174|0); + do { + if ($175) { + $176 = $0; + $177 = (($176) + 54|0); + $178 = (_strcmp($177,17424)|0); + $179 = ($178|0)!=(0); + if ($179) { + $180 = $0; + $181 = (($180) + 54|0); + $182 = (_strcmp($181,17432)|0); + $183 = ($182|0)!=(0); + if ($183) { + label = 22; + break; + } + } + $184 = $N; + $185 = $temp_len; + $186 = (($184) + ($185))|0; + $187 = $temp_len; + $188 = (($187|0) % 2)&-1; + $189 = (($186) + ($188))|0; + $190 = $N; + $191 = (_conv_init($189,$190)|0); + $192 = $0; + $193 = (($192) + 4|0); + HEAP32[$193>>2] = $191; + $194 = $0; + $195 = (($194) + 68|0); + HEAP32[$195>>2] = 1; + } else { + label = 22; + } + } while(0); + if ((label|0) == 22) { + label = 0; + $196 = $0; + $197 = HEAP32[$196>>2]|0; + $198 = (($197) + 56|0); + $199 = HEAP32[$198>>2]|0; + $200 = $0; + $201 = HEAP32[$200>>2]|0; + $202 = (($201) + 60|0); + $203 = HEAP32[$202>>2]|0; + $204 = ($199|0)==($203|0); + if (!($204)) { + label = 23; + break; + } + } + $205 = $0; + $206 = $sig; + $207 = $N; + $208 = $temp_len; + $209 = (($207) + ($208))|0; + $210 = $temp_len; + $211 = (($210|0) % 2)&-1; + $212 = (($209) + ($211))|0; + $213 = $low_pass; + $214 = $N; + $215 = $cA; + _wconv($205,$206,$212,$213,$214,$215); + $216 = $0; + $217 = $sig; + $218 = $N; + $219 = $temp_len; + $220 = (($218) + ($219))|0; + $221 = $temp_len; + $222 = (($221|0) % 2)&-1; + $223 = (($220) + ($222))|0; + $224 = $high_pass; + $225 = $N; + $226 = $cD; + _wconv($216,$217,$223,$224,$225,$226); + $227 = $0; + $228 = HEAP32[$227>>2]|0; + $229 = (($228) + 56|0); + $230 = HEAP32[$229>>2]|0; + $231 = $0; + $232 = HEAP32[$231>>2]|0; + $233 = (($232) + 60|0); + $234 = HEAP32[$233>>2]|0; + $235 = ($230|0)==($234|0); + do { + if ($235) { + $236 = $0; + $237 = (($236) + 54|0); + $238 = (_strcmp($237,17424)|0); + $239 = ($238|0)!=(0); + if ($239) { + $240 = $0; + $241 = (($240) + 54|0); + $242 = (_strcmp($241,17432)|0); + $243 = ($242|0)!=(0); + if ($243) { + break; + } + } + $244 = $0; + $245 = (($244) + 4|0); + $246 = HEAP32[$245>>2]|0; + _free_conv($246); + $247 = $0; + $248 = (($247) + 68|0); + HEAP32[$248>>2] = 0; + } + } while(0); + $i = 0; + while(1) { + $249 = $i; + $250 = $temp_len; + $251 = ($249|0)<($250|0); + if (!($251)) { + break; + } + $252 = $N; + $253 = $i; + $254 = (($252) + ($253))|0; + $255 = $cA; + $256 = (($255) + ($254<<3)|0); + $257 = +HEAPF64[$256>>3]; + $258 = $i; + $259 = $0; + $260 = (($259) + 488|0); + $261 = (($260) + ($258<<3)|0); + HEAPF64[$261>>3] = $257; + $262 = $N; + $263 = $i; + $264 = (($262) + ($263))|0; + $265 = $cD; + $266 = (($265) + ($264<<3)|0); + $267 = +HEAPF64[$266>>3]; + $268 = $lenacc; + $269 = $i; + $270 = (($268) + ($269))|0; + $271 = $0; + $272 = (($271) + 488|0); + $273 = (($272) + ($270<<3)|0); + HEAPF64[$273>>3] = $267; + $274 = $i; + $275 = (($274) + 1)|0; + $i = $275; + } + $276 = $iter; + $277 = (($276) + 1)|0; + $iter = $277; + } + if ((label|0) == 23) { + (_printf((17488|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + else if ((label|0) == 35) { + $278 = $low_pass; + _free($278); + $279 = $high_pass; + _free($279); + $280 = $sig; + _free($280); + $281 = $cA; + _free($281); + $282 = $cD; + _free($282); + STACKTOP = sp;return; + } +} +function _iswt($wt,$swtop) { + $wt = $wt|0; + $swtop = $swtop|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0.0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0.0, $129 = 0.0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0.0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0.0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0.0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0.0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; + var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; + var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; + var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0; + var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0.0, $266 = 0, $267 = 0, $268 = 0, $269 = 0.0, $27 = 0, $270 = 0.0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0; + var $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0.0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0.0, $293 = 0, $294 = 0, $295 = 0, $296 = 0; + var $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0; + var $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0; + var $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0; + var $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0.0, $355 = 0, $356 = 0, $357 = 0, $358 = 0.0, $359 = 0.0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0; + var $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0.0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0.0, $383 = 0.0, $384 = 0.0, $385 = 0, $386 = 0; + var $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0.0, $402 = 0, $403 = 0; + var $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0; + var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0; + var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0; + var $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0.0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0; + var $98 = 0, $99 = 0.0, $J = 0, $N = 0, $N1 = 0, $U = 0, $appx1 = 0, $appx2 = 0, $appx_sig = 0, $cH0 = 0, $cL0 = 0, $count = 0, $det1 = 0, $det2 = 0, $det_sig = 0, $i = 0, $index = 0, $index2 = 0, $index_shift = 0, $iter = 0; + var $len = 0, $len0 = 0, $lf = 0, $oup00 = 0, $oup00H = 0, $oup00L = 0, $oup01 = 0, $tempx = 0, $value = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $0 = $wt; + $1 = $swtop; + $2 = $0; + $3 = (($2) + 20|0); + $4 = HEAP32[$3>>2]|0; + $N = $4; + $5 = $0; + $6 = (($5) + 32|0); + $7 = HEAP32[$6>>2]|0; + $J = $7; + $U = 2; + $8 = $0; + $9 = HEAP32[$8>>2]|0; + $10 = (($9) + 64|0); + $11 = HEAP32[$10>>2]|0; + $lf = $11; + $12 = $N; + $13 = $12<<3; + $14 = (_malloc($13)|0); + $appx_sig = $14; + $15 = $N; + $16 = $15<<3; + $17 = (_malloc($16)|0); + $det_sig = $17; + $18 = $N; + $19 = $18<<3; + $20 = (_malloc($19)|0); + $appx1 = $20; + $21 = $N; + $22 = $21<<3; + $23 = (_malloc($22)|0); + $det1 = $23; + $24 = $N; + $25 = $24<<3; + $26 = (_malloc($25)|0); + $appx2 = $26; + $27 = $N; + $28 = $27<<3; + $29 = (_malloc($28)|0); + $det2 = $29; + $30 = $N; + $31 = $30<<3; + $32 = (_malloc($31)|0); + $tempx = $32; + $33 = $N; + $34 = $N; + $35 = (($34|0) % 2)&-1; + $36 = (($33) + ($35))|0; + $37 = $lf; + $38 = (($36) + ($37))|0; + $39 = $38<<3; + $40 = (_malloc($39)|0); + $cL0 = $40; + $41 = $N; + $42 = $N; + $43 = (($42|0) % 2)&-1; + $44 = (($41) + ($43))|0; + $45 = $lf; + $46 = (($44) + ($45))|0; + $47 = $46<<3; + $48 = (_malloc($47)|0); + $cH0 = $48; + $49 = $N; + $50 = $lf; + $51 = $50<<1; + $52 = (($49) + ($51))|0; + $53 = $52<<3; + $54 = (_malloc($53)|0); + $oup00L = $54; + $55 = $N; + $56 = $lf; + $57 = $56<<1; + $58 = (($55) + ($57))|0; + $59 = $58<<3; + $60 = (_malloc($59)|0); + $oup00H = $60; + $61 = $N; + $62 = $61<<3; + $63 = (_malloc($62)|0); + $oup00 = $63; + $64 = $N; + $65 = $64<<3; + $66 = (_malloc($65)|0); + $oup01 = $66; + $iter = 0; + L1: while(1) { + $67 = $iter; + $68 = $J; + $69 = ($67|0)<($68|0); + if (!($69)) { + label = 59; + break; + } + $i = 0; + while(1) { + $70 = $i; + $71 = $N; + $72 = ($70|0)<($71|0); + if (!($72)) { + break; + } + $73 = $i; + $74 = $1; + $75 = (($74) + ($73<<3)|0); + HEAPF64[$75>>3] = 0.0; + $76 = $i; + $77 = (($76) + 1)|0; + $i = $77; + } + $78 = $iter; + $79 = ($78|0)==(0); + if ($79) { + $i = 0; + while(1) { + $80 = $i; + $81 = $N; + $82 = ($80|0)<($81|0); + if (!($82)) { + break; + } + $83 = $i; + $84 = $0; + $85 = (($84) + 484|0); + $86 = HEAP32[$85>>2]|0; + $87 = (($86) + ($83<<3)|0); + $88 = +HEAPF64[$87>>3]; + $89 = $i; + $90 = $appx_sig; + $91 = (($90) + ($89<<3)|0); + HEAPF64[$91>>3] = $88; + $92 = $N; + $93 = $i; + $94 = (($92) + ($93))|0; + $95 = $0; + $96 = (($95) + 484|0); + $97 = HEAP32[$96>>2]|0; + $98 = (($97) + ($94<<3)|0); + $99 = +HEAPF64[$98>>3]; + $100 = $i; + $101 = $det_sig; + $102 = (($101) + ($100<<3)|0); + HEAPF64[$102>>3] = $99; + $103 = $i; + $104 = (($103) + 1)|0; + $i = $104; + } + } else { + $i = 0; + while(1) { + $105 = $i; + $106 = $N; + $107 = ($105|0)<($106|0); + if (!($107)) { + break; + } + $108 = $iter; + $109 = (($108) + 1)|0; + $110 = $N; + $111 = Math_imul($109, $110)|0; + $112 = $i; + $113 = (($111) + ($112))|0; + $114 = $0; + $115 = (($114) + 484|0); + $116 = HEAP32[$115>>2]|0; + $117 = (($116) + ($113<<3)|0); + $118 = +HEAPF64[$117>>3]; + $119 = $i; + $120 = $det_sig; + $121 = (($120) + ($119<<3)|0); + HEAPF64[$121>>3] = $118; + $122 = $i; + $123 = (($122) + 1)|0; + $i = $123; + } + } + $124 = $J; + $125 = (($124) - 1)|0; + $126 = $iter; + $127 = (($125) - ($126))|0; + $128 = (+($127|0)); + $129 = (+Math_pow(2.0,(+$128))); + $130 = (~~(($129))); + $value = $130; + $count = 0; + while(1) { + $131 = $count; + $132 = $value; + $133 = ($131|0)<($132|0); + if (!($133)) { + break; + } + $len = 0; + $134 = $count; + $index = $134; + while(1) { + $135 = $index; + $136 = $N; + $137 = ($135|0)<($136|0); + if (!($137)) { + break; + } + $138 = $index; + $139 = $appx_sig; + $140 = (($139) + ($138<<3)|0); + $141 = +HEAPF64[$140>>3]; + $142 = $len; + $143 = $appx1; + $144 = (($143) + ($142<<3)|0); + HEAPF64[$144>>3] = $141; + $145 = $index; + $146 = $det_sig; + $147 = (($146) + ($145<<3)|0); + $148 = +HEAPF64[$147>>3]; + $149 = $len; + $150 = $det1; + $151 = (($150) + ($149<<3)|0); + HEAPF64[$151>>3] = $148; + $152 = $len; + $153 = (($152) + 1)|0; + $len = $153; + $154 = $value; + $155 = $index; + $156 = (($155) + ($154))|0; + $index = $156; + } + $len0 = 0; + $index_shift = 0; + while(1) { + $157 = $index_shift; + $158 = $len; + $159 = ($157|0)<($158|0); + if (!($159)) { + break; + } + $160 = $index_shift; + $161 = $appx1; + $162 = (($161) + ($160<<3)|0); + $163 = +HEAPF64[$162>>3]; + $164 = $len0; + $165 = $appx2; + $166 = (($165) + ($164<<3)|0); + HEAPF64[$166>>3] = $163; + $167 = $index_shift; + $168 = $det1; + $169 = (($168) + ($167<<3)|0); + $170 = +HEAPF64[$169>>3]; + $171 = $len0; + $172 = $det2; + $173 = (($172) + ($171<<3)|0); + HEAPF64[$173>>3] = $170; + $174 = $len0; + $175 = (($174) + 1)|0; + $len0 = $175; + $176 = $index_shift; + $177 = (($176) + 2)|0; + $index_shift = $177; + } + $178 = $appx2; + $179 = $len0; + $180 = $U; + $181 = $tempx; + (_upsamp2($178,$179,$180,$181)|0); + $182 = $tempx; + $183 = $len0; + $184 = $183<<1; + $185 = $lf; + $186 = (($185|0) / 2)&-1; + $187 = $cL0; + (_per_ext($182,$184,$186,$187)|0); + $188 = $det2; + $189 = $len0; + $190 = $U; + $191 = $tempx; + (_upsamp2($188,$189,$190,$191)|0); + $192 = $tempx; + $193 = $len0; + $194 = $193<<1; + $195 = $lf; + $196 = (($195|0) / 2)&-1; + $197 = $cH0; + (_per_ext($192,$194,$196,$197)|0); + $198 = $len0; + $199 = $198<<1; + $200 = $lf; + $201 = (($199) + ($200))|0; + $N1 = $201; + $202 = $0; + $203 = HEAP32[$202>>2]|0; + $204 = (($203) + 64|0); + $205 = HEAP32[$204>>2]|0; + $206 = $0; + $207 = HEAP32[$206>>2]|0; + $208 = (($207) + 68|0); + $209 = HEAP32[$208>>2]|0; + $210 = ($205|0)==($209|0); + do { + if ($210) { + $211 = $0; + $212 = (($211) + 54|0); + $213 = (_strcmp($212,17424)|0); + $214 = ($213|0)!=(0); + if ($214) { + $215 = $0; + $216 = (($215) + 54|0); + $217 = (_strcmp($216,17432)|0); + $218 = ($217|0)!=(0); + if ($218) { + label = 32; + break; + } + } + $219 = $N1; + $220 = $lf; + $221 = (_conv_init($219,$220)|0); + $222 = $0; + $223 = (($222) + 4|0); + HEAP32[$223>>2] = $221; + $224 = $0; + $225 = (($224) + 68|0); + HEAP32[$225>>2] = 1; + } else { + label = 32; + } + } while(0); + if ((label|0) == 32) { + label = 0; + $226 = $0; + $227 = HEAP32[$226>>2]|0; + $228 = (($227) + 56|0); + $229 = HEAP32[$228>>2]|0; + $230 = $0; + $231 = HEAP32[$230>>2]|0; + $232 = (($231) + 60|0); + $233 = HEAP32[$232>>2]|0; + $234 = ($229|0)==($233|0); + if (!($234)) { + label = 33; + break L1; + } + } + $235 = $0; + $236 = $cL0; + $237 = $N1; + $238 = $0; + $239 = HEAP32[$238>>2]|0; + $240 = (($239) + 80|0); + $241 = HEAP32[$240>>2]|0; + $242 = $lf; + $243 = $oup00L; + _wconv($235,$236,$237,$241,$242,$243); + $244 = $0; + $245 = $cH0; + $246 = $N1; + $247 = $0; + $248 = HEAP32[$247>>2]|0; + $249 = (($248) + 84|0); + $250 = HEAP32[$249>>2]|0; + $251 = $lf; + $252 = $oup00H; + _wconv($244,$245,$246,$250,$251,$252); + $253 = $lf; + $254 = (($253) - 1)|0; + $i = $254; + while(1) { + $255 = $i; + $256 = $len0; + $257 = $256<<1; + $258 = $lf; + $259 = (($257) + ($258))|0; + $260 = (($259) - 1)|0; + $261 = ($255|0)<($260|0); + if (!($261)) { + break; + } + $262 = $i; + $263 = $oup00L; + $264 = (($263) + ($262<<3)|0); + $265 = +HEAPF64[$264>>3]; + $266 = $i; + $267 = $oup00H; + $268 = (($267) + ($266<<3)|0); + $269 = +HEAPF64[$268>>3]; + $270 = $265 + $269; + $271 = $i; + $272 = $lf; + $273 = (($271) - ($272))|0; + $274 = (($273) + 1)|0; + $275 = $oup00; + $276 = (($275) + ($274<<3)|0); + HEAPF64[$276>>3] = $270; + $277 = $i; + $278 = (($277) + 1)|0; + $i = $278; + } + $len0 = 0; + $index_shift = 1; + while(1) { + $279 = $index_shift; + $280 = $len; + $281 = ($279|0)<($280|0); + if (!($281)) { + break; + } + $282 = $index_shift; + $283 = $appx1; + $284 = (($283) + ($282<<3)|0); + $285 = +HEAPF64[$284>>3]; + $286 = $len0; + $287 = $appx2; + $288 = (($287) + ($286<<3)|0); + HEAPF64[$288>>3] = $285; + $289 = $index_shift; + $290 = $det1; + $291 = (($290) + ($289<<3)|0); + $292 = +HEAPF64[$291>>3]; + $293 = $len0; + $294 = $det2; + $295 = (($294) + ($293<<3)|0); + HEAPF64[$295>>3] = $292; + $296 = $len0; + $297 = (($296) + 1)|0; + $len0 = $297; + $298 = $index_shift; + $299 = (($298) + 2)|0; + $index_shift = $299; + } + $300 = $appx2; + $301 = $len0; + $302 = $U; + $303 = $tempx; + (_upsamp2($300,$301,$302,$303)|0); + $304 = $tempx; + $305 = $len0; + $306 = $305<<1; + $307 = $lf; + $308 = (($307|0) / 2)&-1; + $309 = $cL0; + (_per_ext($304,$306,$308,$309)|0); + $310 = $det2; + $311 = $len0; + $312 = $U; + $313 = $tempx; + (_upsamp2($310,$311,$312,$313)|0); + $314 = $tempx; + $315 = $len0; + $316 = $315<<1; + $317 = $lf; + $318 = (($317|0) / 2)&-1; + $319 = $cH0; + (_per_ext($314,$316,$318,$319)|0); + $320 = $len0; + $321 = $320<<1; + $322 = $lf; + $323 = (($321) + ($322))|0; + $N1 = $323; + $324 = $0; + $325 = $cL0; + $326 = $N1; + $327 = $0; + $328 = HEAP32[$327>>2]|0; + $329 = (($328) + 80|0); + $330 = HEAP32[$329>>2]|0; + $331 = $lf; + $332 = $oup00L; + _wconv($324,$325,$326,$330,$331,$332); + $333 = $0; + $334 = $cH0; + $335 = $N1; + $336 = $0; + $337 = HEAP32[$336>>2]|0; + $338 = (($337) + 84|0); + $339 = HEAP32[$338>>2]|0; + $340 = $lf; + $341 = $oup00H; + _wconv($333,$334,$335,$339,$340,$341); + $342 = $lf; + $343 = (($342) - 1)|0; + $i = $343; + while(1) { + $344 = $i; + $345 = $len0; + $346 = $345<<1; + $347 = $lf; + $348 = (($346) + ($347))|0; + $349 = (($348) - 1)|0; + $350 = ($344|0)<($349|0); + if (!($350)) { + break; + } + $351 = $i; + $352 = $oup00L; + $353 = (($352) + ($351<<3)|0); + $354 = +HEAPF64[$353>>3]; + $355 = $i; + $356 = $oup00H; + $357 = (($356) + ($355<<3)|0); + $358 = +HEAPF64[$357>>3]; + $359 = $354 + $358; + $360 = $i; + $361 = $lf; + $362 = (($360) - ($361))|0; + $363 = (($362) + 1)|0; + $364 = $oup01; + $365 = (($364) + ($363<<3)|0); + HEAPF64[$365>>3] = $359; + $366 = $i; + $367 = (($366) + 1)|0; + $i = $367; + } + $368 = $oup01; + $369 = $len0; + $370 = $369<<1; + _circshift($368,$370,-1); + $index2 = 0; + $371 = $count; + $index = $371; + while(1) { + $372 = $index; + $373 = $N; + $374 = ($372|0)<($373|0); + if (!($374)) { + break; + } + $375 = $index2; + $376 = $oup00; + $377 = (($376) + ($375<<3)|0); + $378 = +HEAPF64[$377>>3]; + $379 = $index2; + $380 = $oup01; + $381 = (($380) + ($379<<3)|0); + $382 = +HEAPF64[$381>>3]; + $383 = $378 + $382; + $384 = $383 / 2.0; + $385 = $index; + $386 = $1; + $387 = (($386) + ($385<<3)|0); + HEAPF64[$387>>3] = $384; + $388 = $index2; + $389 = (($388) + 1)|0; + $index2 = $389; + $390 = $value; + $391 = $index; + $392 = (($391) + ($390))|0; + $index = $392; + } + $393 = $count; + $394 = (($393) + 1)|0; + $count = $394; + } + $i = 0; + while(1) { + $395 = $i; + $396 = $N; + $397 = ($395|0)<($396|0); + if (!($397)) { + break; + } + $398 = $i; + $399 = $1; + $400 = (($399) + ($398<<3)|0); + $401 = +HEAPF64[$400>>3]; + $402 = $i; + $403 = $appx_sig; + $404 = (($403) + ($402<<3)|0); + HEAPF64[$404>>3] = $401; + $405 = $i; + $406 = (($405) + 1)|0; + $i = $406; + } + $407 = $iter; + $408 = (($407) + 1)|0; + $iter = $408; + } + if ((label|0) == 33) { + (_printf((17488|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + else if ((label|0) == 59) { + $409 = $appx_sig; + _free($409); + $410 = $det_sig; + _free($410); + $411 = $appx1; + _free($411); + $412 = $det1; + _free($412); + $413 = $tempx; + _free($413); + $414 = $cL0; + _free($414); + $415 = $cH0; + _free($415); + $416 = $oup00L; + _free($416); + $417 = $oup00H; + _free($417); + $418 = $oup00; + _free($418); + $419 = $oup01; + _free($419); + $420 = $appx2; + _free($420); + $421 = $det2; + _free($421); + STACKTOP = sp;return; + } +} +function _modwt($wt,$inp) { + $wt = $wt|0; + $inp = $inp|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0.0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $12 = 0, $13 = 0; + var $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0; + var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0; + var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0.0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0; + var $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0; + var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0.0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $J = 0, $M = 0, $N = 0, $cA = 0, $cD = 0, $i = 0; + var $iter = 0, $len_filt = 0, $lenacc = 0, $temp_len = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $inp; + $2 = $0; + $3 = (($2) + 20|0); + $4 = HEAP32[$3>>2]|0; + $temp_len = $4; + $5 = $0; + $6 = (($5) + 32|0); + $7 = HEAP32[$6>>2]|0; + $J = $7; + $8 = $temp_len; + $9 = $J; + $10 = $0; + $11 = (($10) + 76|0); + $12 = (($11) + ($9<<2)|0); + HEAP32[$12>>2] = $8; + $13 = $0; + $14 = (($13) + 76|0); + HEAP32[$14>>2] = $8; + $15 = $J; + $16 = (($15) + 1)|0; + $17 = $temp_len; + $18 = Math_imul($16, $17)|0; + $19 = $J; + $20 = (($19) + 1)|0; + $21 = $0; + $22 = (($21) + 76|0); + $23 = (($22) + ($20<<2)|0); + HEAP32[$23>>2] = $18; + $24 = $0; + $25 = (($24) + 24|0); + HEAP32[$25>>2] = $18; + $26 = $0; + $27 = HEAP32[$26>>2]|0; + $28 = (($27) + 52|0); + $29 = HEAP32[$28>>2]|0; + $len_filt = $29; + $M = 1; + $iter = 1; + while(1) { + $30 = $iter; + $31 = $J; + $32 = ($30|0)<($31|0); + if (!($32)) { + break; + } + $33 = $M; + $34 = $33<<1; + $M = $34; + $35 = $temp_len; + $36 = $iter; + $37 = $0; + $38 = (($37) + 76|0); + $39 = (($38) + ($36<<2)|0); + HEAP32[$39>>2] = $35; + $40 = $iter; + $41 = (($40) + 1)|0; + $iter = $41; + } + $42 = $temp_len; + $43 = $42<<3; + $44 = (_malloc($43)|0); + $cA = $44; + $45 = $temp_len; + $46 = $45<<3; + $47 = (_malloc($46)|0); + $cD = $47; + $M = 1; + $i = 0; + while(1) { + $48 = $i; + $49 = $temp_len; + $50 = ($48|0)<($49|0); + if (!($50)) { + break; + } + $51 = $i; + $52 = $1; + $53 = (($52) + ($51<<3)|0); + $54 = +HEAPF64[$53>>3]; + $55 = $i; + $56 = $0; + $57 = (($56) + 488|0); + $58 = (($57) + ($55<<3)|0); + HEAPF64[$58>>3] = $54; + $59 = $i; + $60 = (($59) + 1)|0; + $i = $60; + } + $61 = $0; + $62 = (($61) + 24|0); + $63 = HEAP32[$62>>2]|0; + $lenacc = $63; + $iter = 0; + while(1) { + $64 = $iter; + $65 = $J; + $66 = ($64|0)<($65|0); + if (!($66)) { + break; + } + $67 = $temp_len; + $68 = $lenacc; + $69 = (($68) - ($67))|0; + $lenacc = $69; + $70 = $iter; + $71 = ($70|0)>(0); + if ($71) { + $72 = $M; + $73 = $72<<1; + $M = $73; + $74 = $M; + $75 = $len_filt; + $76 = Math_imul($74, $75)|0; + $N = $76; + } else { + $77 = $len_filt; + $N = $77; + } + $78 = $0; + $79 = $M; + $80 = $0; + $81 = (($80) + 488|0); + $82 = $temp_len; + $83 = $cA; + $84 = $temp_len; + $85 = $cD; + $86 = $temp_len; + _modwt_per($78,$79,$81,$82,$83,$84,$85,$86); + $i = 0; + while(1) { + $87 = $i; + $88 = $temp_len; + $89 = ($87|0)<($88|0); + if (!($89)) { + break; + } + $90 = $i; + $91 = $cA; + $92 = (($91) + ($90<<3)|0); + $93 = +HEAPF64[$92>>3]; + $94 = $i; + $95 = $0; + $96 = (($95) + 488|0); + $97 = (($96) + ($94<<3)|0); + HEAPF64[$97>>3] = $93; + $98 = $i; + $99 = $cD; + $100 = (($99) + ($98<<3)|0); + $101 = +HEAPF64[$100>>3]; + $102 = $lenacc; + $103 = $i; + $104 = (($102) + ($103))|0; + $105 = $0; + $106 = (($105) + 488|0); + $107 = (($106) + ($104<<3)|0); + HEAPF64[$107>>3] = $101; + $108 = $i; + $109 = (($108) + 1)|0; + $i = $109; + } + $110 = $iter; + $111 = (($110) + 1)|0; + $iter = $111; + } + $112 = $cA; + _free($112); + $113 = $cD; + _free($113); + STACKTOP = sp;return; +} +function _modwt_per($wt,$M,$inp,$N,$cA,$len_cA,$cD,$len_cD) { + $wt = $wt|0; + $M = $M|0; + $inp = $inp|0; + $N = $N|0; + $cA = $cA|0; + $len_cA = $len_cA|0; + $cD = $cD|0; + $len_cD = $len_cD|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0.0, $103 = 0.0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0.0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0.0, $114 = 0.0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0.0, $119 = 0.0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $13 = 0, $14 = 0, $15 = 0.0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0; + var $22 = 0, $23 = 0, $24 = 0, $25 = 0.0, $26 = 0.0, $27 = 0.0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0.0, $38 = 0.0, $39 = 0.0, $4 = 0; + var $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0.0, $53 = 0, $54 = 0, $55 = 0, $56 = 0.0, $57 = 0.0, $58 = 0; + var $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0.0, $65 = 0, $66 = 0, $67 = 0, $68 = 0.0, $69 = 0.0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0; + var $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0.0, $94 = 0; + var $95 = 0, $96 = 0, $97 = 0.0, $98 = 0.0, $99 = 0, $filt = 0, $i = 0, $l = 0, $len_avg = 0, $s = 0.0, $t = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $M; + $2 = $inp; + $3 = $N; + $4 = $cA; + $5 = $len_cA; + $6 = $cD; + $7 = $len_cD; + $8 = $0; + $9 = HEAP32[$8>>2]|0; + $10 = (($9) + 56|0); + $11 = HEAP32[$10>>2]|0; + $len_avg = $11; + $12 = $len_avg; + $13 = $12<<4; + $14 = (_malloc($13)|0); + $filt = $14; + $15 = (+Math_sqrt(2.0)); + $s = $15; + $i = 0; + while(1) { + $16 = $i; + $17 = $len_avg; + $18 = ($16|0)<($17|0); + if (!($18)) { + break; + } + $19 = $i; + $20 = $0; + $21 = HEAP32[$20>>2]|0; + $22 = (($21) + 72|0); + $23 = HEAP32[$22>>2]|0; + $24 = (($23) + ($19<<3)|0); + $25 = +HEAPF64[$24>>3]; + $26 = $s; + $27 = $25 / $26; + $28 = $i; + $29 = $filt; + $30 = (($29) + ($28<<3)|0); + HEAPF64[$30>>3] = $27; + $31 = $i; + $32 = $0; + $33 = HEAP32[$32>>2]|0; + $34 = (($33) + 76|0); + $35 = HEAP32[$34>>2]|0; + $36 = (($35) + ($31<<3)|0); + $37 = +HEAPF64[$36>>3]; + $38 = $s; + $39 = $37 / $38; + $40 = $len_avg; + $41 = $i; + $42 = (($40) + ($41))|0; + $43 = $filt; + $44 = (($43) + ($42<<3)|0); + HEAPF64[$44>>3] = $39; + $45 = $i; + $46 = (($45) + 1)|0; + $i = $46; + } + $i = 0; + while(1) { + $47 = $i; + $48 = $5; + $49 = ($47|0)<($48|0); + if (!($49)) { + break; + } + $50 = $i; + $t = $50; + $51 = $filt; + $52 = +HEAPF64[$51>>3]; + $53 = $t; + $54 = $2; + $55 = (($54) + ($53<<3)|0); + $56 = +HEAPF64[$55>>3]; + $57 = $52 * $56; + $58 = $i; + $59 = $4; + $60 = (($59) + ($58<<3)|0); + HEAPF64[$60>>3] = $57; + $61 = $len_avg; + $62 = $filt; + $63 = (($62) + ($61<<3)|0); + $64 = +HEAPF64[$63>>3]; + $65 = $t; + $66 = $2; + $67 = (($66) + ($65<<3)|0); + $68 = +HEAPF64[$67>>3]; + $69 = $64 * $68; + $70 = $i; + $71 = $6; + $72 = (($71) + ($70<<3)|0); + HEAPF64[$72>>3] = $69; + $l = 1; + while(1) { + $73 = $l; + $74 = $len_avg; + $75 = ($73|0)<($74|0); + if (!($75)) { + break; + } + $76 = $1; + $77 = $t; + $78 = (($77) - ($76))|0; + $t = $78; + while(1) { + $79 = $t; + $80 = $5; + $81 = ($79|0)>=($80|0); + if (!($81)) { + break; + } + $82 = $5; + $83 = $t; + $84 = (($83) - ($82))|0; + $t = $84; + } + while(1) { + $85 = $t; + $86 = ($85|0)<(0); + if (!($86)) { + break; + } + $87 = $5; + $88 = $t; + $89 = (($88) + ($87))|0; + $t = $89; + } + $90 = $l; + $91 = $filt; + $92 = (($91) + ($90<<3)|0); + $93 = +HEAPF64[$92>>3]; + $94 = $t; + $95 = $2; + $96 = (($95) + ($94<<3)|0); + $97 = +HEAPF64[$96>>3]; + $98 = $93 * $97; + $99 = $i; + $100 = $4; + $101 = (($100) + ($99<<3)|0); + $102 = +HEAPF64[$101>>3]; + $103 = $102 + $98; + HEAPF64[$101>>3] = $103; + $104 = $len_avg; + $105 = $l; + $106 = (($104) + ($105))|0; + $107 = $filt; + $108 = (($107) + ($106<<3)|0); + $109 = +HEAPF64[$108>>3]; + $110 = $t; + $111 = $2; + $112 = (($111) + ($110<<3)|0); + $113 = +HEAPF64[$112>>3]; + $114 = $109 * $113; + $115 = $i; + $116 = $6; + $117 = (($116) + ($115<<3)|0); + $118 = +HEAPF64[$117>>3]; + $119 = $118 + $114; + HEAPF64[$117>>3] = $119; + $120 = $l; + $121 = (($120) + 1)|0; + $l = $121; + } + $122 = $i; + $123 = (($122) + 1)|0; + $i = $123; + } + $124 = $filt; + _free($124); + STACKTOP = sp;return; +} +function _imodwt($wt,$dwtop) { + $wt = $wt|0; + $dwtop = $dwtop|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0.0, $15 = 0.0, $16 = 0.0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0.0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0.0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $8 = 0, $9 = 0, $J = 0, $M = 0, $N = 0, $U = 0, $X = 0, $i = 0, $iter = 0, $j = 0, $lenacc = 0, $lf = 0; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $dwtop; + $2 = $0; + $3 = (($2) + 20|0); + $4 = HEAP32[$3>>2]|0; + $N = $4; + $5 = $0; + $6 = (($5) + 32|0); + $7 = HEAP32[$6>>2]|0; + $J = $7; + $U = 2; + $8 = $0; + $9 = HEAP32[$8>>2]|0; + $10 = (($9) + 64|0); + $11 = HEAP32[$10>>2]|0; + $lf = $11; + $12 = $N; + $lenacc = $12; + $13 = $J; + $14 = (+($13|0)); + $15 = $14 - 1.0; + $16 = (+Math_pow(2.0,(+$15))); + $17 = (~~(($16))); + $M = $17; + $18 = $N; + $19 = $18<<3; + $20 = (_malloc($19)|0); + $X = $20; + $i = 0; + while(1) { + $21 = $i; + $22 = $N; + $23 = ($21|0)<($22|0); + if (!($23)) { + break; + } + $24 = $i; + $25 = $0; + $26 = (($25) + 484|0); + $27 = HEAP32[$26>>2]|0; + $28 = (($27) + ($24<<3)|0); + $29 = +HEAPF64[$28>>3]; + $30 = $i; + $31 = $1; + $32 = (($31) + ($30<<3)|0); + HEAPF64[$32>>3] = $29; + $33 = $i; + $34 = (($33) + 1)|0; + $i = $34; + } + $iter = 0; + while(1) { + $35 = $iter; + $36 = $J; + $37 = ($35|0)<($36|0); + if (!($37)) { + break; + } + $38 = $iter; + $39 = ($38|0)>(0); + if ($39) { + $40 = $M; + $41 = (($40|0) / 2)&-1; + $M = $41; + } + $42 = $0; + $43 = $M; + $44 = $1; + $45 = $N; + $46 = $0; + $47 = (($46) + 488|0); + $48 = $lenacc; + $49 = (($47) + ($48<<3)|0); + $50 = $N; + $51 = $X; + _imodwt_per($42,$43,$44,$45,$49,$50,$51); + $j = 0; + while(1) { + $52 = $j; + $53 = $N; + $54 = ($52|0)<($53|0); + if (!($54)) { + break; + } + $55 = $j; + $56 = $X; + $57 = (($56) + ($55<<3)|0); + $58 = +HEAPF64[$57>>3]; + $59 = $j; + $60 = $1; + $61 = (($60) + ($59<<3)|0); + HEAPF64[$61>>3] = $58; + $62 = $j; + $63 = (($62) + 1)|0; + $j = $63; + } + $64 = $N; + $65 = $lenacc; + $66 = (($65) + ($64))|0; + $lenacc = $66; + $67 = $iter; + $68 = (($67) + 1)|0; + $iter = $68; + } + $69 = $X; + _free($69); + STACKTOP = sp;return; +} +function _imodwt_per($wt,$M,$cA,$len_cA,$cD,$len_cD,$X) { + $wt = $wt|0; + $M = $M|0; + $cA = $cA|0; + $len_cA = $len_cA|0; + $cD = $cD|0; + $len_cD = $len_cD|0; + $X = $X|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0.0, $102 = 0, $103 = 0, $104 = 0, $105 = 0.0, $106 = 0.0, $107 = 0.0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0.0, $112 = 0.0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $12 = 0, $13 = 0, $14 = 0.0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0.0, $25 = 0.0, $26 = 0.0, $27 = 0, $28 = 0; + var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0.0, $37 = 0.0, $38 = 0.0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0; + var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0.0, $52 = 0, $53 = 0, $54 = 0, $55 = 0.0, $56 = 0.0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0.0, $61 = 0, $62 = 0, $63 = 0, $64 = 0.0; + var $65 = 0.0, $66 = 0.0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0; + var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0.0, $91 = 0, $92 = 0, $93 = 0, $94 = 0.0, $95 = 0.0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $filt = 0, $i = 0; + var $l = 0, $len_avg = 0, $s = 0.0, $t = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $M; + $2 = $cA; + $3 = $len_cA; + $4 = $cD; + $5 = $len_cD; + $6 = $X; + $7 = $0; + $8 = HEAP32[$7>>2]|0; + $9 = (($8) + 56|0); + $10 = HEAP32[$9>>2]|0; + $len_avg = $10; + $11 = $len_avg; + $12 = $11<<4; + $13 = (_malloc($12)|0); + $filt = $13; + $14 = (+Math_sqrt(2.0)); + $s = $14; + $i = 0; + while(1) { + $15 = $i; + $16 = $len_avg; + $17 = ($15|0)<($16|0); + if (!($17)) { + break; + } + $18 = $i; + $19 = $0; + $20 = HEAP32[$19>>2]|0; + $21 = (($20) + 72|0); + $22 = HEAP32[$21>>2]|0; + $23 = (($22) + ($18<<3)|0); + $24 = +HEAPF64[$23>>3]; + $25 = $s; + $26 = $24 / $25; + $27 = $i; + $28 = $filt; + $29 = (($28) + ($27<<3)|0); + HEAPF64[$29>>3] = $26; + $30 = $i; + $31 = $0; + $32 = HEAP32[$31>>2]|0; + $33 = (($32) + 76|0); + $34 = HEAP32[$33>>2]|0; + $35 = (($34) + ($30<<3)|0); + $36 = +HEAPF64[$35>>3]; + $37 = $s; + $38 = $36 / $37; + $39 = $len_avg; + $40 = $i; + $41 = (($39) + ($40))|0; + $42 = $filt; + $43 = (($42) + ($41<<3)|0); + HEAPF64[$43>>3] = $38; + $44 = $i; + $45 = (($44) + 1)|0; + $i = $45; + } + $i = 0; + while(1) { + $46 = $i; + $47 = $3; + $48 = ($46|0)<($47|0); + if (!($48)) { + break; + } + $49 = $i; + $t = $49; + $50 = $filt; + $51 = +HEAPF64[$50>>3]; + $52 = $t; + $53 = $2; + $54 = (($53) + ($52<<3)|0); + $55 = +HEAPF64[$54>>3]; + $56 = $51 * $55; + $57 = $len_avg; + $58 = $filt; + $59 = (($58) + ($57<<3)|0); + $60 = +HEAPF64[$59>>3]; + $61 = $t; + $62 = $4; + $63 = (($62) + ($61<<3)|0); + $64 = +HEAPF64[$63>>3]; + $65 = $60 * $64; + $66 = $56 + $65; + $67 = $i; + $68 = $6; + $69 = (($68) + ($67<<3)|0); + HEAPF64[$69>>3] = $66; + $l = 1; + while(1) { + $70 = $l; + $71 = $len_avg; + $72 = ($70|0)<($71|0); + if (!($72)) { + break; + } + $73 = $1; + $74 = $t; + $75 = (($74) + ($73))|0; + $t = $75; + while(1) { + $76 = $t; + $77 = $3; + $78 = ($76|0)>=($77|0); + if (!($78)) { + break; + } + $79 = $3; + $80 = $t; + $81 = (($80) - ($79))|0; + $t = $81; + } + while(1) { + $82 = $t; + $83 = ($82|0)<(0); + if (!($83)) { + break; + } + $84 = $3; + $85 = $t; + $86 = (($85) + ($84))|0; + $t = $86; + } + $87 = $l; + $88 = $filt; + $89 = (($88) + ($87<<3)|0); + $90 = +HEAPF64[$89>>3]; + $91 = $t; + $92 = $2; + $93 = (($92) + ($91<<3)|0); + $94 = +HEAPF64[$93>>3]; + $95 = $90 * $94; + $96 = $len_avg; + $97 = $l; + $98 = (($96) + ($97))|0; + $99 = $filt; + $100 = (($99) + ($98<<3)|0); + $101 = +HEAPF64[$100>>3]; + $102 = $t; + $103 = $4; + $104 = (($103) + ($102<<3)|0); + $105 = +HEAPF64[$104>>3]; + $106 = $101 * $105; + $107 = $95 + $106; + $108 = $i; + $109 = $6; + $110 = (($109) + ($108<<3)|0); + $111 = +HEAPF64[$110>>3]; + $112 = $111 + $107; + HEAPF64[$110>>3] = $112; + $113 = $l; + $114 = (($113) + 1)|0; + $l = $114; + } + $115 = $i; + $116 = (($115) + 1)|0; + $i = $116; + } + $117 = $filt; + _free($117); + STACKTOP = sp;return; +} +function _setDWTExtension($wt,$extension) { + $wt = $wt|0; + $extension = $extension|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $0 = $wt; + $1 = $extension; + $2 = $1; + $3 = (_strcmp($2,17184)|0); + $4 = ($3|0)!=(0); + if (!($4)) { + $5 = $0; + $6 = (($5) + 44|0); + (_strcpy(($6|0),(17184|0))|0); + STACKTOP = sp;return; + } + $7 = $1; + $8 = (_strcmp($7,17288)|0); + $9 = ($8|0)!=(0); + if ($9) { + (_printf((17440|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + $10 = $0; + $11 = (($10) + 44|0); + (_strcpy(($11|0),(17288|0))|0); + STACKTOP = sp;return; +} +function _wave_free($object) { + $object = $object|0; + var $0 = 0, $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $object; + $1 = $0; + _free($1); + STACKTOP = sp;return; +} +function _wt_free($object) { + $object = $object|0; + var $0 = 0, $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $object; + $1 = $0; + _free($1); + STACKTOP = sp;return; +} +function _swt_per($wt,$M,$inp,$N,$cA,$len_cA,$cD,$len_cD) { + $wt = $wt|0; + $M = $M|0; + $inp = $inp|0; + $N = $N|0; + $cA = $cA|0; + $len_cA = $len_cA|0; + $cD = $cD|0; + $len_cD = $len_cD|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0.0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0.0, $111 = 0.0, $112 = 0, $113 = 0, $114 = 0, $115 = 0.0; + var $116 = 0.0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0.0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0.0, $13 = 0, $130 = 0.0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0.0, $135 = 0.0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0.0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0.0, $155 = 0.0, $156 = 0, $157 = 0, $158 = 0, $159 = 0.0, $16 = 0, $160 = 0.0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0.0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0.0, $176 = 0.0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0.0, $181 = 0.0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0.0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0.0, $204 = 0.0, $205 = 0; + var $206 = 0, $207 = 0, $208 = 0.0, $209 = 0.0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0.0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; + var $224 = 0.0, $225 = 0.0, $226 = 0, $227 = 0, $228 = 0, $229 = 0.0, $23 = 0, $230 = 0.0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; + var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0.0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0.0, $259 = 0.0, $26 = 0; + var $260 = 0, $261 = 0, $262 = 0, $263 = 0.0, $264 = 0.0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0.0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0; + var $279 = 0, $28 = 0, $280 = 0.0, $281 = 0.0, $282 = 0, $283 = 0, $284 = 0, $285 = 0.0, $286 = 0.0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0.0, $294 = 0, $295 = 0, $296 = 0; + var $297 = 0, $298 = 0.0, $299 = 0.0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0.0, $304 = 0.0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0.0, $312 = 0, $313 = 0; + var $314 = 0, $315 = 0, $316 = 0.0, $317 = 0.0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0.0, $322 = 0.0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0; + var $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0; + var $56 = 0, $57 = 0.0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0.0, $64 = 0.0, $65 = 0, $66 = 0, $67 = 0, $68 = 0.0, $69 = 0.0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0; + var $74 = 0, $75 = 0, $76 = 0.0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0.0, $83 = 0.0, $84 = 0, $85 = 0, $86 = 0, $87 = 0.0, $88 = 0.0, $89 = 0, $9 = 0, $90 = 0, $91 = 0; + var $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $i = 0, $isodd = 0, $j = 0, $l = 0, $l2 = 0, $len_avg = 0, $t = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $M; + $2 = $inp; + $3 = $N; + $4 = $cA; + $5 = $len_cA; + $6 = $cD; + $7 = $len_cD; + $8 = $1; + $9 = $0; + $10 = HEAP32[$9>>2]|0; + $11 = (($10) + 56|0); + $12 = HEAP32[$11>>2]|0; + $13 = Math_imul($8, $12)|0; + $len_avg = $13; + $14 = $len_avg; + $15 = (($14|0) / 2)&-1; + $l2 = $15; + $16 = $3; + $17 = (($16|0) % 2)&-1; + $isodd = $17; + $i = 0; + while(1) { + $18 = $i; + $19 = $5; + $20 = ($18|0)<($19|0); + if (!($20)) { + break; + } + $21 = $i; + $22 = $l2; + $23 = (($21) + ($22))|0; + $t = $23; + $24 = $i; + $25 = $4; + $26 = (($25) + ($24<<3)|0); + HEAPF64[$26>>3] = 0.0; + $27 = $i; + $28 = $6; + $29 = (($28) + ($27<<3)|0); + HEAPF64[$29>>3] = 0.0; + $l = -1; + $j = 0; + while(1) { + $30 = $j; + $31 = $len_avg; + $32 = ($30|0)<($31|0); + if (!($32)) { + break; + } + $33 = $l; + $34 = (($33) + 1)|0; + $l = $34; + while(1) { + $35 = $j; + $36 = $5; + $37 = ($35|0)>=($36|0); + if (!($37)) { + break; + } + $38 = $5; + $39 = $j; + $40 = (($39) - ($38))|0; + $j = $40; + } + $41 = $t; + $42 = $j; + $43 = (($41) - ($42))|0; + $44 = $l2; + $45 = ($43|0)>=($44|0); + if ($45) { + $46 = $t; + $47 = $j; + $48 = (($46) - ($47))|0; + $49 = $3; + $50 = ($48|0)<($49|0); + if ($50) { + $51 = $l; + $52 = $0; + $53 = HEAP32[$52>>2]|0; + $54 = (($53) + 72|0); + $55 = HEAP32[$54>>2]|0; + $56 = (($55) + ($51<<3)|0); + $57 = +HEAPF64[$56>>3]; + $58 = $t; + $59 = $j; + $60 = (($58) - ($59))|0; + $61 = $2; + $62 = (($61) + ($60<<3)|0); + $63 = +HEAPF64[$62>>3]; + $64 = $57 * $63; + $65 = $i; + $66 = $4; + $67 = (($66) + ($65<<3)|0); + $68 = +HEAPF64[$67>>3]; + $69 = $68 + $64; + HEAPF64[$67>>3] = $69; + $70 = $l; + $71 = $0; + $72 = HEAP32[$71>>2]|0; + $73 = (($72) + 76|0); + $74 = HEAP32[$73>>2]|0; + $75 = (($74) + ($70<<3)|0); + $76 = +HEAPF64[$75>>3]; + $77 = $t; + $78 = $j; + $79 = (($77) - ($78))|0; + $80 = $2; + $81 = (($80) + ($79<<3)|0); + $82 = +HEAPF64[$81>>3]; + $83 = $76 * $82; + $84 = $i; + $85 = $6; + $86 = (($85) + ($84<<3)|0); + $87 = +HEAPF64[$86>>3]; + $88 = $87 + $83; + HEAPF64[$86>>3] = $88; + } else { + label = 11; + } + } else { + label = 11; + } + if ((label|0) == 11) { + label = 0; + $89 = $t; + $90 = $j; + $91 = (($89) - ($90))|0; + $92 = $l2; + $93 = ($91|0)<($92|0); + if ($93) { + $94 = $t; + $95 = $j; + $96 = (($94) - ($95))|0; + $97 = ($96|0)>=(0); + if ($97) { + $98 = $l; + $99 = $0; + $100 = HEAP32[$99>>2]|0; + $101 = (($100) + 72|0); + $102 = HEAP32[$101>>2]|0; + $103 = (($102) + ($98<<3)|0); + $104 = +HEAPF64[$103>>3]; + $105 = $t; + $106 = $j; + $107 = (($105) - ($106))|0; + $108 = $2; + $109 = (($108) + ($107<<3)|0); + $110 = +HEAPF64[$109>>3]; + $111 = $104 * $110; + $112 = $i; + $113 = $4; + $114 = (($113) + ($112<<3)|0); + $115 = +HEAPF64[$114>>3]; + $116 = $115 + $111; + HEAPF64[$114>>3] = $116; + $117 = $l; + $118 = $0; + $119 = HEAP32[$118>>2]|0; + $120 = (($119) + 76|0); + $121 = HEAP32[$120>>2]|0; + $122 = (($121) + ($117<<3)|0); + $123 = +HEAPF64[$122>>3]; + $124 = $t; + $125 = $j; + $126 = (($124) - ($125))|0; + $127 = $2; + $128 = (($127) + ($126<<3)|0); + $129 = +HEAPF64[$128>>3]; + $130 = $123 * $129; + $131 = $i; + $132 = $6; + $133 = (($132) + ($131<<3)|0); + $134 = +HEAPF64[$133>>3]; + $135 = $134 + $130; + HEAPF64[$133>>3] = $135; + } else { + label = 14; + } + } else { + label = 14; + } + if ((label|0) == 14) { + label = 0; + $136 = $t; + $137 = $j; + $138 = (($136) - ($137))|0; + $139 = ($138|0)<(0); + if ($139) { + $140 = $l; + $141 = $0; + $142 = HEAP32[$141>>2]|0; + $143 = (($142) + 72|0); + $144 = HEAP32[$143>>2]|0; + $145 = (($144) + ($140<<3)|0); + $146 = +HEAPF64[$145>>3]; + $147 = $t; + $148 = $j; + $149 = (($147) - ($148))|0; + $150 = $3; + $151 = (($149) + ($150))|0; + $152 = $2; + $153 = (($152) + ($151<<3)|0); + $154 = +HEAPF64[$153>>3]; + $155 = $146 * $154; + $156 = $i; + $157 = $4; + $158 = (($157) + ($156<<3)|0); + $159 = +HEAPF64[$158>>3]; + $160 = $159 + $155; + HEAPF64[$158>>3] = $160; + $161 = $l; + $162 = $0; + $163 = HEAP32[$162>>2]|0; + $164 = (($163) + 76|0); + $165 = HEAP32[$164>>2]|0; + $166 = (($165) + ($161<<3)|0); + $167 = +HEAPF64[$166>>3]; + $168 = $t; + $169 = $j; + $170 = (($168) - ($169))|0; + $171 = $3; + $172 = (($170) + ($171))|0; + $173 = $2; + $174 = (($173) + ($172<<3)|0); + $175 = +HEAPF64[$174>>3]; + $176 = $167 * $175; + $177 = $i; + $178 = $6; + $179 = (($178) + ($177<<3)|0); + $180 = +HEAPF64[$179>>3]; + $181 = $180 + $176; + HEAPF64[$179>>3] = $181; + } else { + $182 = $t; + $183 = $j; + $184 = (($182) - ($183))|0; + $185 = $3; + $186 = ($184|0)>=($185|0); + if ($186) { + $187 = $isodd; + $188 = ($187|0)==(0); + if ($188) { + $189 = $l; + $190 = $0; + $191 = HEAP32[$190>>2]|0; + $192 = (($191) + 72|0); + $193 = HEAP32[$192>>2]|0; + $194 = (($193) + ($189<<3)|0); + $195 = +HEAPF64[$194>>3]; + $196 = $t; + $197 = $j; + $198 = (($196) - ($197))|0; + $199 = $3; + $200 = (($198) - ($199))|0; + $201 = $2; + $202 = (($201) + ($200<<3)|0); + $203 = +HEAPF64[$202>>3]; + $204 = $195 * $203; + $205 = $i; + $206 = $4; + $207 = (($206) + ($205<<3)|0); + $208 = +HEAPF64[$207>>3]; + $209 = $208 + $204; + HEAPF64[$207>>3] = $209; + $210 = $l; + $211 = $0; + $212 = HEAP32[$211>>2]|0; + $213 = (($212) + 76|0); + $214 = HEAP32[$213>>2]|0; + $215 = (($214) + ($210<<3)|0); + $216 = +HEAPF64[$215>>3]; + $217 = $t; + $218 = $j; + $219 = (($217) - ($218))|0; + $220 = $3; + $221 = (($219) - ($220))|0; + $222 = $2; + $223 = (($222) + ($221<<3)|0); + $224 = +HEAPF64[$223>>3]; + $225 = $216 * $224; + $226 = $i; + $227 = $6; + $228 = (($227) + ($226<<3)|0); + $229 = +HEAPF64[$228>>3]; + $230 = $229 + $225; + HEAPF64[$228>>3] = $230; + } else { + label = 19; + } + } else { + label = 19; + } + if ((label|0) == 19) { + label = 0; + $231 = $t; + $232 = $j; + $233 = (($231) - ($232))|0; + $234 = $3; + $235 = ($233|0)>=($234|0); + if ($235) { + $236 = $isodd; + $237 = ($236|0)==(1); + if ($237) { + $238 = $t; + $239 = $l; + $240 = (($238) - ($239))|0; + $241 = $3; + $242 = ($240|0)!=($241|0); + if ($242) { + $243 = $l; + $244 = $0; + $245 = HEAP32[$244>>2]|0; + $246 = (($245) + 72|0); + $247 = HEAP32[$246>>2]|0; + $248 = (($247) + ($243<<3)|0); + $249 = +HEAPF64[$248>>3]; + $250 = $t; + $251 = $j; + $252 = (($250) - ($251))|0; + $253 = $3; + $254 = (($253) + 1)|0; + $255 = (($252) - ($254))|0; + $256 = $2; + $257 = (($256) + ($255<<3)|0); + $258 = +HEAPF64[$257>>3]; + $259 = $249 * $258; + $260 = $i; + $261 = $4; + $262 = (($261) + ($260<<3)|0); + $263 = +HEAPF64[$262>>3]; + $264 = $263 + $259; + HEAPF64[$262>>3] = $264; + $265 = $l; + $266 = $0; + $267 = HEAP32[$266>>2]|0; + $268 = (($267) + 76|0); + $269 = HEAP32[$268>>2]|0; + $270 = (($269) + ($265<<3)|0); + $271 = +HEAPF64[$270>>3]; + $272 = $t; + $273 = $j; + $274 = (($272) - ($273))|0; + $275 = $3; + $276 = (($275) + 1)|0; + $277 = (($274) - ($276))|0; + $278 = $2; + $279 = (($278) + ($277<<3)|0); + $280 = +HEAPF64[$279>>3]; + $281 = $271 * $280; + $282 = $i; + $283 = $6; + $284 = (($283) + ($282<<3)|0); + $285 = +HEAPF64[$284>>3]; + $286 = $285 + $281; + HEAPF64[$284>>3] = $286; + } else { + $287 = $l; + $288 = $0; + $289 = HEAP32[$288>>2]|0; + $290 = (($289) + 72|0); + $291 = HEAP32[$290>>2]|0; + $292 = (($291) + ($287<<3)|0); + $293 = +HEAPF64[$292>>3]; + $294 = $3; + $295 = (($294) - 1)|0; + $296 = $2; + $297 = (($296) + ($295<<3)|0); + $298 = +HEAPF64[$297>>3]; + $299 = $293 * $298; + $300 = $i; + $301 = $4; + $302 = (($301) + ($300<<3)|0); + $303 = +HEAPF64[$302>>3]; + $304 = $303 + $299; + HEAPF64[$302>>3] = $304; + $305 = $l; + $306 = $0; + $307 = HEAP32[$306>>2]|0; + $308 = (($307) + 76|0); + $309 = HEAP32[$308>>2]|0; + $310 = (($309) + ($305<<3)|0); + $311 = +HEAPF64[$310>>3]; + $312 = $3; + $313 = (($312) - 1)|0; + $314 = $2; + $315 = (($314) + ($313<<3)|0); + $316 = +HEAPF64[$315>>3]; + $317 = $311 * $316; + $318 = $i; + $319 = $6; + $320 = (($319) + ($318<<3)|0); + $321 = +HEAPF64[$320>>3]; + $322 = $321 + $317; + HEAPF64[$320>>3] = $322; + } + } + } + } + } + } + } + $323 = $1; + $324 = $j; + $325 = (($324) + ($323))|0; + $j = $325; + } + $326 = $i; + $327 = (($326) + 1)|0; + $i = $327; + } + STACKTOP = sp;return; +} +function _wtoutputlength($N,$method,$lp,$J,$ext) { + $N = $N|0; + $method = $method|0; + $lp = $lp|0; + $J = $J|0; + $ext = $ext|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0.0, $19 = 0.0, $2 = 0, $20 = 0.0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0.0, $42 = 0.0, $43 = 0.0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $8 = 0, $9 = 0, $M = 0, $i = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $N; + $1 = $method; + $2 = $lp; + $3 = $J; + $4 = $ext; + $M = 0; + $5 = $1; + $6 = (_strcmp($5,17648)|0); + $7 = ($6|0)!=(0); + if ($7) { + $8 = $1; + $9 = (_strcmp($8,17656)|0); + $10 = ($9|0)!=(0); + if ($10) { + $53 = $1; + $54 = (_strcmp($53,17680)|0); + $55 = ($54|0)!=(0); + if ($55) { + $56 = $1; + $57 = (_strcmp($56,17688)|0); + $58 = ($57|0)!=(0); + if ($58) { + $63 = $1; + $64 = (_strcmp($63,17696)|0); + $65 = ($64|0)!=(0); + if ($65) { + $66 = $1; + $67 = (_strcmp($66,17704)|0); + $68 = ($67|0)!=(0); + if (!($68)) { + label = 20; + } + } else { + label = 20; + } + if ((label|0) == 20) { + $69 = $3; + $70 = (($69) + 1)|0; + $71 = $0; + $72 = Math_imul($70, $71)|0; + $M = $72; + } + } else { + label = 17; + } + } else { + label = 17; + } + if ((label|0) == 17) { + $59 = $3; + $60 = (($59) + 1)|0; + $61 = $0; + $62 = Math_imul($60, $61)|0; + $M = $62; + } + $73 = $M; + STACKTOP = sp;return ($73|0); + } + } + $11 = $4; + $12 = (_strcmp($11,17664)|0); + $13 = ($12|0)!=(0); + if ($13) { + $30 = $4; + $31 = (_strcmp($30,17672)|0); + $32 = ($31|0)!=(0); + if (!($32)) { + $33 = $3; + $i = $33; + while(1) { + $34 = $i; + $35 = ($34|0)>(0); + if (!($35)) { + break; + } + $36 = $0; + $37 = $2; + $38 = (($36) + ($37))|0; + $39 = (($38) - 2)|0; + $0 = $39; + $40 = $0; + $41 = (+($40|0)); + $42 = $41 / 2.0; + $43 = (+Math_ceil((+$42))); + $44 = (~~(($43))); + $0 = $44; + $45 = $0; + $46 = $M; + $47 = (($46) + ($45))|0; + $M = $47; + $48 = $i; + $49 = (($48) + -1)|0; + $i = $49; + } + $50 = $0; + $51 = $M; + $52 = (($51) + ($50))|0; + $M = $52; + } + } else { + $14 = $3; + $i = $14; + while(1) { + $15 = $i; + $16 = ($15|0)>(0); + if (!($16)) { + break; + } + $17 = $0; + $18 = (+($17|0)); + $19 = $18 / 2.0; + $20 = (+Math_ceil((+$19))); + $21 = (~~(($20))); + $0 = $21; + $22 = $0; + $23 = $M; + $24 = (($23) + ($22))|0; + $M = $24; + $25 = $i; + $26 = (($25) + -1)|0; + $i = $26; + } + $27 = $0; + $28 = $M; + $29 = (($28) + ($27))|0; + $M = $29; + } + $73 = $M; + STACKTOP = sp;return ($73|0); +} +function _wave_transform($inp,$N,$wname,$method,$J,$ext,$out,$length,$lenlength,$filters,$filtlength) { + $inp = $inp|0; + $N = $N|0; + $wname = $wname|0; + $method = $method|0; + $J = $J|0; + $ext = $ext|0; + $out = $out|0; + $length = $length|0; + $lenlength = $lenlength|0; + $filters = $filters|0; + $filtlength = $filtlength|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0.0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0.0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0.0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0.0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0.0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0; + var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0; + var $i = 0, $obj = 0, $wt = 0, $zpad = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $inp; + $1 = $N; + $2 = $wname; + $3 = $method; + $4 = $J; + $5 = $ext; + $6 = $out; + $7 = $length; + $8 = $lenlength; + $9 = $filters; + $10 = $filtlength; + $zpad = 0; + $11 = $1; + $12 = (($11|0) % 2)&-1; + $13 = ($12|0)==(0); + if ($13) { + $zpad = 1; + } + $14 = $2; + $15 = (_wave_init($14)|0); + $obj = $15; + $16 = $obj; + $17 = (($16) + 52|0); + $18 = HEAP32[$17>>2]|0; + $19 = $10; + HEAP32[$19>>2] = $18; + $i = 0; + while(1) { + $20 = $i; + $21 = $10; + $22 = HEAP32[$21>>2]|0; + $23 = ($20|0)<($22|0); + if (!($23)) { + break; + } + $24 = $i; + $25 = $obj; + $26 = (($25) + 72|0); + $27 = HEAP32[$26>>2]|0; + $28 = (($27) + ($24<<3)|0); + $29 = +HEAPF64[$28>>3]; + $30 = $i; + $31 = $9; + $32 = (($31) + ($30<<3)|0); + HEAPF64[$32>>3] = $29; + $33 = $i; + $34 = $obj; + $35 = (($34) + 76|0); + $36 = HEAP32[$35>>2]|0; + $37 = (($36) + ($33<<3)|0); + $38 = +HEAPF64[$37>>3]; + $39 = $10; + $40 = HEAP32[$39>>2]|0; + $41 = $i; + $42 = (($40) + ($41))|0; + $43 = $9; + $44 = (($43) + ($42<<3)|0); + HEAPF64[$44>>3] = $38; + $45 = $i; + $46 = $obj; + $47 = (($46) + 80|0); + $48 = HEAP32[$47>>2]|0; + $49 = (($48) + ($45<<3)|0); + $50 = +HEAPF64[$49>>3]; + $51 = $10; + $52 = HEAP32[$51>>2]|0; + $53 = $52<<1; + $54 = $i; + $55 = (($53) + ($54))|0; + $56 = $9; + $57 = (($56) + ($55<<3)|0); + HEAPF64[$57>>3] = $50; + $58 = $i; + $59 = $obj; + $60 = (($59) + 84|0); + $61 = HEAP32[$60>>2]|0; + $62 = (($61) + ($58<<3)|0); + $63 = +HEAPF64[$62>>3]; + $64 = $10; + $65 = HEAP32[$64>>2]|0; + $66 = ($65*3)|0; + $67 = $i; + $68 = (($66) + ($67))|0; + $69 = $9; + $70 = (($69) + ($68<<3)|0); + HEAPF64[$70>>3] = $63; + $71 = $i; + $72 = (($71) + 1)|0; + $i = $72; + } + $73 = $obj; + $74 = $3; + $75 = $1; + $76 = $4; + $77 = (_wt_init($73,$74,$75,$76)|0); + $wt = $77; + $78 = $3; + $79 = (_strcmp($78,17648)|0); + $80 = ($79|0)!=(0); + if ($80) { + $81 = $3; + $82 = (_strcmp($81,17656)|0); + $83 = ($82|0)!=(0); + if ($83) { + $88 = $3; + $89 = (_strcmp($88,17680)|0); + $90 = ($89|0)!=(0); + if ($90) { + $91 = $3; + $92 = (_strcmp($91,17688)|0); + $93 = ($92|0)!=(0); + if ($93) { + $96 = $3; + $97 = (_strcmp($96,17696)|0); + $98 = ($97|0)!=(0); + if ($98) { + $99 = $3; + $100 = (_strcmp($99,17704)|0); + $101 = ($100|0)!=(0); + if (!($101)) { + label = 15; + } + } else { + label = 15; + } + if ((label|0) == 15) { + $102 = $wt; + $103 = $0; + _modwt($102,$103); + } + } else { + label = 12; + } + } else { + label = 12; + } + if ((label|0) == 12) { + $94 = $wt; + $95 = $0; + _swt($94,$95); + } + } else { + label = 9; + } + } else { + label = 9; + } + if ((label|0) == 9) { + $84 = $wt; + $85 = $5; + _setDWTExtension($84,$85); + $86 = $wt; + $87 = $0; + _dwt($86,$87); + } + $104 = $wt; + $105 = (($104) + 28|0); + $106 = HEAP32[$105>>2]|0; + $107 = $8; + HEAP32[$107>>2] = $106; + $i = 0; + while(1) { + $108 = $i; + $109 = $8; + $110 = HEAP32[$109>>2]|0; + $111 = ($108|0)<($110|0); + if (!($111)) { + break; + } + $112 = $i; + $113 = $wt; + $114 = (($113) + 76|0); + $115 = (($114) + ($112<<2)|0); + $116 = HEAP32[$115>>2]|0; + $117 = $i; + $118 = $7; + $119 = (($118) + ($117<<2)|0); + HEAP32[$119>>2] = $116; + $120 = $i; + $121 = (($120) + 1)|0; + $i = $121; + } + $i = 0; + while(1) { + $122 = $i; + $123 = $wt; + $124 = (($123) + 24|0); + $125 = HEAP32[$124>>2]|0; + $126 = ($122|0)<($125|0); + if (!($126)) { + break; + } + $127 = $i; + $128 = $wt; + $129 = (($128) + 484|0); + $130 = HEAP32[$129>>2]|0; + $131 = (($130) + ($127<<3)|0); + $132 = +HEAPF64[$131>>3]; + $133 = $i; + $134 = $6; + $135 = (($134) + ($133<<3)|0); + HEAPF64[$135>>3] = $132; + $136 = $i; + $137 = (($136) + 1)|0; + $i = $137; + } + $138 = $obj; + _wave_free($138); + $139 = $wt; + _wt_free($139); + STACKTOP = sp;return; +} +function _inv_wave_transform($inp,$N,$wname,$method,$J,$ext,$out,$outlength,$length,$lenlength) { + $inp = $inp|0; + $N = $N|0; + $wname = $wname|0; + $method = $method|0; + $J = $J|0; + $ext = $ext|0; + $out = $out|0; + $outlength = $outlength|0; + $length = $length|0; + $lenlength = $lenlength|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0.0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $8 = 0, $9 = 0, $i = 0, $obj = 0, $wt = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $inp; + $1 = $N; + $2 = $wname; + $3 = $method; + $4 = $J; + $5 = $ext; + $6 = $out; + $7 = $outlength; + $8 = $length; + $9 = $lenlength; + $10 = $2; + $11 = (_wave_init($10)|0); + $obj = $11; + $12 = $obj; + $13 = $3; + $14 = $7; + $15 = $4; + $16 = (_wt_init($12,$13,$14,$15)|0); + $wt = $16; + $i = 0; + while(1) { + $17 = $i; + $18 = $1; + $19 = ($17|0)<($18|0); + if (!($19)) { + break; + } + $20 = $i; + $21 = $0; + $22 = (($21) + ($20<<3)|0); + $23 = +HEAPF64[$22>>3]; + $24 = $i; + $25 = $wt; + $26 = (($25) + 484|0); + $27 = HEAP32[$26>>2]|0; + $28 = (($27) + ($24<<3)|0); + HEAPF64[$28>>3] = $23; + $29 = $i; + $30 = (($29) + 1)|0; + $i = $30; + } + $31 = $9; + $32 = $wt; + $33 = (($32) + 28|0); + HEAP32[$33>>2] = $31; + $i = 0; + while(1) { + $34 = $i; + $35 = $9; + $36 = ($34|0)<($35|0); + if (!($36)) { + break; + } + $37 = $i; + $38 = $8; + $39 = (($38) + ($37<<2)|0); + $40 = HEAP32[$39>>2]|0; + $41 = $i; + $42 = $wt; + $43 = (($42) + 76|0); + $44 = (($43) + ($41<<2)|0); + HEAP32[$44>>2] = $40; + $45 = $i; + $46 = (($45) + 1)|0; + $i = $46; + } + $47 = $3; + $48 = (_strcmp($47,17648)|0); + $49 = ($48|0)!=(0); + if ($49) { + $50 = $3; + $51 = (_strcmp($50,17656)|0); + $52 = ($51|0)!=(0); + if ($52) { + $57 = $3; + $58 = (_strcmp($57,17680)|0); + $59 = ($58|0)!=(0); + if ($59) { + $60 = $3; + $61 = (_strcmp($60,17688)|0); + $62 = ($61|0)!=(0); + if ($62) { + $65 = $3; + $66 = (_strcmp($65,17696)|0); + $67 = ($66|0)!=(0); + if ($67) { + $68 = $3; + $69 = (_strcmp($68,17704)|0); + $70 = ($69|0)!=(0); + if (!($70)) { + label = 17; + } + } else { + label = 17; + } + if ((label|0) == 17) { + $71 = $wt; + $72 = $6; + _imodwt($71,$72); + } + } else { + label = 14; + } + } else { + label = 14; + } + if ((label|0) == 14) { + $63 = $wt; + $64 = $6; + _iswt($63,$64); + } + $73 = $obj; + _wave_free($73); + $74 = $wt; + _wt_free($74); + STACKTOP = sp;return; + } + } + $53 = $wt; + $54 = $5; + _setDWTExtension($53,$54); + $55 = $wt; + $56 = $6; + _idwt($55,$56); + $73 = $obj; + _wave_free($73); + $74 = $wt; + _wt_free($74); + STACKTOP = sp;return; +} +function _strchr($s,$c) { + $s = $s|0; + $c = $c|0; + var $0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (___strchrnul($s,$c)|0); + $1 = HEAP8[$0>>0]|0; + $2 = $c&255; + $3 = ($1<<24>>24)==($2<<24>>24); + $4 = $3 ? $0 : 0; + STACKTOP = sp;return ($4|0); +} +function ___strchrnul($s,$c) { + $s = $s|0; + $c = $c|0; + var $$0 = 0, $$02$lcssa = 0, $$026 = 0, $$1 = 0, $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0; + var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $w$0$lcssa = 0, $w$03 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = $c & 255; + $1 = ($0|0)==(0); + if ($1) { + $6 = (_strlen(($s|0))|0); + $7 = (($s) + ($6)|0); + $$0 = $7; + STACKTOP = sp;return ($$0|0); + } + $2 = $s; + $3 = $2 & 3; + $4 = ($3|0)==(0); + L5: do { + if ($4) { + $$02$lcssa = $s; + } else { + $5 = $c&255; + $$026 = $s; + while(1) { + $12 = HEAP8[$$026>>0]|0; + $13 = ($12<<24>>24)==(0); + if ($13) { + $$0 = $$026; + label = 13; + break; + } + $14 = ($12<<24>>24)==($5<<24>>24); + $9 = (($$026) + 1|0); + if ($14) { + $$0 = $$026; + label = 13; + break; + } + $8 = $9; + $10 = $8 & 3; + $11 = ($10|0)==(0); + if ($11) { + $$02$lcssa = $9; + break L5; + } else { + $$026 = $9; + } + } + if ((label|0) == 13) { + STACKTOP = sp;return ($$0|0); + } + } + } while(0); + $15 = Math_imul($0, 16843009)|0; + $16 = HEAP32[$$02$lcssa>>2]|0; + $17 = (($16) + -16843009)|0; + $18 = $16 & -2139062144; + $19 = $18 ^ -2139062144; + $20 = $19 & $17; + $21 = ($20|0)==(0); + L15: do { + if ($21) { + $30 = $16;$w$03 = $$02$lcssa; + while(1) { + $29 = $30 ^ $15; + $31 = (($29) + -16843009)|0; + $32 = $29 & -2139062144; + $33 = $32 ^ -2139062144; + $34 = $33 & $31; + $35 = ($34|0)==(0); + $23 = (($w$03) + 4|0); + if (!($35)) { + $w$0$lcssa = $w$03; + break L15; + } + $22 = HEAP32[$23>>2]|0; + $24 = (($22) + -16843009)|0; + $25 = $22 & -2139062144; + $26 = $25 ^ -2139062144; + $27 = $26 & $24; + $28 = ($27|0)==(0); + if ($28) { + $30 = $22;$w$03 = $23; + } else { + $w$0$lcssa = $23; + break; + } + } + } else { + $w$0$lcssa = $$02$lcssa; + } + } while(0); + $36 = $c&255; + $$1 = $w$0$lcssa; + while(1) { + $37 = HEAP8[$$1>>0]|0; + $38 = ($37<<24>>24)==(0); + $39 = ($37<<24>>24)==($36<<24>>24); + $or$cond = $38 | $39; + $40 = (($$1) + 1|0); + if ($or$cond) { + $$0 = $$1; + break; + } else { + $$1 = $40; + } + } + STACKTOP = sp;return ($$0|0); +} +function _strstr($h,$n) { + $h = $h|0; + $n = $n|0; + var $$$i = 0, $$$i16 = 0, $$$i8 = 0, $$0 = 0, $$0$lcssa$i = 0, $$0$lcssa$i15 = 0, $$0$lcssa$i7 = 0, $$01$i = 0, $$02$i = 0, $$02$i11 = 0, $$02$i5 = 0, $$02$us$i = 0, $$lcssa$i = 0, $$lcssa$i14 = 0, $$mem$0$us$i = 0, $$pr$i = 0, $$pr$us$i = 0, $0 = 0, $1 = 0, $10 = 0; + var $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0; + var $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0; + var $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0; + var $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0; + var $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0; + var $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0; + var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0; + var $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0; + var $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0; + var $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0; + var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0; + var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0; + var $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0; + var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $byteset$i = 0, $hw$0$in2$i = 0, $hw$03$i = 0, $hw$03$i10 = 0, $ip$0$ph78$i = 0, $ip$0$ph78146$i = 0; + var $ip$0$ph81$i = 0, $ip$1$ip$0$$i = 0, $ip$1$ip$0$i = 0, $ip$1$ph58$i = 0, $ip$1$ph61$i = 0, $jp$0$ph22$ph72$i = 0, $jp$0$ph2266$i = 0, $jp$0$ph82$i = 0, $jp$1$ph11$ph52$i = 0, $jp$1$ph1146$i = 0, $jp$1$ph62$i = 0, $k$030$i = 0, $k$117$i = 0, $k$2$us$i = 0, $k$37$i = 0, $k$37$us$i = 0, $k$4$i = 0, $k$4$us$i = 0, $l$039$i = 0, $mem$0$us$i = 0; + var $notlhs$i = 0, $notrhs$us$i = 0, $or$cond$i = 0, $or$cond$i12 = 0, $or$cond3$us$i = 0, $p$0$ph$ph70$i = 0, $p$0$ph$ph70150$i = 0, $p$0$ph$ph73$i = 0, $p$1$p$0$i = 0, $p$1$ph$ph50$i = 0, $p$1$ph$ph53$i = 0, $p$3155$i = 0, $shift$i = 0, $z$0$i = 0, $z$0$us$i = 0, $z$1$i = 0, $z$1$us$i = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 1056|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $byteset$i = sp + 1024|0; + $shift$i = sp; + $0 = HEAP8[$n>>0]|0; + $1 = ($0<<24>>24)==(0); + if ($1) { + $$0 = $h; + STACKTOP = sp;return ($$0|0); + } + $2 = $0 << 24 >> 24; + $3 = (_strchr($h,$2)|0); + $4 = ($3|0)==(0|0); + if ($4) { + $$0 = 0; + STACKTOP = sp;return ($$0|0); + } + $5 = (($n) + 1|0); + $6 = HEAP8[$5>>0]|0; + $7 = ($6<<24>>24)==(0); + if ($7) { + $$0 = $3; + STACKTOP = sp;return ($$0|0); + } + $8 = (($3) + 1|0); + $9 = HEAP8[$8>>0]|0; + $10 = ($9<<24>>24)==(0); + if ($10) { + $$0 = 0; + STACKTOP = sp;return ($$0|0); + } + $11 = (($n) + 2|0); + $12 = HEAP8[$11>>0]|0; + $13 = ($12<<24>>24)==(0); + if ($13) { + $14 = $0&255; + $15 = $14 << 8; + $16 = $6&255; + $17 = $16 | $15; + $18 = HEAP8[$3>>0]|0; + $19 = $18&255; + $20 = $9&255; + $21 = $19 << 8; + $22 = $21 | $20; + $$01$i = $8;$270 = $9;$hw$0$in2$i = $22; + while(1) { + $23 = $hw$0$in2$i & 65535; + $24 = ($23|0)==($17|0); + if ($24) { + $$0$lcssa$i = $$01$i;$32 = $270; + break; + } + $25 = $23 << 8; + $26 = (($$01$i) + 1|0); + $27 = HEAP8[$26>>0]|0; + $28 = $27&255; + $29 = $28 | $25; + $30 = ($27<<24>>24)==(0); + if ($30) { + $$0$lcssa$i = $26;$32 = 0; + break; + } else { + $$01$i = $26;$270 = $27;$hw$0$in2$i = $29; + } + } + $31 = ($32<<24>>24)==(0); + $33 = (($$0$lcssa$i) + -1|0); + $$$i = $31 ? 0 : $33; + $$0 = $$$i; + STACKTOP = sp;return ($$0|0); + } + $34 = (($3) + 2|0); + $35 = HEAP8[$34>>0]|0; + $36 = ($35<<24>>24)==(0); + if ($36) { + $$0 = 0; + STACKTOP = sp;return ($$0|0); + } + $37 = (($n) + 3|0); + $38 = HEAP8[$37>>0]|0; + $39 = ($38<<24>>24)==(0); + if ($39) { + $40 = $0&255; + $41 = $40 << 24; + $42 = $6&255; + $43 = $42 << 16; + $44 = $43 | $41; + $45 = $12&255; + $46 = $45 << 8; + $47 = $44 | $46; + $48 = HEAP8[$3>>0]|0; + $49 = $48&255; + $50 = $49 << 24; + $51 = $9&255; + $52 = $51 << 16; + $53 = $35&255; + $54 = $53 << 8; + $55 = $54 | $52; + $56 = $55 | $50; + $57 = ($56|0)==($47|0); + if ($57) { + $$0$lcssa$i7 = $34;$$lcssa$i = 0; + } else { + $$02$i5 = $34;$hw$03$i = $56; + while(1) { + $58 = (($$02$i5) + 1|0); + $59 = HEAP8[$58>>0]|0; + $60 = $59&255; + $61 = $60 | $hw$03$i; + $62 = $61 << 8; + $63 = ($59<<24>>24)==(0); + $64 = ($62|0)==($47|0); + $or$cond$i = $63 | $64; + if ($or$cond$i) { + $$0$lcssa$i7 = $58;$$lcssa$i = $63; + break; + } else { + $$02$i5 = $58;$hw$03$i = $62; + } + } + } + $65 = (($$0$lcssa$i7) + -2|0); + $$$i8 = $$lcssa$i ? 0 : $65; + $$0 = $$$i8; + STACKTOP = sp;return ($$0|0); + } + $66 = (($3) + 3|0); + $67 = HEAP8[$66>>0]|0; + $68 = ($67<<24>>24)==(0); + if ($68) { + $$0 = 0; + STACKTOP = sp;return ($$0|0); + } + $69 = (($n) + 4|0); + $70 = HEAP8[$69>>0]|0; + $71 = ($70<<24>>24)==(0); + if ($71) { + $72 = $0&255; + $73 = $72 << 24; + $74 = $6&255; + $75 = $74 << 16; + $76 = $75 | $73; + $77 = $12&255; + $78 = $77 << 8; + $79 = $76 | $78; + $80 = $38&255; + $81 = $79 | $80; + $82 = HEAP8[$3>>0]|0; + $83 = $82&255; + $84 = $83 << 24; + $85 = $9&255; + $86 = $85 << 16; + $87 = $35&255; + $88 = $87 << 8; + $89 = $67&255; + $90 = $88 | $86; + $91 = $90 | $89; + $92 = $91 | $84; + $93 = ($92|0)==($81|0); + if ($93) { + $$0$lcssa$i15 = $66;$$lcssa$i14 = 0; + } else { + $$02$i11 = $66;$hw$03$i10 = $92; + while(1) { + $94 = $hw$03$i10 << 8; + $95 = (($$02$i11) + 1|0); + $96 = HEAP8[$95>>0]|0; + $97 = $96&255; + $98 = $97 | $94; + $99 = ($96<<24>>24)==(0); + $100 = ($98|0)==($81|0); + $or$cond$i12 = $99 | $100; + if ($or$cond$i12) { + $$0$lcssa$i15 = $95;$$lcssa$i14 = $99; + break; + } else { + $$02$i11 = $95;$hw$03$i10 = $98; + } + } + } + $101 = (($$0$lcssa$i15) + -3|0); + $$$i16 = $$lcssa$i14 ? 0 : $101; + $$0 = $$$i16; + STACKTOP = sp;return ($$0|0); + } + ;HEAP32[$byteset$i+0>>2]=0|0;HEAP32[$byteset$i+4>>2]=0|0;HEAP32[$byteset$i+8>>2]=0|0;HEAP32[$byteset$i+12>>2]=0|0;HEAP32[$byteset$i+16>>2]=0|0;HEAP32[$byteset$i+20>>2]=0|0;HEAP32[$byteset$i+24>>2]=0|0;HEAP32[$byteset$i+28>>2]=0|0; + $106 = $0;$l$039$i = 0; + while(1) { + $102 = (($3) + ($l$039$i)|0); + $103 = HEAP8[$102>>0]|0; + $104 = ($103<<24>>24)==(0); + if ($104) { + $$0 = 0; + label = 79; + break; + } + $105 = $106&255; + $107 = $105 & 31; + $108 = 1 << $107; + $109 = $105 >>> 5; + $110 = (($byteset$i) + ($109<<2)|0); + $111 = HEAP32[$110>>2]|0; + $112 = $111 | $108; + HEAP32[$110>>2] = $112; + $113 = (($l$039$i) + 1)|0; + $114 = (($shift$i) + ($105<<2)|0); + HEAP32[$114>>2] = $113; + $115 = (($n) + ($113)|0); + $116 = HEAP8[$115>>0]|0; + $117 = ($116<<24>>24)==(0); + if ($117) { + break; + } else { + $106 = $116;$l$039$i = $113; + } + } + if ((label|0) == 79) { + STACKTOP = sp;return ($$0|0); + } + $118 = ($113>>>0)>(1); + L49: do { + if ($118) { + $271 = 1;$ip$0$ph81$i = -1;$jp$0$ph82$i = 0; + L50: while(1) { + $272 = $271;$jp$0$ph22$ph72$i = $jp$0$ph82$i;$p$0$ph$ph73$i = 1; + while(1) { + $273 = $272;$jp$0$ph2266$i = $jp$0$ph22$ph72$i; + L54: while(1) { + $120 = $273;$k$030$i = 1; + while(1) { + $125 = (($k$030$i) + ($ip$0$ph81$i))|0; + $126 = (($n) + ($125)|0); + $127 = HEAP8[$126>>0]|0; + $128 = (($n) + ($120)|0); + $129 = HEAP8[$128>>0]|0; + $130 = ($127<<24>>24)==($129<<24>>24); + if (!($130)) { + break L54; + } + $131 = ($k$030$i|0)==($p$0$ph$ph73$i|0); + $123 = (($k$030$i) + 1)|0; + if ($131) { + break; + } + $122 = (($123) + ($jp$0$ph2266$i))|0; + $124 = ($122>>>0)<($113>>>0); + if ($124) { + $120 = $122;$k$030$i = $123; + } else { + $ip$0$ph78$i = $ip$0$ph81$i;$p$0$ph$ph70$i = $p$0$ph$ph73$i; + break L50; + } + } + $132 = (($jp$0$ph2266$i) + ($p$0$ph$ph73$i))|0; + $133 = (($132) + 1)|0; + $134 = ($133>>>0)<($113>>>0); + if ($134) { + $273 = $133;$jp$0$ph2266$i = $132; + } else { + $ip$0$ph78$i = $ip$0$ph81$i;$p$0$ph$ph70$i = $p$0$ph$ph73$i; + break L50; + } + } + $135 = ($127&255)>($129&255); + $136 = (($120) - ($ip$0$ph81$i))|0; + if (!($135)) { + break; + } + $119 = (($120) + 1)|0; + $121 = ($119>>>0)<($113>>>0); + if ($121) { + $272 = $119;$jp$0$ph22$ph72$i = $120;$p$0$ph$ph73$i = $136; + } else { + $ip$0$ph78$i = $ip$0$ph81$i;$p$0$ph$ph70$i = $136; + break L50; + } + } + $137 = (($jp$0$ph2266$i) + 1)|0; + $138 = (($jp$0$ph2266$i) + 2)|0; + $139 = ($138>>>0)<($113>>>0); + if ($139) { + $271 = $138;$ip$0$ph81$i = $jp$0$ph2266$i;$jp$0$ph82$i = $137; + } else { + $ip$0$ph78$i = $jp$0$ph2266$i;$p$0$ph$ph70$i = 1; + break; + } + } + $274 = 1;$ip$1$ph61$i = -1;$jp$1$ph62$i = 0; + while(1) { + $276 = $274;$jp$1$ph11$ph52$i = $jp$1$ph62$i;$p$1$ph$ph53$i = 1; + while(1) { + $275 = $276;$jp$1$ph1146$i = $jp$1$ph11$ph52$i; + L69: while(1) { + $147 = $275;$k$117$i = 1; + while(1) { + $143 = (($k$117$i) + ($ip$1$ph61$i))|0; + $144 = (($n) + ($143)|0); + $145 = HEAP8[$144>>0]|0; + $146 = (($n) + ($147)|0); + $148 = HEAP8[$146>>0]|0; + $149 = ($145<<24>>24)==($148<<24>>24); + if (!($149)) { + break L69; + } + $150 = ($k$117$i|0)==($p$1$ph$ph53$i|0); + $141 = (($k$117$i) + 1)|0; + if ($150) { + break; + } + $140 = (($141) + ($jp$1$ph1146$i))|0; + $142 = ($140>>>0)<($113>>>0); + if ($142) { + $147 = $140;$k$117$i = $141; + } else { + $ip$0$ph78146$i = $ip$0$ph78$i;$ip$1$ph58$i = $ip$1$ph61$i;$p$0$ph$ph70150$i = $p$0$ph$ph70$i;$p$1$ph$ph50$i = $p$1$ph$ph53$i; + break L49; + } + } + $151 = (($jp$1$ph1146$i) + ($p$1$ph$ph53$i))|0; + $152 = (($151) + 1)|0; + $153 = ($152>>>0)<($113>>>0); + if ($153) { + $275 = $152;$jp$1$ph1146$i = $151; + } else { + $ip$0$ph78146$i = $ip$0$ph78$i;$ip$1$ph58$i = $ip$1$ph61$i;$p$0$ph$ph70150$i = $p$0$ph$ph70$i;$p$1$ph$ph50$i = $p$1$ph$ph53$i; + break L49; + } + } + $154 = ($145&255)<($148&255); + $155 = (($147) - ($ip$1$ph61$i))|0; + if (!($154)) { + break; + } + $156 = (($147) + 1)|0; + $157 = ($156>>>0)<($113>>>0); + if ($157) { + $276 = $156;$jp$1$ph11$ph52$i = $147;$p$1$ph$ph53$i = $155; + } else { + $ip$0$ph78146$i = $ip$0$ph78$i;$ip$1$ph58$i = $ip$1$ph61$i;$p$0$ph$ph70150$i = $p$0$ph$ph70$i;$p$1$ph$ph50$i = $155; + break L49; + } + } + $158 = (($jp$1$ph1146$i) + 1)|0; + $159 = (($jp$1$ph1146$i) + 2)|0; + $160 = ($159>>>0)<($113>>>0); + if ($160) { + $274 = $159;$ip$1$ph61$i = $jp$1$ph1146$i;$jp$1$ph62$i = $158; + } else { + $ip$0$ph78146$i = $ip$0$ph78$i;$ip$1$ph58$i = $jp$1$ph1146$i;$p$0$ph$ph70150$i = $p$0$ph$ph70$i;$p$1$ph$ph50$i = 1; + break; + } + } + } else { + $ip$0$ph78146$i = -1;$ip$1$ph58$i = -1;$p$0$ph$ph70150$i = 1;$p$1$ph$ph50$i = 1; + } + } while(0); + $161 = (($ip$1$ph58$i) + 1)|0; + $162 = (($ip$0$ph78146$i) + 1)|0; + $163 = ($161>>>0)>($162>>>0); + $p$1$p$0$i = $163 ? $p$1$ph$ph50$i : $p$0$ph$ph70150$i; + $ip$1$ip$0$i = $163 ? $ip$1$ph58$i : $ip$0$ph78146$i; + $164 = (($n) + ($p$1$p$0$i)|0); + $165 = (($ip$1$ip$0$i) + 1)|0; + $166 = (_memcmp($n,$164,$165)|0); + $167 = ($166|0)==(0); + if ($167) { + $173 = (($113) - ($p$1$p$0$i))|0; + $174 = $113 | 63; + $notlhs$i = ($113|0)==($p$1$p$0$i|0); + if ($notlhs$i) { + $228 = $174;$p$3155$i = $113; + } else { + $$02$us$i = $3;$mem$0$us$i = 0;$z$0$us$i = $3; + L83: while(1) { + $176 = $z$0$us$i; + $177 = $$02$us$i; + $178 = (($176) - ($177))|0; + $179 = ($178>>>0)<($113>>>0); + do { + if ($179) { + $180 = (_memchr($z$0$us$i,0,$174)|0); + $181 = ($180|0)==(0|0); + if ($181) { + $185 = (($z$0$us$i) + ($174)|0); + $z$1$us$i = $185; + break; + } else { + $182 = $180; + $183 = (($182) - ($177))|0; + $184 = ($183>>>0)<($113>>>0); + if ($184) { + $$0 = 0; + label = 79; + break L83; + } else { + $z$1$us$i = $180; + break; + } + } + } else { + $z$1$us$i = $z$0$us$i; + } + } while(0); + $186 = (($$02$us$i) + ($l$039$i)|0); + $187 = HEAP8[$186>>0]|0; + $188 = $187&255; + $189 = $188 >>> 5; + $190 = (($byteset$i) + ($189<<2)|0); + $191 = HEAP32[$190>>2]|0; + $192 = $188 & 31; + $193 = 1 << $192; + $194 = $193 & $191; + $195 = ($194|0)==(0); + if ($195) { + $223 = (($$02$us$i) + ($113)|0); + $$02$us$i = $223;$mem$0$us$i = 0;$z$0$us$i = $z$1$us$i; + continue; + } + $196 = (($shift$i) + ($188<<2)|0); + $197 = HEAP32[$196>>2]|0; + $198 = (($113) - ($197))|0; + $199 = ($113|0)==($197|0); + if (!($199)) { + $notrhs$us$i = ($mem$0$us$i|0)!=(0); + $200 = ($198>>>0)<($p$1$p$0$i>>>0); + $or$cond3$us$i = $notrhs$us$i & $200; + $k$2$us$i = $or$cond3$us$i ? $173 : $198; + $201 = (($$02$us$i) + ($k$2$us$i)|0); + $$02$us$i = $201;$mem$0$us$i = 0;$z$0$us$i = $z$1$us$i; + continue; + } + $202 = ($165>>>0)>($mem$0$us$i>>>0); + $$mem$0$us$i = $202 ? $165 : $mem$0$us$i; + $203 = (($n) + ($$mem$0$us$i)|0); + $204 = HEAP8[$203>>0]|0; + $205 = ($204<<24>>24)==(0); + L97: do { + if ($205) { + $k$4$us$i = $165; + } else { + $$pr$us$i = $204;$k$37$us$i = $$mem$0$us$i; + while(1) { + $210 = (($$02$us$i) + ($k$37$us$i)|0); + $211 = HEAP8[$210>>0]|0; + $212 = ($$pr$us$i<<24>>24)==($211<<24>>24); + $207 = (($k$37$us$i) + 1)|0; + if (!($212)) { + break; + } + $206 = (($n) + ($207)|0); + $208 = HEAP8[$206>>0]|0; + $209 = ($208<<24>>24)==(0); + if ($209) { + $k$4$us$i = $165; + break L97; + } else { + $$pr$us$i = $208;$k$37$us$i = $207; + } + } + $213 = (($k$37$us$i) - ($ip$1$ip$0$i))|0; + $214 = (($$02$us$i) + ($213)|0); + $$02$us$i = $214;$mem$0$us$i = 0;$z$0$us$i = $z$1$us$i; + continue L83; + } + } while(0); + while(1) { + $215 = ($k$4$us$i>>>0)>($mem$0$us$i>>>0); + if (!($215)) { + $$0 = $$02$us$i; + label = 79; + break L83; + } + $216 = (($k$4$us$i) + -1)|0; + $217 = (($n) + ($216)|0); + $218 = HEAP8[$217>>0]|0; + $219 = (($$02$us$i) + ($216)|0); + $220 = HEAP8[$219>>0]|0; + $221 = ($218<<24>>24)==($220<<24>>24); + if ($221) { + $k$4$us$i = $216; + } else { + break; + } + } + $222 = (($$02$us$i) + ($p$1$p$0$i)|0); + $$02$us$i = $222;$mem$0$us$i = $173;$z$0$us$i = $z$1$us$i; + } + if ((label|0) == 79) { + STACKTOP = sp;return ($$0|0); + } + } + } else { + $168 = (($113) - ($ip$1$ip$0$i))|0; + $169 = (($168) + -1)|0; + $170 = ($ip$1$ip$0$i>>>0)>($169>>>0); + $ip$1$ip$0$$i = $170 ? $ip$1$ip$0$i : $169; + $171 = (($ip$1$ip$0$$i) + 1)|0; + $172 = $113 | 63; + $228 = $172;$p$3155$i = $171; + } + $175 = (($n) + ($165)|0); + $$02$i = $3;$z$0$i = $3; + L110: while(1) { + $224 = $z$0$i; + $225 = $$02$i; + $226 = (($224) - ($225))|0; + $227 = ($226>>>0)<($113>>>0); + do { + if ($227) { + $229 = (_memchr($z$0$i,0,$228)|0); + $230 = ($229|0)==(0|0); + if ($230) { + $234 = (($z$0$i) + ($228)|0); + $z$1$i = $234; + break; + } else { + $231 = $229; + $232 = (($231) - ($225))|0; + $233 = ($232>>>0)<($113>>>0); + if ($233) { + $$0 = 0; + label = 79; + break L110; + } else { + $z$1$i = $229; + break; + } + } + } else { + $z$1$i = $z$0$i; + } + } while(0); + $235 = (($$02$i) + ($l$039$i)|0); + $236 = HEAP8[$235>>0]|0; + $237 = $236&255; + $238 = $237 >>> 5; + $239 = (($byteset$i) + ($238<<2)|0); + $240 = HEAP32[$239>>2]|0; + $241 = $237 & 31; + $242 = 1 << $241; + $243 = $242 & $240; + $244 = ($243|0)==(0); + if ($244) { + $250 = (($$02$i) + ($113)|0); + $$02$i = $250;$z$0$i = $z$1$i; + continue; + } + $245 = (($shift$i) + ($237<<2)|0); + $246 = HEAP32[$245>>2]|0; + $247 = ($113|0)==($246|0); + if (!($247)) { + $248 = (($113) - ($246))|0; + $249 = (($$02$i) + ($248)|0); + $$02$i = $249;$z$0$i = $z$1$i; + continue; + } + $251 = HEAP8[$175>>0]|0; + $252 = ($251<<24>>24)==(0); + L124: do { + if ($252) { + $k$4$i = $165; + } else { + $$pr$i = $251;$k$37$i = $165; + while(1) { + $257 = (($$02$i) + ($k$37$i)|0); + $258 = HEAP8[$257>>0]|0; + $259 = ($$pr$i<<24>>24)==($258<<24>>24); + $254 = (($k$37$i) + 1)|0; + if (!($259)) { + break; + } + $253 = (($n) + ($254)|0); + $255 = HEAP8[$253>>0]|0; + $256 = ($255<<24>>24)==(0); + if ($256) { + $k$4$i = $165; + break L124; + } else { + $$pr$i = $255;$k$37$i = $254; + } + } + $260 = (($k$37$i) - ($ip$1$ip$0$i))|0; + $261 = (($$02$i) + ($260)|0); + $$02$i = $261;$z$0$i = $z$1$i; + continue L110; + } + } while(0); + while(1) { + $262 = ($k$4$i|0)==(0); + if ($262) { + $$0 = $$02$i; + label = 79; + break L110; + } + $263 = (($k$4$i) + -1)|0; + $264 = (($n) + ($263)|0); + $265 = HEAP8[$264>>0]|0; + $266 = (($$02$i) + ($263)|0); + $267 = HEAP8[$266>>0]|0; + $268 = ($265<<24>>24)==($267<<24>>24); + if ($268) { + $k$4$i = $263; + } else { + break; + } + } + $269 = (($$02$i) + ($p$3155$i)|0); + $$02$i = $269;$z$0$i = $z$1$i; + } + if ((label|0) == 79) { + STACKTOP = sp;return ($$0|0); + } + return 0|0; +} +function _malloc($bytes) { + $bytes = $bytes|0; + var $$$i = 0, $$3$i = 0, $$4$i = 0, $$pre = 0, $$pre$i = 0, $$pre$i$i = 0, $$pre$i25 = 0, $$pre$i25$i = 0, $$pre$phi$i$iZ2D = 0, $$pre$phi$i26$iZ2D = 0, $$pre$phi$i26Z2D = 0, $$pre$phi$iZ2D = 0, $$pre$phi58$i$iZ2D = 0, $$pre$phiZ2D = 0, $$pre57$i$i = 0, $$rsize$0$i = 0, $$rsize$3$i = 0, $$sum = 0, $$sum$i$i = 0, $$sum$i$i$i = 0; + var $$sum$i14$i = 0, $$sum$i15$i = 0, $$sum$i18$i = 0, $$sum$i21$i = 0, $$sum$i2334 = 0, $$sum$i32 = 0, $$sum$i35 = 0, $$sum1 = 0, $$sum1$i = 0, $$sum1$i$i = 0, $$sum1$i16$i = 0, $$sum1$i22$i = 0, $$sum1$i24 = 0, $$sum10 = 0, $$sum10$i = 0, $$sum10$i$i = 0, $$sum10$pre$i$i = 0, $$sum107$i = 0, $$sum108$i = 0, $$sum109$i = 0; + var $$sum11$i = 0, $$sum11$i$i = 0, $$sum11$i24$i = 0, $$sum110$i = 0, $$sum111$i = 0, $$sum1112 = 0, $$sum112$i = 0, $$sum113$i = 0, $$sum114$i = 0, $$sum115$i = 0, $$sum116$i = 0, $$sum117$i = 0, $$sum118$i = 0, $$sum119$i = 0, $$sum12$i = 0, $$sum12$i$i = 0, $$sum120$i = 0, $$sum13$i = 0, $$sum13$i$i = 0, $$sum14$i$i = 0; + var $$sum14$pre$i = 0, $$sum15$i = 0, $$sum15$i$i = 0, $$sum16$i = 0, $$sum16$i$i = 0, $$sum17$i = 0, $$sum17$i$i = 0, $$sum18$i = 0, $$sum1819$i$i = 0, $$sum2 = 0, $$sum2$i = 0, $$sum2$i$i = 0, $$sum2$i$i$i = 0, $$sum2$i17$i = 0, $$sum2$i19$i = 0, $$sum2$i23$i = 0, $$sum2$pre$i = 0, $$sum20$i$i = 0, $$sum21$i$i = 0, $$sum22$i$i = 0; + var $$sum23$i$i = 0, $$sum24$i$i = 0, $$sum25$i$i = 0, $$sum26$pre$i$i = 0, $$sum27$i$i = 0, $$sum28$i$i = 0, $$sum29$i$i = 0, $$sum3$i = 0, $$sum3$i$i = 0, $$sum3$i27 = 0, $$sum30$i$i = 0, $$sum3132$i$i = 0, $$sum34$i$i = 0, $$sum3536$i$i = 0, $$sum3738$i$i = 0, $$sum39$i$i = 0, $$sum4 = 0, $$sum4$i = 0, $$sum4$i28 = 0, $$sum40$i$i = 0; + var $$sum41$i$i = 0, $$sum42$i$i = 0, $$sum5$i = 0, $$sum5$i$i = 0, $$sum56 = 0, $$sum6$i = 0, $$sum67$i$i = 0, $$sum7$i = 0, $$sum8$i = 0, $$sum8$pre = 0, $$sum9 = 0, $$sum9$i = 0, $$sum9$i$i = 0, $$tsize$1$i = 0, $$v$0$i = 0, $0 = 0, $1 = 0, $10 = 0, $100 = 0, $1000 = 0; + var $1001 = 0, $1002 = 0, $1003 = 0, $1004 = 0, $1005 = 0, $1006 = 0, $1007 = 0, $1008 = 0, $1009 = 0, $101 = 0, $1010 = 0, $1011 = 0, $1012 = 0, $1013 = 0, $1014 = 0, $1015 = 0, $1016 = 0, $1017 = 0, $1018 = 0, $1019 = 0; + var $102 = 0, $1020 = 0, $1021 = 0, $1022 = 0, $1023 = 0, $1024 = 0, $1025 = 0, $1026 = 0, $1027 = 0, $1028 = 0, $1029 = 0, $103 = 0, $1030 = 0, $1031 = 0, $1032 = 0, $1033 = 0, $1034 = 0, $1035 = 0, $1036 = 0, $1037 = 0; + var $1038 = 0, $1039 = 0, $104 = 0, $1040 = 0, $1041 = 0, $1042 = 0, $1043 = 0, $1044 = 0, $1045 = 0, $1046 = 0, $1047 = 0, $1048 = 0, $1049 = 0, $105 = 0, $1050 = 0, $1051 = 0, $1052 = 0, $1053 = 0, $1054 = 0, $1055 = 0; + var $1056 = 0, $1057 = 0, $1058 = 0, $1059 = 0, $106 = 0, $1060 = 0, $1061 = 0, $1062 = 0, $1063 = 0, $1064 = 0, $1065 = 0, $1066 = 0, $1067 = 0, $1068 = 0, $1069 = 0, $107 = 0, $1070 = 0, $1071 = 0, $1072 = 0, $1073 = 0; + var $1074 = 0, $1075 = 0, $1076 = 0, $1077 = 0, $1078 = 0, $1079 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0; + var $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0; + var $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0; + var $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0; + var $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0; + var $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0; + var $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0; + var $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0; + var $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0; + var $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0; + var $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0; + var $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0; + var $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0; + var $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0; + var $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0; + var $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0; + var $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0; + var $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0; + var $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0; + var $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0, $461 = 0, $462 = 0; + var $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0, $48 = 0, $480 = 0; + var $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0, $498 = 0, $499 = 0; + var $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0, $515 = 0, $516 = 0; + var $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0, $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0, $533 = 0, $534 = 0; + var $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0, $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0, $551 = 0, $552 = 0; + var $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0, $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0, $564 = 0, $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0, $57 = 0, $570 = 0; + var $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0, $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0, $588 = 0, $589 = 0; + var $59 = 0, $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0, $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0, $60 = 0, $600 = 0, $601 = 0, $602 = 0, $603 = 0, $604 = 0, $605 = 0, $606 = 0; + var $607 = 0, $608 = 0, $609 = 0, $61 = 0, $610 = 0, $611 = 0, $612 = 0, $613 = 0, $614 = 0, $615 = 0, $616 = 0, $617 = 0, $618 = 0, $619 = 0, $62 = 0, $620 = 0, $621 = 0, $622 = 0, $623 = 0, $624 = 0; + var $625 = 0, $626 = 0, $627 = 0, $628 = 0, $629 = 0, $63 = 0, $630 = 0, $631 = 0, $632 = 0, $633 = 0, $634 = 0, $635 = 0, $636 = 0, $637 = 0, $638 = 0, $639 = 0, $64 = 0, $640 = 0, $641 = 0, $642 = 0; + var $643 = 0, $644 = 0, $645 = 0, $646 = 0, $647 = 0, $648 = 0, $649 = 0, $65 = 0, $650 = 0, $651 = 0, $652 = 0, $653 = 0, $654 = 0, $655 = 0, $656 = 0, $657 = 0, $658 = 0, $659 = 0, $66 = 0, $660 = 0; + var $661 = 0, $662 = 0, $663 = 0, $664 = 0, $665 = 0, $666 = 0, $667 = 0, $668 = 0, $669 = 0, $67 = 0, $670 = 0, $671 = 0, $672 = 0, $673 = 0, $674 = 0, $675 = 0, $676 = 0, $677 = 0, $678 = 0, $679 = 0; + var $68 = 0, $680 = 0, $681 = 0, $682 = 0, $683 = 0, $684 = 0, $685 = 0, $686 = 0, $687 = 0, $688 = 0, $689 = 0, $69 = 0, $690 = 0, $691 = 0, $692 = 0, $693 = 0, $694 = 0, $695 = 0, $696 = 0, $697 = 0; + var $698 = 0, $699 = 0, $7 = 0, $70 = 0, $700 = 0, $701 = 0, $702 = 0, $703 = 0, $704 = 0, $705 = 0, $706 = 0, $707 = 0, $708 = 0, $709 = 0, $71 = 0, $710 = 0, $711 = 0, $712 = 0, $713 = 0, $714 = 0; + var $715 = 0, $716 = 0, $717 = 0, $718 = 0, $719 = 0, $72 = 0, $720 = 0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0, $726 = 0, $727 = 0, $728 = 0, $729 = 0, $73 = 0, $730 = 0, $731 = 0, $732 = 0; + var $733 = 0, $734 = 0, $735 = 0, $736 = 0, $737 = 0, $738 = 0, $739 = 0, $74 = 0, $740 = 0, $741 = 0, $742 = 0, $743 = 0, $744 = 0, $745 = 0, $746 = 0, $747 = 0, $748 = 0, $749 = 0, $75 = 0, $750 = 0; + var $751 = 0, $752 = 0, $753 = 0, $754 = 0, $755 = 0, $756 = 0, $757 = 0, $758 = 0, $759 = 0, $76 = 0, $760 = 0, $761 = 0, $762 = 0, $763 = 0, $764 = 0, $765 = 0, $766 = 0, $767 = 0, $768 = 0, $769 = 0; + var $77 = 0, $770 = 0, $771 = 0, $772 = 0, $773 = 0, $774 = 0, $775 = 0, $776 = 0, $777 = 0, $778 = 0, $779 = 0, $78 = 0, $780 = 0, $781 = 0, $782 = 0, $783 = 0, $784 = 0, $785 = 0, $786 = 0, $787 = 0; + var $788 = 0, $789 = 0, $79 = 0, $790 = 0, $791 = 0, $792 = 0, $793 = 0, $794 = 0, $795 = 0, $796 = 0, $797 = 0, $798 = 0, $799 = 0, $8 = 0, $80 = 0, $800 = 0, $801 = 0, $802 = 0, $803 = 0, $804 = 0; + var $805 = 0, $806 = 0, $807 = 0, $808 = 0, $809 = 0, $81 = 0, $810 = 0, $811 = 0, $812 = 0, $813 = 0, $814 = 0, $815 = 0, $816 = 0, $817 = 0, $818 = 0, $819 = 0, $82 = 0, $820 = 0, $821 = 0, $822 = 0; + var $823 = 0, $824 = 0, $825 = 0, $826 = 0, $827 = 0, $828 = 0, $829 = 0, $83 = 0, $830 = 0, $831 = 0, $832 = 0, $833 = 0, $834 = 0, $835 = 0, $836 = 0, $837 = 0, $838 = 0, $839 = 0, $84 = 0, $840 = 0; + var $841 = 0, $842 = 0, $843 = 0, $844 = 0, $845 = 0, $846 = 0, $847 = 0, $848 = 0, $849 = 0, $85 = 0, $850 = 0, $851 = 0, $852 = 0, $853 = 0, $854 = 0, $855 = 0, $856 = 0, $857 = 0, $858 = 0, $859 = 0; + var $86 = 0, $860 = 0, $861 = 0, $862 = 0, $863 = 0, $864 = 0, $865 = 0, $866 = 0, $867 = 0, $868 = 0, $869 = 0, $87 = 0, $870 = 0, $871 = 0, $872 = 0, $873 = 0, $874 = 0, $875 = 0, $876 = 0, $877 = 0; + var $878 = 0, $879 = 0, $88 = 0, $880 = 0, $881 = 0, $882 = 0, $883 = 0, $884 = 0, $885 = 0, $886 = 0, $887 = 0, $888 = 0, $889 = 0, $89 = 0, $890 = 0, $891 = 0, $892 = 0, $893 = 0, $894 = 0, $895 = 0; + var $896 = 0, $897 = 0, $898 = 0, $899 = 0, $9 = 0, $90 = 0, $900 = 0, $901 = 0, $902 = 0, $903 = 0, $904 = 0, $905 = 0, $906 = 0, $907 = 0, $908 = 0, $909 = 0, $91 = 0, $910 = 0, $911 = 0, $912 = 0; + var $913 = 0, $914 = 0, $915 = 0, $916 = 0, $917 = 0, $918 = 0, $919 = 0, $92 = 0, $920 = 0, $921 = 0, $922 = 0, $923 = 0, $924 = 0, $925 = 0, $926 = 0, $927 = 0, $928 = 0, $929 = 0, $93 = 0, $930 = 0; + var $931 = 0, $932 = 0, $933 = 0, $934 = 0, $935 = 0, $936 = 0, $937 = 0, $938 = 0, $939 = 0, $94 = 0, $940 = 0, $941 = 0, $942 = 0, $943 = 0, $944 = 0, $945 = 0, $946 = 0, $947 = 0, $948 = 0, $949 = 0; + var $95 = 0, $950 = 0, $951 = 0, $952 = 0, $953 = 0, $954 = 0, $955 = 0, $956 = 0, $957 = 0, $958 = 0, $959 = 0, $96 = 0, $960 = 0, $961 = 0, $962 = 0, $963 = 0, $964 = 0, $965 = 0, $966 = 0, $967 = 0; + var $968 = 0, $969 = 0, $97 = 0, $970 = 0, $971 = 0, $972 = 0, $973 = 0, $974 = 0, $975 = 0, $976 = 0, $977 = 0, $978 = 0, $979 = 0, $98 = 0, $980 = 0, $981 = 0, $982 = 0, $983 = 0, $984 = 0, $985 = 0; + var $986 = 0, $987 = 0, $988 = 0, $989 = 0, $99 = 0, $990 = 0, $991 = 0, $992 = 0, $993 = 0, $994 = 0, $995 = 0, $996 = 0, $997 = 0, $998 = 0, $999 = 0, $F$0$i$i = 0, $F1$0$i = 0, $F4$0 = 0, $F4$0$i$i = 0, $F5$0$i = 0; + var $I1$0$c$i$i = 0, $I1$0$i$i = 0, $I7$0$i = 0, $I7$0$i$i = 0, $K12$025$i = 0, $K2$014$i$i = 0, $K8$052$i$i = 0, $R$0$i = 0, $R$0$i$i = 0, $R$0$i18 = 0, $R$1$i = 0, $R$1$i$i = 0, $R$1$i20 = 0, $RP$0$i = 0, $RP$0$i$i = 0, $RP$0$i17 = 0, $T$0$lcssa$i = 0, $T$0$lcssa$i$i = 0, $T$0$lcssa$i28$i = 0, $T$013$i$i = 0; + var $T$024$i = 0, $T$051$i$i = 0, $br$0$i = 0, $cond$i = 0, $cond$i$i = 0, $cond$i21 = 0, $exitcond$i$i = 0, $i$02$i$i = 0, $idx$0$i = 0, $mem$0 = 0, $nb$0 = 0, $notlhs$i = 0, $notrhs$i = 0, $oldfirst$0$i$i = 0, $or$cond$i = 0, $or$cond$i29 = 0, $or$cond1$i = 0, $or$cond10$i = 0, $or$cond19$i = 0, $or$cond2$i = 0; + var $or$cond49$i = 0, $or$cond5$i = 0, $or$cond6$i = 0, $or$cond8$not$i = 0, $or$cond9$i = 0, $qsize$0$i$i = 0, $rsize$0$i = 0, $rsize$0$i15 = 0, $rsize$1$i = 0, $rsize$2$i = 0, $rsize$3$lcssa$i = 0, $rsize$329$i = 0, $rst$0$i = 0, $rst$1$i = 0, $sizebits$0$i = 0, $sp$0$i$i = 0, $sp$0$i$i$i = 0, $sp$075$i = 0, $sp$168$i = 0, $ssize$0$$i = 0; + var $ssize$0$i = 0, $ssize$1$i = 0, $ssize$2$i = 0, $t$0$i = 0, $t$0$i14 = 0, $t$1$i = 0, $t$2$ph$i = 0, $t$2$v$3$i = 0, $t$228$i = 0, $tbase$0$i = 0, $tbase$247$i = 0, $tsize$0$i = 0, $tsize$0323841$i = 0, $tsize$1$i = 0, $tsize$246$i = 0, $v$0$i = 0, $v$0$i16 = 0, $v$1$i = 0, $v$2$i = 0, $v$3$lcssa$i = 0; + var $v$330$i = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = ($bytes>>>0)<(245); + do { + if ($0) { + $1 = ($bytes>>>0)<(11); + if ($1) { + $5 = 16; + } else { + $2 = (($bytes) + 11)|0; + $3 = $2 & -8; + $5 = $3; + } + $4 = $5 >>> 3; + $6 = HEAP32[17712>>2]|0; + $7 = $6 >>> $4; + $8 = $7 & 3; + $9 = ($8|0)==(0); + if (!($9)) { + $10 = $7 & 1; + $11 = $10 ^ 1; + $12 = (($11) + ($4))|0; + $13 = $12 << 1; + $14 = ((17712 + ($13<<2)|0) + 40|0); + $$sum10 = (($13) + 2)|0; + $15 = ((17712 + ($$sum10<<2)|0) + 40|0); + $16 = HEAP32[$15>>2]|0; + $17 = (($16) + 8|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($14|0)==($18|0); + do { + if ($19) { + $20 = 1 << $12; + $21 = $20 ^ -1; + $22 = $6 & $21; + HEAP32[17712>>2] = $22; + } else { + $23 = HEAP32[((17712 + 16|0))>>2]|0; + $24 = ($18>>>0)<($23>>>0); + if ($24) { + _abort(); + // unreachable; + } + $25 = (($18) + 12|0); + $26 = HEAP32[$25>>2]|0; + $27 = ($26|0)==($16|0); + if ($27) { + HEAP32[$25>>2] = $14; + HEAP32[$15>>2] = $18; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $28 = $12 << 3; + $29 = $28 | 3; + $30 = (($16) + 4|0); + HEAP32[$30>>2] = $29; + $$sum1112 = $28 | 4; + $31 = (($16) + ($$sum1112)|0); + $32 = HEAP32[$31>>2]|0; + $33 = $32 | 1; + HEAP32[$31>>2] = $33; + $mem$0 = $17; + STACKTOP = sp;return ($mem$0|0); + } + $34 = HEAP32[((17712 + 8|0))>>2]|0; + $35 = ($5>>>0)>($34>>>0); + if ($35) { + $36 = ($7|0)==(0); + if (!($36)) { + $37 = $7 << $4; + $38 = 2 << $4; + $39 = (0 - ($38))|0; + $40 = $38 | $39; + $41 = $37 & $40; + $42 = (0 - ($41))|0; + $43 = $41 & $42; + $44 = (($43) + -1)|0; + $45 = $44 >>> 12; + $46 = $45 & 16; + $47 = $44 >>> $46; + $48 = $47 >>> 5; + $49 = $48 & 8; + $50 = $49 | $46; + $51 = $47 >>> $49; + $52 = $51 >>> 2; + $53 = $52 & 4; + $54 = $50 | $53; + $55 = $51 >>> $53; + $56 = $55 >>> 1; + $57 = $56 & 2; + $58 = $54 | $57; + $59 = $55 >>> $57; + $60 = $59 >>> 1; + $61 = $60 & 1; + $62 = $58 | $61; + $63 = $59 >>> $61; + $64 = (($62) + ($63))|0; + $65 = $64 << 1; + $66 = ((17712 + ($65<<2)|0) + 40|0); + $$sum4 = (($65) + 2)|0; + $67 = ((17712 + ($$sum4<<2)|0) + 40|0); + $68 = HEAP32[$67>>2]|0; + $69 = (($68) + 8|0); + $70 = HEAP32[$69>>2]|0; + $71 = ($66|0)==($70|0); + do { + if ($71) { + $72 = 1 << $64; + $73 = $72 ^ -1; + $74 = $6 & $73; + HEAP32[17712>>2] = $74; + } else { + $75 = HEAP32[((17712 + 16|0))>>2]|0; + $76 = ($70>>>0)<($75>>>0); + if ($76) { + _abort(); + // unreachable; + } + $77 = (($70) + 12|0); + $78 = HEAP32[$77>>2]|0; + $79 = ($78|0)==($68|0); + if ($79) { + HEAP32[$77>>2] = $66; + HEAP32[$67>>2] = $70; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $80 = $64 << 3; + $81 = (($80) - ($5))|0; + $82 = $5 | 3; + $83 = (($68) + 4|0); + HEAP32[$83>>2] = $82; + $84 = (($68) + ($5)|0); + $85 = $81 | 1; + $$sum56 = $5 | 4; + $86 = (($68) + ($$sum56)|0); + HEAP32[$86>>2] = $85; + $87 = (($68) + ($80)|0); + HEAP32[$87>>2] = $81; + $88 = HEAP32[((17712 + 8|0))>>2]|0; + $89 = ($88|0)==(0); + if (!($89)) { + $90 = HEAP32[((17712 + 20|0))>>2]|0; + $91 = $88 >>> 3; + $92 = $91 << 1; + $93 = ((17712 + ($92<<2)|0) + 40|0); + $94 = HEAP32[17712>>2]|0; + $95 = 1 << $91; + $96 = $94 & $95; + $97 = ($96|0)==(0); + if ($97) { + $98 = $94 | $95; + HEAP32[17712>>2] = $98; + $$sum8$pre = (($92) + 2)|0; + $$pre = ((17712 + ($$sum8$pre<<2)|0) + 40|0); + $$pre$phiZ2D = $$pre;$F4$0 = $93; + } else { + $$sum9 = (($92) + 2)|0; + $99 = ((17712 + ($$sum9<<2)|0) + 40|0); + $100 = HEAP32[$99>>2]|0; + $101 = HEAP32[((17712 + 16|0))>>2]|0; + $102 = ($100>>>0)<($101>>>0); + if ($102) { + _abort(); + // unreachable; + } else { + $$pre$phiZ2D = $99;$F4$0 = $100; + } + } + HEAP32[$$pre$phiZ2D>>2] = $90; + $103 = (($F4$0) + 12|0); + HEAP32[$103>>2] = $90; + $104 = (($90) + 8|0); + HEAP32[$104>>2] = $F4$0; + $105 = (($90) + 12|0); + HEAP32[$105>>2] = $93; + } + HEAP32[((17712 + 8|0))>>2] = $81; + HEAP32[((17712 + 20|0))>>2] = $84; + $mem$0 = $69; + STACKTOP = sp;return ($mem$0|0); + } + $106 = HEAP32[((17712 + 4|0))>>2]|0; + $107 = ($106|0)==(0); + if ($107) { + $nb$0 = $5; + } else { + $108 = (0 - ($106))|0; + $109 = $106 & $108; + $110 = (($109) + -1)|0; + $111 = $110 >>> 12; + $112 = $111 & 16; + $113 = $110 >>> $112; + $114 = $113 >>> 5; + $115 = $114 & 8; + $116 = $115 | $112; + $117 = $113 >>> $115; + $118 = $117 >>> 2; + $119 = $118 & 4; + $120 = $116 | $119; + $121 = $117 >>> $119; + $122 = $121 >>> 1; + $123 = $122 & 2; + $124 = $120 | $123; + $125 = $121 >>> $123; + $126 = $125 >>> 1; + $127 = $126 & 1; + $128 = $124 | $127; + $129 = $125 >>> $127; + $130 = (($128) + ($129))|0; + $131 = ((17712 + ($130<<2)|0) + 304|0); + $132 = HEAP32[$131>>2]|0; + $133 = (($132) + 4|0); + $134 = HEAP32[$133>>2]|0; + $135 = $134 & -8; + $136 = (($135) - ($5))|0; + $rsize$0$i = $136;$t$0$i = $132;$v$0$i = $132; + while(1) { + $137 = (($t$0$i) + 16|0); + $138 = HEAP32[$137>>2]|0; + $139 = ($138|0)==(0|0); + if ($139) { + $140 = (($t$0$i) + 20|0); + $141 = HEAP32[$140>>2]|0; + $142 = ($141|0)==(0|0); + if ($142) { + break; + } else { + $144 = $141; + } + } else { + $144 = $138; + } + $143 = (($144) + 4|0); + $145 = HEAP32[$143>>2]|0; + $146 = $145 & -8; + $147 = (($146) - ($5))|0; + $148 = ($147>>>0)<($rsize$0$i>>>0); + $$rsize$0$i = $148 ? $147 : $rsize$0$i; + $$v$0$i = $148 ? $144 : $v$0$i; + $rsize$0$i = $$rsize$0$i;$t$0$i = $144;$v$0$i = $$v$0$i; + } + $149 = HEAP32[((17712 + 16|0))>>2]|0; + $150 = ($v$0$i>>>0)<($149>>>0); + if ($150) { + _abort(); + // unreachable; + } + $151 = (($v$0$i) + ($5)|0); + $152 = ($v$0$i>>>0)<($151>>>0); + if (!($152)) { + _abort(); + // unreachable; + } + $153 = (($v$0$i) + 24|0); + $154 = HEAP32[$153>>2]|0; + $155 = (($v$0$i) + 12|0); + $156 = HEAP32[$155>>2]|0; + $157 = ($156|0)==($v$0$i|0); + do { + if ($157) { + $167 = (($v$0$i) + 20|0); + $168 = HEAP32[$167>>2]|0; + $169 = ($168|0)==(0|0); + if ($169) { + $170 = (($v$0$i) + 16|0); + $171 = HEAP32[$170>>2]|0; + $172 = ($171|0)==(0|0); + if ($172) { + $R$1$i = 0; + break; + } else { + $R$0$i = $171;$RP$0$i = $170; + } + } else { + $R$0$i = $168;$RP$0$i = $167; + } + while(1) { + $173 = (($R$0$i) + 20|0); + $174 = HEAP32[$173>>2]|0; + $175 = ($174|0)==(0|0); + if (!($175)) { + $R$0$i = $174;$RP$0$i = $173; + continue; + } + $176 = (($R$0$i) + 16|0); + $177 = HEAP32[$176>>2]|0; + $178 = ($177|0)==(0|0); + if ($178) { + break; + } else { + $R$0$i = $177;$RP$0$i = $176; + } + } + $179 = ($RP$0$i>>>0)<($149>>>0); + if ($179) { + _abort(); + // unreachable; + } else { + HEAP32[$RP$0$i>>2] = 0; + $R$1$i = $R$0$i; + break; + } + } else { + $158 = (($v$0$i) + 8|0); + $159 = HEAP32[$158>>2]|0; + $160 = ($159>>>0)<($149>>>0); + if ($160) { + _abort(); + // unreachable; + } + $161 = (($159) + 12|0); + $162 = HEAP32[$161>>2]|0; + $163 = ($162|0)==($v$0$i|0); + if (!($163)) { + _abort(); + // unreachable; + } + $164 = (($156) + 8|0); + $165 = HEAP32[$164>>2]|0; + $166 = ($165|0)==($v$0$i|0); + if ($166) { + HEAP32[$161>>2] = $156; + HEAP32[$164>>2] = $159; + $R$1$i = $156; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $180 = ($154|0)==(0|0); + do { + if (!($180)) { + $181 = (($v$0$i) + 28|0); + $182 = HEAP32[$181>>2]|0; + $183 = ((17712 + ($182<<2)|0) + 304|0); + $184 = HEAP32[$183>>2]|0; + $185 = ($v$0$i|0)==($184|0); + if ($185) { + HEAP32[$183>>2] = $R$1$i; + $cond$i = ($R$1$i|0)==(0|0); + if ($cond$i) { + $186 = 1 << $182; + $187 = $186 ^ -1; + $188 = HEAP32[((17712 + 4|0))>>2]|0; + $189 = $188 & $187; + HEAP32[((17712 + 4|0))>>2] = $189; + break; + } + } else { + $190 = HEAP32[((17712 + 16|0))>>2]|0; + $191 = ($154>>>0)<($190>>>0); + if ($191) { + _abort(); + // unreachable; + } + $192 = (($154) + 16|0); + $193 = HEAP32[$192>>2]|0; + $194 = ($193|0)==($v$0$i|0); + if ($194) { + HEAP32[$192>>2] = $R$1$i; + } else { + $195 = (($154) + 20|0); + HEAP32[$195>>2] = $R$1$i; + } + $196 = ($R$1$i|0)==(0|0); + if ($196) { + break; + } + } + $197 = HEAP32[((17712 + 16|0))>>2]|0; + $198 = ($R$1$i>>>0)<($197>>>0); + if ($198) { + _abort(); + // unreachable; + } + $199 = (($R$1$i) + 24|0); + HEAP32[$199>>2] = $154; + $200 = (($v$0$i) + 16|0); + $201 = HEAP32[$200>>2]|0; + $202 = ($201|0)==(0|0); + do { + if (!($202)) { + $203 = HEAP32[((17712 + 16|0))>>2]|0; + $204 = ($201>>>0)<($203>>>0); + if ($204) { + _abort(); + // unreachable; + } else { + $205 = (($R$1$i) + 16|0); + HEAP32[$205>>2] = $201; + $206 = (($201) + 24|0); + HEAP32[$206>>2] = $R$1$i; + break; + } + } + } while(0); + $207 = (($v$0$i) + 20|0); + $208 = HEAP32[$207>>2]|0; + $209 = ($208|0)==(0|0); + if (!($209)) { + $210 = HEAP32[((17712 + 16|0))>>2]|0; + $211 = ($208>>>0)<($210>>>0); + if ($211) { + _abort(); + // unreachable; + } else { + $212 = (($R$1$i) + 20|0); + HEAP32[$212>>2] = $208; + $213 = (($208) + 24|0); + HEAP32[$213>>2] = $R$1$i; + break; + } + } + } + } while(0); + $214 = ($rsize$0$i>>>0)<(16); + if ($214) { + $215 = (($rsize$0$i) + ($5))|0; + $216 = $215 | 3; + $217 = (($v$0$i) + 4|0); + HEAP32[$217>>2] = $216; + $$sum4$i = (($215) + 4)|0; + $218 = (($v$0$i) + ($$sum4$i)|0); + $219 = HEAP32[$218>>2]|0; + $220 = $219 | 1; + HEAP32[$218>>2] = $220; + } else { + $221 = $5 | 3; + $222 = (($v$0$i) + 4|0); + HEAP32[$222>>2] = $221; + $223 = $rsize$0$i | 1; + $$sum$i35 = $5 | 4; + $224 = (($v$0$i) + ($$sum$i35)|0); + HEAP32[$224>>2] = $223; + $$sum1$i = (($rsize$0$i) + ($5))|0; + $225 = (($v$0$i) + ($$sum1$i)|0); + HEAP32[$225>>2] = $rsize$0$i; + $226 = HEAP32[((17712 + 8|0))>>2]|0; + $227 = ($226|0)==(0); + if (!($227)) { + $228 = HEAP32[((17712 + 20|0))>>2]|0; + $229 = $226 >>> 3; + $230 = $229 << 1; + $231 = ((17712 + ($230<<2)|0) + 40|0); + $232 = HEAP32[17712>>2]|0; + $233 = 1 << $229; + $234 = $232 & $233; + $235 = ($234|0)==(0); + if ($235) { + $236 = $232 | $233; + HEAP32[17712>>2] = $236; + $$sum2$pre$i = (($230) + 2)|0; + $$pre$i = ((17712 + ($$sum2$pre$i<<2)|0) + 40|0); + $$pre$phi$iZ2D = $$pre$i;$F1$0$i = $231; + } else { + $$sum3$i = (($230) + 2)|0; + $237 = ((17712 + ($$sum3$i<<2)|0) + 40|0); + $238 = HEAP32[$237>>2]|0; + $239 = HEAP32[((17712 + 16|0))>>2]|0; + $240 = ($238>>>0)<($239>>>0); + if ($240) { + _abort(); + // unreachable; + } else { + $$pre$phi$iZ2D = $237;$F1$0$i = $238; + } + } + HEAP32[$$pre$phi$iZ2D>>2] = $228; + $241 = (($F1$0$i) + 12|0); + HEAP32[$241>>2] = $228; + $242 = (($228) + 8|0); + HEAP32[$242>>2] = $F1$0$i; + $243 = (($228) + 12|0); + HEAP32[$243>>2] = $231; + } + HEAP32[((17712 + 8|0))>>2] = $rsize$0$i; + HEAP32[((17712 + 20|0))>>2] = $151; + } + $244 = (($v$0$i) + 8|0); + $mem$0 = $244; + STACKTOP = sp;return ($mem$0|0); + } + } else { + $nb$0 = $5; + } + } else { + $245 = ($bytes>>>0)>(4294967231); + if ($245) { + $nb$0 = -1; + } else { + $246 = (($bytes) + 11)|0; + $247 = $246 & -8; + $248 = HEAP32[((17712 + 4|0))>>2]|0; + $249 = ($248|0)==(0); + if ($249) { + $nb$0 = $247; + } else { + $250 = (0 - ($247))|0; + $251 = $246 >>> 8; + $252 = ($251|0)==(0); + if ($252) { + $idx$0$i = 0; + } else { + $253 = ($247>>>0)>(16777215); + if ($253) { + $idx$0$i = 31; + } else { + $254 = (($251) + 1048320)|0; + $255 = $254 >>> 16; + $256 = $255 & 8; + $257 = $251 << $256; + $258 = (($257) + 520192)|0; + $259 = $258 >>> 16; + $260 = $259 & 4; + $261 = $260 | $256; + $262 = $257 << $260; + $263 = (($262) + 245760)|0; + $264 = $263 >>> 16; + $265 = $264 & 2; + $266 = $261 | $265; + $267 = (14 - ($266))|0; + $268 = $262 << $265; + $269 = $268 >>> 15; + $270 = (($267) + ($269))|0; + $271 = $270 << 1; + $272 = (($270) + 7)|0; + $273 = $247 >>> $272; + $274 = $273 & 1; + $275 = $274 | $271; + $idx$0$i = $275; + } + } + $276 = ((17712 + ($idx$0$i<<2)|0) + 304|0); + $277 = HEAP32[$276>>2]|0; + $278 = ($277|0)==(0|0); + L126: do { + if ($278) { + $rsize$2$i = $250;$t$1$i = 0;$v$2$i = 0; + } else { + $279 = ($idx$0$i|0)==(31); + if ($279) { + $283 = 0; + } else { + $280 = $idx$0$i >>> 1; + $281 = (25 - ($280))|0; + $283 = $281; + } + $282 = $247 << $283; + $rsize$0$i15 = $250;$rst$0$i = 0;$sizebits$0$i = $282;$t$0$i14 = $277;$v$0$i16 = 0; + while(1) { + $284 = (($t$0$i14) + 4|0); + $285 = HEAP32[$284>>2]|0; + $286 = $285 & -8; + $287 = (($286) - ($247))|0; + $288 = ($287>>>0)<($rsize$0$i15>>>0); + if ($288) { + $289 = ($286|0)==($247|0); + if ($289) { + $rsize$2$i = $287;$t$1$i = $t$0$i14;$v$2$i = $t$0$i14; + break L126; + } else { + $rsize$1$i = $287;$v$1$i = $t$0$i14; + } + } else { + $rsize$1$i = $rsize$0$i15;$v$1$i = $v$0$i16; + } + $290 = (($t$0$i14) + 20|0); + $291 = HEAP32[$290>>2]|0; + $292 = $sizebits$0$i >>> 31; + $293 = ((($t$0$i14) + ($292<<2)|0) + 16|0); + $294 = HEAP32[$293>>2]|0; + $295 = ($291|0)==(0|0); + $296 = ($291|0)==($294|0); + $or$cond$i = $295 | $296; + $rst$1$i = $or$cond$i ? $rst$0$i : $291; + $297 = ($294|0)==(0|0); + $298 = $sizebits$0$i << 1; + if ($297) { + $rsize$2$i = $rsize$1$i;$t$1$i = $rst$1$i;$v$2$i = $v$1$i; + break; + } else { + $rsize$0$i15 = $rsize$1$i;$rst$0$i = $rst$1$i;$sizebits$0$i = $298;$t$0$i14 = $294;$v$0$i16 = $v$1$i; + } + } + } + } while(0); + $299 = ($t$1$i|0)==(0|0); + $300 = ($v$2$i|0)==(0|0); + $or$cond19$i = $299 & $300; + if ($or$cond19$i) { + $301 = 2 << $idx$0$i; + $302 = (0 - ($301))|0; + $303 = $301 | $302; + $304 = $248 & $303; + $305 = ($304|0)==(0); + if ($305) { + $nb$0 = $247; + break; + } + $306 = (0 - ($304))|0; + $307 = $304 & $306; + $308 = (($307) + -1)|0; + $309 = $308 >>> 12; + $310 = $309 & 16; + $311 = $308 >>> $310; + $312 = $311 >>> 5; + $313 = $312 & 8; + $314 = $313 | $310; + $315 = $311 >>> $313; + $316 = $315 >>> 2; + $317 = $316 & 4; + $318 = $314 | $317; + $319 = $315 >>> $317; + $320 = $319 >>> 1; + $321 = $320 & 2; + $322 = $318 | $321; + $323 = $319 >>> $321; + $324 = $323 >>> 1; + $325 = $324 & 1; + $326 = $322 | $325; + $327 = $323 >>> $325; + $328 = (($326) + ($327))|0; + $329 = ((17712 + ($328<<2)|0) + 304|0); + $330 = HEAP32[$329>>2]|0; + $t$2$ph$i = $330; + } else { + $t$2$ph$i = $t$1$i; + } + $331 = ($t$2$ph$i|0)==(0|0); + if ($331) { + $rsize$3$lcssa$i = $rsize$2$i;$v$3$lcssa$i = $v$2$i; + } else { + $rsize$329$i = $rsize$2$i;$t$228$i = $t$2$ph$i;$v$330$i = $v$2$i; + while(1) { + $332 = (($t$228$i) + 4|0); + $333 = HEAP32[$332>>2]|0; + $334 = $333 & -8; + $335 = (($334) - ($247))|0; + $336 = ($335>>>0)<($rsize$329$i>>>0); + $$rsize$3$i = $336 ? $335 : $rsize$329$i; + $t$2$v$3$i = $336 ? $t$228$i : $v$330$i; + $337 = (($t$228$i) + 16|0); + $338 = HEAP32[$337>>2]|0; + $339 = ($338|0)==(0|0); + if (!($339)) { + $rsize$329$i = $$rsize$3$i;$t$228$i = $338;$v$330$i = $t$2$v$3$i; + continue; + } + $340 = (($t$228$i) + 20|0); + $341 = HEAP32[$340>>2]|0; + $342 = ($341|0)==(0|0); + if ($342) { + $rsize$3$lcssa$i = $$rsize$3$i;$v$3$lcssa$i = $t$2$v$3$i; + break; + } else { + $rsize$329$i = $$rsize$3$i;$t$228$i = $341;$v$330$i = $t$2$v$3$i; + } + } + } + $343 = ($v$3$lcssa$i|0)==(0|0); + if ($343) { + $nb$0 = $247; + } else { + $344 = HEAP32[((17712 + 8|0))>>2]|0; + $345 = (($344) - ($247))|0; + $346 = ($rsize$3$lcssa$i>>>0)<($345>>>0); + if ($346) { + $347 = HEAP32[((17712 + 16|0))>>2]|0; + $348 = ($v$3$lcssa$i>>>0)<($347>>>0); + if ($348) { + _abort(); + // unreachable; + } + $349 = (($v$3$lcssa$i) + ($247)|0); + $350 = ($v$3$lcssa$i>>>0)<($349>>>0); + if (!($350)) { + _abort(); + // unreachable; + } + $351 = (($v$3$lcssa$i) + 24|0); + $352 = HEAP32[$351>>2]|0; + $353 = (($v$3$lcssa$i) + 12|0); + $354 = HEAP32[$353>>2]|0; + $355 = ($354|0)==($v$3$lcssa$i|0); + do { + if ($355) { + $365 = (($v$3$lcssa$i) + 20|0); + $366 = HEAP32[$365>>2]|0; + $367 = ($366|0)==(0|0); + if ($367) { + $368 = (($v$3$lcssa$i) + 16|0); + $369 = HEAP32[$368>>2]|0; + $370 = ($369|0)==(0|0); + if ($370) { + $R$1$i20 = 0; + break; + } else { + $R$0$i18 = $369;$RP$0$i17 = $368; + } + } else { + $R$0$i18 = $366;$RP$0$i17 = $365; + } + while(1) { + $371 = (($R$0$i18) + 20|0); + $372 = HEAP32[$371>>2]|0; + $373 = ($372|0)==(0|0); + if (!($373)) { + $R$0$i18 = $372;$RP$0$i17 = $371; + continue; + } + $374 = (($R$0$i18) + 16|0); + $375 = HEAP32[$374>>2]|0; + $376 = ($375|0)==(0|0); + if ($376) { + break; + } else { + $R$0$i18 = $375;$RP$0$i17 = $374; + } + } + $377 = ($RP$0$i17>>>0)<($347>>>0); + if ($377) { + _abort(); + // unreachable; + } else { + HEAP32[$RP$0$i17>>2] = 0; + $R$1$i20 = $R$0$i18; + break; + } + } else { + $356 = (($v$3$lcssa$i) + 8|0); + $357 = HEAP32[$356>>2]|0; + $358 = ($357>>>0)<($347>>>0); + if ($358) { + _abort(); + // unreachable; + } + $359 = (($357) + 12|0); + $360 = HEAP32[$359>>2]|0; + $361 = ($360|0)==($v$3$lcssa$i|0); + if (!($361)) { + _abort(); + // unreachable; + } + $362 = (($354) + 8|0); + $363 = HEAP32[$362>>2]|0; + $364 = ($363|0)==($v$3$lcssa$i|0); + if ($364) { + HEAP32[$359>>2] = $354; + HEAP32[$362>>2] = $357; + $R$1$i20 = $354; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $378 = ($352|0)==(0|0); + do { + if (!($378)) { + $379 = (($v$3$lcssa$i) + 28|0); + $380 = HEAP32[$379>>2]|0; + $381 = ((17712 + ($380<<2)|0) + 304|0); + $382 = HEAP32[$381>>2]|0; + $383 = ($v$3$lcssa$i|0)==($382|0); + if ($383) { + HEAP32[$381>>2] = $R$1$i20; + $cond$i21 = ($R$1$i20|0)==(0|0); + if ($cond$i21) { + $384 = 1 << $380; + $385 = $384 ^ -1; + $386 = HEAP32[((17712 + 4|0))>>2]|0; + $387 = $386 & $385; + HEAP32[((17712 + 4|0))>>2] = $387; + break; + } + } else { + $388 = HEAP32[((17712 + 16|0))>>2]|0; + $389 = ($352>>>0)<($388>>>0); + if ($389) { + _abort(); + // unreachable; + } + $390 = (($352) + 16|0); + $391 = HEAP32[$390>>2]|0; + $392 = ($391|0)==($v$3$lcssa$i|0); + if ($392) { + HEAP32[$390>>2] = $R$1$i20; + } else { + $393 = (($352) + 20|0); + HEAP32[$393>>2] = $R$1$i20; + } + $394 = ($R$1$i20|0)==(0|0); + if ($394) { + break; + } + } + $395 = HEAP32[((17712 + 16|0))>>2]|0; + $396 = ($R$1$i20>>>0)<($395>>>0); + if ($396) { + _abort(); + // unreachable; + } + $397 = (($R$1$i20) + 24|0); + HEAP32[$397>>2] = $352; + $398 = (($v$3$lcssa$i) + 16|0); + $399 = HEAP32[$398>>2]|0; + $400 = ($399|0)==(0|0); + do { + if (!($400)) { + $401 = HEAP32[((17712 + 16|0))>>2]|0; + $402 = ($399>>>0)<($401>>>0); + if ($402) { + _abort(); + // unreachable; + } else { + $403 = (($R$1$i20) + 16|0); + HEAP32[$403>>2] = $399; + $404 = (($399) + 24|0); + HEAP32[$404>>2] = $R$1$i20; + break; + } + } + } while(0); + $405 = (($v$3$lcssa$i) + 20|0); + $406 = HEAP32[$405>>2]|0; + $407 = ($406|0)==(0|0); + if (!($407)) { + $408 = HEAP32[((17712 + 16|0))>>2]|0; + $409 = ($406>>>0)<($408>>>0); + if ($409) { + _abort(); + // unreachable; + } else { + $410 = (($R$1$i20) + 20|0); + HEAP32[$410>>2] = $406; + $411 = (($406) + 24|0); + HEAP32[$411>>2] = $R$1$i20; + break; + } + } + } + } while(0); + $412 = ($rsize$3$lcssa$i>>>0)<(16); + L204: do { + if ($412) { + $413 = (($rsize$3$lcssa$i) + ($247))|0; + $414 = $413 | 3; + $415 = (($v$3$lcssa$i) + 4|0); + HEAP32[$415>>2] = $414; + $$sum18$i = (($413) + 4)|0; + $416 = (($v$3$lcssa$i) + ($$sum18$i)|0); + $417 = HEAP32[$416>>2]|0; + $418 = $417 | 1; + HEAP32[$416>>2] = $418; + } else { + $419 = $247 | 3; + $420 = (($v$3$lcssa$i) + 4|0); + HEAP32[$420>>2] = $419; + $421 = $rsize$3$lcssa$i | 1; + $$sum$i2334 = $247 | 4; + $422 = (($v$3$lcssa$i) + ($$sum$i2334)|0); + HEAP32[$422>>2] = $421; + $$sum1$i24 = (($rsize$3$lcssa$i) + ($247))|0; + $423 = (($v$3$lcssa$i) + ($$sum1$i24)|0); + HEAP32[$423>>2] = $rsize$3$lcssa$i; + $424 = $rsize$3$lcssa$i >>> 3; + $425 = ($rsize$3$lcssa$i>>>0)<(256); + if ($425) { + $426 = $424 << 1; + $427 = ((17712 + ($426<<2)|0) + 40|0); + $428 = HEAP32[17712>>2]|0; + $429 = 1 << $424; + $430 = $428 & $429; + $431 = ($430|0)==(0); + do { + if ($431) { + $432 = $428 | $429; + HEAP32[17712>>2] = $432; + $$sum14$pre$i = (($426) + 2)|0; + $$pre$i25 = ((17712 + ($$sum14$pre$i<<2)|0) + 40|0); + $$pre$phi$i26Z2D = $$pre$i25;$F5$0$i = $427; + } else { + $$sum17$i = (($426) + 2)|0; + $433 = ((17712 + ($$sum17$i<<2)|0) + 40|0); + $434 = HEAP32[$433>>2]|0; + $435 = HEAP32[((17712 + 16|0))>>2]|0; + $436 = ($434>>>0)<($435>>>0); + if (!($436)) { + $$pre$phi$i26Z2D = $433;$F5$0$i = $434; + break; + } + _abort(); + // unreachable; + } + } while(0); + HEAP32[$$pre$phi$i26Z2D>>2] = $349; + $437 = (($F5$0$i) + 12|0); + HEAP32[$437>>2] = $349; + $$sum15$i = (($247) + 8)|0; + $438 = (($v$3$lcssa$i) + ($$sum15$i)|0); + HEAP32[$438>>2] = $F5$0$i; + $$sum16$i = (($247) + 12)|0; + $439 = (($v$3$lcssa$i) + ($$sum16$i)|0); + HEAP32[$439>>2] = $427; + break; + } + $440 = $rsize$3$lcssa$i >>> 8; + $441 = ($440|0)==(0); + if ($441) { + $I7$0$i = 0; + } else { + $442 = ($rsize$3$lcssa$i>>>0)>(16777215); + if ($442) { + $I7$0$i = 31; + } else { + $443 = (($440) + 1048320)|0; + $444 = $443 >>> 16; + $445 = $444 & 8; + $446 = $440 << $445; + $447 = (($446) + 520192)|0; + $448 = $447 >>> 16; + $449 = $448 & 4; + $450 = $449 | $445; + $451 = $446 << $449; + $452 = (($451) + 245760)|0; + $453 = $452 >>> 16; + $454 = $453 & 2; + $455 = $450 | $454; + $456 = (14 - ($455))|0; + $457 = $451 << $454; + $458 = $457 >>> 15; + $459 = (($456) + ($458))|0; + $460 = $459 << 1; + $461 = (($459) + 7)|0; + $462 = $rsize$3$lcssa$i >>> $461; + $463 = $462 & 1; + $464 = $463 | $460; + $I7$0$i = $464; + } + } + $465 = ((17712 + ($I7$0$i<<2)|0) + 304|0); + $$sum2$i = (($247) + 28)|0; + $466 = (($v$3$lcssa$i) + ($$sum2$i)|0); + HEAP32[$466>>2] = $I7$0$i; + $$sum3$i27 = (($247) + 16)|0; + $467 = (($v$3$lcssa$i) + ($$sum3$i27)|0); + $$sum4$i28 = (($247) + 20)|0; + $468 = (($v$3$lcssa$i) + ($$sum4$i28)|0); + HEAP32[$468>>2] = 0; + HEAP32[$467>>2] = 0; + $469 = HEAP32[((17712 + 4|0))>>2]|0; + $470 = 1 << $I7$0$i; + $471 = $469 & $470; + $472 = ($471|0)==(0); + if ($472) { + $473 = $469 | $470; + HEAP32[((17712 + 4|0))>>2] = $473; + HEAP32[$465>>2] = $349; + $$sum5$i = (($247) + 24)|0; + $474 = (($v$3$lcssa$i) + ($$sum5$i)|0); + HEAP32[$474>>2] = $465; + $$sum6$i = (($247) + 12)|0; + $475 = (($v$3$lcssa$i) + ($$sum6$i)|0); + HEAP32[$475>>2] = $349; + $$sum7$i = (($247) + 8)|0; + $476 = (($v$3$lcssa$i) + ($$sum7$i)|0); + HEAP32[$476>>2] = $349; + break; + } + $477 = HEAP32[$465>>2]|0; + $478 = ($I7$0$i|0)==(31); + if ($478) { + $486 = 0; + } else { + $479 = $I7$0$i >>> 1; + $480 = (25 - ($479))|0; + $486 = $480; + } + $481 = (($477) + 4|0); + $482 = HEAP32[$481>>2]|0; + $483 = $482 & -8; + $484 = ($483|0)==($rsize$3$lcssa$i|0); + L225: do { + if ($484) { + $T$0$lcssa$i = $477; + } else { + $485 = $rsize$3$lcssa$i << $486; + $K12$025$i = $485;$T$024$i = $477; + while(1) { + $493 = $K12$025$i >>> 31; + $494 = ((($T$024$i) + ($493<<2)|0) + 16|0); + $489 = HEAP32[$494>>2]|0; + $495 = ($489|0)==(0|0); + if ($495) { + break; + } + $487 = $K12$025$i << 1; + $488 = (($489) + 4|0); + $490 = HEAP32[$488>>2]|0; + $491 = $490 & -8; + $492 = ($491|0)==($rsize$3$lcssa$i|0); + if ($492) { + $T$0$lcssa$i = $489; + break L225; + } else { + $K12$025$i = $487;$T$024$i = $489; + } + } + $496 = HEAP32[((17712 + 16|0))>>2]|0; + $497 = ($494>>>0)<($496>>>0); + if ($497) { + _abort(); + // unreachable; + } else { + HEAP32[$494>>2] = $349; + $$sum11$i = (($247) + 24)|0; + $498 = (($v$3$lcssa$i) + ($$sum11$i)|0); + HEAP32[$498>>2] = $T$024$i; + $$sum12$i = (($247) + 12)|0; + $499 = (($v$3$lcssa$i) + ($$sum12$i)|0); + HEAP32[$499>>2] = $349; + $$sum13$i = (($247) + 8)|0; + $500 = (($v$3$lcssa$i) + ($$sum13$i)|0); + HEAP32[$500>>2] = $349; + break L204; + } + } + } while(0); + $501 = (($T$0$lcssa$i) + 8|0); + $502 = HEAP32[$501>>2]|0; + $503 = HEAP32[((17712 + 16|0))>>2]|0; + $504 = ($T$0$lcssa$i>>>0)<($503>>>0); + if ($504) { + _abort(); + // unreachable; + } + $505 = ($502>>>0)<($503>>>0); + if ($505) { + _abort(); + // unreachable; + } else { + $506 = (($502) + 12|0); + HEAP32[$506>>2] = $349; + HEAP32[$501>>2] = $349; + $$sum8$i = (($247) + 8)|0; + $507 = (($v$3$lcssa$i) + ($$sum8$i)|0); + HEAP32[$507>>2] = $502; + $$sum9$i = (($247) + 12)|0; + $508 = (($v$3$lcssa$i) + ($$sum9$i)|0); + HEAP32[$508>>2] = $T$0$lcssa$i; + $$sum10$i = (($247) + 24)|0; + $509 = (($v$3$lcssa$i) + ($$sum10$i)|0); + HEAP32[$509>>2] = 0; + break; + } + } + } while(0); + $510 = (($v$3$lcssa$i) + 8|0); + $mem$0 = $510; + STACKTOP = sp;return ($mem$0|0); + } else { + $nb$0 = $247; + } + } + } + } + } + } while(0); + $511 = HEAP32[((17712 + 8|0))>>2]|0; + $512 = ($nb$0>>>0)>($511>>>0); + if (!($512)) { + $513 = (($511) - ($nb$0))|0; + $514 = HEAP32[((17712 + 20|0))>>2]|0; + $515 = ($513>>>0)>(15); + if ($515) { + $516 = (($514) + ($nb$0)|0); + HEAP32[((17712 + 20|0))>>2] = $516; + HEAP32[((17712 + 8|0))>>2] = $513; + $517 = $513 | 1; + $$sum2 = (($nb$0) + 4)|0; + $518 = (($514) + ($$sum2)|0); + HEAP32[$518>>2] = $517; + $519 = (($514) + ($511)|0); + HEAP32[$519>>2] = $513; + $520 = $nb$0 | 3; + $521 = (($514) + 4|0); + HEAP32[$521>>2] = $520; + } else { + HEAP32[((17712 + 8|0))>>2] = 0; + HEAP32[((17712 + 20|0))>>2] = 0; + $522 = $511 | 3; + $523 = (($514) + 4|0); + HEAP32[$523>>2] = $522; + $$sum1 = (($511) + 4)|0; + $524 = (($514) + ($$sum1)|0); + $525 = HEAP32[$524>>2]|0; + $526 = $525 | 1; + HEAP32[$524>>2] = $526; + } + $527 = (($514) + 8|0); + $mem$0 = $527; + STACKTOP = sp;return ($mem$0|0); + } + $528 = HEAP32[((17712 + 12|0))>>2]|0; + $529 = ($nb$0>>>0)<($528>>>0); + if ($529) { + $530 = (($528) - ($nb$0))|0; + HEAP32[((17712 + 12|0))>>2] = $530; + $531 = HEAP32[((17712 + 24|0))>>2]|0; + $532 = (($531) + ($nb$0)|0); + HEAP32[((17712 + 24|0))>>2] = $532; + $533 = $530 | 1; + $$sum = (($nb$0) + 4)|0; + $534 = (($531) + ($$sum)|0); + HEAP32[$534>>2] = $533; + $535 = $nb$0 | 3; + $536 = (($531) + 4|0); + HEAP32[$536>>2] = $535; + $537 = (($531) + 8|0); + $mem$0 = $537; + STACKTOP = sp;return ($mem$0|0); + } + $538 = HEAP32[18184>>2]|0; + $539 = ($538|0)==(0); + do { + if ($539) { + $540 = (_sysconf(30)|0); + $541 = (($540) + -1)|0; + $542 = $541 & $540; + $543 = ($542|0)==(0); + if ($543) { + HEAP32[((18184 + 8|0))>>2] = $540; + HEAP32[((18184 + 4|0))>>2] = $540; + HEAP32[((18184 + 12|0))>>2] = -1; + HEAP32[((18184 + 16|0))>>2] = -1; + HEAP32[((18184 + 20|0))>>2] = 0; + HEAP32[((17712 + 444|0))>>2] = 0; + $544 = (_time((0|0))|0); + $545 = $544 & -16; + $546 = $545 ^ 1431655768; + HEAP32[18184>>2] = $546; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $547 = (($nb$0) + 48)|0; + $548 = HEAP32[((18184 + 8|0))>>2]|0; + $549 = (($nb$0) + 47)|0; + $550 = (($548) + ($549))|0; + $551 = (0 - ($548))|0; + $552 = $550 & $551; + $553 = ($552>>>0)>($nb$0>>>0); + if (!($553)) { + $mem$0 = 0; + STACKTOP = sp;return ($mem$0|0); + } + $554 = HEAP32[((17712 + 440|0))>>2]|0; + $555 = ($554|0)==(0); + if (!($555)) { + $556 = HEAP32[((17712 + 432|0))>>2]|0; + $557 = (($556) + ($552))|0; + $558 = ($557>>>0)<=($556>>>0); + $559 = ($557>>>0)>($554>>>0); + $or$cond1$i = $558 | $559; + if ($or$cond1$i) { + $mem$0 = 0; + STACKTOP = sp;return ($mem$0|0); + } + } + $560 = HEAP32[((17712 + 444|0))>>2]|0; + $561 = $560 & 4; + $562 = ($561|0)==(0); + L269: do { + if ($562) { + $563 = HEAP32[((17712 + 24|0))>>2]|0; + $564 = ($563|0)==(0|0); + L271: do { + if ($564) { + label = 182; + } else { + $sp$0$i$i = ((17712 + 448|0)); + while(1) { + $565 = HEAP32[$sp$0$i$i>>2]|0; + $566 = ($565>>>0)>($563>>>0); + if (!($566)) { + $567 = (($sp$0$i$i) + 4|0); + $568 = HEAP32[$567>>2]|0; + $569 = (($565) + ($568)|0); + $570 = ($569>>>0)>($563>>>0); + if ($570) { + break; + } + } + $571 = (($sp$0$i$i) + 8|0); + $572 = HEAP32[$571>>2]|0; + $573 = ($572|0)==(0|0); + if ($573) { + label = 182; + break L271; + } else { + $sp$0$i$i = $572; + } + } + $574 = ($sp$0$i$i|0)==(0|0); + if ($574) { + label = 182; + } else { + $597 = HEAP32[((17712 + 12|0))>>2]|0; + $598 = (($550) - ($597))|0; + $599 = $598 & $551; + $600 = ($599>>>0)<(2147483647); + if ($600) { + $601 = (_sbrk(($599|0))|0); + $602 = HEAP32[$sp$0$i$i>>2]|0; + $603 = HEAP32[$567>>2]|0; + $604 = (($602) + ($603)|0); + $605 = ($601|0)==($604|0); + $$3$i = $605 ? $599 : 0; + $$4$i = $605 ? $601 : (-1); + $br$0$i = $601;$ssize$1$i = $599;$tbase$0$i = $$4$i;$tsize$0$i = $$3$i; + label = 191; + } else { + $tsize$0323841$i = 0; + } + } + } + } while(0); + do { + if ((label|0) == 182) { + $575 = (_sbrk(0)|0); + $576 = ($575|0)==((-1)|0); + if ($576) { + $tsize$0323841$i = 0; + } else { + $577 = $575; + $578 = HEAP32[((18184 + 4|0))>>2]|0; + $579 = (($578) + -1)|0; + $580 = $579 & $577; + $581 = ($580|0)==(0); + if ($581) { + $ssize$0$i = $552; + } else { + $582 = (($579) + ($577))|0; + $583 = (0 - ($578))|0; + $584 = $582 & $583; + $585 = (($552) - ($577))|0; + $586 = (($585) + ($584))|0; + $ssize$0$i = $586; + } + $587 = HEAP32[((17712 + 432|0))>>2]|0; + $588 = (($587) + ($ssize$0$i))|0; + $589 = ($ssize$0$i>>>0)>($nb$0>>>0); + $590 = ($ssize$0$i>>>0)<(2147483647); + $or$cond$i29 = $589 & $590; + if ($or$cond$i29) { + $591 = HEAP32[((17712 + 440|0))>>2]|0; + $592 = ($591|0)==(0); + if (!($592)) { + $593 = ($588>>>0)<=($587>>>0); + $594 = ($588>>>0)>($591>>>0); + $or$cond2$i = $593 | $594; + if ($or$cond2$i) { + $tsize$0323841$i = 0; + break; + } + } + $595 = (_sbrk(($ssize$0$i|0))|0); + $596 = ($595|0)==($575|0); + $ssize$0$$i = $596 ? $ssize$0$i : 0; + $$$i = $596 ? $575 : (-1); + $br$0$i = $595;$ssize$1$i = $ssize$0$i;$tbase$0$i = $$$i;$tsize$0$i = $ssize$0$$i; + label = 191; + } else { + $tsize$0323841$i = 0; + } + } + } + } while(0); + L291: do { + if ((label|0) == 191) { + $606 = (0 - ($ssize$1$i))|0; + $607 = ($tbase$0$i|0)==((-1)|0); + if (!($607)) { + $tbase$247$i = $tbase$0$i;$tsize$246$i = $tsize$0$i; + label = 202; + break L269; + } + $608 = ($br$0$i|0)!=((-1)|0); + $609 = ($ssize$1$i>>>0)<(2147483647); + $or$cond5$i = $608 & $609; + $610 = ($ssize$1$i>>>0)<($547>>>0); + $or$cond6$i = $or$cond5$i & $610; + do { + if ($or$cond6$i) { + $611 = HEAP32[((18184 + 8|0))>>2]|0; + $612 = (($549) - ($ssize$1$i))|0; + $613 = (($612) + ($611))|0; + $614 = (0 - ($611))|0; + $615 = $613 & $614; + $616 = ($615>>>0)<(2147483647); + if ($616) { + $617 = (_sbrk(($615|0))|0); + $618 = ($617|0)==((-1)|0); + if ($618) { + (_sbrk(($606|0))|0); + $tsize$0323841$i = $tsize$0$i; + break L291; + } else { + $619 = (($615) + ($ssize$1$i))|0; + $ssize$2$i = $619; + break; + } + } else { + $ssize$2$i = $ssize$1$i; + } + } else { + $ssize$2$i = $ssize$1$i; + } + } while(0); + $620 = ($br$0$i|0)==((-1)|0); + if ($620) { + $tsize$0323841$i = $tsize$0$i; + } else { + $tbase$247$i = $br$0$i;$tsize$246$i = $ssize$2$i; + label = 202; + break L269; + } + } + } while(0); + $621 = HEAP32[((17712 + 444|0))>>2]|0; + $622 = $621 | 4; + HEAP32[((17712 + 444|0))>>2] = $622; + $tsize$1$i = $tsize$0323841$i; + label = 199; + } else { + $tsize$1$i = 0; + label = 199; + } + } while(0); + if ((label|0) == 199) { + $623 = ($552>>>0)<(2147483647); + if ($623) { + $624 = (_sbrk(($552|0))|0); + $625 = (_sbrk(0)|0); + $notlhs$i = ($624|0)!=((-1)|0); + $notrhs$i = ($625|0)!=((-1)|0); + $or$cond8$not$i = $notrhs$i & $notlhs$i; + $626 = ($624>>>0)<($625>>>0); + $or$cond9$i = $or$cond8$not$i & $626; + if ($or$cond9$i) { + $627 = $625; + $628 = $624; + $629 = (($627) - ($628))|0; + $630 = (($nb$0) + 40)|0; + $631 = ($629>>>0)>($630>>>0); + $$tsize$1$i = $631 ? $629 : $tsize$1$i; + if ($631) { + $tbase$247$i = $624;$tsize$246$i = $$tsize$1$i; + label = 202; + } + } + } + } + if ((label|0) == 202) { + $632 = HEAP32[((17712 + 432|0))>>2]|0; + $633 = (($632) + ($tsize$246$i))|0; + HEAP32[((17712 + 432|0))>>2] = $633; + $634 = HEAP32[((17712 + 436|0))>>2]|0; + $635 = ($633>>>0)>($634>>>0); + if ($635) { + HEAP32[((17712 + 436|0))>>2] = $633; + } + $636 = HEAP32[((17712 + 24|0))>>2]|0; + $637 = ($636|0)==(0|0); + L311: do { + if ($637) { + $638 = HEAP32[((17712 + 16|0))>>2]|0; + $639 = ($638|0)==(0|0); + $640 = ($tbase$247$i>>>0)<($638>>>0); + $or$cond10$i = $639 | $640; + if ($or$cond10$i) { + HEAP32[((17712 + 16|0))>>2] = $tbase$247$i; + } + HEAP32[((17712 + 448|0))>>2] = $tbase$247$i; + HEAP32[((17712 + 452|0))>>2] = $tsize$246$i; + HEAP32[((17712 + 460|0))>>2] = 0; + $641 = HEAP32[18184>>2]|0; + HEAP32[((17712 + 36|0))>>2] = $641; + HEAP32[((17712 + 32|0))>>2] = -1; + $i$02$i$i = 0; + while(1) { + $642 = $i$02$i$i << 1; + $643 = ((17712 + ($642<<2)|0) + 40|0); + $$sum$i$i = (($642) + 3)|0; + $644 = ((17712 + ($$sum$i$i<<2)|0) + 40|0); + HEAP32[$644>>2] = $643; + $$sum1$i$i = (($642) + 2)|0; + $645 = ((17712 + ($$sum1$i$i<<2)|0) + 40|0); + HEAP32[$645>>2] = $643; + $646 = (($i$02$i$i) + 1)|0; + $exitcond$i$i = ($646|0)==(32); + if ($exitcond$i$i) { + break; + } else { + $i$02$i$i = $646; + } + } + $647 = (($tsize$246$i) + -40)|0; + $648 = (($tbase$247$i) + 8|0); + $649 = $648; + $650 = $649 & 7; + $651 = ($650|0)==(0); + if ($651) { + $655 = 0; + } else { + $652 = (0 - ($649))|0; + $653 = $652 & 7; + $655 = $653; + } + $654 = (($tbase$247$i) + ($655)|0); + $656 = (($647) - ($655))|0; + HEAP32[((17712 + 24|0))>>2] = $654; + HEAP32[((17712 + 12|0))>>2] = $656; + $657 = $656 | 1; + $$sum$i14$i = (($655) + 4)|0; + $658 = (($tbase$247$i) + ($$sum$i14$i)|0); + HEAP32[$658>>2] = $657; + $$sum2$i$i = (($tsize$246$i) + -36)|0; + $659 = (($tbase$247$i) + ($$sum2$i$i)|0); + HEAP32[$659>>2] = 40; + $660 = HEAP32[((18184 + 16|0))>>2]|0; + HEAP32[((17712 + 28|0))>>2] = $660; + } else { + $sp$075$i = ((17712 + 448|0)); + while(1) { + $661 = HEAP32[$sp$075$i>>2]|0; + $662 = (($sp$075$i) + 4|0); + $663 = HEAP32[$662>>2]|0; + $664 = (($661) + ($663)|0); + $665 = ($tbase$247$i|0)==($664|0); + if ($665) { + label = 214; + break; + } + $666 = (($sp$075$i) + 8|0); + $667 = HEAP32[$666>>2]|0; + $668 = ($667|0)==(0|0); + if ($668) { + break; + } else { + $sp$075$i = $667; + } + } + if ((label|0) == 214) { + $669 = (($sp$075$i) + 12|0); + $670 = HEAP32[$669>>2]|0; + $671 = $670 & 8; + $672 = ($671|0)==(0); + if ($672) { + $673 = ($636>>>0)>=($661>>>0); + $674 = ($636>>>0)<($tbase$247$i>>>0); + $or$cond49$i = $673 & $674; + if ($or$cond49$i) { + $675 = (($663) + ($tsize$246$i))|0; + HEAP32[$662>>2] = $675; + $676 = HEAP32[((17712 + 12|0))>>2]|0; + $677 = (($676) + ($tsize$246$i))|0; + $678 = (($636) + 8|0); + $679 = $678; + $680 = $679 & 7; + $681 = ($680|0)==(0); + if ($681) { + $685 = 0; + } else { + $682 = (0 - ($679))|0; + $683 = $682 & 7; + $685 = $683; + } + $684 = (($636) + ($685)|0); + $686 = (($677) - ($685))|0; + HEAP32[((17712 + 24|0))>>2] = $684; + HEAP32[((17712 + 12|0))>>2] = $686; + $687 = $686 | 1; + $$sum$i18$i = (($685) + 4)|0; + $688 = (($636) + ($$sum$i18$i)|0); + HEAP32[$688>>2] = $687; + $$sum2$i19$i = (($677) + 4)|0; + $689 = (($636) + ($$sum2$i19$i)|0); + HEAP32[$689>>2] = 40; + $690 = HEAP32[((18184 + 16|0))>>2]|0; + HEAP32[((17712 + 28|0))>>2] = $690; + break; + } + } + } + $691 = HEAP32[((17712 + 16|0))>>2]|0; + $692 = ($tbase$247$i>>>0)<($691>>>0); + if ($692) { + HEAP32[((17712 + 16|0))>>2] = $tbase$247$i; + } + $693 = (($tbase$247$i) + ($tsize$246$i)|0); + $sp$168$i = ((17712 + 448|0)); + while(1) { + $694 = HEAP32[$sp$168$i>>2]|0; + $695 = ($694|0)==($693|0); + if ($695) { + label = 224; + break; + } + $696 = (($sp$168$i) + 8|0); + $697 = HEAP32[$696>>2]|0; + $698 = ($697|0)==(0|0); + if ($698) { + break; + } else { + $sp$168$i = $697; + } + } + if ((label|0) == 224) { + $699 = (($sp$168$i) + 12|0); + $700 = HEAP32[$699>>2]|0; + $701 = $700 & 8; + $702 = ($701|0)==(0); + if ($702) { + HEAP32[$sp$168$i>>2] = $tbase$247$i; + $703 = (($sp$168$i) + 4|0); + $704 = HEAP32[$703>>2]|0; + $705 = (($704) + ($tsize$246$i))|0; + HEAP32[$703>>2] = $705; + $706 = (($tbase$247$i) + 8|0); + $707 = $706; + $708 = $707 & 7; + $709 = ($708|0)==(0); + if ($709) { + $713 = 0; + } else { + $710 = (0 - ($707))|0; + $711 = $710 & 7; + $713 = $711; + } + $712 = (($tbase$247$i) + ($713)|0); + $$sum107$i = (($tsize$246$i) + 8)|0; + $714 = (($tbase$247$i) + ($$sum107$i)|0); + $715 = $714; + $716 = $715 & 7; + $717 = ($716|0)==(0); + if ($717) { + $720 = 0; + } else { + $718 = (0 - ($715))|0; + $719 = $718 & 7; + $720 = $719; + } + $$sum108$i = (($720) + ($tsize$246$i))|0; + $721 = (($tbase$247$i) + ($$sum108$i)|0); + $722 = $721; + $723 = $712; + $724 = (($722) - ($723))|0; + $$sum$i21$i = (($713) + ($nb$0))|0; + $725 = (($tbase$247$i) + ($$sum$i21$i)|0); + $726 = (($724) - ($nb$0))|0; + $727 = $nb$0 | 3; + $$sum1$i22$i = (($713) + 4)|0; + $728 = (($tbase$247$i) + ($$sum1$i22$i)|0); + HEAP32[$728>>2] = $727; + $729 = HEAP32[((17712 + 24|0))>>2]|0; + $730 = ($721|0)==($729|0); + L348: do { + if ($730) { + $731 = HEAP32[((17712 + 12|0))>>2]|0; + $732 = (($731) + ($726))|0; + HEAP32[((17712 + 12|0))>>2] = $732; + HEAP32[((17712 + 24|0))>>2] = $725; + $733 = $732 | 1; + $$sum42$i$i = (($$sum$i21$i) + 4)|0; + $734 = (($tbase$247$i) + ($$sum42$i$i)|0); + HEAP32[$734>>2] = $733; + } else { + $735 = HEAP32[((17712 + 20|0))>>2]|0; + $736 = ($721|0)==($735|0); + if ($736) { + $737 = HEAP32[((17712 + 8|0))>>2]|0; + $738 = (($737) + ($726))|0; + HEAP32[((17712 + 8|0))>>2] = $738; + HEAP32[((17712 + 20|0))>>2] = $725; + $739 = $738 | 1; + $$sum40$i$i = (($$sum$i21$i) + 4)|0; + $740 = (($tbase$247$i) + ($$sum40$i$i)|0); + HEAP32[$740>>2] = $739; + $$sum41$i$i = (($738) + ($$sum$i21$i))|0; + $741 = (($tbase$247$i) + ($$sum41$i$i)|0); + HEAP32[$741>>2] = $738; + break; + } + $$sum2$i23$i = (($tsize$246$i) + 4)|0; + $$sum109$i = (($$sum2$i23$i) + ($720))|0; + $742 = (($tbase$247$i) + ($$sum109$i)|0); + $743 = HEAP32[$742>>2]|0; + $744 = $743 & 3; + $745 = ($744|0)==(1); + if ($745) { + $746 = $743 & -8; + $747 = $743 >>> 3; + $748 = ($743>>>0)<(256); + L356: do { + if ($748) { + $$sum3738$i$i = $720 | 8; + $$sum119$i = (($$sum3738$i$i) + ($tsize$246$i))|0; + $749 = (($tbase$247$i) + ($$sum119$i)|0); + $750 = HEAP32[$749>>2]|0; + $$sum39$i$i = (($tsize$246$i) + 12)|0; + $$sum120$i = (($$sum39$i$i) + ($720))|0; + $751 = (($tbase$247$i) + ($$sum120$i)|0); + $752 = HEAP32[$751>>2]|0; + $753 = $747 << 1; + $754 = ((17712 + ($753<<2)|0) + 40|0); + $755 = ($750|0)==($754|0); + do { + if (!($755)) { + $756 = HEAP32[((17712 + 16|0))>>2]|0; + $757 = ($750>>>0)<($756>>>0); + if ($757) { + _abort(); + // unreachable; + } + $758 = (($750) + 12|0); + $759 = HEAP32[$758>>2]|0; + $760 = ($759|0)==($721|0); + if ($760) { + break; + } + _abort(); + // unreachable; + } + } while(0); + $761 = ($752|0)==($750|0); + if ($761) { + $762 = 1 << $747; + $763 = $762 ^ -1; + $764 = HEAP32[17712>>2]|0; + $765 = $764 & $763; + HEAP32[17712>>2] = $765; + break; + } + $766 = ($752|0)==($754|0); + do { + if ($766) { + $$pre57$i$i = (($752) + 8|0); + $$pre$phi58$i$iZ2D = $$pre57$i$i; + } else { + $767 = HEAP32[((17712 + 16|0))>>2]|0; + $768 = ($752>>>0)<($767>>>0); + if ($768) { + _abort(); + // unreachable; + } + $769 = (($752) + 8|0); + $770 = HEAP32[$769>>2]|0; + $771 = ($770|0)==($721|0); + if ($771) { + $$pre$phi58$i$iZ2D = $769; + break; + } + _abort(); + // unreachable; + } + } while(0); + $772 = (($750) + 12|0); + HEAP32[$772>>2] = $752; + HEAP32[$$pre$phi58$i$iZ2D>>2] = $750; + } else { + $$sum34$i$i = $720 | 24; + $$sum110$i = (($$sum34$i$i) + ($tsize$246$i))|0; + $773 = (($tbase$247$i) + ($$sum110$i)|0); + $774 = HEAP32[$773>>2]|0; + $$sum5$i$i = (($tsize$246$i) + 12)|0; + $$sum111$i = (($$sum5$i$i) + ($720))|0; + $775 = (($tbase$247$i) + ($$sum111$i)|0); + $776 = HEAP32[$775>>2]|0; + $777 = ($776|0)==($721|0); + do { + if ($777) { + $$sum67$i$i = $720 | 16; + $$sum117$i = (($$sum2$i23$i) + ($$sum67$i$i))|0; + $788 = (($tbase$247$i) + ($$sum117$i)|0); + $789 = HEAP32[$788>>2]|0; + $790 = ($789|0)==(0|0); + if ($790) { + $$sum118$i = (($$sum67$i$i) + ($tsize$246$i))|0; + $791 = (($tbase$247$i) + ($$sum118$i)|0); + $792 = HEAP32[$791>>2]|0; + $793 = ($792|0)==(0|0); + if ($793) { + $R$1$i$i = 0; + break; + } else { + $R$0$i$i = $792;$RP$0$i$i = $791; + } + } else { + $R$0$i$i = $789;$RP$0$i$i = $788; + } + while(1) { + $794 = (($R$0$i$i) + 20|0); + $795 = HEAP32[$794>>2]|0; + $796 = ($795|0)==(0|0); + if (!($796)) { + $R$0$i$i = $795;$RP$0$i$i = $794; + continue; + } + $797 = (($R$0$i$i) + 16|0); + $798 = HEAP32[$797>>2]|0; + $799 = ($798|0)==(0|0); + if ($799) { + break; + } else { + $R$0$i$i = $798;$RP$0$i$i = $797; + } + } + $800 = HEAP32[((17712 + 16|0))>>2]|0; + $801 = ($RP$0$i$i>>>0)<($800>>>0); + if ($801) { + _abort(); + // unreachable; + } else { + HEAP32[$RP$0$i$i>>2] = 0; + $R$1$i$i = $R$0$i$i; + break; + } + } else { + $$sum3536$i$i = $720 | 8; + $$sum112$i = (($$sum3536$i$i) + ($tsize$246$i))|0; + $778 = (($tbase$247$i) + ($$sum112$i)|0); + $779 = HEAP32[$778>>2]|0; + $780 = HEAP32[((17712 + 16|0))>>2]|0; + $781 = ($779>>>0)<($780>>>0); + if ($781) { + _abort(); + // unreachable; + } + $782 = (($779) + 12|0); + $783 = HEAP32[$782>>2]|0; + $784 = ($783|0)==($721|0); + if (!($784)) { + _abort(); + // unreachable; + } + $785 = (($776) + 8|0); + $786 = HEAP32[$785>>2]|0; + $787 = ($786|0)==($721|0); + if ($787) { + HEAP32[$782>>2] = $776; + HEAP32[$785>>2] = $779; + $R$1$i$i = $776; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $802 = ($774|0)==(0|0); + if ($802) { + break; + } + $$sum30$i$i = (($tsize$246$i) + 28)|0; + $$sum113$i = (($$sum30$i$i) + ($720))|0; + $803 = (($tbase$247$i) + ($$sum113$i)|0); + $804 = HEAP32[$803>>2]|0; + $805 = ((17712 + ($804<<2)|0) + 304|0); + $806 = HEAP32[$805>>2]|0; + $807 = ($721|0)==($806|0); + do { + if ($807) { + HEAP32[$805>>2] = $R$1$i$i; + $cond$i$i = ($R$1$i$i|0)==(0|0); + if (!($cond$i$i)) { + break; + } + $808 = 1 << $804; + $809 = $808 ^ -1; + $810 = HEAP32[((17712 + 4|0))>>2]|0; + $811 = $810 & $809; + HEAP32[((17712 + 4|0))>>2] = $811; + break L356; + } else { + $812 = HEAP32[((17712 + 16|0))>>2]|0; + $813 = ($774>>>0)<($812>>>0); + if ($813) { + _abort(); + // unreachable; + } + $814 = (($774) + 16|0); + $815 = HEAP32[$814>>2]|0; + $816 = ($815|0)==($721|0); + if ($816) { + HEAP32[$814>>2] = $R$1$i$i; + } else { + $817 = (($774) + 20|0); + HEAP32[$817>>2] = $R$1$i$i; + } + $818 = ($R$1$i$i|0)==(0|0); + if ($818) { + break L356; + } + } + } while(0); + $819 = HEAP32[((17712 + 16|0))>>2]|0; + $820 = ($R$1$i$i>>>0)<($819>>>0); + if ($820) { + _abort(); + // unreachable; + } + $821 = (($R$1$i$i) + 24|0); + HEAP32[$821>>2] = $774; + $$sum3132$i$i = $720 | 16; + $$sum114$i = (($$sum3132$i$i) + ($tsize$246$i))|0; + $822 = (($tbase$247$i) + ($$sum114$i)|0); + $823 = HEAP32[$822>>2]|0; + $824 = ($823|0)==(0|0); + do { + if (!($824)) { + $825 = HEAP32[((17712 + 16|0))>>2]|0; + $826 = ($823>>>0)<($825>>>0); + if ($826) { + _abort(); + // unreachable; + } else { + $827 = (($R$1$i$i) + 16|0); + HEAP32[$827>>2] = $823; + $828 = (($823) + 24|0); + HEAP32[$828>>2] = $R$1$i$i; + break; + } + } + } while(0); + $$sum115$i = (($$sum2$i23$i) + ($$sum3132$i$i))|0; + $829 = (($tbase$247$i) + ($$sum115$i)|0); + $830 = HEAP32[$829>>2]|0; + $831 = ($830|0)==(0|0); + if ($831) { + break; + } + $832 = HEAP32[((17712 + 16|0))>>2]|0; + $833 = ($830>>>0)<($832>>>0); + if ($833) { + _abort(); + // unreachable; + } else { + $834 = (($R$1$i$i) + 20|0); + HEAP32[$834>>2] = $830; + $835 = (($830) + 24|0); + HEAP32[$835>>2] = $R$1$i$i; + break; + } + } + } while(0); + $$sum9$i$i = $746 | $720; + $$sum116$i = (($$sum9$i$i) + ($tsize$246$i))|0; + $836 = (($tbase$247$i) + ($$sum116$i)|0); + $837 = (($746) + ($726))|0; + $oldfirst$0$i$i = $836;$qsize$0$i$i = $837; + } else { + $oldfirst$0$i$i = $721;$qsize$0$i$i = $726; + } + $838 = (($oldfirst$0$i$i) + 4|0); + $839 = HEAP32[$838>>2]|0; + $840 = $839 & -2; + HEAP32[$838>>2] = $840; + $841 = $qsize$0$i$i | 1; + $$sum10$i$i = (($$sum$i21$i) + 4)|0; + $842 = (($tbase$247$i) + ($$sum10$i$i)|0); + HEAP32[$842>>2] = $841; + $$sum11$i24$i = (($qsize$0$i$i) + ($$sum$i21$i))|0; + $843 = (($tbase$247$i) + ($$sum11$i24$i)|0); + HEAP32[$843>>2] = $qsize$0$i$i; + $844 = $qsize$0$i$i >>> 3; + $845 = ($qsize$0$i$i>>>0)<(256); + if ($845) { + $846 = $844 << 1; + $847 = ((17712 + ($846<<2)|0) + 40|0); + $848 = HEAP32[17712>>2]|0; + $849 = 1 << $844; + $850 = $848 & $849; + $851 = ($850|0)==(0); + do { + if ($851) { + $852 = $848 | $849; + HEAP32[17712>>2] = $852; + $$sum26$pre$i$i = (($846) + 2)|0; + $$pre$i25$i = ((17712 + ($$sum26$pre$i$i<<2)|0) + 40|0); + $$pre$phi$i26$iZ2D = $$pre$i25$i;$F4$0$i$i = $847; + } else { + $$sum29$i$i = (($846) + 2)|0; + $853 = ((17712 + ($$sum29$i$i<<2)|0) + 40|0); + $854 = HEAP32[$853>>2]|0; + $855 = HEAP32[((17712 + 16|0))>>2]|0; + $856 = ($854>>>0)<($855>>>0); + if (!($856)) { + $$pre$phi$i26$iZ2D = $853;$F4$0$i$i = $854; + break; + } + _abort(); + // unreachable; + } + } while(0); + HEAP32[$$pre$phi$i26$iZ2D>>2] = $725; + $857 = (($F4$0$i$i) + 12|0); + HEAP32[$857>>2] = $725; + $$sum27$i$i = (($$sum$i21$i) + 8)|0; + $858 = (($tbase$247$i) + ($$sum27$i$i)|0); + HEAP32[$858>>2] = $F4$0$i$i; + $$sum28$i$i = (($$sum$i21$i) + 12)|0; + $859 = (($tbase$247$i) + ($$sum28$i$i)|0); + HEAP32[$859>>2] = $847; + break; + } + $860 = $qsize$0$i$i >>> 8; + $861 = ($860|0)==(0); + do { + if ($861) { + $I7$0$i$i = 0; + } else { + $862 = ($qsize$0$i$i>>>0)>(16777215); + if ($862) { + $I7$0$i$i = 31; + break; + } + $863 = (($860) + 1048320)|0; + $864 = $863 >>> 16; + $865 = $864 & 8; + $866 = $860 << $865; + $867 = (($866) + 520192)|0; + $868 = $867 >>> 16; + $869 = $868 & 4; + $870 = $869 | $865; + $871 = $866 << $869; + $872 = (($871) + 245760)|0; + $873 = $872 >>> 16; + $874 = $873 & 2; + $875 = $870 | $874; + $876 = (14 - ($875))|0; + $877 = $871 << $874; + $878 = $877 >>> 15; + $879 = (($876) + ($878))|0; + $880 = $879 << 1; + $881 = (($879) + 7)|0; + $882 = $qsize$0$i$i >>> $881; + $883 = $882 & 1; + $884 = $883 | $880; + $I7$0$i$i = $884; + } + } while(0); + $885 = ((17712 + ($I7$0$i$i<<2)|0) + 304|0); + $$sum12$i$i = (($$sum$i21$i) + 28)|0; + $886 = (($tbase$247$i) + ($$sum12$i$i)|0); + HEAP32[$886>>2] = $I7$0$i$i; + $$sum13$i$i = (($$sum$i21$i) + 16)|0; + $887 = (($tbase$247$i) + ($$sum13$i$i)|0); + $$sum14$i$i = (($$sum$i21$i) + 20)|0; + $888 = (($tbase$247$i) + ($$sum14$i$i)|0); + HEAP32[$888>>2] = 0; + HEAP32[$887>>2] = 0; + $889 = HEAP32[((17712 + 4|0))>>2]|0; + $890 = 1 << $I7$0$i$i; + $891 = $889 & $890; + $892 = ($891|0)==(0); + if ($892) { + $893 = $889 | $890; + HEAP32[((17712 + 4|0))>>2] = $893; + HEAP32[$885>>2] = $725; + $$sum15$i$i = (($$sum$i21$i) + 24)|0; + $894 = (($tbase$247$i) + ($$sum15$i$i)|0); + HEAP32[$894>>2] = $885; + $$sum16$i$i = (($$sum$i21$i) + 12)|0; + $895 = (($tbase$247$i) + ($$sum16$i$i)|0); + HEAP32[$895>>2] = $725; + $$sum17$i$i = (($$sum$i21$i) + 8)|0; + $896 = (($tbase$247$i) + ($$sum17$i$i)|0); + HEAP32[$896>>2] = $725; + break; + } + $897 = HEAP32[$885>>2]|0; + $898 = ($I7$0$i$i|0)==(31); + if ($898) { + $906 = 0; + } else { + $899 = $I7$0$i$i >>> 1; + $900 = (25 - ($899))|0; + $906 = $900; + } + $901 = (($897) + 4|0); + $902 = HEAP32[$901>>2]|0; + $903 = $902 & -8; + $904 = ($903|0)==($qsize$0$i$i|0); + L445: do { + if ($904) { + $T$0$lcssa$i28$i = $897; + } else { + $905 = $qsize$0$i$i << $906; + $K8$052$i$i = $905;$T$051$i$i = $897; + while(1) { + $913 = $K8$052$i$i >>> 31; + $914 = ((($T$051$i$i) + ($913<<2)|0) + 16|0); + $909 = HEAP32[$914>>2]|0; + $915 = ($909|0)==(0|0); + if ($915) { + break; + } + $907 = $K8$052$i$i << 1; + $908 = (($909) + 4|0); + $910 = HEAP32[$908>>2]|0; + $911 = $910 & -8; + $912 = ($911|0)==($qsize$0$i$i|0); + if ($912) { + $T$0$lcssa$i28$i = $909; + break L445; + } else { + $K8$052$i$i = $907;$T$051$i$i = $909; + } + } + $916 = HEAP32[((17712 + 16|0))>>2]|0; + $917 = ($914>>>0)<($916>>>0); + if ($917) { + _abort(); + // unreachable; + } else { + HEAP32[$914>>2] = $725; + $$sum23$i$i = (($$sum$i21$i) + 24)|0; + $918 = (($tbase$247$i) + ($$sum23$i$i)|0); + HEAP32[$918>>2] = $T$051$i$i; + $$sum24$i$i = (($$sum$i21$i) + 12)|0; + $919 = (($tbase$247$i) + ($$sum24$i$i)|0); + HEAP32[$919>>2] = $725; + $$sum25$i$i = (($$sum$i21$i) + 8)|0; + $920 = (($tbase$247$i) + ($$sum25$i$i)|0); + HEAP32[$920>>2] = $725; + break L348; + } + } + } while(0); + $921 = (($T$0$lcssa$i28$i) + 8|0); + $922 = HEAP32[$921>>2]|0; + $923 = HEAP32[((17712 + 16|0))>>2]|0; + $924 = ($T$0$lcssa$i28$i>>>0)<($923>>>0); + if ($924) { + _abort(); + // unreachable; + } + $925 = ($922>>>0)<($923>>>0); + if ($925) { + _abort(); + // unreachable; + } else { + $926 = (($922) + 12|0); + HEAP32[$926>>2] = $725; + HEAP32[$921>>2] = $725; + $$sum20$i$i = (($$sum$i21$i) + 8)|0; + $927 = (($tbase$247$i) + ($$sum20$i$i)|0); + HEAP32[$927>>2] = $922; + $$sum21$i$i = (($$sum$i21$i) + 12)|0; + $928 = (($tbase$247$i) + ($$sum21$i$i)|0); + HEAP32[$928>>2] = $T$0$lcssa$i28$i; + $$sum22$i$i = (($$sum$i21$i) + 24)|0; + $929 = (($tbase$247$i) + ($$sum22$i$i)|0); + HEAP32[$929>>2] = 0; + break; + } + } + } while(0); + $$sum1819$i$i = $713 | 8; + $930 = (($tbase$247$i) + ($$sum1819$i$i)|0); + $mem$0 = $930; + STACKTOP = sp;return ($mem$0|0); + } + } + $sp$0$i$i$i = ((17712 + 448|0)); + while(1) { + $931 = HEAP32[$sp$0$i$i$i>>2]|0; + $932 = ($931>>>0)>($636>>>0); + if (!($932)) { + $933 = (($sp$0$i$i$i) + 4|0); + $934 = HEAP32[$933>>2]|0; + $935 = (($931) + ($934)|0); + $936 = ($935>>>0)>($636>>>0); + if ($936) { + break; + } + } + $937 = (($sp$0$i$i$i) + 8|0); + $938 = HEAP32[$937>>2]|0; + $sp$0$i$i$i = $938; + } + $$sum$i15$i = (($934) + -47)|0; + $$sum1$i16$i = (($934) + -39)|0; + $939 = (($931) + ($$sum1$i16$i)|0); + $940 = $939; + $941 = $940 & 7; + $942 = ($941|0)==(0); + if ($942) { + $945 = 0; + } else { + $943 = (0 - ($940))|0; + $944 = $943 & 7; + $945 = $944; + } + $$sum2$i17$i = (($$sum$i15$i) + ($945))|0; + $946 = (($931) + ($$sum2$i17$i)|0); + $947 = (($636) + 16|0); + $948 = ($946>>>0)<($947>>>0); + $949 = $948 ? $636 : $946; + $950 = (($949) + 8|0); + $951 = (($tsize$246$i) + -40)|0; + $952 = (($tbase$247$i) + 8|0); + $953 = $952; + $954 = $953 & 7; + $955 = ($954|0)==(0); + if ($955) { + $959 = 0; + } else { + $956 = (0 - ($953))|0; + $957 = $956 & 7; + $959 = $957; + } + $958 = (($tbase$247$i) + ($959)|0); + $960 = (($951) - ($959))|0; + HEAP32[((17712 + 24|0))>>2] = $958; + HEAP32[((17712 + 12|0))>>2] = $960; + $961 = $960 | 1; + $$sum$i$i$i = (($959) + 4)|0; + $962 = (($tbase$247$i) + ($$sum$i$i$i)|0); + HEAP32[$962>>2] = $961; + $$sum2$i$i$i = (($tsize$246$i) + -36)|0; + $963 = (($tbase$247$i) + ($$sum2$i$i$i)|0); + HEAP32[$963>>2] = 40; + $964 = HEAP32[((18184 + 16|0))>>2]|0; + HEAP32[((17712 + 28|0))>>2] = $964; + $965 = (($949) + 4|0); + HEAP32[$965>>2] = 27; + ;HEAP32[$950+0>>2]=HEAP32[((17712 + 448|0))+0>>2]|0;HEAP32[$950+4>>2]=HEAP32[((17712 + 448|0))+4>>2]|0;HEAP32[$950+8>>2]=HEAP32[((17712 + 448|0))+8>>2]|0;HEAP32[$950+12>>2]=HEAP32[((17712 + 448|0))+12>>2]|0; + HEAP32[((17712 + 448|0))>>2] = $tbase$247$i; + HEAP32[((17712 + 452|0))>>2] = $tsize$246$i; + HEAP32[((17712 + 460|0))>>2] = 0; + HEAP32[((17712 + 456|0))>>2] = $950; + $966 = (($949) + 28|0); + HEAP32[$966>>2] = 7; + $967 = (($949) + 32|0); + $968 = ($967>>>0)<($935>>>0); + if ($968) { + $970 = $966; + while(1) { + $969 = (($970) + 4|0); + HEAP32[$969>>2] = 7; + $971 = (($970) + 8|0); + $972 = ($971>>>0)<($935>>>0); + if ($972) { + $970 = $969; + } else { + break; + } + } + } + $973 = ($949|0)==($636|0); + if (!($973)) { + $974 = $949; + $975 = $636; + $976 = (($974) - ($975))|0; + $977 = (($636) + ($976)|0); + $$sum3$i$i = (($976) + 4)|0; + $978 = (($636) + ($$sum3$i$i)|0); + $979 = HEAP32[$978>>2]|0; + $980 = $979 & -2; + HEAP32[$978>>2] = $980; + $981 = $976 | 1; + $982 = (($636) + 4|0); + HEAP32[$982>>2] = $981; + HEAP32[$977>>2] = $976; + $983 = $976 >>> 3; + $984 = ($976>>>0)<(256); + if ($984) { + $985 = $983 << 1; + $986 = ((17712 + ($985<<2)|0) + 40|0); + $987 = HEAP32[17712>>2]|0; + $988 = 1 << $983; + $989 = $987 & $988; + $990 = ($989|0)==(0); + do { + if ($990) { + $991 = $987 | $988; + HEAP32[17712>>2] = $991; + $$sum10$pre$i$i = (($985) + 2)|0; + $$pre$i$i = ((17712 + ($$sum10$pre$i$i<<2)|0) + 40|0); + $$pre$phi$i$iZ2D = $$pre$i$i;$F$0$i$i = $986; + } else { + $$sum11$i$i = (($985) + 2)|0; + $992 = ((17712 + ($$sum11$i$i<<2)|0) + 40|0); + $993 = HEAP32[$992>>2]|0; + $994 = HEAP32[((17712 + 16|0))>>2]|0; + $995 = ($993>>>0)<($994>>>0); + if (!($995)) { + $$pre$phi$i$iZ2D = $992;$F$0$i$i = $993; + break; + } + _abort(); + // unreachable; + } + } while(0); + HEAP32[$$pre$phi$i$iZ2D>>2] = $636; + $996 = (($F$0$i$i) + 12|0); + HEAP32[$996>>2] = $636; + $997 = (($636) + 8|0); + HEAP32[$997>>2] = $F$0$i$i; + $998 = (($636) + 12|0); + HEAP32[$998>>2] = $986; + break; + } + $999 = $976 >>> 8; + $1000 = ($999|0)==(0); + if ($1000) { + $I1$0$i$i = 0; + } else { + $1001 = ($976>>>0)>(16777215); + if ($1001) { + $I1$0$i$i = 31; + } else { + $1002 = (($999) + 1048320)|0; + $1003 = $1002 >>> 16; + $1004 = $1003 & 8; + $1005 = $999 << $1004; + $1006 = (($1005) + 520192)|0; + $1007 = $1006 >>> 16; + $1008 = $1007 & 4; + $1009 = $1008 | $1004; + $1010 = $1005 << $1008; + $1011 = (($1010) + 245760)|0; + $1012 = $1011 >>> 16; + $1013 = $1012 & 2; + $1014 = $1009 | $1013; + $1015 = (14 - ($1014))|0; + $1016 = $1010 << $1013; + $1017 = $1016 >>> 15; + $1018 = (($1015) + ($1017))|0; + $1019 = $1018 << 1; + $1020 = (($1018) + 7)|0; + $1021 = $976 >>> $1020; + $1022 = $1021 & 1; + $1023 = $1022 | $1019; + $I1$0$i$i = $1023; + } + } + $1024 = ((17712 + ($I1$0$i$i<<2)|0) + 304|0); + $1025 = (($636) + 28|0); + $I1$0$c$i$i = $I1$0$i$i; + HEAP32[$1025>>2] = $I1$0$c$i$i; + $1026 = (($636) + 20|0); + HEAP32[$1026>>2] = 0; + $1027 = (($636) + 16|0); + HEAP32[$1027>>2] = 0; + $1028 = HEAP32[((17712 + 4|0))>>2]|0; + $1029 = 1 << $I1$0$i$i; + $1030 = $1028 & $1029; + $1031 = ($1030|0)==(0); + if ($1031) { + $1032 = $1028 | $1029; + HEAP32[((17712 + 4|0))>>2] = $1032; + HEAP32[$1024>>2] = $636; + $1033 = (($636) + 24|0); + HEAP32[$1033>>2] = $1024; + $1034 = (($636) + 12|0); + HEAP32[$1034>>2] = $636; + $1035 = (($636) + 8|0); + HEAP32[$1035>>2] = $636; + break; + } + $1036 = HEAP32[$1024>>2]|0; + $1037 = ($I1$0$i$i|0)==(31); + if ($1037) { + $1045 = 0; + } else { + $1038 = $I1$0$i$i >>> 1; + $1039 = (25 - ($1038))|0; + $1045 = $1039; + } + $1040 = (($1036) + 4|0); + $1041 = HEAP32[$1040>>2]|0; + $1042 = $1041 & -8; + $1043 = ($1042|0)==($976|0); + L499: do { + if ($1043) { + $T$0$lcssa$i$i = $1036; + } else { + $1044 = $976 << $1045; + $K2$014$i$i = $1044;$T$013$i$i = $1036; + while(1) { + $1052 = $K2$014$i$i >>> 31; + $1053 = ((($T$013$i$i) + ($1052<<2)|0) + 16|0); + $1048 = HEAP32[$1053>>2]|0; + $1054 = ($1048|0)==(0|0); + if ($1054) { + break; + } + $1046 = $K2$014$i$i << 1; + $1047 = (($1048) + 4|0); + $1049 = HEAP32[$1047>>2]|0; + $1050 = $1049 & -8; + $1051 = ($1050|0)==($976|0); + if ($1051) { + $T$0$lcssa$i$i = $1048; + break L499; + } else { + $K2$014$i$i = $1046;$T$013$i$i = $1048; + } + } + $1055 = HEAP32[((17712 + 16|0))>>2]|0; + $1056 = ($1053>>>0)<($1055>>>0); + if ($1056) { + _abort(); + // unreachable; + } else { + HEAP32[$1053>>2] = $636; + $1057 = (($636) + 24|0); + HEAP32[$1057>>2] = $T$013$i$i; + $1058 = (($636) + 12|0); + HEAP32[$1058>>2] = $636; + $1059 = (($636) + 8|0); + HEAP32[$1059>>2] = $636; + break L311; + } + } + } while(0); + $1060 = (($T$0$lcssa$i$i) + 8|0); + $1061 = HEAP32[$1060>>2]|0; + $1062 = HEAP32[((17712 + 16|0))>>2]|0; + $1063 = ($T$0$lcssa$i$i>>>0)<($1062>>>0); + if ($1063) { + _abort(); + // unreachable; + } + $1064 = ($1061>>>0)<($1062>>>0); + if ($1064) { + _abort(); + // unreachable; + } else { + $1065 = (($1061) + 12|0); + HEAP32[$1065>>2] = $636; + HEAP32[$1060>>2] = $636; + $1066 = (($636) + 8|0); + HEAP32[$1066>>2] = $1061; + $1067 = (($636) + 12|0); + HEAP32[$1067>>2] = $T$0$lcssa$i$i; + $1068 = (($636) + 24|0); + HEAP32[$1068>>2] = 0; + break; + } + } + } + } while(0); + $1069 = HEAP32[((17712 + 12|0))>>2]|0; + $1070 = ($1069>>>0)>($nb$0>>>0); + if ($1070) { + $1071 = (($1069) - ($nb$0))|0; + HEAP32[((17712 + 12|0))>>2] = $1071; + $1072 = HEAP32[((17712 + 24|0))>>2]|0; + $1073 = (($1072) + ($nb$0)|0); + HEAP32[((17712 + 24|0))>>2] = $1073; + $1074 = $1071 | 1; + $$sum$i32 = (($nb$0) + 4)|0; + $1075 = (($1072) + ($$sum$i32)|0); + HEAP32[$1075>>2] = $1074; + $1076 = $nb$0 | 3; + $1077 = (($1072) + 4|0); + HEAP32[$1077>>2] = $1076; + $1078 = (($1072) + 8|0); + $mem$0 = $1078; + STACKTOP = sp;return ($mem$0|0); + } + } + $1079 = (___errno_location()|0); + HEAP32[$1079>>2] = 12; + $mem$0 = 0; + STACKTOP = sp;return ($mem$0|0); +} +function _free($mem) { + $mem = $mem|0; + var $$pre = 0, $$pre$phi68Z2D = 0, $$pre$phi70Z2D = 0, $$pre$phiZ2D = 0, $$pre67 = 0, $$pre69 = 0, $$sum = 0, $$sum16$pre = 0, $$sum17 = 0, $$sum18 = 0, $$sum19 = 0, $$sum2 = 0, $$sum20 = 0, $$sum2324 = 0, $$sum25 = 0, $$sum26 = 0, $$sum28 = 0, $$sum29 = 0, $$sum3 = 0, $$sum30 = 0; + var $$sum31 = 0, $$sum32 = 0, $$sum33 = 0, $$sum34 = 0, $$sum35 = 0, $$sum36 = 0, $$sum37 = 0, $$sum5 = 0, $$sum67 = 0, $$sum8 = 0, $$sum9 = 0, $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0; + var $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0; + var $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0; + var $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0; + var $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0; + var $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0; + var $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0; + var $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0; + var $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0; + var $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0; + var $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0; + var $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0; + var $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0; + var $322 = 0, $323 = 0, $324 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0; + var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0; + var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0; + var $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $F16$0 = 0, $I18$0 = 0, $I18$0$c = 0, $K19$057 = 0; + var $R$0 = 0, $R$1 = 0, $R7$0 = 0, $R7$1 = 0, $RP$0 = 0, $RP9$0 = 0, $T$0$lcssa = 0, $T$056 = 0, $cond = 0, $cond54 = 0, $p$0 = 0, $psize$0 = 0, $psize$1 = 0, $sp$0$i = 0, $sp$0$in$i = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = ($mem|0)==(0|0); + if ($0) { + STACKTOP = sp;return; + } + $1 = (($mem) + -8|0); + $2 = HEAP32[((17712 + 16|0))>>2]|0; + $3 = ($1>>>0)<($2>>>0); + if ($3) { + _abort(); + // unreachable; + } + $4 = (($mem) + -4|0); + $5 = HEAP32[$4>>2]|0; + $6 = $5 & 3; + $7 = ($6|0)==(1); + if ($7) { + _abort(); + // unreachable; + } + $8 = $5 & -8; + $$sum = (($8) + -8)|0; + $9 = (($mem) + ($$sum)|0); + $10 = $5 & 1; + $11 = ($10|0)==(0); + do { + if ($11) { + $12 = HEAP32[$1>>2]|0; + $13 = ($6|0)==(0); + if ($13) { + STACKTOP = sp;return; + } + $$sum2 = (-8 - ($12))|0; + $14 = (($mem) + ($$sum2)|0); + $15 = (($12) + ($8))|0; + $16 = ($14>>>0)<($2>>>0); + if ($16) { + _abort(); + // unreachable; + } + $17 = HEAP32[((17712 + 20|0))>>2]|0; + $18 = ($14|0)==($17|0); + if ($18) { + $$sum3 = (($8) + -4)|0; + $104 = (($mem) + ($$sum3)|0); + $105 = HEAP32[$104>>2]|0; + $106 = $105 & 3; + $107 = ($106|0)==(3); + if (!($107)) { + $p$0 = $14;$psize$0 = $15; + break; + } + HEAP32[((17712 + 8|0))>>2] = $15; + $108 = HEAP32[$104>>2]|0; + $109 = $108 & -2; + HEAP32[$104>>2] = $109; + $110 = $15 | 1; + $$sum26 = (($$sum2) + 4)|0; + $111 = (($mem) + ($$sum26)|0); + HEAP32[$111>>2] = $110; + HEAP32[$9>>2] = $15; + STACKTOP = sp;return; + } + $19 = $12 >>> 3; + $20 = ($12>>>0)<(256); + if ($20) { + $$sum36 = (($$sum2) + 8)|0; + $21 = (($mem) + ($$sum36)|0); + $22 = HEAP32[$21>>2]|0; + $$sum37 = (($$sum2) + 12)|0; + $23 = (($mem) + ($$sum37)|0); + $24 = HEAP32[$23>>2]|0; + $25 = $19 << 1; + $26 = ((17712 + ($25<<2)|0) + 40|0); + $27 = ($22|0)==($26|0); + if (!($27)) { + $28 = ($22>>>0)<($2>>>0); + if ($28) { + _abort(); + // unreachable; + } + $29 = (($22) + 12|0); + $30 = HEAP32[$29>>2]|0; + $31 = ($30|0)==($14|0); + if (!($31)) { + _abort(); + // unreachable; + } + } + $32 = ($24|0)==($22|0); + if ($32) { + $33 = 1 << $19; + $34 = $33 ^ -1; + $35 = HEAP32[17712>>2]|0; + $36 = $35 & $34; + HEAP32[17712>>2] = $36; + $p$0 = $14;$psize$0 = $15; + break; + } + $37 = ($24|0)==($26|0); + if ($37) { + $$pre69 = (($24) + 8|0); + $$pre$phi70Z2D = $$pre69; + } else { + $38 = ($24>>>0)<($2>>>0); + if ($38) { + _abort(); + // unreachable; + } + $39 = (($24) + 8|0); + $40 = HEAP32[$39>>2]|0; + $41 = ($40|0)==($14|0); + if ($41) { + $$pre$phi70Z2D = $39; + } else { + _abort(); + // unreachable; + } + } + $42 = (($22) + 12|0); + HEAP32[$42>>2] = $24; + HEAP32[$$pre$phi70Z2D>>2] = $22; + $p$0 = $14;$psize$0 = $15; + break; + } + $$sum28 = (($$sum2) + 24)|0; + $43 = (($mem) + ($$sum28)|0); + $44 = HEAP32[$43>>2]|0; + $$sum29 = (($$sum2) + 12)|0; + $45 = (($mem) + ($$sum29)|0); + $46 = HEAP32[$45>>2]|0; + $47 = ($46|0)==($14|0); + do { + if ($47) { + $$sum31 = (($$sum2) + 20)|0; + $57 = (($mem) + ($$sum31)|0); + $58 = HEAP32[$57>>2]|0; + $59 = ($58|0)==(0|0); + if ($59) { + $$sum30 = (($$sum2) + 16)|0; + $60 = (($mem) + ($$sum30)|0); + $61 = HEAP32[$60>>2]|0; + $62 = ($61|0)==(0|0); + if ($62) { + $R$1 = 0; + break; + } else { + $R$0 = $61;$RP$0 = $60; + } + } else { + $R$0 = $58;$RP$0 = $57; + } + while(1) { + $63 = (($R$0) + 20|0); + $64 = HEAP32[$63>>2]|0; + $65 = ($64|0)==(0|0); + if (!($65)) { + $R$0 = $64;$RP$0 = $63; + continue; + } + $66 = (($R$0) + 16|0); + $67 = HEAP32[$66>>2]|0; + $68 = ($67|0)==(0|0); + if ($68) { + break; + } else { + $R$0 = $67;$RP$0 = $66; + } + } + $69 = ($RP$0>>>0)<($2>>>0); + if ($69) { + _abort(); + // unreachable; + } else { + HEAP32[$RP$0>>2] = 0; + $R$1 = $R$0; + break; + } + } else { + $$sum35 = (($$sum2) + 8)|0; + $48 = (($mem) + ($$sum35)|0); + $49 = HEAP32[$48>>2]|0; + $50 = ($49>>>0)<($2>>>0); + if ($50) { + _abort(); + // unreachable; + } + $51 = (($49) + 12|0); + $52 = HEAP32[$51>>2]|0; + $53 = ($52|0)==($14|0); + if (!($53)) { + _abort(); + // unreachable; + } + $54 = (($46) + 8|0); + $55 = HEAP32[$54>>2]|0; + $56 = ($55|0)==($14|0); + if ($56) { + HEAP32[$51>>2] = $46; + HEAP32[$54>>2] = $49; + $R$1 = $46; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $70 = ($44|0)==(0|0); + if ($70) { + $p$0 = $14;$psize$0 = $15; + } else { + $$sum32 = (($$sum2) + 28)|0; + $71 = (($mem) + ($$sum32)|0); + $72 = HEAP32[$71>>2]|0; + $73 = ((17712 + ($72<<2)|0) + 304|0); + $74 = HEAP32[$73>>2]|0; + $75 = ($14|0)==($74|0); + if ($75) { + HEAP32[$73>>2] = $R$1; + $cond = ($R$1|0)==(0|0); + if ($cond) { + $76 = 1 << $72; + $77 = $76 ^ -1; + $78 = HEAP32[((17712 + 4|0))>>2]|0; + $79 = $78 & $77; + HEAP32[((17712 + 4|0))>>2] = $79; + $p$0 = $14;$psize$0 = $15; + break; + } + } else { + $80 = HEAP32[((17712 + 16|0))>>2]|0; + $81 = ($44>>>0)<($80>>>0); + if ($81) { + _abort(); + // unreachable; + } + $82 = (($44) + 16|0); + $83 = HEAP32[$82>>2]|0; + $84 = ($83|0)==($14|0); + if ($84) { + HEAP32[$82>>2] = $R$1; + } else { + $85 = (($44) + 20|0); + HEAP32[$85>>2] = $R$1; + } + $86 = ($R$1|0)==(0|0); + if ($86) { + $p$0 = $14;$psize$0 = $15; + break; + } + } + $87 = HEAP32[((17712 + 16|0))>>2]|0; + $88 = ($R$1>>>0)<($87>>>0); + if ($88) { + _abort(); + // unreachable; + } + $89 = (($R$1) + 24|0); + HEAP32[$89>>2] = $44; + $$sum33 = (($$sum2) + 16)|0; + $90 = (($mem) + ($$sum33)|0); + $91 = HEAP32[$90>>2]|0; + $92 = ($91|0)==(0|0); + do { + if (!($92)) { + $93 = HEAP32[((17712 + 16|0))>>2]|0; + $94 = ($91>>>0)<($93>>>0); + if ($94) { + _abort(); + // unreachable; + } else { + $95 = (($R$1) + 16|0); + HEAP32[$95>>2] = $91; + $96 = (($91) + 24|0); + HEAP32[$96>>2] = $R$1; + break; + } + } + } while(0); + $$sum34 = (($$sum2) + 20)|0; + $97 = (($mem) + ($$sum34)|0); + $98 = HEAP32[$97>>2]|0; + $99 = ($98|0)==(0|0); + if ($99) { + $p$0 = $14;$psize$0 = $15; + } else { + $100 = HEAP32[((17712 + 16|0))>>2]|0; + $101 = ($98>>>0)<($100>>>0); + if ($101) { + _abort(); + // unreachable; + } else { + $102 = (($R$1) + 20|0); + HEAP32[$102>>2] = $98; + $103 = (($98) + 24|0); + HEAP32[$103>>2] = $R$1; + $p$0 = $14;$psize$0 = $15; + break; + } + } + } + } else { + $p$0 = $1;$psize$0 = $8; + } + } while(0); + $112 = ($p$0>>>0)<($9>>>0); + if (!($112)) { + _abort(); + // unreachable; + } + $$sum25 = (($8) + -4)|0; + $113 = (($mem) + ($$sum25)|0); + $114 = HEAP32[$113>>2]|0; + $115 = $114 & 1; + $116 = ($115|0)==(0); + if ($116) { + _abort(); + // unreachable; + } + $117 = $114 & 2; + $118 = ($117|0)==(0); + if ($118) { + $119 = HEAP32[((17712 + 24|0))>>2]|0; + $120 = ($9|0)==($119|0); + if ($120) { + $121 = HEAP32[((17712 + 12|0))>>2]|0; + $122 = (($121) + ($psize$0))|0; + HEAP32[((17712 + 12|0))>>2] = $122; + HEAP32[((17712 + 24|0))>>2] = $p$0; + $123 = $122 | 1; + $124 = (($p$0) + 4|0); + HEAP32[$124>>2] = $123; + $125 = HEAP32[((17712 + 20|0))>>2]|0; + $126 = ($p$0|0)==($125|0); + if (!($126)) { + STACKTOP = sp;return; + } + HEAP32[((17712 + 20|0))>>2] = 0; + HEAP32[((17712 + 8|0))>>2] = 0; + STACKTOP = sp;return; + } + $127 = HEAP32[((17712 + 20|0))>>2]|0; + $128 = ($9|0)==($127|0); + if ($128) { + $129 = HEAP32[((17712 + 8|0))>>2]|0; + $130 = (($129) + ($psize$0))|0; + HEAP32[((17712 + 8|0))>>2] = $130; + HEAP32[((17712 + 20|0))>>2] = $p$0; + $131 = $130 | 1; + $132 = (($p$0) + 4|0); + HEAP32[$132>>2] = $131; + $133 = (($p$0) + ($130)|0); + HEAP32[$133>>2] = $130; + STACKTOP = sp;return; + } + $134 = $114 & -8; + $135 = (($134) + ($psize$0))|0; + $136 = $114 >>> 3; + $137 = ($114>>>0)<(256); + do { + if ($137) { + $138 = (($mem) + ($8)|0); + $139 = HEAP32[$138>>2]|0; + $$sum2324 = $8 | 4; + $140 = (($mem) + ($$sum2324)|0); + $141 = HEAP32[$140>>2]|0; + $142 = $136 << 1; + $143 = ((17712 + ($142<<2)|0) + 40|0); + $144 = ($139|0)==($143|0); + if (!($144)) { + $145 = HEAP32[((17712 + 16|0))>>2]|0; + $146 = ($139>>>0)<($145>>>0); + if ($146) { + _abort(); + // unreachable; + } + $147 = (($139) + 12|0); + $148 = HEAP32[$147>>2]|0; + $149 = ($148|0)==($9|0); + if (!($149)) { + _abort(); + // unreachable; + } + } + $150 = ($141|0)==($139|0); + if ($150) { + $151 = 1 << $136; + $152 = $151 ^ -1; + $153 = HEAP32[17712>>2]|0; + $154 = $153 & $152; + HEAP32[17712>>2] = $154; + break; + } + $155 = ($141|0)==($143|0); + if ($155) { + $$pre67 = (($141) + 8|0); + $$pre$phi68Z2D = $$pre67; + } else { + $156 = HEAP32[((17712 + 16|0))>>2]|0; + $157 = ($141>>>0)<($156>>>0); + if ($157) { + _abort(); + // unreachable; + } + $158 = (($141) + 8|0); + $159 = HEAP32[$158>>2]|0; + $160 = ($159|0)==($9|0); + if ($160) { + $$pre$phi68Z2D = $158; + } else { + _abort(); + // unreachable; + } + } + $161 = (($139) + 12|0); + HEAP32[$161>>2] = $141; + HEAP32[$$pre$phi68Z2D>>2] = $139; + } else { + $$sum5 = (($8) + 16)|0; + $162 = (($mem) + ($$sum5)|0); + $163 = HEAP32[$162>>2]|0; + $$sum67 = $8 | 4; + $164 = (($mem) + ($$sum67)|0); + $165 = HEAP32[$164>>2]|0; + $166 = ($165|0)==($9|0); + do { + if ($166) { + $$sum9 = (($8) + 12)|0; + $177 = (($mem) + ($$sum9)|0); + $178 = HEAP32[$177>>2]|0; + $179 = ($178|0)==(0|0); + if ($179) { + $$sum8 = (($8) + 8)|0; + $180 = (($mem) + ($$sum8)|0); + $181 = HEAP32[$180>>2]|0; + $182 = ($181|0)==(0|0); + if ($182) { + $R7$1 = 0; + break; + } else { + $R7$0 = $181;$RP9$0 = $180; + } + } else { + $R7$0 = $178;$RP9$0 = $177; + } + while(1) { + $183 = (($R7$0) + 20|0); + $184 = HEAP32[$183>>2]|0; + $185 = ($184|0)==(0|0); + if (!($185)) { + $R7$0 = $184;$RP9$0 = $183; + continue; + } + $186 = (($R7$0) + 16|0); + $187 = HEAP32[$186>>2]|0; + $188 = ($187|0)==(0|0); + if ($188) { + break; + } else { + $R7$0 = $187;$RP9$0 = $186; + } + } + $189 = HEAP32[((17712 + 16|0))>>2]|0; + $190 = ($RP9$0>>>0)<($189>>>0); + if ($190) { + _abort(); + // unreachable; + } else { + HEAP32[$RP9$0>>2] = 0; + $R7$1 = $R7$0; + break; + } + } else { + $167 = (($mem) + ($8)|0); + $168 = HEAP32[$167>>2]|0; + $169 = HEAP32[((17712 + 16|0))>>2]|0; + $170 = ($168>>>0)<($169>>>0); + if ($170) { + _abort(); + // unreachable; + } + $171 = (($168) + 12|0); + $172 = HEAP32[$171>>2]|0; + $173 = ($172|0)==($9|0); + if (!($173)) { + _abort(); + // unreachable; + } + $174 = (($165) + 8|0); + $175 = HEAP32[$174>>2]|0; + $176 = ($175|0)==($9|0); + if ($176) { + HEAP32[$171>>2] = $165; + HEAP32[$174>>2] = $168; + $R7$1 = $165; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $191 = ($163|0)==(0|0); + if (!($191)) { + $$sum18 = (($8) + 20)|0; + $192 = (($mem) + ($$sum18)|0); + $193 = HEAP32[$192>>2]|0; + $194 = ((17712 + ($193<<2)|0) + 304|0); + $195 = HEAP32[$194>>2]|0; + $196 = ($9|0)==($195|0); + if ($196) { + HEAP32[$194>>2] = $R7$1; + $cond54 = ($R7$1|0)==(0|0); + if ($cond54) { + $197 = 1 << $193; + $198 = $197 ^ -1; + $199 = HEAP32[((17712 + 4|0))>>2]|0; + $200 = $199 & $198; + HEAP32[((17712 + 4|0))>>2] = $200; + break; + } + } else { + $201 = HEAP32[((17712 + 16|0))>>2]|0; + $202 = ($163>>>0)<($201>>>0); + if ($202) { + _abort(); + // unreachable; + } + $203 = (($163) + 16|0); + $204 = HEAP32[$203>>2]|0; + $205 = ($204|0)==($9|0); + if ($205) { + HEAP32[$203>>2] = $R7$1; + } else { + $206 = (($163) + 20|0); + HEAP32[$206>>2] = $R7$1; + } + $207 = ($R7$1|0)==(0|0); + if ($207) { + break; + } + } + $208 = HEAP32[((17712 + 16|0))>>2]|0; + $209 = ($R7$1>>>0)<($208>>>0); + if ($209) { + _abort(); + // unreachable; + } + $210 = (($R7$1) + 24|0); + HEAP32[$210>>2] = $163; + $$sum19 = (($8) + 8)|0; + $211 = (($mem) + ($$sum19)|0); + $212 = HEAP32[$211>>2]|0; + $213 = ($212|0)==(0|0); + do { + if (!($213)) { + $214 = HEAP32[((17712 + 16|0))>>2]|0; + $215 = ($212>>>0)<($214>>>0); + if ($215) { + _abort(); + // unreachable; + } else { + $216 = (($R7$1) + 16|0); + HEAP32[$216>>2] = $212; + $217 = (($212) + 24|0); + HEAP32[$217>>2] = $R7$1; + break; + } + } + } while(0); + $$sum20 = (($8) + 12)|0; + $218 = (($mem) + ($$sum20)|0); + $219 = HEAP32[$218>>2]|0; + $220 = ($219|0)==(0|0); + if (!($220)) { + $221 = HEAP32[((17712 + 16|0))>>2]|0; + $222 = ($219>>>0)<($221>>>0); + if ($222) { + _abort(); + // unreachable; + } else { + $223 = (($R7$1) + 20|0); + HEAP32[$223>>2] = $219; + $224 = (($219) + 24|0); + HEAP32[$224>>2] = $R7$1; + break; + } + } + } + } + } while(0); + $225 = $135 | 1; + $226 = (($p$0) + 4|0); + HEAP32[$226>>2] = $225; + $227 = (($p$0) + ($135)|0); + HEAP32[$227>>2] = $135; + $228 = HEAP32[((17712 + 20|0))>>2]|0; + $229 = ($p$0|0)==($228|0); + if ($229) { + HEAP32[((17712 + 8|0))>>2] = $135; + STACKTOP = sp;return; + } else { + $psize$1 = $135; + } + } else { + $230 = $114 & -2; + HEAP32[$113>>2] = $230; + $231 = $psize$0 | 1; + $232 = (($p$0) + 4|0); + HEAP32[$232>>2] = $231; + $233 = (($p$0) + ($psize$0)|0); + HEAP32[$233>>2] = $psize$0; + $psize$1 = $psize$0; + } + $234 = $psize$1 >>> 3; + $235 = ($psize$1>>>0)<(256); + if ($235) { + $236 = $234 << 1; + $237 = ((17712 + ($236<<2)|0) + 40|0); + $238 = HEAP32[17712>>2]|0; + $239 = 1 << $234; + $240 = $238 & $239; + $241 = ($240|0)==(0); + if ($241) { + $242 = $238 | $239; + HEAP32[17712>>2] = $242; + $$sum16$pre = (($236) + 2)|0; + $$pre = ((17712 + ($$sum16$pre<<2)|0) + 40|0); + $$pre$phiZ2D = $$pre;$F16$0 = $237; + } else { + $$sum17 = (($236) + 2)|0; + $243 = ((17712 + ($$sum17<<2)|0) + 40|0); + $244 = HEAP32[$243>>2]|0; + $245 = HEAP32[((17712 + 16|0))>>2]|0; + $246 = ($244>>>0)<($245>>>0); + if ($246) { + _abort(); + // unreachable; + } else { + $$pre$phiZ2D = $243;$F16$0 = $244; + } + } + HEAP32[$$pre$phiZ2D>>2] = $p$0; + $247 = (($F16$0) + 12|0); + HEAP32[$247>>2] = $p$0; + $248 = (($p$0) + 8|0); + HEAP32[$248>>2] = $F16$0; + $249 = (($p$0) + 12|0); + HEAP32[$249>>2] = $237; + STACKTOP = sp;return; + } + $250 = $psize$1 >>> 8; + $251 = ($250|0)==(0); + if ($251) { + $I18$0 = 0; + } else { + $252 = ($psize$1>>>0)>(16777215); + if ($252) { + $I18$0 = 31; + } else { + $253 = (($250) + 1048320)|0; + $254 = $253 >>> 16; + $255 = $254 & 8; + $256 = $250 << $255; + $257 = (($256) + 520192)|0; + $258 = $257 >>> 16; + $259 = $258 & 4; + $260 = $259 | $255; + $261 = $256 << $259; + $262 = (($261) + 245760)|0; + $263 = $262 >>> 16; + $264 = $263 & 2; + $265 = $260 | $264; + $266 = (14 - ($265))|0; + $267 = $261 << $264; + $268 = $267 >>> 15; + $269 = (($266) + ($268))|0; + $270 = $269 << 1; + $271 = (($269) + 7)|0; + $272 = $psize$1 >>> $271; + $273 = $272 & 1; + $274 = $273 | $270; + $I18$0 = $274; + } + } + $275 = ((17712 + ($I18$0<<2)|0) + 304|0); + $276 = (($p$0) + 28|0); + $I18$0$c = $I18$0; + HEAP32[$276>>2] = $I18$0$c; + $277 = (($p$0) + 20|0); + HEAP32[$277>>2] = 0; + $278 = (($p$0) + 16|0); + HEAP32[$278>>2] = 0; + $279 = HEAP32[((17712 + 4|0))>>2]|0; + $280 = 1 << $I18$0; + $281 = $279 & $280; + $282 = ($281|0)==(0); + L199: do { + if ($282) { + $283 = $279 | $280; + HEAP32[((17712 + 4|0))>>2] = $283; + HEAP32[$275>>2] = $p$0; + $284 = (($p$0) + 24|0); + HEAP32[$284>>2] = $275; + $285 = (($p$0) + 12|0); + HEAP32[$285>>2] = $p$0; + $286 = (($p$0) + 8|0); + HEAP32[$286>>2] = $p$0; + } else { + $287 = HEAP32[$275>>2]|0; + $288 = ($I18$0|0)==(31); + if ($288) { + $296 = 0; + } else { + $289 = $I18$0 >>> 1; + $290 = (25 - ($289))|0; + $296 = $290; + } + $291 = (($287) + 4|0); + $292 = HEAP32[$291>>2]|0; + $293 = $292 & -8; + $294 = ($293|0)==($psize$1|0); + L204: do { + if ($294) { + $T$0$lcssa = $287; + } else { + $295 = $psize$1 << $296; + $K19$057 = $295;$T$056 = $287; + while(1) { + $303 = $K19$057 >>> 31; + $304 = ((($T$056) + ($303<<2)|0) + 16|0); + $299 = HEAP32[$304>>2]|0; + $305 = ($299|0)==(0|0); + if ($305) { + break; + } + $297 = $K19$057 << 1; + $298 = (($299) + 4|0); + $300 = HEAP32[$298>>2]|0; + $301 = $300 & -8; + $302 = ($301|0)==($psize$1|0); + if ($302) { + $T$0$lcssa = $299; + break L204; + } else { + $K19$057 = $297;$T$056 = $299; + } + } + $306 = HEAP32[((17712 + 16|0))>>2]|0; + $307 = ($304>>>0)<($306>>>0); + if ($307) { + _abort(); + // unreachable; + } else { + HEAP32[$304>>2] = $p$0; + $308 = (($p$0) + 24|0); + HEAP32[$308>>2] = $T$056; + $309 = (($p$0) + 12|0); + HEAP32[$309>>2] = $p$0; + $310 = (($p$0) + 8|0); + HEAP32[$310>>2] = $p$0; + break L199; + } + } + } while(0); + $311 = (($T$0$lcssa) + 8|0); + $312 = HEAP32[$311>>2]|0; + $313 = HEAP32[((17712 + 16|0))>>2]|0; + $314 = ($T$0$lcssa>>>0)<($313>>>0); + if ($314) { + _abort(); + // unreachable; + } + $315 = ($312>>>0)<($313>>>0); + if ($315) { + _abort(); + // unreachable; + } else { + $316 = (($312) + 12|0); + HEAP32[$316>>2] = $p$0; + HEAP32[$311>>2] = $p$0; + $317 = (($p$0) + 8|0); + HEAP32[$317>>2] = $312; + $318 = (($p$0) + 12|0); + HEAP32[$318>>2] = $T$0$lcssa; + $319 = (($p$0) + 24|0); + HEAP32[$319>>2] = 0; + break; + } + } + } while(0); + $320 = HEAP32[((17712 + 32|0))>>2]|0; + $321 = (($320) + -1)|0; + HEAP32[((17712 + 32|0))>>2] = $321; + $322 = ($321|0)==(0); + if ($322) { + $sp$0$in$i = ((17712 + 456|0)); + } else { + STACKTOP = sp;return; + } + while(1) { + $sp$0$i = HEAP32[$sp$0$in$i>>2]|0; + $323 = ($sp$0$i|0)==(0|0); + $324 = (($sp$0$i) + 8|0); + if ($323) { + break; + } else { + $sp$0$in$i = $324; + } + } + HEAP32[((17712 + 32|0))>>2] = -1; + STACKTOP = sp;return; +} +function _memchr($src,$c,$n) { + $src = $src|0; + $c = $c|0; + $n = $n|0; + var $$0$lcssa = 0, $$0$lcssa34 = 0, $$013 = 0, $$1$lcssa = 0, $$17 = 0, $$24 = 0, $$3 = 0, $$lcssa = 0, $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0; + var $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond12 = 0, $s$0$lcssa = 0, $s$0$lcssa33 = 0, $s$014 = 0, $s$15 = 0, $s$2 = 0, $w$0$lcssa = 0, $w$08 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = $c & 255; + $1 = $src; + $2 = $1 & 3; + $3 = ($2|0)==(0); + $4 = ($n|0)==(0); + $or$cond12 = $3 | $4; + L1: do { + if ($or$cond12) { + $$0$lcssa = $n;$$lcssa = $4;$s$0$lcssa = $src; + label = 5; + } else { + $5 = $c&255; + $$013 = $n;$s$014 = $src; + while(1) { + $6 = HEAP8[$s$014>>0]|0; + $7 = ($6<<24>>24)==($5<<24>>24); + if ($7) { + $$0$lcssa34 = $$013;$s$0$lcssa33 = $s$014; + label = 6; + break L1; + } + $8 = (($s$014) + 1|0); + $9 = (($$013) + -1)|0; + $10 = $8; + $11 = $10 & 3; + $12 = ($11|0)==(0); + $13 = ($9|0)==(0); + $or$cond = $12 | $13; + if ($or$cond) { + $$0$lcssa = $9;$$lcssa = $13;$s$0$lcssa = $8; + label = 5; + break; + } else { + $$013 = $9;$s$014 = $8; + } + } + } + } while(0); + if ((label|0) == 5) { + if ($$lcssa) { + $$3 = 0;$s$2 = $s$0$lcssa; + } else { + $$0$lcssa34 = $$0$lcssa;$s$0$lcssa33 = $s$0$lcssa; + label = 6; + } + } + L8: do { + if ((label|0) == 6) { + $14 = HEAP8[$s$0$lcssa33>>0]|0; + $15 = $c&255; + $16 = ($14<<24>>24)==($15<<24>>24); + if ($16) { + $$3 = $$0$lcssa34;$s$2 = $s$0$lcssa33; + } else { + $17 = Math_imul($0, 16843009)|0; + $18 = ($$0$lcssa34>>>0)>(3); + L11: do { + if ($18) { + $$17 = $$0$lcssa34;$w$08 = $s$0$lcssa33; + while(1) { + $19 = HEAP32[$w$08>>2]|0; + $20 = $19 ^ $17; + $21 = (($20) + -16843009)|0; + $22 = $20 & -2139062144; + $23 = $22 ^ -2139062144; + $24 = $23 & $21; + $25 = ($24|0)==(0); + if (!($25)) { + $$1$lcssa = $$17;$w$0$lcssa = $w$08; + break L11; + } + $26 = (($w$08) + 4|0); + $27 = (($$17) + -4)|0; + $28 = ($27>>>0)>(3); + if ($28) { + $$17 = $27;$w$08 = $26; + } else { + $$1$lcssa = $27;$w$0$lcssa = $26; + break; + } + } + } else { + $$1$lcssa = $$0$lcssa34;$w$0$lcssa = $s$0$lcssa33; + } + } while(0); + $29 = ($$1$lcssa|0)==(0); + if ($29) { + $$3 = 0;$s$2 = $w$0$lcssa; + } else { + $$24 = $$1$lcssa;$s$15 = $w$0$lcssa; + while(1) { + $30 = HEAP8[$s$15>>0]|0; + $31 = ($30<<24>>24)==($15<<24>>24); + if ($31) { + $$3 = $$24;$s$2 = $s$15; + break L8; + } + $32 = (($s$15) + 1|0); + $33 = (($$24) + -1)|0; + $34 = ($33|0)==(0); + if ($34) { + $$3 = 0;$s$2 = $32; + break; + } else { + $$24 = $33;$s$15 = $32; + } + } + } + } + } + } while(0); + $35 = ($$3|0)!=(0); + $36 = $35 ? $s$2 : 0; + STACKTOP = sp;return ($36|0); +} +function _memcmp($vl,$vr,$n) { + $vl = $vl|0; + $vr = $vr|0; + $n = $n|0; + var $$03 = 0, $0 = 0, $1 = 0, $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $l$04 = 0, $r$05 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = ($n|0)==(0); + L1: do { + if ($0) { + $11 = 0; + } else { + $$03 = $n;$l$04 = $vl;$r$05 = $vr; + while(1) { + $1 = HEAP8[$l$04>>0]|0; + $2 = HEAP8[$r$05>>0]|0; + $3 = ($1<<24>>24)==($2<<24>>24); + if (!($3)) { + break; + } + $4 = (($$03) + -1)|0; + $5 = (($l$04) + 1|0); + $6 = (($r$05) + 1|0); + $7 = ($4|0)==(0); + if ($7) { + $11 = 0; + break L1; + } else { + $$03 = $4;$l$04 = $5;$r$05 = $6; + } + } + $8 = $1&255; + $9 = $2&255; + $10 = (($8) - ($9))|0; + $11 = $10; + } + } while(0); + STACKTOP = sp;return ($11|0); +} +function _strcmp($l,$r) { + $l = $l|0; + $r = $r|0; + var $$014 = 0, $$05 = 0, $$lcssa = 0, $$lcssa2 = 0, $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond3 = 0, label = 0; + var sp = 0; + sp = STACKTOP; + $0 = HEAP8[$l>>0]|0; + $1 = HEAP8[$r>>0]|0; + $2 = ($0<<24>>24)!=($1<<24>>24); + $3 = ($0<<24>>24)==(0); + $or$cond3 = $2 | $3; + if ($or$cond3) { + $$lcssa = $0;$$lcssa2 = $1; + } else { + $$014 = $l;$$05 = $r; + while(1) { + $4 = (($$014) + 1|0); + $5 = (($$05) + 1|0); + $6 = HEAP8[$4>>0]|0; + $7 = HEAP8[$5>>0]|0; + $8 = ($6<<24>>24)!=($7<<24>>24); + $9 = ($6<<24>>24)==(0); + $or$cond = $8 | $9; + if ($or$cond) { + $$lcssa = $6;$$lcssa2 = $7; + break; + } else { + $$014 = $4;$$05 = $5; + } + } + } + $10 = $$lcssa&255; + $11 = $$lcssa2&255; + $12 = (($10) - ($11))|0; + STACKTOP = sp;return ($12|0); +} +function runPostSets() { + +} +function _memset(ptr, value, num) { + ptr = ptr|0; value = value|0; num = num|0; + var stop = 0, value4 = 0, stop4 = 0, unaligned = 0; + stop = (ptr + num)|0; + if ((num|0) >= 20) { + // This is unaligned, but quite large, so work hard to get to aligned settings + value = value & 0xff; + unaligned = ptr & 3; + value4 = value | (value << 8) | (value << 16) | (value << 24); + stop4 = stop & ~3; + if (unaligned) { + unaligned = (ptr + 4 - unaligned)|0; + while ((ptr|0) < (unaligned|0)) { // no need to check for stop, since we have large num + HEAP8[((ptr)>>0)]=value; + ptr = (ptr+1)|0; + } + } + while ((ptr|0) < (stop4|0)) { + HEAP32[((ptr)>>2)]=value4; + ptr = (ptr+4)|0; + } + } + while ((ptr|0) < (stop|0)) { + HEAP8[((ptr)>>0)]=value; + ptr = (ptr+1)|0; + } + return (ptr-num)|0; +} +function _strlen(ptr) { + ptr = ptr|0; + var curr = 0; + curr = ptr; + while (((HEAP8[((curr)>>0)])|0)) { + curr = (curr + 1)|0; + } + return (curr - ptr)|0; +} +function _memcpy(dest, src, num) { + + dest = dest|0; src = src|0; num = num|0; + var ret = 0; + if ((num|0) >= 4096) return _emscripten_memcpy_big(dest|0, src|0, num|0)|0; + ret = dest|0; + if ((dest&3) == (src&3)) { + while (dest & 3) { + if ((num|0) == 0) return ret|0; + HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0); + dest = (dest+1)|0; + src = (src+1)|0; + num = (num-1)|0; + } + while ((num|0) >= 4) { + HEAP32[((dest)>>2)]=((HEAP32[((src)>>2)])|0); + dest = (dest+4)|0; + src = (src+4)|0; + num = (num-4)|0; + } + } + while ((num|0) > 0) { + HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0); + dest = (dest+1)|0; + src = (src+1)|0; + num = (num-1)|0; + } + return ret|0; +} +function _strcpy(pdest, psrc) { + pdest = pdest|0; psrc = psrc|0; + var i = 0; + do { + HEAP8[(((pdest+i)|0)>>0)]=HEAP8[(((psrc+i)|0)>>0)]; + i = (i+1)|0; + } while (((HEAP8[(((psrc)+(i-1))>>0)])|0)); + return pdest|0; +} + +// EMSCRIPTEN_END_FUNCS + + + + // EMSCRIPTEN_END_FUNCS + + + return { _filtcoef: _filtcoef, _free: _free, _wave_transform: _wave_transform, _wtoutputlength: _wtoutputlength, _memset: _memset, _malloc: _malloc, _memcpy: _memcpy, _strlen: _strlen, _inv_wave_transform: _inv_wave_transform, _filtlength: _filtlength, _strcpy: _strcpy, runPostSets: runPostSets, stackAlloc: stackAlloc, stackSave: stackSave, stackRestore: stackRestore, setThrew: setThrew, setTempRet0: setTempRet0, getTempRet0: getTempRet0 }; + }) + // EMSCRIPTEN_END_ASM + ({ "Math": Math, "Int8Array": Int8Array, "Int16Array": Int16Array, "Int32Array": Int32Array, "Uint8Array": Uint8Array, "Uint16Array": Uint16Array, "Uint32Array": Uint32Array, "Float32Array": Float32Array, "Float64Array": Float64Array }, { "abort": abort, "assert": assert, "min": Math_min, "_sin": _sin, "_llvm_pow_f64": _llvm_pow_f64, "_send": _send, "__reallyNegative": __reallyNegative, "_fflush": _fflush, "_pwrite": _pwrite, "___setErrNo": ___setErrNo, "_sbrk": _sbrk, "_emscripten_memcpy_big": _emscripten_memcpy_big, "_fileno": _fileno, "__exit": __exit, "_cos": _cos, "_printf": _printf, "_log": _log, "_write": _write, "___errno_location": ___errno_location, "_mkport": _mkport, "_sysconf": _sysconf, "_abort": _abort, "_fwrite": _fwrite, "_time": _time, "_fprintf": _fprintf, "_ceil": _ceil, "__formatString": __formatString, "_log10": _log10, "_sqrt": _sqrt, "_exit": _exit, "STACKTOP": STACKTOP, "STACK_MAX": STACK_MAX, "tempDoublePtr": tempDoublePtr, "ABORT": ABORT, "NaN": NaN, "Infinity": Infinity }, buffer); + var real__filtcoef = asm["_filtcoef"]; asm["_filtcoef"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__filtcoef.apply(null, arguments); +}; + +var real__wave_transform = asm["_wave_transform"]; asm["_wave_transform"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__wave_transform.apply(null, arguments); +}; + +var real__wtoutputlength = asm["_wtoutputlength"]; asm["_wtoutputlength"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__wtoutputlength.apply(null, arguments); +}; + +var real__strlen = asm["_strlen"]; asm["_strlen"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__strlen.apply(null, arguments); +}; + +var real__inv_wave_transform = asm["_inv_wave_transform"]; asm["_inv_wave_transform"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__inv_wave_transform.apply(null, arguments); +}; + +var real__filtlength = asm["_filtlength"]; asm["_filtlength"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__filtlength.apply(null, arguments); +}; + +var real__strcpy = asm["_strcpy"]; asm["_strcpy"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__strcpy.apply(null, arguments); +}; + +var real_runPostSets = asm["runPostSets"]; asm["runPostSets"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real_runPostSets.apply(null, arguments); +}; +var _filtcoef = Module["_filtcoef"] = asm["_filtcoef"]; +var _free = Module["_free"] = asm["_free"]; +var _wave_transform = Module["_wave_transform"] = asm["_wave_transform"]; +var _wtoutputlength = Module["_wtoutputlength"] = asm["_wtoutputlength"]; +var _memset = Module["_memset"] = asm["_memset"]; +var _malloc = Module["_malloc"] = asm["_malloc"]; +var _memcpy = Module["_memcpy"] = asm["_memcpy"]; +var _strlen = Module["_strlen"] = asm["_strlen"]; +var _inv_wave_transform = Module["_inv_wave_transform"] = asm["_inv_wave_transform"]; +var _filtlength = Module["_filtlength"] = asm["_filtlength"]; +var _strcpy = Module["_strcpy"] = asm["_strcpy"]; +var runPostSets = Module["runPostSets"] = asm["runPostSets"]; + + Runtime.stackAlloc = asm['stackAlloc']; + Runtime.stackSave = asm['stackSave']; + Runtime.stackRestore = asm['stackRestore']; + Runtime.setTempRet0 = asm['setTempRet0']; + Runtime.getTempRet0 = asm['getTempRet0']; + + +// Warning: printing of i64 values may be slightly rounded! No deep i64 math used, so precise i64 code not included +var i64Math = null; + +// === Auto-generated postamble setup entry stuff === + +if (memoryInitializer) { + if (typeof Module['locateFile'] === 'function') { + memoryInitializer = Module['locateFile'](memoryInitializer); + } else if (Module['memoryInitializerPrefixURL']) { + memoryInitializer = Module['memoryInitializerPrefixURL'] + memoryInitializer; + } + if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) { + var data = Module['readBinary'](memoryInitializer); + HEAPU8.set(data, STATIC_BASE); + } else { + addRunDependency('memory initializer'); + Browser.asyncLoad(memoryInitializer, function(data) { + for (var i = 0; i < data.length; i++) { + assert(HEAPU8[STATIC_BASE + i] === 0, "area for memory initializer should not have been touched before it's loaded"); + } + HEAPU8.set(data, STATIC_BASE); + removeRunDependency('memory initializer'); + }, function(data) { + throw 'could not load memory initializer ' + memoryInitializer; + }); + } +} + +function ExitStatus(status) { + this.name = "ExitStatus"; + this.message = "Program terminated with exit(" + status + ")"; + this.status = status; +}; +ExitStatus.prototype = new Error(); +ExitStatus.prototype.constructor = ExitStatus; + +var initialStackTop; +var preloadStartTime = null; +var calledMain = false; + +dependenciesFulfilled = function runCaller() { + // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false) + if (!Module['calledRun'] && shouldRunNow) run(); + if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled +} + +Module['callMain'] = Module.callMain = function callMain(args) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on __ATMAIN__)'); + assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remain to be called'); + + args = args || []; + + ensureInitRuntime(); + + var argc = args.length+1; + function pad() { + for (var i = 0; i < 4-1; i++) { + argv.push(0); + } + } + var argv = [allocate(intArrayFromString(Module['thisProgram']), 'i8', ALLOC_NORMAL) ]; + pad(); + for (var i = 0; i < argc-1; i = i + 1) { + argv.push(allocate(intArrayFromString(args[i]), 'i8', ALLOC_NORMAL)); + pad(); + } + argv.push(0); + argv = allocate(argv, 'i32', ALLOC_NORMAL); + + initialStackTop = STACKTOP; + + try { + + var ret = Module['_main'](argc, argv, 0); + + + // if we're not running an evented main loop, it's time to exit + exit(ret); + } + catch(e) { + if (e instanceof ExitStatus) { + // exit() throws this once it's done to make sure execution + // has been stopped completely + return; + } else if (e == 'SimulateInfiniteLoop') { + // running an evented main loop, don't immediately exit + Module['noExitRuntime'] = true; + return; + } else { + if (e && typeof e === 'object' && e.stack) Module.printErr('exception thrown: ' + [e, e.stack]); + throw e; + } + } finally { + calledMain = true; + } +} + + + + +function run(args) { + args = args || Module['arguments']; + + if (preloadStartTime === null) preloadStartTime = Date.now(); + + if (runDependencies > 0) { + Module.printErr('run() called, but dependencies remain, so not running'); + return; + } + + preRun(); + + if (runDependencies > 0) return; // a preRun added a dependency, run will be called later + if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame + + function doRun() { + if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening + Module['calledRun'] = true; + + if (ABORT) return; + + ensureInitRuntime(); + + preMain(); + + if (ENVIRONMENT_IS_WEB && preloadStartTime !== null) { + Module.printErr('pre-main prep time: ' + (Date.now() - preloadStartTime) + ' ms'); + } + + if (Module['_main'] && shouldRunNow) { + Module['callMain'](args); + } + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(function() { + setTimeout(function() { + Module['setStatus'](''); + }, 1); + doRun(); + }, 1); + } else { + doRun(); + } +} +Module['run'] = Module.run = run; + +function exit(status) { + if (Module['noExitRuntime']) { + Module.printErr('exit(' + status + ') called, but noExitRuntime, so not exiting'); + return; + } + + ABORT = true; + EXITSTATUS = status; + STACKTOP = initialStackTop; + + // exit the runtime + exitRuntime(); + + if (ENVIRONMENT_IS_NODE) { + // Work around a node.js bug where stdout buffer is not flushed at process exit: + // Instead of process.exit() directly, wait for stdout flush event. + // See https://github.com/joyent/node/issues/1669 and https://github.com/kripken/emscripten/issues/2582 + // Workaround is based on https://github.com/RReverser/acorn/commit/50ab143cecc9ed71a2d66f78b4aec3bb2e9844f6 + process['stdout']['once']('drain', function () { + process['exit'](status); + }); + console.log(' '); // Make sure to print something to force the drain event to occur, in case the stdout buffer was empty. + // Work around another node bug where sometimes 'drain' is never fired - make another effort + // to emit the exit status, after a significant delay (if node hasn't fired drain by then, give up) + setTimeout(function() { + process['exit'](status); + }, 500); + } else + if (ENVIRONMENT_IS_SHELL && typeof quit === 'function') { + quit(status); + } + // if we reach here, we must throw an exception to halt the current execution + throw new ExitStatus(status); +} +Module['exit'] = Module.exit = exit; + +function abort(text) { + if (text) { + Module.print(text); + Module.printErr(text); + } + + ABORT = true; + EXITSTATUS = 1; + + var extra = ''; + + throw 'abort() at ' + stackTrace() + extra; +} +Module['abort'] = Module.abort = abort; + +// {{PRE_RUN_ADDITIONS}} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} + +// shouldRunNow refers to calling main(), not run(). +var shouldRunNow = true; +if (Module['noInitialRun']) { + shouldRunNow = false; +} + + +run(); + +// {{POST_RUN_ADDITIONS}} + + + + + + +// {{MODULE_ADDITIONS}} + + + diff --git a/js/wavelet.js b/js/wavelet.js new file mode 100644 index 0000000..db2b673 --- /dev/null +++ b/js/wavelet.js @@ -0,0 +1,31106 @@ +// The Module object: Our interface to the outside world. We import +// and export values on it, and do the work to get that through +// closure compiler if necessary. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(Module) { ..generated code.. } +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to do an eval in order to handle the closure compiler +// case, where this code here is minified but Module was defined +// elsewhere (e.g. case 4 above). We also need to check if Module +// already exists (e.g. case 3 above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module; +if (!Module) Module = (typeof Module !== 'undefined' ? Module : null) || {}; + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {}; +for (var key in Module) { + if (Module.hasOwnProperty(key)) { + moduleOverrides[key] = Module[key]; + } +} + +// The environment setup code below is customized to use Module. +// *** Environment setup code *** +var ENVIRONMENT_IS_WEB = typeof window === 'object'; +var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function' && !ENVIRONMENT_IS_WEB; +// Three configurations we can be running in: +// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false) +// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false) +// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true) +var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + // Expose functionality in the same simple way that the shells work + // Note that we pollute the global namespace here, otherwise we break in node + if (!Module['print']) Module['print'] = function print(x) { + process['stdout'].write(x + '\n'); + }; + if (!Module['printErr']) Module['printErr'] = function printErr(x) { + process['stderr'].write(x + '\n'); + }; + + var nodeFS = require('fs'); + var nodePath = require('path'); + + Module['read'] = function read(filename, binary) { + filename = nodePath['normalize'](filename); + var ret = nodeFS['readFileSync'](filename); + // The path is absolute if the normalized version is the same as the resolved. + if (!ret && filename != nodePath['resolve'](filename)) { + filename = path.join(__dirname, '..', 'src', filename); + ret = nodeFS['readFileSync'](filename); + } + if (ret && !binary) ret = ret.toString(); + return ret; + }; + + Module['readBinary'] = function readBinary(filename) { return Module['read'](filename, true) }; + + Module['load'] = function load(f) { + globalEval(read(f)); + }; + + if (!Module['thisProgram']) { + if (process['argv'].length > 1) { + Module['thisProgram'] = process['argv'][1].replace(/\\/g, '/'); + } else { + Module['thisProgram'] = 'unknown-program'; + } + } + + Module['arguments'] = process['argv'].slice(2); + + if (typeof module !== 'undefined') { + module['exports'] = Module; + } + + process['on']('uncaughtException', function(ex) { + // suppress ExitStatus exceptions from showing an error + if (!(ex instanceof ExitStatus)) { + throw ex; + } + }); + + Module['inspect'] = function () { return '[Emscripten Module object]'; }; +} +else if (ENVIRONMENT_IS_SHELL) { + if (!Module['print']) Module['print'] = print; + if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not present in v8 or older sm + + if (typeof read != 'undefined') { + Module['read'] = read; + } else { + Module['read'] = function read() { throw 'no read() available (jsc?)' }; + } + + Module['readBinary'] = function readBinary(f) { + if (typeof readbuffer === 'function') { + return new Uint8Array(readbuffer(f)); + } + var data = read(f, 'binary'); + assert(typeof data === 'object'); + return data; + }; + + if (typeof scriptArgs != 'undefined') { + Module['arguments'] = scriptArgs; + } else if (typeof arguments != 'undefined') { + Module['arguments'] = arguments; + } + +} +else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + Module['read'] = function read(url) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.send(null); + return xhr.responseText; + }; + + if (typeof arguments != 'undefined') { + Module['arguments'] = arguments; + } + + if (typeof console !== 'undefined') { + if (!Module['print']) Module['print'] = function print(x) { + console.log(x); + }; + if (!Module['printErr']) Module['printErr'] = function printErr(x) { + console.log(x); + }; + } else { + // Probably a worker, and without console.log. We can do very little here... + var TRY_USE_DUMP = false; + if (!Module['print']) Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== "undefined") ? (function(x) { + dump(x); + }) : (function(x) { + // self.postMessage(x); // enable this if you want stdout to be sent as messages + })); + } + + if (ENVIRONMENT_IS_WORKER) { + Module['load'] = importScripts; + } + + if (typeof Module['setWindowTitle'] === 'undefined') { + Module['setWindowTitle'] = function(title) { document.title = title }; + } +} +else { + // Unreachable because SHELL is dependant on the others + throw 'Unknown runtime environment. Where are we?'; +} + +function globalEval(x) { + eval.call(null, x); +} +if (!Module['load'] && Module['read']) { + Module['load'] = function load(f) { + globalEval(Module['read'](f)); + }; +} +if (!Module['print']) { + Module['print'] = function(){}; +} +if (!Module['printErr']) { + Module['printErr'] = Module['print']; +} +if (!Module['arguments']) { + Module['arguments'] = []; +} +if (!Module['thisProgram']) { + Module['thisProgram'] = './this.program'; +} + +// *** Environment setup code *** + +// Closure helpers +Module.print = Module['print']; +Module.printErr = Module['printErr']; + +// Callbacks +Module['preRun'] = []; +Module['postRun'] = []; + +// Merge back in the overrides +for (var key in moduleOverrides) { + if (moduleOverrides.hasOwnProperty(key)) { + Module[key] = moduleOverrides[key]; + } +} + + + +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +//======================================== +// Runtime code shared with compiler +//======================================== + +var Runtime = { + setTempRet0: function (value) { + tempRet0 = value; + }, + getTempRet0: function () { + return tempRet0; + }, + stackSave: function () { + return STACKTOP; + }, + stackRestore: function (stackTop) { + STACKTOP = stackTop; + }, + getNativeTypeSize: function (type) { + switch (type) { + case 'i1': case 'i8': return 1; + case 'i16': return 2; + case 'i32': return 4; + case 'i64': return 8; + case 'float': return 4; + case 'double': return 8; + default: { + if (type[type.length-1] === '*') { + return Runtime.QUANTUM_SIZE; // A pointer + } else if (type[0] === 'i') { + var bits = parseInt(type.substr(1)); + assert(bits % 8 === 0); + return bits/8; + } else { + return 0; + } + } + } + }, + getNativeFieldSize: function (type) { + return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE); + }, + STACK_ALIGN: 16, + prepVararg: function (ptr, type) { + if (type === 'double' || type === 'i64') { + // move so the load is aligned + if (ptr & 7) { + assert((ptr & 7) === 4); + ptr += 4; + } + } else { + assert((ptr & 3) === 0); + } + return ptr; + }, + getAlignSize: function (type, size, vararg) { + // we align i64s and doubles on 64-bit boundaries, unlike x86 + if (!vararg && (type == 'i64' || type == 'double')) return 8; + if (!type) return Math.min(size, 8); // align structures internally to 64 bits + return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE); + }, + dynCall: function (sig, ptr, args) { + if (args && args.length) { + assert(args.length == sig.length-1); + if (!args.splice) args = Array.prototype.slice.call(args); + args.splice(0, 0, ptr); + assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \'' + sig + '\''); + return Module['dynCall_' + sig].apply(null, args); + } else { + assert(sig.length == 1); + assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \'' + sig + '\''); + return Module['dynCall_' + sig].call(null, ptr); + } + }, + functionPointers: [], + addFunction: function (func) { + for (var i = 0; i < Runtime.functionPointers.length; i++) { + if (!Runtime.functionPointers[i]) { + Runtime.functionPointers[i] = func; + return 2*(1 + i); + } + } + throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.'; + }, + removeFunction: function (index) { + Runtime.functionPointers[(index-2)/2] = null; + }, + warnOnce: function (text) { + if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {}; + if (!Runtime.warnOnce.shown[text]) { + Runtime.warnOnce.shown[text] = 1; + Module.printErr(text); + } + }, + funcWrappers: {}, + getFuncWrapper: function (func, sig) { + assert(sig); + if (!Runtime.funcWrappers[sig]) { + Runtime.funcWrappers[sig] = {}; + } + var sigCache = Runtime.funcWrappers[sig]; + if (!sigCache[func]) { + sigCache[func] = function dynCall_wrapper() { + return Runtime.dynCall(sig, func, arguments); + }; + } + return sigCache[func]; + }, + getCompilerSetting: function (name) { + throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work'; + }, + stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)|0;STACKTOP = (((STACKTOP)+15)&-16);(assert((((STACKTOP|0) < (STACK_MAX|0))|0))|0); return ret; }, + staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + (assert(!staticSealed),size))|0;STATICTOP = (((STATICTOP)+15)&-16); return ret; }, + dynamicAlloc: function (size) { var ret = DYNAMICTOP;DYNAMICTOP = (DYNAMICTOP + (assert(DYNAMICTOP > 0),size))|0;DYNAMICTOP = (((DYNAMICTOP)+15)&-16); if (DYNAMICTOP >= TOTAL_MEMORY) { var success = enlargeMemory(); if (!success) { DYNAMICTOP = ret; return 0; } }; return ret; }, + alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quantum ? quantum : 16))*(quantum ? quantum : 16); return ret; }, + makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0))); return ret; }, + GLOBAL_BASE: 8, + QUANTUM_SIZE: 4, + __dummy__: 0 +} + + +Module['Runtime'] = Runtime; + + + +//======================================== +// Runtime essentials +//======================================== + +var __THREW__ = 0; // Used in checking for thrown exceptions. + +var ABORT = false; // whether we are quitting the application. no code should run after this. set in exit() and abort() +var EXITSTATUS = 0; + +var undef = 0; +// tempInt is used for 32-bit signed values or smaller. tempBigInt is used +// for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt +var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD, tempDouble, tempFloat; +var tempI64, tempI64b; +var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9; + +function assert(condition, text) { + if (!condition) { + abort('Assertion failed: ' + text); + } +} + +var globalScope = this; + +// Returns the C function with a specified identifier (for C++, you need to do manual name mangling) +function getCFunc(ident) { + var func = Module['_' + ident]; // closure exported function + if (!func) { + try { + func = eval('_' + ident); // explicit lookup + } catch(e) {} + } + assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)'); + return func; +} + +var cwrap, ccall; +(function(){ + var JSfuncs = { + // Helpers for cwrap -- it can't refer to Runtime directly because it might + // be renamed by closure, instead it calls JSfuncs['stackSave'].body to find + // out what the minified function name is. + 'stackSave': function() { + Runtime.stackSave() + }, + 'stackRestore': function() { + Runtime.stackRestore() + }, + // type conversion from js to c + 'arrayToC' : function(arr) { + var ret = Runtime.stackAlloc(arr.length); + writeArrayToMemory(arr, ret); + return ret; + }, + 'stringToC' : function(str) { + var ret = 0; + if (str !== null && str !== undefined && str !== 0) { // null string + // at most 4 bytes per UTF-8 code point, +1 for the trailing '\0' + ret = Runtime.stackAlloc((str.length << 2) + 1); + writeStringToMemory(str, ret); + } + return ret; + } + }; + // For fast lookup of conversion functions + var toC = {'string' : JSfuncs['stringToC'], 'array' : JSfuncs['arrayToC']}; + + // C calling interface. + ccall = function ccallFunc(ident, returnType, argTypes, args, opts) { + var func = getCFunc(ident); + var cArgs = []; + var stack = 0; + assert(returnType !== 'array', 'Return type should not be "array".'); + if (args) { + for (var i = 0; i < args.length; i++) { + var converter = toC[argTypes[i]]; + if (converter) { + if (stack === 0) stack = Runtime.stackSave(); + cArgs[i] = converter(args[i]); + } else { + cArgs[i] = args[i]; + } + } + } + var ret = func.apply(null, cArgs); + if ((!opts || !opts.async) && typeof EmterpreterAsync === 'object') { + assert(!EmterpreterAsync.state, 'cannot start async op with normal JS calling ccall'); + } + if (opts && opts.async) assert(!returnType, 'async ccalls cannot return values'); + if (returnType === 'string') ret = Pointer_stringify(ret); + if (stack !== 0) { + if (opts && opts.async) { + EmterpreterAsync.asyncFinalizers.push(function() { + Runtime.stackRestore(stack); + }); + return; + } + Runtime.stackRestore(stack); + } + return ret; + } + + var sourceRegex = /^function\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/; + function parseJSFunc(jsfunc) { + // Match the body and the return value of a javascript function source + var parsed = jsfunc.toString().match(sourceRegex).slice(1); + return {arguments : parsed[0], body : parsed[1], returnValue: parsed[2]} + } + var JSsource = {}; + for (var fun in JSfuncs) { + if (JSfuncs.hasOwnProperty(fun)) { + // Elements of toCsource are arrays of three items: + // the code, and the return value + JSsource[fun] = parseJSFunc(JSfuncs[fun]); + } + } + + + cwrap = function cwrap(ident, returnType, argTypes) { + argTypes = argTypes || []; + var cfunc = getCFunc(ident); + // When the function takes numbers and returns a number, we can just return + // the original function + var numericArgs = argTypes.every(function(type){ return type === 'number'}); + var numericRet = (returnType !== 'string'); + if ( numericRet && numericArgs) { + return cfunc; + } + // Creation of the arguments list (["$1","$2",...,"$nargs"]) + var argNames = argTypes.map(function(x,i){return '$'+i}); + var funcstr = "(function(" + argNames.join(',') + ") {"; + var nargs = argTypes.length; + if (!numericArgs) { + // Generate the code needed to convert the arguments from javascript + // values to pointers + funcstr += 'var stack = ' + JSsource['stackSave'].body + ';'; + for (var i = 0; i < nargs; i++) { + var arg = argNames[i], type = argTypes[i]; + if (type === 'number') continue; + var convertCode = JSsource[type + 'ToC']; // [code, return] + funcstr += 'var ' + convertCode.arguments + ' = ' + arg + ';'; + funcstr += convertCode.body + ';'; + funcstr += arg + '=' + convertCode.returnValue + ';'; + } + } + + // When the code is compressed, the name of cfunc is not literally 'cfunc' anymore + var cfuncname = parseJSFunc(function(){return cfunc}).returnValue; + // Call the function + funcstr += 'var ret = ' + cfuncname + '(' + argNames.join(',') + ');'; + if (!numericRet) { // Return type can only by 'string' or 'number' + // Convert the result to a string + var strgfy = parseJSFunc(function(){return Pointer_stringify}).returnValue; + funcstr += 'ret = ' + strgfy + '(ret);'; + } + funcstr += "if (typeof EmterpreterAsync === 'object') { assert(!EmterpreterAsync.state, 'cannot start async op with normal JS calling cwrap') }"; + if (!numericArgs) { + // If we had a stack, restore it + funcstr += JSsource['stackRestore'].body.replace('()', '(stack)') + ';'; + } + funcstr += 'return ret})'; + return eval(funcstr); + }; +})(); +Module["cwrap"] = cwrap; +Module["ccall"] = ccall; + + +function setValue(ptr, value, type, noSafe) { + type = type || 'i8'; + if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit + switch(type) { + case 'i1': HEAP8[((ptr)>>0)]=value; break; + case 'i8': HEAP8[((ptr)>>0)]=value; break; + case 'i16': HEAP16[((ptr)>>1)]=value; break; + case 'i32': HEAP32[((ptr)>>2)]=value; break; + case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break; + case 'float': HEAPF32[((ptr)>>2)]=value; break; + case 'double': HEAPF64[((ptr)>>3)]=value; break; + default: abort('invalid type for setValue: ' + type); + } +} +Module['setValue'] = setValue; + + +function getValue(ptr, type, noSafe) { + type = type || 'i8'; + if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit + switch(type) { + case 'i1': return HEAP8[((ptr)>>0)]; + case 'i8': return HEAP8[((ptr)>>0)]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP32[((ptr)>>2)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + default: abort('invalid type for setValue: ' + type); + } + return null; +} +Module['getValue'] = getValue; + +var ALLOC_NORMAL = 0; // Tries to use _malloc() +var ALLOC_STACK = 1; // Lives for the duration of the current function call +var ALLOC_STATIC = 2; // Cannot be freed +var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk +var ALLOC_NONE = 4; // Do not allocate +Module['ALLOC_NORMAL'] = ALLOC_NORMAL; +Module['ALLOC_STACK'] = ALLOC_STACK; +Module['ALLOC_STATIC'] = ALLOC_STATIC; +Module['ALLOC_DYNAMIC'] = ALLOC_DYNAMIC; +Module['ALLOC_NONE'] = ALLOC_NONE; + +// allocate(): This is for internal use. You can use it yourself as well, but the interface +// is a little tricky (see docs right below). The reason is that it is optimized +// for multiple syntaxes to save space in generated code. So you should +// normally not use allocate(), and instead allocate memory using _malloc(), +// initialize it with setValue(), and so forth. +// @slab: An array of data, or a number. If a number, then the size of the block to allocate, +// in *bytes* (note that this is sometimes confusing: the next parameter does not +// affect this!) +// @types: Either an array of types, one for each byte (or 0 if no type at that position), +// or a single type which is used for the entire block. This only matters if there +// is initial data - if @slab is a number, then this does not matter at all and is +// ignored. +// @allocator: How to allocate memory, see ALLOC_* +function allocate(slab, types, allocator, ptr) { + var zeroinit, size; + if (typeof slab === 'number') { + zeroinit = true; + size = slab; + } else { + zeroinit = false; + size = slab.length; + } + + var singleType = typeof types === 'string' ? types : null; + + var ret; + if (allocator == ALLOC_NONE) { + ret = ptr; + } else { + ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length)); + } + + if (zeroinit) { + var ptr = ret, stop; + assert((ret & 3) == 0); + stop = ret + (size & ~3); + for (; ptr < stop; ptr += 4) { + HEAP32[((ptr)>>2)]=0; + } + stop = ret + size; + while (ptr < stop) { + HEAP8[((ptr++)>>0)]=0; + } + return ret; + } + + if (singleType === 'i8') { + if (slab.subarray || slab.slice) { + HEAPU8.set(slab, ret); + } else { + HEAPU8.set(new Uint8Array(slab), ret); + } + return ret; + } + + var i = 0, type, typeSize, previousType; + while (i < size) { + var curr = slab[i]; + + if (typeof curr === 'function') { + curr = Runtime.getFunctionIndex(curr); + } + + type = singleType || types[i]; + if (type === 0) { + i++; + continue; + } + assert(type, 'Must know what type to store in allocate!'); + + if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later + + setValue(ret+i, curr, type); + + // no need to look up size unless type changes, so cache it + if (previousType !== type) { + typeSize = Runtime.getNativeTypeSize(type); + previousType = type; + } + i += typeSize; + } + + return ret; +} +Module['allocate'] = allocate; + +// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready +function getMemory(size) { + if (!staticSealed) return Runtime.staticAlloc(size); + if ((typeof _sbrk !== 'undefined' && !_sbrk.called) || !runtimeInitialized) return Runtime.dynamicAlloc(size); + return _malloc(size); +} +Module['getMemory'] = getMemory; + +function Pointer_stringify(ptr, /* optional */ length) { + if (length === 0 || !ptr) return ''; + // TODO: use TextDecoder + // Find the length, and check for UTF while doing so + var hasUtf = 0; + var t; + var i = 0; + while (1) { + assert(ptr + i < TOTAL_MEMORY); + t = HEAPU8[(((ptr)+(i))>>0)]; + hasUtf |= t; + if (t == 0 && !length) break; + i++; + if (length && i == length) break; + } + if (!length) length = i; + + var ret = ''; + + if (hasUtf < 128) { + var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack + var curr; + while (length > 0) { + curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK))); + ret = ret ? ret + curr : curr; + ptr += MAX_CHUNK; + length -= MAX_CHUNK; + } + return ret; + } + return Module['UTF8ToString'](ptr); +} +Module['Pointer_stringify'] = Pointer_stringify; + +// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns +// a copy of that string as a Javascript String object. + +function AsciiToString(ptr) { + var str = ''; + while (1) { + var ch = HEAP8[((ptr++)>>0)]; + if (!ch) return str; + str += String.fromCharCode(ch); + } +} +Module['AsciiToString'] = AsciiToString; + +// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', +// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP. + +function stringToAscii(str, outPtr) { + return writeAsciiToMemory(str, outPtr, false); +} +Module['stringToAscii'] = stringToAscii; + +// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns +// a copy of that string as a Javascript String object. + +function UTF8ArrayToString(u8Array, idx) { + var u0, u1, u2, u3, u4, u5; + + var str = ''; + while (1) { + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629 + u0 = u8Array[idx++]; + if (!u0) return str; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + u1 = u8Array[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + u2 = u8Array[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + u3 = u8Array[idx++] & 63; + if ((u0 & 0xF8) == 0xF0) { + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | u3; + } else { + u4 = u8Array[idx++] & 63; + if ((u0 & 0xFC) == 0xF8) { + u0 = ((u0 & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4; + } else { + u5 = u8Array[idx++] & 63; + u0 = ((u0 & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5; + } + } + } + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } +} +Module['UTF8ArrayToString'] = UTF8ArrayToString; + +// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns +// a copy of that string as a Javascript String object. + +function UTF8ToString(ptr) { + return UTF8ArrayToString(HEAPU8, ptr); +} +Module['UTF8ToString'] = UTF8ToString; + +// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx', +// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP. +// Use the function lengthBytesUTF8() to compute the exact number of bytes (excluding null terminator) that this function will write. +// Parameters: +// str: the Javascript string to copy. +// outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element. +// outIdx: The starting offset in the array to begin the copying. +// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null +// terminator, i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else. +// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator. +// Returns the number of bytes written, EXCLUDING the null terminator. + +function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes. + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF); + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + outU8Array[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + outU8Array[outIdx++] = 0xC0 | (u >> 6); + outU8Array[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + outU8Array[outIdx++] = 0xE0 | (u >> 12); + outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63); + outU8Array[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0x1FFFFF) { + if (outIdx + 3 >= endIdx) break; + outU8Array[outIdx++] = 0xF0 | (u >> 18); + outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63); + outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63); + outU8Array[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0x3FFFFFF) { + if (outIdx + 4 >= endIdx) break; + outU8Array[outIdx++] = 0xF8 | (u >> 24); + outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63); + outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63); + outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63); + outU8Array[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 5 >= endIdx) break; + outU8Array[outIdx++] = 0xFC | (u >> 30); + outU8Array[outIdx++] = 0x80 | ((u >> 24) & 63); + outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63); + outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63); + outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63); + outU8Array[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + outU8Array[outIdx] = 0; + return outIdx - startIdx; +} +Module['stringToUTF8Array'] = stringToUTF8Array; + +// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', +// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP. +// Use the function lengthBytesUTF8() to compute the exact number of bytes (excluding null terminator) that this function will write. +// Returns the number of bytes written, EXCLUDING the null terminator. + +function stringToUTF8(str, outPtr, maxBytesToWrite) { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); +} +Module['stringToUTF8'] = stringToUTF8; + +// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte. + +function lengthBytesUTF8(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF); + if (u <= 0x7F) { + ++len; + } else if (u <= 0x7FF) { + len += 2; + } else if (u <= 0xFFFF) { + len += 3; + } else if (u <= 0x1FFFFF) { + len += 4; + } else if (u <= 0x3FFFFFF) { + len += 5; + } else { + len += 6; + } + } + return len; +} +Module['lengthBytesUTF8'] = lengthBytesUTF8; + +// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns +// a copy of that string as a Javascript String object. + +function UTF16ToString(ptr) { + var i = 0; + + var str = ''; + while (1) { + var codeUnit = HEAP16[(((ptr)+(i*2))>>1)]; + if (codeUnit == 0) + return str; + ++i; + // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through. + str += String.fromCharCode(codeUnit); + } +} +Module['UTF16ToString'] = UTF16ToString; + +// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', +// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP. +// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write. +// Parameters: +// str: the Javascript string to copy. +// outPtr: Byte address in Emscripten HEAP where to write the string to. +// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null +// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else. +// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator. +// Returns the number of bytes written, EXCLUDING the null terminator. + +function stringToUTF16(str, outPtr, maxBytesToWrite) { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. + if (maxBytesToWrite === undefined) { + maxBytesToWrite = 0x7FFFFFFF; + } + if (maxBytesToWrite < 2) return 0; + maxBytesToWrite -= 2; // Null terminator. + var startPtr = outPtr; + var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length; + for (var i = 0; i < numCharsToWrite; ++i) { + // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP. + var codeUnit = str.charCodeAt(i); // possibly a lead surrogate + HEAP16[((outPtr)>>1)]=codeUnit; + outPtr += 2; + } + // Null-terminate the pointer to the HEAP. + HEAP16[((outPtr)>>1)]=0; + return outPtr - startPtr; +} +Module['stringToUTF16'] = stringToUTF16; + +// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. + +function lengthBytesUTF16(str) { + return str.length*2; +} +Module['lengthBytesUTF16'] = lengthBytesUTF16; + +function UTF32ToString(ptr) { + var i = 0; + + var str = ''; + while (1) { + var utf32 = HEAP32[(((ptr)+(i*4))>>2)]; + if (utf32 == 0) + return str; + ++i; + // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + if (utf32 >= 0x10000) { + var ch = utf32 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } else { + str += String.fromCharCode(utf32); + } + } +} +Module['UTF32ToString'] = UTF32ToString; + +// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', +// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP. +// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write. +// Parameters: +// str: the Javascript string to copy. +// outPtr: Byte address in Emscripten HEAP where to write the string to. +// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null +// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else. +// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator. +// Returns the number of bytes written, EXCLUDING the null terminator. + +function stringToUTF32(str, outPtr, maxBytesToWrite) { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. + if (maxBytesToWrite === undefined) { + maxBytesToWrite = 0x7FFFFFFF; + } + if (maxBytesToWrite < 4) return 0; + var startPtr = outPtr; + var endPtr = startPtr + maxBytesToWrite - 4; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var codeUnit = str.charCodeAt(i); // possibly a lead surrogate + if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) { + var trailSurrogate = str.charCodeAt(++i); + codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF); + } + HEAP32[((outPtr)>>2)]=codeUnit; + outPtr += 4; + if (outPtr + 4 > endPtr) break; + } + // Null-terminate the pointer to the HEAP. + HEAP32[((outPtr)>>2)]=0; + return outPtr - startPtr; +} +Module['stringToUTF32'] = stringToUTF32; + +// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. + +function lengthBytesUTF32(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var codeUnit = str.charCodeAt(i); + if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate. + len += 4; + } + + return len; +} +Module['lengthBytesUTF32'] = lengthBytesUTF32; + +function demangle(func) { + var hasLibcxxabi = !!Module['___cxa_demangle']; + if (hasLibcxxabi) { + try { + var buf = _malloc(func.length); + writeStringToMemory(func.substr(1), buf); + var status = _malloc(4); + var ret = Module['___cxa_demangle'](buf, 0, 0, status); + if (getValue(status, 'i32') === 0 && ret) { + return Pointer_stringify(ret); + } + // otherwise, libcxxabi failed, we can try ours which may return a partial result + } catch(e) { + // failure when using libcxxabi, we can try ours which may return a partial result + } finally { + if (buf) _free(buf); + if (status) _free(status); + if (ret) _free(ret); + } + } + var i = 3; + // params, etc. + var basicTypes = { + 'v': 'void', + 'b': 'bool', + 'c': 'char', + 's': 'short', + 'i': 'int', + 'l': 'long', + 'f': 'float', + 'd': 'double', + 'w': 'wchar_t', + 'a': 'signed char', + 'h': 'unsigned char', + 't': 'unsigned short', + 'j': 'unsigned int', + 'm': 'unsigned long', + 'x': 'long long', + 'y': 'unsigned long long', + 'z': '...' + }; + var subs = []; + var first = true; + function dump(x) { + //return; + if (x) Module.print(x); + Module.print(func); + var pre = ''; + for (var a = 0; a < i; a++) pre += ' '; + Module.print (pre + '^'); + } + function parseNested() { + i++; + if (func[i] === 'K') i++; // ignore const + var parts = []; + while (func[i] !== 'E') { + if (func[i] === 'S') { // substitution + i++; + var next = func.indexOf('_', i); + var num = func.substring(i, next) || 0; + parts.push(subs[num] || '?'); + i = next+1; + continue; + } + if (func[i] === 'C') { // constructor + parts.push(parts[parts.length-1]); + i += 2; + continue; + } + var size = parseInt(func.substr(i)); + var pre = size.toString().length; + if (!size || !pre) { i--; break; } // counter i++ below us + var curr = func.substr(i + pre, size); + parts.push(curr); + subs.push(curr); + i += pre + size; + } + i++; // skip E + return parts; + } + function parse(rawList, limit, allowVoid) { // main parser + limit = limit || Infinity; + var ret = '', list = []; + function flushList() { + return '(' + list.join(', ') + ')'; + } + var name; + if (func[i] === 'N') { + // namespaced N-E + name = parseNested().join('::'); + limit--; + if (limit === 0) return rawList ? [name] : name; + } else { + // not namespaced + if (func[i] === 'K' || (first && func[i] === 'L')) i++; // ignore const and first 'L' + var size = parseInt(func.substr(i)); + if (size) { + var pre = size.toString().length; + name = func.substr(i + pre, size); + i += pre + size; + } + } + first = false; + if (func[i] === 'I') { + i++; + var iList = parse(true); + var iRet = parse(true, 1, true); + ret += iRet[0] + ' ' + name + '<' + iList.join(', ') + '>'; + } else { + ret = name; + } + paramLoop: while (i < func.length && limit-- > 0) { + //dump('paramLoop'); + var c = func[i++]; + if (c in basicTypes) { + list.push(basicTypes[c]); + } else { + switch (c) { + case 'P': list.push(parse(true, 1, true)[0] + '*'); break; // pointer + case 'R': list.push(parse(true, 1, true)[0] + '&'); break; // reference + case 'L': { // literal + i++; // skip basic type + var end = func.indexOf('E', i); + var size = end - i; + list.push(func.substr(i, size)); + i += size + 2; // size + 'EE' + break; + } + case 'A': { // array + var size = parseInt(func.substr(i)); + i += size.toString().length; + if (func[i] !== '_') throw '?'; + i++; // skip _ + list.push(parse(true, 1, true)[0] + ' [' + size + ']'); + break; + } + case 'E': break paramLoop; + default: ret += '?' + c; break paramLoop; + } + } + } + if (!allowVoid && list.length === 1 && list[0] === 'void') list = []; // avoid (void) + if (rawList) { + if (ret) { + list.push(ret + '?'); + } + return list; + } else { + return ret + flushList(); + } + } + var parsed = func; + try { + // Special-case the entry point, since its name differs from other name mangling. + if (func == 'Object._main' || func == '_main') { + return 'main()'; + } + if (typeof func === 'number') func = Pointer_stringify(func); + if (func[0] !== '_') return func; + if (func[1] !== '_') return func; // C function + if (func[2] !== 'Z') return func; + switch (func[3]) { + case 'n': return 'operator new()'; + case 'd': return 'operator delete()'; + } + parsed = parse(); + } catch(e) { + parsed += '?'; + } + if (parsed.indexOf('?') >= 0 && !hasLibcxxabi) { + Runtime.warnOnce('warning: a problem occurred in builtin C++ name demangling; build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling'); + } + return parsed; +} + +function demangleAll(text) { + return text.replace(/__Z[\w\d_]+/g, function(x) { var y = demangle(x); return x === y ? x : (x + ' [' + y + ']') }); +} + +function jsStackTrace() { + var err = new Error(); + if (!err.stack) { + // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown, + // so try that as a special-case. + try { + throw new Error(0); + } catch(e) { + err = e; + } + if (!err.stack) { + return '(no stack trace available)'; + } + } + return err.stack.toString(); +} + +function stackTrace() { + return demangleAll(jsStackTrace()); +} +Module['stackTrace'] = stackTrace; + +// Memory management + +var PAGE_SIZE = 4096; + +function alignMemoryPage(x) { + if (x % 4096 > 0) { + x += (4096 - (x % 4096)); + } + return x; +} + +var HEAP; +var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; + +var STATIC_BASE = 0, STATICTOP = 0, staticSealed = false; // static area +var STACK_BASE = 0, STACKTOP = 0, STACK_MAX = 0; // stack area +var DYNAMIC_BASE = 0, DYNAMICTOP = 0; // dynamic area handled by sbrk + + +function enlargeMemory() { + abort('Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value ' + TOTAL_MEMORY + ', (2) compile with ALLOW_MEMORY_GROWTH which adjusts the size at runtime but prevents some optimizations, or (3) set Module.TOTAL_MEMORY before the program runs.'); +} + + +var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880; +var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 16777216; + +var totalMemory = 64*1024; +while (totalMemory < TOTAL_MEMORY || totalMemory < 2*TOTAL_STACK) { + if (totalMemory < 16*1024*1024) { + totalMemory *= 2; + } else { + totalMemory += 16*1024*1024 + } +} +if (totalMemory !== TOTAL_MEMORY) { + Module.printErr('increasing TOTAL_MEMORY to ' + totalMemory + ' to be compliant with the asm.js spec (and given that TOTAL_STACK=' + TOTAL_STACK + ')'); + TOTAL_MEMORY = totalMemory; +} + +// Initialize the runtime's memory +// check for full engine support (use string 'subarray' to avoid closure compiler confusion) +assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && !!(new Int32Array(1)['subarray']) && !!(new Int32Array(1)['set']), + 'JS engine does not provide full typed array support'); + +var buffer; +buffer = new ArrayBuffer(TOTAL_MEMORY); +HEAP8 = new Int8Array(buffer); +HEAP16 = new Int16Array(buffer); +HEAP32 = new Int32Array(buffer); +HEAPU8 = new Uint8Array(buffer); +HEAPU16 = new Uint16Array(buffer); +HEAPU32 = new Uint32Array(buffer); +HEAPF32 = new Float32Array(buffer); +HEAPF64 = new Float64Array(buffer); + +// Endianness check (note: assumes compiler arch was little-endian) +HEAP32[0] = 255; +assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, 'Typed arrays 2 must be run on a little-endian system'); + +Module['HEAP'] = HEAP; +Module['buffer'] = buffer; +Module['HEAP8'] = HEAP8; +Module['HEAP16'] = HEAP16; +Module['HEAP32'] = HEAP32; +Module['HEAPU8'] = HEAPU8; +Module['HEAPU16'] = HEAPU16; +Module['HEAPU32'] = HEAPU32; +Module['HEAPF32'] = HEAPF32; +Module['HEAPF64'] = HEAPF64; + +function callRuntimeCallbacks(callbacks) { + while(callbacks.length > 0) { + var callback = callbacks.shift(); + if (typeof callback == 'function') { + callback(); + continue; + } + var func = callback.func; + if (typeof func === 'number') { + if (callback.arg === undefined) { + Runtime.dynCall('v', func); + } else { + Runtime.dynCall('vi', func, [callback.arg]); + } + } else { + func(callback.arg === undefined ? null : callback.arg); + } + } +} + +var __ATPRERUN__ = []; // functions called before the runtime is initialized +var __ATINIT__ = []; // functions called during startup +var __ATMAIN__ = []; // functions called when main() is to be run +var __ATEXIT__ = []; // functions called during shutdown +var __ATPOSTRUN__ = []; // functions called after the runtime has exited + +var runtimeInitialized = false; +var runtimeExited = false; + + +function preRun() { + // compatibility - merge in anything from Module['preRun'] at this time + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + callRuntimeCallbacks(__ATPRERUN__); +} + +function ensureInitRuntime() { + if (runtimeInitialized) return; + runtimeInitialized = true; + callRuntimeCallbacks(__ATINIT__); +} + +function preMain() { + callRuntimeCallbacks(__ATMAIN__); +} + +function exitRuntime() { + callRuntimeCallbacks(__ATEXIT__); + runtimeExited = true; +} + +function postRun() { + // compatibility - merge in anything from Module['postRun'] at this time + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + callRuntimeCallbacks(__ATPOSTRUN__); +} + +function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); +} +Module['addOnPreRun'] = Module.addOnPreRun = addOnPreRun; + +function addOnInit(cb) { + __ATINIT__.unshift(cb); +} +Module['addOnInit'] = Module.addOnInit = addOnInit; + +function addOnPreMain(cb) { + __ATMAIN__.unshift(cb); +} +Module['addOnPreMain'] = Module.addOnPreMain = addOnPreMain; + +function addOnExit(cb) { + __ATEXIT__.unshift(cb); +} +Module['addOnExit'] = Module.addOnExit = addOnExit; + +function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); +} +Module['addOnPostRun'] = Module.addOnPostRun = addOnPostRun; + +// Tools + + +function intArrayFromString(stringy, dontAddNull, length /* optional */) { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; +} +Module['intArrayFromString'] = intArrayFromString; + +function intArrayToString(array) { + var ret = []; + for (var i = 0; i < array.length; i++) { + var chr = array[i]; + if (chr > 0xFF) { + assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.'); + chr &= 0xFF; + } + ret.push(String.fromCharCode(chr)); + } + return ret.join(''); +} +Module['intArrayToString'] = intArrayToString; + +function writeStringToMemory(string, buffer, dontAddNull) { + var array = intArrayFromString(string, dontAddNull); + var i = 0; + while (i < array.length) { + var chr = array[i]; + HEAP8[(((buffer)+(i))>>0)]=chr; + i = i + 1; + } +} +Module['writeStringToMemory'] = writeStringToMemory; + +function writeArrayToMemory(array, buffer) { + for (var i = 0; i < array.length; i++) { + HEAP8[((buffer++)>>0)]=array[i]; + } +} +Module['writeArrayToMemory'] = writeArrayToMemory; + +function writeAsciiToMemory(str, buffer, dontAddNull) { + for (var i = 0; i < str.length; ++i) { + assert(str.charCodeAt(i) === str.charCodeAt(i)&0xff); + HEAP8[((buffer++)>>0)]=str.charCodeAt(i); + } + // Null-terminate the pointer to the HEAP. + if (!dontAddNull) HEAP8[((buffer)>>0)]=0; +} +Module['writeAsciiToMemory'] = writeAsciiToMemory; + +function unSign(value, bits, ignore) { + if (value >= 0) { + return value; + } + return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts + : Math.pow(2, bits) + value; +} +function reSign(value, bits, ignore) { + if (value <= 0) { + return value; + } + var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32 + : Math.pow(2, bits-1); + if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that + // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors + // TODO: In i64 mode 1, resign the two parts separately and safely + value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts + } + return value; +} + + +// check for imul support, and also for correctness ( https://bugs.webkit.org/show_bug.cgi?id=126345 ) +if (!Math['imul'] || Math['imul'](0xffffffff, 5) !== -5) Math['imul'] = function imul(a, b) { + var ah = a >>> 16; + var al = a & 0xffff; + var bh = b >>> 16; + var bl = b & 0xffff; + return (al*bl + ((ah*bl + al*bh) << 16))|0; +}; +Math.imul = Math['imul']; + + +if (!Math['clz32']) Math['clz32'] = function(x) { + x = x >>> 0; + for (var i = 0; i < 32; i++) { + if (x & (1 << (31 - i))) return i; + } + return 32; +}; +Math.clz32 = Math['clz32'] + +var Math_abs = Math.abs; +var Math_cos = Math.cos; +var Math_sin = Math.sin; +var Math_tan = Math.tan; +var Math_acos = Math.acos; +var Math_asin = Math.asin; +var Math_atan = Math.atan; +var Math_atan2 = Math.atan2; +var Math_exp = Math.exp; +var Math_log = Math.log; +var Math_sqrt = Math.sqrt; +var Math_ceil = Math.ceil; +var Math_floor = Math.floor; +var Math_pow = Math.pow; +var Math_imul = Math.imul; +var Math_fround = Math.fround; +var Math_min = Math.min; +var Math_clz32 = Math.clz32; + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// PRE_RUN_ADDITIONS (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var runDependencyWatcher = null; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } + return id; +} + +function addRunDependency(id) { + runDependencies++; + if (Module['monitorRunDependencies']) { + Module['monitorRunDependencies'](runDependencies); + } + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval !== 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(function() { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + Module.printErr('still waiting on run dependencies:'); + } + Module.printErr('dependency: ' + dep); + } + if (shown) { + Module.printErr('(end of list)'); + } + }, 10000); + } + } else { + Module.printErr('warning: run dependency added without ID'); + } +} +Module['addRunDependency'] = addRunDependency; +function removeRunDependency(id) { + runDependencies--; + if (Module['monitorRunDependencies']) { + Module['monitorRunDependencies'](runDependencies); + } + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + Module.printErr('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} +Module['removeRunDependency'] = removeRunDependency; + +Module["preloadedImages"] = {}; // maps url to image data +Module["preloadedAudios"] = {}; // maps url to audio data + + + +var memoryInitializer = null; + + + +// === Body === + +var ASM_CONSTS = []; + + + + +STATIC_BASE = 8; + +STATICTOP = STATIC_BASE + 17984; + /* global initializers */ __ATINIT__.push(); + + +/* memory initializer */ allocate([104,97,97,114,0,0,0,0,100,98,49,0,0,0,0,0,100,98,50,0,0,0,0,0,100,98,51,0,0,0,0,0,100,98,52,0,0,0,0,0,100,98,53,0,0,0,0,0,100,98,54,0,0,0,0,0,100,98,55,0,0,0,0,0,100,98,56,0,0,0,0,0,100,98,57,0,0,0,0,0,100,98,49,48,0,0,0,0,100,98,49,50,0,0,0,0,100,98,49,51,0,0,0,0,100,98,49,49,0,0,0,0,100,98,49,52,0,0,0,0,100,98,49,53,0,0,0,0,98,105,111,114,49,46,49,0,98,105,111,114,49,46,51,0,98,105,111,114,49,46,53,0,98,105,111,114,50,46,50,0,98,105,111,114,50,46,52,0,98,105,111,114,50,46,54,0,98,105,111,114,50,46,56,0,98,105,111,114,51,46,49,0,98,105,111,114,51,46,51,0,98,105,111,114,51,46,53,0,98,105,111,114,51,46,55,0,98,105,111,114,51,46,57,0,98,105,111,114,52,46,52,0,98,105,111,114,53,46,53,0,98,105,111,114,54,46,56,0,99,111,105,102,49,0,0,0,99,111,105,102,50,0,0,0,99,111,105,102,51,0,0,0,99,111,105,102,52,0,0,0,99,111,105,102,53,0,0,0,115,121,109,50,0,0,0,0,115,121,109,51,0,0,0,0,115,121,109,52,0,0,0,0,115,121,109,53,0,0,0,0,115,121,109,54,0,0,0,0,115,121,109,55,0,0,0,0,115,121,109,56,0,0,0,0,115,121,109,57,0,0,0,0,115,121,109,49,48,0,0,0,10,32,70,105,108,116,101,114,32,78,111,116,32,105,110,32,68,97,116,97,98,97,115,101,32,10,0,0,0,0,0,0,27,13,224,45,144,160,230,191,27,13,224,45,144,160,230,63,27,13,224,45,144,160,230,63,27,13,224,45,144,160,230,63,27,13,224,45,144,160,230,63,27,13,224,45,144,160,230,191,150,140,182,48,23,180,133,191,130,72,104,199,10,214,160,63,133,99,101,25,226,148,159,63,0,231,197,183,193,240,199,191,150,231,219,249,198,167,156,191,199,218,61,221,44,48,228,63,30,202,69,234,5,224,230,63,241,88,241,42,5,125,205,63,241,88,241,42,5,125,205,191,30,202,69,234,5,224,230,63,199,218,61,221,44,48,228,191,150,231,219,249,198,167,156,191,0,231,197,183,193,240,199,63,133,99,101,25,226,148,159,63,130,72,104,199,10,214,160,191,150,140,182,48,23,180,133,191,241,88,241,42,5,125,205,63,30,202,69,234,5,224,230,63,199,218,61,221,44,48,228,63,150,231,219,249,198,167,156,191,0,231,197,183,193,240,199,191,133,99,101,25,226,148,159,63,130,72,104,199,10,214,160,63,150,140,182,48,23,180,133,191,150,140,182,48,23,180,133,191,130,72,104,199,10,214,160,191,133,99,101,25,226,148,159,63,0,231,197,183,193,240,199,63,150,231,219,249,198,167,156,191,199,218,61,221,44,48,228,191,30,202,69,234,5,224,230,63,241,88,241,42,5,125,205,191,163,158,61,224,133,83,107,63,121,171,40,243,239,195,137,191,29,180,125,69,173,144,121,191,34,27,37,181,185,219,179,63,166,184,169,72,102,130,160,191,115,249,247,211,132,3,207,191,48,222,190,115,3,184,193,63,40,113,59,20,137,45,231,63,3,186,196,194,145,82,227,63,130,175,167,65,60,126,196,63,130,175,167,65,60,126,196,191,3,186,196,194,145,82,227,63,40,113,59,20,137,45,231,191,48,222,190,115,3,184,193,63,115,249,247,211,132,3,207,63,166,184,169,72,102,130,160,191,34,27,37,181,185,219,179,191,29,180,125,69,173,144,121,191,121,171,40,243,239,195,137,63,163,158,61,224,133,83,107,63,130,175,167,65,60,126,196,63,3,186,196,194,145,82,227,63,40,113,59,20,137,45,231,63,48,222,190,115,3,184,193,63,115,249,247,211,132,3,207,191,166,184,169,72,102,130,160,191,34,27,37,181,185,219,179,63,29,180,125,69,173,144,121,191,121,171,40,243,239,195,137,191,163,158,61,224,133,83,107,63,163,158,61,224,133,83,107,63,121,171,40,243,239,195,137,63,29,180,125,69,173,144,121,191,34,27,37,181,185,219,179,191,166,184,169,72,102,130,160,191,115,249,247,211,132,3,207,63,48,222,190,115,3,184,193,63,40,113,59,20,137,45,231,191,3,186,196,194,145,82,227,63,130,175,167,65,60,126,196,191,179,95,100,59,135,166,81,191,121,200,99,76,81,145,115,63,236,13,249,17,247,37,66,63,175,27,6,100,133,43,160,191,104,223,95,61,244,46,156,63,187,210,77,127,221,245,184,63,131,11,39,98,51,156,192,191,216,240,104,210,61,246,204,191,86,50,169,207,15,45,212,63,178,209,59,250,73,9,232,63,230,52,69,246,234,167,223,63,19,49,220,36,239,141,188,63,19,49,220,36,239,141,188,191,230,52,69,246,234,167,223,63,178,209,59,250,73,9,232,191,86,50,169,207,15,45,212,63,216,240,104,210,61,246,204,63,131,11,39,98,51,156,192,191,187,210,77,127,221,245,184,191,104,223,95,61,244,46,156,63,175,27,6,100,133,43,160,63,236,13,249,17,247,37,66,63,121,200,99,76,81,145,115,191,179,95,100,59,135,166,81,191,19,49,220,36,239,141,188,63,230,52,69,246,234,167,223,63,178,209,59,250,73,9,232,63,86,50,169,207,15,45,212,63,216,240,104,210,61,246,204,191,131,11,39,98,51,156,192,191,187,210,77,127,221,245,184,63,104,223,95,61,244,46,156,63,175,27,6,100,133,43,160,191,236,13,249,17,247,37,66,63,121,200,99,76,81,145,115,63,179,95,100,59,135,166,81,191,179,95,100,59,135,166,81,191,121,200,99,76,81,145,115,191,236,13,249,17,247,37,66,63,175,27,6,100,133,43,160,63,104,223,95,61,244,46,156,63,187,210,77,127,221,245,184,191,131,11,39,98,51,156,192,191,216,240,104,210,61,246,204,63,86,50,169,207,15,45,212,63,178,209,59,250,73,9,232,191,230,52,69,246,234,167,223,63,19,49,220,36,239,141,188,191,196,135,1,52,85,46,55,63,169,212,199,249,160,132,93,191,214,232,90,88,31,39,60,63,168,75,164,130,86,180,137,63,174,111,1,169,234,248,144,191,46,81,207,238,168,120,163,191,125,245,242,39,7,163,180,63,249,191,167,44,82,65,178,63,130,212,213,187,55,173,204,191,97,106,73,14,131,107,194,191,129,89,41,186,233,16,222,63,64,205,148,210,12,85,231,63,89,75,48,116,230,96,217,63,169,197,56,186,28,238,179,63,169,197,56,186,28,238,179,191,89,75,48,116,230,96,217,63,64,205,148,210,12,85,231,191,129,89,41,186,233,16,222,63,97,106,73,14,131,107,194,63,130,212,213,187,55,173,204,191,249,191,167,44,82,65,178,191,125,245,242,39,7,163,180,63,46,81,207,238,168,120,163,63,174,111,1,169,234,248,144,191,168,75,164,130,86,180,137,191,213,232,90,88,31,39,60,63,169,212,199,249,160,132,93,63,196,135,1,52,85,46,55,63,169,197,56,186,28,238,179,63,89,75,48,116,230,96,217,63,64,205,148,210,12,85,231,63,129,89,41,186,233,16,222,63,97,106,73,14,131,107,194,191,130,212,213,187,55,173,204,191,249,191,167,44,82,65,178,63,125,245,242,39,7,163,180,63,46,81,207,238,168,120,163,191,174,111,1,169,234,248,144,191,168,75,164,130,86,180,137,63,214,232,90,88,31,39,60,63,169,212,199,249,160,132,93,191,196,135,1,52,85,46,55,63,196,135,1,52,85,46,55,63,169,212,199,249,160,132,93,63,214,232,90,88,31,39,60,63,166,75,164,130,86,180,137,191,174,111,1,169,234,248,144,191,46,81,207,238,168,120,163,63,125,245,242,39,7,163,180,63,249,191,167,44,82,65,178,191,130,212,213,187,55,173,204,191,97,106,73,14,131,107,194,63,129,89,41,186,233,16,222,63,64,205,148,210,12,85,231,191,89,75,48,116,230,96,217,63,169,197,56,186,28,238,179,191,28,87,4,200,187,203,30,191,201,85,239,141,20,34,70,63,150,170,45,23,80,172,57,191,151,5,51,109,239,242,115,191,130,135,50,223,120,233,129,63,202,39,88,205,21,162,140,63,220,23,139,81,188,146,166,191,48,66,8,15,66,201,145,191,224,144,99,177,203,122,192,63,58,57,14,203,249,246,62,63,113,19,37,135,79,45,210,191,100,39,153,69,129,53,144,191,118,117,219,190,57,187,226,63,209,80,146,89,196,158,229,63,204,206,180,144,22,6,212,63,65,252,162,173,100,220,171,63,65,252,162,173,100,220,171,191,204,206,180,144,22,6,212,63,209,80,146,89,196,158,229,191,118,117,219,190,57,187,226,63,100,39,153,69,129,53,144,63,113,19,37,135,79,45,210,191,58,57,14,203,249,246,62,191,224,144,99,177,203,122,192,63,48,66,8,15,66,201,145,63,220,23,139,81,188,146,166,191,202,39,88,205,21,162,140,191,130,135,50,223,120,233,129,63,151,5,51,109,239,242,115,63,150,170,45,23,80,172,57,191,201,85,239,141,20,34,70,191,28,87,4,200,187,203,30,191,65,252,162,173,100,220,171,63,204,206,180,144,22,6,212,63,209,80,146,89,196,158,229,63,118,117,219,190,57,187,226,63,100,39,153,69,129,53,144,191,113,19,37,135,79,45,210,191,58,57,14,203,249,246,62,63,224,144,99,177,203,122,192,63,48,66,8,15,66,201,145,191,220,23,139,81,188,146,166,191,202,39,88,205,21,162,140,63,130,135,50,223,120,233,129,63,151,5,51,109,239,242,115,191,150,170,45,23,80,172,57,191,201,85,239,141,20,34,70,63,28,87,4,200,187,203,30,191,28,87,4,200,187,203,30,191,201,85,239,141,20,34,70,191,150,170,45,23,80,172,57,191,151,5,51,109,239,242,115,63,130,135,50,223,120,233,129,63,202,39,88,205,21,162,140,191,220,23,139,81,188,146,166,191,48,66,8,15,66,201,145,63,224,144,99,177,203,122,192,63,58,57,14,203,249,246,62,191,113,19,37,135,79,45,210,191,100,39,153,69,129,53,144,63,118,117,219,190,57,187,226,63,209,80,146,89,196,158,229,191,204,206,180,144,22,6,212,63,65,252,162,173,100,220,171,191,76,208,217,158,27,161,4,63,124,52,19,168,61,131,48,191,172,38,198,164,118,50,46,63,245,191,245,187,151,69,94,63,132,235,169,100,123,137,113,191,183,193,122,159,163,88,115,191,12,208,4,190,249,229,150,63,82,246,227,166,49,114,48,63,75,85,242,148,98,80,177,191,218,7,99,148,141,118,159,63,126,16,66,30,98,3,195,63,157,74,218,188,142,202,184,191,87,132,251,102,255,196,210,191,96,96,2,168,156,12,193,63,89,250,230,1,129,8,229,63,111,205,1,6,182,90,227,63,228,139,153,128,249,53,207,63,49,74,63,229,243,126,163,63,49,74,63,229,243,126,163,191,228,139,153,128,249,53,207,63,111,205,1,6,182,90,227,191,89,250,230,1,129,8,229,63,96,96,2,168,156,12,193,191,87,132,251,102,255,196,210,191,157,74,218,188,142,202,184,63,126,16,66,30,98,3,195,63,218,7,99,148,141,118,159,191,75,85,242,148,98,80,177,191,82,246,227,166,49,114,48,191,12,208,4,190,249,229,150,63,183,193,122,159,163,88,115,63,132,235,169,100,123,137,113,191,245,191,245,187,151,69,94,191,172,38,198,164,118,50,46,63,124,52,19,168,61,131,48,63,76,208,217,158,27,161,4,63,49,74,63,229,243,126,163,63,228,139,153,128,249,53,207,63,111,205,1,6,182,90,227,63,89,250,230,1,129,8,229,63,96,96,2,168,156,12,193,63,87,132,251,102,255,196,210,191,157,74,218,188,142,202,184,191,126,16,66,30,98,3,195,63,218,7,99,148,141,118,159,63,75,85,242,148,98,80,177,191,82,246,227,166,49,114,48,63,12,208,4,190,249,229,150,63,183,193,122,159,163,88,115,191,132,235,169,100,123,137,113,191,245,191,245,187,151,69,94,63,172,38,198,164,118,50,46,63,124,52,19,168,61,131,48,191,76,208,217,158,27,161,4,63,76,208,217,158,27,161,4,63,124,52,19,168,61,131,48,63,172,38,198,164,118,50,46,63,245,191,245,187,151,69,94,191,132,235,169,100,123,137,113,191,183,193,122,159,163,88,115,63,12,208,4,190,249,229,150,63,82,246,227,166,49,114,48,191,75,85,242,148,98,80,177,191,218,7,99,148,141,118,159,191,126,16,66,30,98,3,195,63,157,74,218,188,142,202,184,63,87,132,251,102,255,196,210,191,96,96,2,168,156,12,193,191,89,250,230,1,129,8,229,63,111,205,1,6,182,90,227,191,228,139,153,128,249,53,207,63,49,74,63,229,243,126,163,191,68,139,229,45,42,209,235,190,140,192,147,27,161,136,24,63,205,110,68,85,245,135,30,191,47,165,146,9,98,121,70,191,151,183,162,114,96,82,96,63,60,21,170,135,135,220,86,63,139,248,115,109,70,251,133,191,85,57,227,179,125,139,109,63,175,169,202,105,64,1,161,63,204,121,21,213,29,42,158,191,207,3,52,7,227,70,178,191,124,19,160,129,155,210,183,63,100,167,160,119,163,77,192,63,45,58,28,124,196,20,201,191,137,157,192,182,247,250,207,191,199,234,35,73,186,254,209,63,223,179,98,64,219,7,230,63,26,220,27,7,213,222,224,63,30,131,25,105,45,22,200,63,234,55,222,73,101,79,155,63,234,55,222,73,101,79,155,191,30,131,25,105,45,22,200,63,26,220,27,7,213,222,224,191,223,179,98,64,219,7,230,63,199,234,35,73,186,254,209,191,137,157,192,182,247,250,207,191,45,58,28,124,196,20,201,63,100,167,160,119,163,77,192,63,124,19,160,129,155,210,183,191,207,3,52,7,227,70,178,191,204,121,21,213,29,42,158,63,175,169,202,105,64,1,161,63,85,57,227,179,125,139,109,191,139,248,115,109,70,251,133,191,60,21,170,135,135,220,86,191,151,183,162,114,96,82,96,63,47,165,146,9,98,121,70,63,205,110,68,85,245,135,30,191,140,192,147,27,161,136,24,191,68,139,229,45,42,209,235,190,234,55,222,73,101,79,155,63,30,131,25,105,45,22,200,63,26,220,27,7,213,222,224,63,223,179,98,64,219,7,230,63,199,234,35,73,186,254,209,63,137,157,192,182,247,250,207,191,45,58,28,124,196,20,201,191,100,167,160,119,163,77,192,63,124,19,160,129,155,210,183,63,207,3,52,7,227,70,178,191,204,121,21,213,29,42,158,191,175,169,202,105,64,1,161,63,85,57,227,179,125,139,109,63,139,248,115,109,70,251,133,191,60,21,170,135,135,220,86,63,151,183,162,114,96,82,96,63,47,165,146,9,98,121,70,191,205,110,68,85,245,135,30,191,140,192,147,27,161,136,24,63,68,139,229,45,42,209,235,190,68,139,229,45,42,209,235,190,140,192,147,27,161,136,24,191,205,110,68,85,245,135,30,191,47,165,146,9,98,121,70,63,151,183,162,114,96,82,96,63,60,21,170,135,135,220,86,191,139,248,115,109,70,251,133,191,85,57,227,179,125,139,109,191,175,169,202,105,64,1,161,63,204,121,21,213,29,42,158,63,207,3,52,7,227,70,178,191,124,19,160,129,155,210,183,191,100,167,160,119,163,77,192,63,45,58,28,124,196,20,201,63,137,157,192,182,247,250,207,191,199,234,35,73,186,254,209,191,223,179,98,64,219,7,230,63,26,220,27,7,213,222,224,191,30,131,25,105,45,22,200,63,234,55,222,73,101,79,155,191,155,194,125,45,80,167,185,190,203,65,12,241,146,203,234,62,31,63,246,86,74,107,249,190,148,180,184,4,105,51,23,191,164,11,190,49,132,120,57,63,15,4,204,36,199,115,219,62,193,192,110,24,192,218,97,191,108,209,248,209,171,107,98,63,22,165,255,75,132,125,123,63,131,40,62,98,74,76,138,191,107,52,63,81,23,6,137,191,125,80,57,190,141,69,165,63,167,82,28,157,17,56,134,63,152,48,25,130,198,175,184,191,228,89,141,135,234,243,117,63,170,221,86,126,117,91,199,63,57,174,243,240,150,89,152,191,175,90,164,141,68,60,212,191,12,135,217,193,74,235,166,191,241,120,41,92,36,130,224,63,219,110,142,157,197,7,229,63,35,64,46,39,150,38,216,63,205,247,130,6,137,12,188,63,182,249,210,120,153,218,138,63,182,249,210,120,153,218,138,191,205,247,130,6,137,12,188,63,35,64,46,39,150,38,216,191,219,110,142,157,197,7,229,63,241,120,41,92,36,130,224,191,12,135,217,193,74,235,166,191,175,90,164,141,68,60,212,63,57,174,243,240,150,89,152,191,170,221,86,126,117,91,199,191,228,89,141,135,234,243,117,63,152,48,25,130,198,175,184,63,167,82,28,157,17,56,134,63,125,80,57,190,141,69,165,191,107,52,63,81,23,6,137,191,131,40,62,98,74,76,138,63,22,165,255,75,132,125,123,63,108,209,248,209,171,107,98,191,193,192,110,24,192,218,97,191,15,4,204,36,199,115,219,190,164,11,190,49,132,120,57,63,148,180,184,4,105,51,23,63,31,63,246,86,74,107,249,190,203,65,12,241,146,203,234,190,155,194,125,45,80,167,185,190,182,249,210,120,153,218,138,63,205,247,130,6,137,12,188,63,35,64,46,39,150,38,216,63,219,110,142,157,197,7,229,63,241,120,41,92,36,130,224,63,12,135,217,193,74,235,166,191,175,90,164,141,68,60,212,191,57,174,243,240,150,89,152,191,170,221,86,126,117,91,199,63,228,89,141,135,234,243,117,63,152,48,25,130,198,175,184,191,167,82,28,157,17,56,134,63,125,80,57,190,141,69,165,63,107,52,63,81,23,6,137,191,131,40,62,98,74,76,138,191,22,165,255,75,132,125,123,63,108,209,248,209,171,107,98,63,193,192,110,24,192,218,97,191,15,4,204,36,199,115,219,62,164,11,190,49,132,120,57,63,148,180,184,4,105,51,23,191,31,63,246,86,74,107,249,190,203,65,12,241,146,203,234,62,155,194,125,45,80,167,185,190,155,194,125,45,80,167,185,190,203,65,12,241,146,203,234,190,31,63,246,86,74,107,249,190,148,180,184,4,105,51,23,63,164,11,190,49,132,120,57,63,15,4,204,36,199,115,219,190,193,192,110,24,192,218,97,191,108,209,248,209,171,107,98,191,22,165,255,75,132,125,123,63,131,40,62,98,74,76,138,63,107,52,63,81,23,6,137,191,125,80,57,190,141,69,165,191,167,82,28,157,17,56,134,63,152,48,25,130,198,175,184,63,228,89,141,135,234,243,117,63,170,221,86,126,117,91,199,191,57,174,243,240,150,89,152,191,175,90,164,141,68,60,212,63,12,135,217,193,74,235,166,191,241,120,41,92,36,130,224,191,219,110,142,157,197,7,229,63,35,64,46,39,150,38,216,191,205,247,130,6,137,12,188,63,182,249,210,120,153,218,138,191,99,163,141,219,249,131,161,62,237,189,195,164,8,183,211,190,193,215,140,2,248,229,229,62,43,66,85,134,154,21,0,63,172,100,0,54,207,164,37,191,155,21,127,132,109,210,9,63,39,76,226,30,235,140,78,63,143,44,31,27,86,142,85,191,200,125,172,205,37,160,102,191,45,36,23,115,9,184,125,63,104,155,26,3,141,18,112,63,118,181,69,146,67,103,152,191,117,171,227,223,41,127,99,63,70,9,82,68,80,190,172,63,60,153,35,222,198,31,155,191,232,232,200,67,53,22,187,191,205,127,85,4,200,172,178,63,48,28,200,121,18,249,198,63,247,212,106,184,66,228,191,191,93,197,111,32,132,40,212,191,20,15,41,81,178,68,182,63,51,164,190,240,46,216,226,63,128,52,24,0,197,141,227,63,175,175,9,108,191,247,211,63,16,61,138,252,100,54,181,63,8,126,211,116,145,216,130,63,8,126,211,116,145,216,130,191,16,61,138,252,100,54,181,63,175,175,9,108,191,247,211,191,128,52,24,0,197,141,227,63,51,164,190,240,46,216,226,191,20,15,41,81,178,68,182,63,93,197,111,32,132,40,212,63,247,212,106,184,66,228,191,191,48,28,200,121,18,249,198,191,205,127,85,4,200,172,178,63,232,232,200,67,53,22,187,63,60,153,35,222,198,31,155,191,70,9,82,68,80,190,172,191,117,171,227,223,41,127,99,63,118,181,69,146,67,103,152,63,104,155,26,3,141,18,112,63,45,36,23,115,9,184,125,191,200,125,172,205,37,160,102,191,143,44,31,27,86,142,85,63,39,76,226,30,235,140,78,63,155,21,127,132,109,210,9,191,172,100,0,54,207,164,37,191,43,66,85,134,154,21,0,191,193,215,140,2,248,229,229,62,237,189,195,164,8,183,211,62,99,163,141,219,249,131,161,62,8,126,211,116,145,216,130,63,16,61,138,252,100,54,181,63,175,175,9,108,191,247,211,63,128,52,24,0,197,141,227,63,51,164,190,240,46,216,226,63,20,15,41,81,178,68,182,63,93,197,111,32,132,40,212,191,247,212,106,184,66,228,191,191,48,28,200,121,18,249,198,63,205,127,85,4,200,172,178,63,232,232,200,67,53,22,187,191,60,153,35,222,198,31,155,191,70,9,82,68,80,190,172,63,117,171,227,223,41,127,99,63,118,181,69,146,67,103,152,191,104,155,26,3,141,18,112,63,45,36,23,115,9,184,125,63,200,125,172,205,37,160,102,191,143,44,31,27,86,142,85,191,39,76,226,30,235,140,78,63,155,21,127,132,109,210,9,63,172,100,0,54,207,164,37,191,43,66,85,134,154,21,0,63,193,215,140,2,248,229,229,62,237,189,195,164,8,183,211,190,99,163,141,219,249,131,161,62,99,163,141,219,249,131,161,62,237,189,195,164,8,183,211,62,193,215,140,2,248,229,229,62,43,66,85,134,154,21,0,191,172,100,0,54,207,164,37,191,155,21,127,132,109,210,9,191,39,76,226,30,235,140,78,63,143,44,31,27,86,142,85,63,200,125,172,205,37,160,102,191,45,36,23,115,9,184,125,191,104,155,26,3,141,18,112,63,118,181,69,146,67,103,152,63,117,171,227,223,41,127,99,63,70,9,82,68,80,190,172,191,60,153,35,222,198,31,155,191,232,232,200,67,53,22,187,63,205,127,85,4,200,172,178,63,48,28,200,121,18,249,198,191,247,212,106,184,66,228,191,191,93,197,111,32,132,40,212,63,20,15,41,81,178,68,182,63,51,164,190,240,46,216,226,191,128,52,24,0,197,141,227,63,175,175,9,108,191,247,211,191,16,61,138,252,100,54,181,63,8,126,211,116,145,216,130,191,189,12,225,180,176,217,210,62,218,61,187,254,160,40,2,191,3,59,25,93,176,138,12,63,248,109,188,240,21,84,48,63,56,173,253,211,56,67,77,191,91,18,132,60,84,57,52,191,124,248,117,10,210,47,116,63,13,107,52,243,73,94,107,191,88,131,104,90,151,119,143,191,190,138,149,106,81,87,149,63,43,128,106,39,39,11,160,63,21,254,190,219,33,2,177,191,128,149,74,126,56,204,167,191,201,167,11,63,10,45,195,63,185,79,106,139,59,232,176,63,254,202,168,137,255,140,209,191,185,244,43,107,111,197,196,191,89,231,239,204,159,93,218,63,5,18,50,100,37,241,229,63,205,200,152,97,40,203,220,63,30,20,35,196,201,112,194,63,216,95,7,22,153,36,147,63,216,95,7,22,153,36,147,191,30,20,35,196,201,112,194,63,205,200,152,97,40,203,220,191,5,18,50,100,37,241,229,63,89,231,239,204,159,93,218,191,185,244,43,107,111,197,196,191,254,202,168,137,255,140,209,63,185,79,106,139,59,232,176,63,201,167,11,63,10,45,195,191,128,149,74,126,56,204,167,191,21,254,190,219,33,2,177,63,43,128,106,39,39,11,160,63,190,138,149,106,81,87,149,191,88,131,104,90,151,119,143,191,13,107,52,243,73,94,107,63,124,248,117,10,210,47,116,63,91,18,132,60,84,57,52,63,56,173,253,211,56,67,77,191,248,109,188,240,21,84,48,191,3,59,25,93,176,138,12,63,218,61,187,254,160,40,2,63,189,12,225,180,176,217,210,62,216,95,7,22,153,36,147,63,30,20,35,196,201,112,194,63,205,200,152,97,40,203,220,63,5,18,50,100,37,241,229,63,89,231,239,204,159,93,218,63,185,244,43,107,111,197,196,191,254,202,168,137,255,140,209,191,185,79,106,139,59,232,176,63,201,167,11,63,10,45,195,63,128,149,74,126,56,204,167,191,21,254,190,219,33,2,177,191,43,128,106,39,39,11,160,63,190,138,149,106,81,87,149,63,88,131,104,90,151,119,143,191,13,107,52,243,73,94,107,191,124,248,117,10,210,47,116,63,91,18,132,60,84,57,52,191,56,173,253,211,56,67,77,191,248,109,188,240,21,84,48,63,3,59,25,93,176,138,12,63,218,61,187,254,160,40,2,191,189,12,225,180,176,217,210,62,189,12,225,180,176,217,210,62,218,61,187,254,160,40,2,63,3,59,25,93,176,138,12,63,248,109,188,240,21,84,48,191,56,173,253,211,56,67,77,191,91,18,132,60,84,57,52,63,124,248,117,10,210,47,116,63,13,107,52,243,73,94,107,63,88,131,104,90,151,119,143,191,190,138,149,106,81,87,149,191,43,128,106,39,39,11,160,63,21,254,190,219,33,2,177,63,128,149,74,126,56,204,167,191,201,167,11,63,10,45,195,191,185,79,106,139,59,232,176,63,254,202,168,137,255,140,209,63,185,244,43,107,111,197,196,191,89,231,239,204,159,93,218,191,5,18,50,100,37,241,229,63,205,200,152,97,40,203,220,191,30,20,35,196,201,112,194,63,216,95,7,22,153,36,147,191,47,103,196,240,144,252,135,190,36,54,19,180,203,240,188,62,236,178,63,229,104,105,210,190,219,88,79,54,191,173,229,190,218,15,232,162,18,6,18,63,229,0,2,60,63,231,5,191,73,212,16,144,246,89,57,191,251,135,229,217,79,51,71,63,200,198,110,31,14,101,81,63,200,9,68,33,71,137,111,191,158,12,200,19,189,115,72,191,78,161,125,186,96,49,138,63,47,79,146,97,206,255,118,191,102,128,188,166,232,232,158,191,108,113,33,169,3,161,155,63,97,244,157,101,10,72,172,63,133,219,243,71,8,81,178,191,85,60,170,214,36,53,182,191,212,196,3,252,40,235,193,63,58,113,188,50,239,182,193,63,94,75,96,208,133,232,203,191,30,2,175,97,88,99,209,191,246,82,66,174,102,253,203,63,2,50,49,220,176,50,228,63,9,110,161,34,223,188,225,63,32,240,98,127,119,79,208,63,146,176,92,15,70,238,175,63,28,93,227,172,2,119,122,63,28,93,227,172,2,119,122,191,146,176,92,15,70,238,175,63,32,240,98,127,119,79,208,191,9,110,161,34,223,188,225,63,2,50,49,220,176,50,228,191,246,82,66,174,102,253,203,63,30,2,175,97,88,99,209,63,94,75,96,208,133,232,203,191,58,113,188,50,239,182,193,191,212,196,3,252,40,235,193,63,85,60,170,214,36,53,182,63,133,219,243,71,8,81,178,191,97,244,157,101,10,72,172,191,108,113,33,169,3,161,155,63,102,128,188,166,232,232,158,63,47,79,146,97,206,255,118,191,78,161,125,186,96,49,138,191,158,12,200,19,189,115,72,191,200,9,68,33,71,137,111,63,200,198,110,31,14,101,81,63,251,135,229,217,79,51,71,191,73,212,16,144,246,89,57,191,229,0,2,60,63,231,5,63,218,15,232,162,18,6,18,63,219,88,79,54,191,173,229,62,236,178,63,229,104,105,210,190,36,54,19,180,203,240,188,190,47,103,196,240,144,252,135,190,28,93,227,172,2,119,122,63,146,176,92,15,70,238,175,63,32,240,98,127,119,79,208,63,9,110,161,34,223,188,225,63,2,50,49,220,176,50,228,63,246,82,66,174,102,253,203,63,30,2,175,97,88,99,209,191,94,75,96,208,133,232,203,191,58,113,188,50,239,182,193,63,212,196,3,252,40,235,193,63,85,60,170,214,36,53,182,191,133,219,243,71,8,81,178,191,97,244,157,101,10,72,172,63,108,113,33,169,3,161,155,63,102,128,188,166,232,232,158,191,47,79,146,97,206,255,118,191,78,161,125,186,96,49,138,63,158,12,200,19,189,115,72,191,200,9,68,33,71,137,111,191,200,198,110,31,14,101,81,63,251,135,229,217,79,51,71,63,73,212,16,144,246,89,57,191,229,0,2,60,63,231,5,191,218,15,232,162,18,6,18,63,219,88,79,54,191,173,229,190,236,178,63,229,104,105,210,190,36,54,19,180,203,240,188,62,47,103,196,240,144,252,135,190,47,103,196,240,144,252,135,190,36,54,19,180,203,240,188,190,236,178,63,229,104,105,210,190,219,88,79,54,191,173,229,62,218,15,232,162,18,6,18,63,229,0,2,60,63,231,5,63,73,212,16,144,246,89,57,191,251,135,229,217,79,51,71,191,200,198,110,31,14,101,81,63,200,9,68,33,71,137,111,63,158,12,200,19,189,115,72,191,78,161,125,186,96,49,138,191,47,79,146,97,206,255,118,191,102,128,188,166,232,232,158,63,108,113,33,169,3,161,155,63,97,244,157,101,10,72,172,191,133,219,243,71,8,81,178,191,85,60,170,214,36,53,182,63,212,196,3,252,40,235,193,63,58,113,188,50,239,182,193,191,94,75,96,208,133,232,203,191,30,2,175,97,88,99,209,63,246,82,66,174,102,253,203,63,2,50,49,220,176,50,228,191,9,110,161,34,223,188,225,63,32,240,98,127,119,79,208,191,146,176,92,15,70,238,175,63,28,93,227,172,2,119,122,191,21,106,51,22,208,118,112,62,121,183,28,29,41,50,165,190,149,63,228,223,88,99,190,62,102,40,84,193,245,53,204,62,54,110,244,101,249,127,253,190,123,191,32,202,172,11,251,62,225,82,203,166,4,111,36,63,131,214,30,247,128,144,55,191,168,160,36,127,254,121,56,191,84,216,61,60,228,214,95,63,85,12,92,113,0,176,47,191,114,177,47,252,225,146,122,191,55,49,153,91,201,228,116,63,132,112,0,53,81,228,142,63,105,120,160,211,58,79,149,191,140,29,42,151,170,98,154,191,224,99,111,66,50,12,172,63,253,152,119,82,88,88,161,63,149,47,46,242,107,114,188,191,197,227,32,6,32,79,164,191,116,24,13,63,186,86,200,63,45,197,120,51,98,182,176,63,215,216,40,110,13,125,210,191,136,81,137,202,233,186,200,191,190,121,194,176,55,178,213,63,44,41,165,81,128,170,228,63,227,51,29,105,71,135,223,63,205,123,2,111,253,94,202,63,244,155,188,16,192,238,167,63,242,102,162,88,0,151,114,63,242,102,162,88,0,151,114,191,244,155,188,16,192,238,167,63,205,123,2,111,253,94,202,191,227,51,29,105,71,135,223,63,44,41,165,81,128,170,228,191,190,121,194,176,55,178,213,63,136,81,137,202,233,186,200,63,215,216,40,110,13,125,210,191,45,197,120,51,98,182,176,191,116,24,13,63,186,86,200,63,197,227,32,6,32,79,164,63,149,47,46,242,107,114,188,191,253,152,119,82,88,88,161,191,224,99,111,66,50,12,172,63,140,29,42,151,170,98,154,63,105,120,160,211,58,79,149,191,132,112,0,53,81,228,142,191,55,49,153,91,201,228,116,63,114,177,47,252,225,146,122,63,85,12,92,113,0,176,47,191,84,216,61,60,228,214,95,191,168,160,36,127,254,121,56,191,131,214,30,247,128,144,55,63,225,82,203,166,4,111,36,63,123,191,32,202,172,11,251,190,54,110,244,101,249,127,253,190,102,40,84,193,245,53,204,190,149,63,228,223,88,99,190,62,121,183,28,29,41,50,165,62,21,106,51,22,208,118,112,62,242,102,162,88,0,151,114,63,244,155,188,16,192,238,167,63,205,123,2,111,253,94,202,63,227,51,29,105,71,135,223,63,44,41,165,81,128,170,228,63,190,121,194,176,55,178,213,63,136,81,137,202,233,186,200,191,215,216,40,110,13,125,210,191,45,197,120,51,98,182,176,63,116,24,13,63,186,86,200,63,197,227,32,6,32,79,164,191,149,47,46,242,107,114,188,191,253,152,119,82,88,88,161,63,224,99,111,66,50,12,172,63,140,29,42,151,170,98,154,191,105,120,160,211,58,79,149,191,132,112,0,53,81,228,142,63,55,49,153,91,201,228,116,63,114,177,47,252,225,146,122,191,85,12,92,113,0,176,47,191,84,216,61,60,228,214,95,63,168,160,36,127,254,121,56,191,131,214,30,247,128,144,55,191,225,82,203,166,4,111,36,63,123,191,32,202,172,11,251,62,54,110,244,101,249,127,253,190,102,40,84,193,245,53,204,62,149,63,228,223,88,99,190,62,121,183,28,29,41,50,165,190,21,106,51,22,208,118,112,62,21,106,51,22,208,118,112,62,121,183,28,29,41,50,165,62,149,63,228,223,88,99,190,62,102,40,84,193,245,53,204,190,54,110,244,101,249,127,253,190,123,191,32,202,172,11,251,190,225,82,203,166,4,111,36,63,131,214,30,247,128,144,55,63,168,160,36,127,254,121,56,191,84,216,61,60,228,214,95,191,85,12,92,113,0,176,47,191,114,177,47,252,225,146,122,63,55,49,153,91,201,228,116,63,132,112,0,53,81,228,142,191,105,120,160,211,58,79,149,191,140,29,42,151,170,98,154,63,224,99,111,66,50,12,172,63,253,152,119,82,88,88,161,191,149,47,46,242,107,114,188,191,197,227,32,6,32,79,164,63,116,24,13,63,186,86,200,63,45,197,120,51,98,182,176,191,215,216,40,110,13,125,210,191,136,81,137,202,233,186,200,63,190,121,194,176,55,178,213,63,44,41,165,81,128,170,228,191,227,51,29,105,71,135,223,63,205,123,2,111,253,94,202,191,244,155,188,16,192,238,167,63,242,102,162,88,0,151,114,191,205,59,127,102,158,160,230,191,205,59,127,102,158,160,230,63,205,59,127,102,158,160,230,63,205,59,127,102,158,160,230,63,205,59,127,102,158,160,230,63,205,59,127,102,158,160,230,191,218,108,223,204,118,248,144,63,218,108,223,204,118,248,144,191,58,242,238,204,217,28,191,191,58,242,238,204,217,28,191,63,205,59,127,102,158,160,230,63,205,59,127,102,158,160,230,63,58,242,238,204,217,28,191,63,58,242,238,204,217,28,191,191,218,108,223,204,118,248,144,191,218,108,223,204,118,248,144,63,218,108,223,204,118,248,144,63,218,108,223,204,118,248,144,63,58,242,238,204,217,28,191,191,58,242,238,204,217,28,191,191,205,59,127,102,158,160,230,63,205,59,127,102,158,160,230,191,58,242,238,204,217,28,191,63,58,242,238,204,217,28,191,63,218,108,223,204,118,248,144,191,218,108,223,204,118,248,144,191,0,0,0,0,0,0,0,0,218,108,223,204,118,248,160,63,218,108,223,204,118,248,176,191,205,59,127,102,158,160,198,191,3,23,183,25,188,222,218,63,24,236,34,192,222,209,239,63,3,23,183,25,188,222,218,63,205,59,127,102,158,160,198,191,218,108,223,204,118,248,176,191,218,108,223,204,118,248,160,63,0,0,0,0,0,0,0,0,218,108,223,204,118,248,160,191,218,108,223,204,118,248,176,191,205,59,127,102,158,160,198,63,3,23,183,25,188,222,218,63,24,236,34,192,222,209,239,191,3,23,183,25,188,222,218,63,205,59,127,102,158,160,198,63,218,108,223,204,118,248,176,191,218,108,223,204,118,248,160,191,0,0,0,0,0,0,0,0,192,10,31,0,198,72,124,191,192,10,31,0,198,72,140,63,138,47,231,76,168,10,168,63,226,16,235,12,193,147,187,191,119,67,126,54,88,190,197,191,175,7,185,121,72,163,220,63,194,243,33,144,152,239,238,63,175,7,185,121,72,163,220,63,119,67,126,54,88,190,197,191,226,16,235,12,193,147,187,191,138,47,231,76,168,10,168,63,192,10,31,0,198,72,140,63,192,10,31,0,198,72,124,191,0,0,0,0,0,0,0,0,192,10,31,0,198,72,124,63,192,10,31,0,198,72,140,63,138,47,231,76,168,10,168,191,226,16,235,12,193,147,187,191,119,67,126,54,88,190,197,63,175,7,185,121,72,163,220,63,194,243,33,144,152,239,238,191,175,7,185,121,72,163,220,63,119,67,126,54,88,190,197,63,226,16,235,12,193,147,187,191,138,47,231,76,168,10,168,191,192,10,31,0,198,72,140,63,192,10,31,0,198,72,124,63,0,0,0,0,0,0,0,0,104,41,27,64,173,191,88,63,104,41,27,64,173,191,104,191,20,26,29,160,57,132,138,191,65,127,32,72,47,156,157,63,183,148,234,244,157,34,171,63,68,90,121,227,212,68,193,191,44,106,125,204,90,248,196,191,78,23,58,62,197,154,221,63,243,107,225,45,218,115,238,63,78,23,58,62,197,154,221,63,44,106,125,204,90,248,196,191,68,90,121,227,212,68,193,191,183,148,234,244,157,34,171,63,65,127,32,72,47,156,157,63,20,26,29,160,57,132,138,191,104,41,27,64,173,191,104,191,104,41,27,64,173,191,88,63,0,0,0,0,0,0,0,0,104,41,27,64,173,191,88,191,104,41,27,64,173,191,104,191,20,26,29,160,57,132,138,63,65,127,32,72,47,156,157,63,183,148,234,244,157,34,171,191,68,90,121,227,212,68,193,191,44,106,125,204,90,248,196,63,78,23,58,62,197,154,221,63,243,107,225,45,218,115,238,191,78,23,58,62,197,154,221,63,44,106,125,204,90,248,196,63,68,90,121,227,212,68,193,191,183,148,234,244,157,34,171,191,65,127,32,72,47,156,157,63,20,26,29,160,57,132,138,63,104,41,27,64,173,191,104,191,104,41,27,64,173,191,88,191,205,59,127,102,158,160,214,191,218,108,223,204,118,248,240,63,218,108,223,204,118,248,240,63,205,59,127,102,158,160,214,191,205,59,127,102,158,160,198,191,218,108,223,204,118,248,224,63,218,108,223,204,118,248,224,191,205,59,127,102,158,160,198,63,205,59,127,102,158,160,198,63,218,108,223,204,118,248,224,63,218,108,223,204,118,248,224,63,205,59,127,102,158,160,198,63,205,59,127,102,158,160,214,191,218,108,223,204,118,248,240,191,218,108,223,204,118,248,240,63,205,59,127,102,158,160,214,63,218,108,223,204,118,248,176,63,71,35,79,51,178,116,201,191,83,84,175,153,138,204,195,191,24,236,34,192,222,209,239,63,24,236,34,192,222,209,239,63,83,84,175,153,138,204,195,191,71,35,79,51,178,116,201,191,218,108,223,204,118,248,176,63,218,108,223,204,118,248,176,63,71,35,79,51,178,116,201,63,83,84,175,153,138,204,195,191,24,236,34,192,222,209,239,191,24,236,34,192,222,209,239,63,83,84,175,153,138,204,195,63,71,35,79,51,178,116,201,191,218,108,223,204,118,248,176,191,192,10,31,0,198,72,140,191,16,72,23,128,148,54,165,63,3,23,183,25,188,222,170,63,81,107,172,9,184,37,209,191,151,96,71,179,128,98,178,191,194,243,33,144,152,239,238,63,194,243,33,144,152,239,238,63,151,96,71,179,128,98,178,191,81,107,172,9,184,37,209,191,3,23,183,25,188,222,170,63,16,72,23,128,148,54,165,63,192,10,31,0,198,72,140,191,192,10,31,0,198,72,140,191,16,72,23,128,148,54,165,191,3,23,183,25,188,222,170,63,81,107,172,9,184,37,209,63,151,96,71,179,128,98,178,191,194,243,33,144,152,239,238,191,194,243,33,144,152,239,238,63,151,96,71,179,128,98,178,63,81,107,172,9,184,37,209,191,3,23,183,25,188,222,170,191,16,72,23,128,148,54,165,63,192,10,31,0,198,72,140,63,104,41,27,64,173,191,104,63,14,95,20,240,193,143,130,191,141,234,18,168,88,60,145,191,68,250,20,206,45,29,179,63,230,52,171,77,224,10,160,63,224,192,46,237,48,70,211,191,183,148,234,244,157,34,155,191,243,107,225,45,218,115,238,63,243,107,225,45,218,115,238,63,183,148,234,244,157,34,155,191,224,192,46,237,48,70,211,191,230,52,171,77,224,10,160,63,68,250,20,206,45,29,179,63,141,234,18,168,88,60,145,191,14,95,20,240,193,143,130,191,104,41,27,64,173,191,104,63,104,41,27,64,173,191,104,63,14,95,20,240,193,143,130,63,141,234,18,168,88,60,145,191,68,250,20,206,45,29,179,191,230,52,171,77,224,10,160,63,224,192,46,237,48,70,211,63,183,148,234,244,157,34,155,191,243,107,225,45,218,115,238,191,243,107,225,45,218,115,238,63,183,148,234,244,157,34,155,63,224,192,46,237,48,70,211,191,230,52,171,77,224,10,160,191,68,250,20,206,45,29,179,63,141,234,18,168,88,60,145,63,14,95,20,240,193,143,130,191,104,41,27,64,173,191,104,191,222,62,229,236,27,70,70,191,38,239,171,241,148,180,96,63,71,140,227,24,33,186,116,63,237,248,227,205,31,29,149,191,99,133,236,84,42,231,140,191,242,115,181,168,229,96,185,63,147,165,27,88,208,48,137,63,80,74,35,116,6,126,212,191,98,110,18,144,53,203,96,63,151,73,36,204,228,37,238,63,151,73,36,204,228,37,238,63,98,110,18,144,53,203,96,63,80,74,35,116,6,126,212,191,147,165,27,88,208,48,137,63,242,115,181,168,229,96,185,63,99,133,236,84,42,231,140,191,237,248,227,205,31,29,149,191,71,140,227,24,33,186,116,63,38,239,171,241,148,180,96,63,222,62,229,236,27,70,70,191,222,62,229,236,27,70,70,191,38,239,171,241,148,180,96,191,71,140,227,24,33,186,116,63,237,248,227,205,31,29,149,63,99,133,236,84,42,231,140,191,242,115,181,168,229,96,185,191,147,165,27,88,208,48,137,63,80,74,35,116,6,126,212,63,98,110,18,144,53,203,96,63,151,73,36,204,228,37,238,191,151,73,36,204,228,37,238,63,98,110,18,144,53,203,96,191,80,74,35,116,6,126,212,191,147,165,27,88,208,48,137,191,242,115,181,168,229,96,185,63,99,133,236,84,42,231,140,63,237,248,227,205,31,29,149,191,71,140,227,24,33,186,116,191,38,239,171,241,148,180,96,63,222,62,229,236,27,70,70,63,0,0,0,0,0,0,0,0,119,22,134,86,64,94,163,63,120,245,36,129,254,107,152,191,204,221,29,135,225,81,188,191,37,139,145,78,94,39,216,63,113,240,117,189,78,73,235,63,37,139,145,78,94,39,216,63,204,221,29,135,225,81,188,191,120,245,36,129,254,107,152,191,119,22,134,86,64,94,163,63,0,0,0,0,0,0,0,0,68,236,53,198,158,133,176,191,56,107,217,75,62,213,164,63,252,157,12,24,6,194,218,63,22,130,250,47,70,59,233,191,252,157,12,24,6,194,218,63,56,107,217,75,62,213,164,63,68,236,53,198,158,133,176,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,236,53,198,158,133,176,191,56,107,217,75,62,213,164,191,252,157,12,24,6,194,218,63,22,130,250,47,70,59,233,63,252,157,12,24,6,194,218,63,56,107,217,75,62,213,164,191,68,236,53,198,158,133,176,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,119,22,134,86,64,94,163,191,120,245,36,129,254,107,152,191,204,221,29,135,225,81,188,63,37,139,145,78,94,39,216,63,113,240,117,189,78,73,235,191,37,139,145,78,94,39,216,63,204,221,29,135,225,81,188,63,120,245,36,129,254,107,152,191,119,22,134,86,64,94,163,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,99,23,13,181,221,81,164,63,222,199,75,21,25,71,128,63,40,30,147,124,173,226,171,191,142,221,212,157,101,30,214,63,166,252,111,95,184,146,231,63,142,221,212,157,101,30,214,63,40,30,147,124,173,226,171,191,222,199,75,21,25,71,128,63,99,23,13,181,221,81,164,63,0,0,0,0,0,0,0,0,10,60,79,248,48,143,139,191,6,236,164,83,193,19,102,191,175,252,35,243,153,127,193,63,52,2,92,129,236,239,183,191,69,192,78,216,241,131,222,191,51,134,125,9,193,200,236,63,69,192,78,216,241,131,222,191,52,2,92,129,236,239,183,191,175,252,35,243,153,127,193,63,6,236,164,83,193,19,102,191,10,60,79,248,48,143,139,191,0,0,0,0,0,0,0,0,10,60,79,248,48,143,139,63,6,236,164,83,193,19,102,191,175,252,35,243,153,127,193,191,52,2,92,129,236,239,183,191,69,192,78,216,241,131,222,63,51,134,125,9,193,200,236,63,69,192,78,216,241,131,222,63,52,2,92,129,236,239,183,191,175,252,35,243,153,127,193,191,6,236,164,83,193,19,102,191,10,60,79,248,48,143,139,63], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE); +/* memory initializer */ allocate([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,99,23,13,181,221,81,164,63,222,199,75,21,25,71,128,191,40,30,147,124,173,226,171,191,142,221,212,157,101,30,214,191,166,252,111,95,184,146,231,63,142,221,212,157,101,30,214,191,40,30,147,124,173,226,171,191,222,199,75,21,25,71,128,191,99,23,13,181,221,81,164,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,168,110,120,56,70,95,63,183,178,116,20,25,93,95,191,13,34,71,138,254,101,145,191,199,28,140,60,38,113,136,63,185,179,14,84,151,118,169,63,43,54,240,241,132,199,179,191,70,233,230,146,67,20,184,191,101,92,43,138,83,238,218,63,223,35,227,16,246,109,234,63,101,92,43,138,83,238,218,63,70,233,230,146,67,20,184,191,43,54,240,241,132,199,179,191,185,179,14,84,151,118,169,63,199,28,140,60,38,113,136,63,13,34,71,138,254,101,145,191,183,178,116,20,25,93,95,191,120,168,110,120,56,70,95,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,219,31,132,220,134,139,141,63,120,106,23,163,35,161,141,191,175,39,10,4,32,39,180,191,92,90,123,155,28,171,164,63,121,164,157,48,10,190,218,63,4,236,213,220,248,72,232,191,121,164,157,48,10,190,218,63,92,90,123,155,28,171,164,63,175,39,10,4,32,39,180,191,120,106,23,163,35,161,141,191,219,31,132,220,134,139,141,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,219,31,132,220,134,139,141,63,120,106,23,163,35,161,141,63,175,39,10,4,32,39,180,191,92,90,123,155,28,171,164,191,121,164,157,48,10,190,218,63,4,236,213,220,248,72,232,63,121,164,157,48,10,190,218,63,92,90,123,155,28,171,164,191,175,39,10,4,32,39,180,191,120,106,23,163,35,161,141,63,219,31,132,220,134,139,141,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,168,110,120,56,70,95,191,183,178,116,20,25,93,95,191,13,34,71,138,254,101,145,63,199,28,140,60,38,113,136,63,185,179,14,84,151,118,169,191,43,54,240,241,132,199,179,191,70,233,230,146,67,20,184,63,101,92,43,138,83,238,218,63,223,35,227,16,246,109,234,191,101,92,43,138,83,238,218,63,70,233,230,146,67,20,184,63,43,54,240,241,132,199,179,191,185,179,14,84,151,118,169,191,199,28,140,60,38,113,136,63,13,34,71,138,254,101,145,63,183,178,116,20,25,93,95,191,120,168,110,120,56,70,95,191,20,109,200,38,104,156,71,191,85,242,76,158,23,223,93,191,229,230,134,16,4,252,118,63,221,234,74,112,157,63,152,63,171,197,175,40,48,110,174,191,255,228,142,191,193,148,179,191,174,161,86,131,54,176,218,63,54,152,93,255,212,1,234,63,30,207,105,255,6,182,216,63,240,197,45,231,83,63,177,191,246,20,209,102,228,58,165,191,72,174,183,136,215,199,144,63,72,174,183,136,215,199,144,191,246,20,209,102,228,58,165,191,240,197,45,231,83,63,177,63,30,207,105,255,6,182,216,63,54,152,93,255,212,1,234,191,174,161,86,131,54,176,218,63,255,228,142,191,193,148,179,63,171,197,175,40,48,110,174,191,221,234,74,112,157,63,152,191,229,230,134,16,4,252,118,63,85,242,76,158,23,223,93,63,20,109,200,38,104,156,71,191,72,174,183,136,215,199,144,63,246,20,209,102,228,58,165,191,240,197,45,231,83,63,177,191,30,207,105,255,6,182,216,63,54,152,93,255,212,1,234,63,174,161,86,131,54,176,218,63,255,228,142,191,193,148,179,191,171,197,175,40,48,110,174,191,221,234,74,112,157,63,152,63,229,230,134,16,4,252,118,63,85,242,76,158,23,223,93,191,20,109,200,38,104,156,71,191,20,109,200,38,104,156,71,191,85,242,76,158,23,223,93,63,229,230,134,16,4,252,118,63,221,234,74,112,157,63,152,191,171,197,175,40,48,110,174,191,255,228,142,191,193,148,179,63,174,161,86,131,54,176,218,63,54,152,93,255,212,1,234,191,30,207,105,255,6,182,216,63,240,197,45,231,83,63,177,63,246,20,209,102,228,58,165,191,72,174,183,136,215,199,144,191,166,34,106,36,231,35,2,191,111,157,182,220,155,155,18,191,52,227,181,152,210,141,62,63,203,137,182,164,54,79,82,63,132,68,214,168,39,23,101,191,181,231,71,23,198,114,130,191,66,219,83,83,253,66,144,63,50,103,173,82,50,177,161,63,215,100,82,53,189,17,181,191,27,173,182,29,121,97,178,191,202,196,122,245,69,108,219,63,120,147,111,125,159,102,233,63,170,104,60,26,107,238,217,63,97,13,42,162,144,75,175,191,156,115,243,143,109,214,176,191,210,149,186,203,251,3,152,63,181,29,34,210,164,224,127,63,212,5,20,182,146,19,111,191,212,5,20,182,146,19,111,63,181,29,34,210,164,224,127,63,210,149,186,203,251,3,152,191,156,115,243,143,109,214,176,191,97,13,42,162,144,75,175,63,170,104,60,26,107,238,217,63,120,147,111,125,159,102,233,191,202,196,122,245,69,108,219,63,27,173,182,29,121,97,178,63,215,100,82,53,189,17,181,191,50,103,173,82,50,177,161,191,66,219,83,83,253,66,144,63,181,231,71,23,198,114,130,63,132,68,214,168,39,23,101,191,203,137,182,164,54,79,82,191,52,227,181,152,210,141,62,63,111,157,182,220,155,155,18,63,166,34,106,36,231,35,2,191,212,5,20,182,146,19,111,191,181,29,34,210,164,224,127,63,210,149,186,203,251,3,152,63,156,115,243,143,109,214,176,191,97,13,42,162,144,75,175,191,170,104,60,26,107,238,217,63,120,147,111,125,159,102,233,63,202,196,122,245,69,108,219,63,27,173,182,29,121,97,178,191,215,100,82,53,189,17,181,191,50,103,173,82,50,177,161,63,66,219,83,83,253,66,144,63,181,231,71,23,198,114,130,191,132,68,214,168,39,23,101,191,203,137,182,164,54,79,82,63,52,227,181,152,210,141,62,63,111,157,182,220,155,155,18,191,166,34,106,36,231,35,2,191,166,34,106,36,231,35,2,191,111,157,182,220,155,155,18,63,52,227,181,152,210,141,62,63,203,137,182,164,54,79,82,191,132,68,214,168,39,23,101,191,181,231,71,23,198,114,130,63,66,219,83,83,253,66,144,63,50,103,173,82,50,177,161,191,215,100,82,53,189,17,181,191,27,173,182,29,121,97,178,63,202,196,122,245,69,108,219,63,120,147,111,125,159,102,233,191,170,104,60,26,107,238,217,63,97,13,42,162,144,75,175,63,156,115,243,143,109,214,176,191,210,149,186,203,251,3,152,191,181,29,34,210,164,224,127,63,212,5,20,182,146,19,111,63,208,82,44,196,115,242,189,190,52,102,97,41,28,88,203,190,174,255,46,93,154,95,0,63,155,78,4,117,128,87,16,63,161,215,98,51,166,9,49,191,235,251,62,113,16,77,67,191,136,1,36,132,88,192,84,63,238,46,121,243,84,187,110,63,122,127,83,196,36,45,119,191,102,171,108,11,84,39,143,191,202,102,85,25,42,175,153,63,213,8,52,92,164,35,164,63,203,29,190,35,231,161,184,191,101,251,249,134,127,14,177,191,115,8,158,44,251,204,219,63,253,196,62,240,25,8,233,63,128,197,124,182,105,148,218,63,112,107,124,101,42,182,172,191,57,27,98,249,228,205,180,191,22,143,53,218,154,82,155,63,9,105,61,147,96,116,144,63,158,26,13,130,3,23,126,191,115,81,206,185,149,178,90,191,76,103,29,3,69,61,77,63,76,103,29,3,69,61,77,191,115,81,206,185,149,178,90,191,158,26,13,130,3,23,126,63,9,105,61,147,96,116,144,63,22,143,53,218,154,82,155,191,57,27,98,249,228,205,180,191,112,107,124,101,42,182,172,63,128,197,124,182,105,148,218,63,253,196,62,240,25,8,233,191,115,8,158,44,251,204,219,63,101,251,249,134,127,14,177,63,203,29,190,35,231,161,184,191,213,8,52,92,164,35,164,191,202,102,85,25,42,175,153,63,102,171,108,11,84,39,143,63,122,127,83,196,36,45,119,191,238,46,121,243,84,187,110,191,136,1,36,132,88,192,84,63,235,251,62,113,16,77,67,63,161,215,98,51,166,9,49,191,155,78,4,117,128,87,16,191,174,255,46,93,154,95,0,63,52,102,97,41,28,88,203,62,208,82,44,196,115,242,189,190,76,103,29,3,69,61,77,63,115,81,206,185,149,178,90,191,158,26,13,130,3,23,126,191,9,105,61,147,96,116,144,63,22,143,53,218,154,82,155,63,57,27,98,249,228,205,180,191,112,107,124,101,42,182,172,191,128,197,124,182,105,148,218,63,253,196,62,240,25,8,233,63,115,8,158,44,251,204,219,63,101,251,249,134,127,14,177,191,203,29,190,35,231,161,184,191,213,8,52,92,164,35,164,63,202,102,85,25,42,175,153,63,102,171,108,11,84,39,143,191,122,127,83,196,36,45,119,191,238,46,121,243,84,187,110,63,136,1,36,132,88,192,84,63,235,251,62,113,16,77,67,191,161,215,98,51,166,9,49,191,155,78,4,117,128,87,16,63,174,255,46,93,154,95,0,63,52,102,97,41,28,88,203,190,208,82,44,196,115,242,189,190,208,82,44,196,115,242,189,190,52,102,97,41,28,88,203,62,174,255,46,93,154,95,0,63,155,78,4,117,128,87,16,191,161,215,98,51,166,9,49,191,235,251,62,113,16,77,67,63,136,1,36,132,88,192,84,63,238,46,121,243,84,187,110,191,122,127,83,196,36,45,119,191,102,171,108,11,84,39,143,63,202,102,85,25,42,175,153,63,213,8,52,92,164,35,164,191,203,29,190,35,231,161,184,191,101,251,249,134,127,14,177,63,115,8,158,44,251,204,219,63,253,196,62,240,25,8,233,191,128,197,124,182,105,148,218,63,112,107,124,101,42,182,172,63,57,27,98,249,228,205,180,191,22,143,53,218,154,82,155,191,9,105,61,147,96,116,144,63,158,26,13,130,3,23,126,63,115,81,206,185,149,178,90,191,76,103,29,3,69,61,77,191,145,163,132,249,123,140,121,190,103,207,249,50,75,121,134,190,165,76,134,19,229,79,193,62,53,254,56,101,28,84,207,62,130,181,46,125,181,89,246,190,74,233,216,111,158,172,5,191,179,137,142,72,199,107,34,63,146,103,207,4,19,207,51,63,47,251,220,159,8,233,68,191,49,72,241,77,142,62,91,191,225,36,193,75,39,239,99,63,204,20,137,52,195,180,123,63,42,53,22,73,178,196,130,191,16,151,19,137,110,60,148,191,153,240,47,197,230,187,160,63,158,253,132,242,219,35,165,63,67,146,174,77,233,6,187,191,193,2,203,136,45,195,175,191,13,29,149,7,14,8,220,63,221,79,170,253,250,198,232,63,193,128,181,211,240,250,218,63,44,12,165,199,102,165,170,191,193,173,51,223,17,136,183,191,146,77,228,108,20,216,156,63,227,85,107,207,78,248,151,63,27,133,91,147,159,191,132,191,104,158,3,95,103,9,113,191,71,33,121,189,23,216,97,63,92,34,113,251,34,128,55,63,217,25,201,138,64,204,43,191,217,25,201,138,64,204,43,63,92,34,113,251,34,128,55,63,71,33,121,189,23,216,97,191,104,158,3,95,103,9,113,191,27,133,91,147,159,191,132,63,227,85,107,207,78,248,151,63,146,77,228,108,20,216,156,191,193,173,51,223,17,136,183,191,44,12,165,199,102,165,170,63,193,128,181,211,240,250,218,63,221,79,170,253,250,198,232,191,13,29,149,7,14,8,220,63,193,2,203,136,45,195,175,63,67,146,174,77,233,6,187,191,158,253,132,242,219,35,165,191,153,240,47,197,230,187,160,63,16,151,19,137,110,60,148,63,42,53,22,73,178,196,130,191,204,20,137,52,195,180,123,191,225,36,193,75,39,239,99,63,49,72,241,77,142,62,91,63,47,251,220,159,8,233,68,191,146,103,207,4,19,207,51,191,179,137,142,72,199,107,34,63,74,233,216,111,158,172,5,63,130,181,46,125,181,89,246,190,53,254,56,101,28,84,207,190,165,76,134,19,229,79,193,62,103,207,249,50,75,121,134,62,145,163,132,249,123,140,121,190,217,25,201,138,64,204,43,191,92,34,113,251,34,128,55,63,71,33,121,189,23,216,97,63,104,158,3,95,103,9,113,191,27,133,91,147,159,191,132,191,227,85,107,207,78,248,151,63,146,77,228,108,20,216,156,63,193,173,51,223,17,136,183,191,44,12,165,199,102,165,170,191,193,128,181,211,240,250,218,63,221,79,170,253,250,198,232,63,13,29,149,7,14,8,220,63,193,2,203,136,45,195,175,191,67,146,174,77,233,6,187,191,158,253,132,242,219,35,165,63,153,240,47,197,230,187,160,63,16,151,19,137,110,60,148,191,42,53,22,73,178,196,130,191,204,20,137,52,195,180,123,63,225,36,193,75,39,239,99,63,49,72,241,77,142,62,91,191,47,251,220,159,8,233,68,191,146,103,207,4,19,207,51,63,179,137,142,72,199,107,34,63,74,233,216,111,158,172,5,191,130,181,46,125,181,89,246,190,53,254,56,101,28,84,207,62,165,76,134,19,229,79,193,62,103,207,249,50,75,121,134,190,145,163,132,249,123,140,121,190,145,163,132,249,123,140,121,190,103,207,249,50,75,121,134,62,165,76,134,19,229,79,193,62,53,254,56,101,28,84,207,190,130,181,46,125,181,89,246,190,74,233,216,111,158,172,5,63,179,137,142,72,199,107,34,63,146,103,207,4,19,207,51,191,47,251,220,159,8,233,68,191,49,72,241,77,142,62,91,63,225,36,193,75,39,239,99,63,204,20,137,52,195,180,123,191,42,53,22,73,178,196,130,191,16,151,19,137,110,60,148,63,153,240,47,197,230,187,160,63,158,253,132,242,219,35,165,191,67,146,174,77,233,6,187,191,193,2,203,136,45,195,175,63,13,29,149,7,14,8,220,63,221,79,170,253,250,198,232,191,193,128,181,211,240,250,218,63,44,12,165,199,102,165,170,63,193,173,51,223,17,136,183,191,146,77,228,108,20,216,156,191,227,85,107,207,78,248,151,63,27,133,91,147,159,191,132,63,104,158,3,95,103,9,113,191,71,33,121,189,23,216,97,191,92,34,113,251,34,128,55,63,217,25,201,138,64,204,43,63,221,214,146,193,125,144,192,191,19,91,107,11,191,176,204,63,132,241,227,214,189,196,234,63,17,202,72,71,221,232,222,63,17,202,72,71,221,232,222,191,132,241,227,214,189,196,234,63,19,91,107,11,191,176,204,191,221,214,146,193,125,144,192,191,17,202,72,71,221,232,222,63,132,241,227,214,189,196,234,63,19,91,107,11,191,176,204,63,221,214,146,193,125,144,192,191,221,214,146,193,125,144,192,191,19,91,107,11,191,176,204,191,132,241,227,214,189,196,234,63,17,202,72,71,221,232,222,191,234,144,45,195,97,101,179,191,187,53,40,152,198,88,158,191,78,243,214,247,251,216,223,63,191,24,177,84,58,184,233,63,178,238,190,36,26,16,211,63,253,94,201,182,115,102,185,191,194,191,133,217,27,208,137,191,23,72,138,214,139,127,160,63,23,72,138,214,139,127,160,191,194,191,133,217,27,208,137,191,253,94,201,182,115,102,185,63,178,238,190,36,26,16,211,63,191,24,177,84,58,184,233,191,78,243,214,247,251,216,223,63,187,53,40,152,198,88,158,63,234,144,45,195,97,101,179,191,23,72,138,214,139,127,160,63,194,191,133,217,27,208,137,191,253,94,201,182,115,102,185,191,178,238,190,36,26,16,211,63,191,24,177,84,58,184,233,63,78,243,214,247,251,216,223,63,187,53,40,152,198,88,158,191,234,144,45,195,97,101,179,191,234,144,45,195,97,101,179,191,187,53,40,152,198,88,158,63,78,243,214,247,251,216,223,63,191,24,177,84,58,184,233,191,178,238,190,36,26,16,211,63,253,94,201,182,115,102,185,63,194,191,133,217,27,208,137,191,23,72,138,214,139,127,160,191,96,214,144,42,51,253,155,63,91,171,123,128,91,58,158,63,147,130,208,129,103,9,164,191,141,0,171,191,219,133,201,63,89,129,126,226,39,38,231,63,193,245,76,64,142,73,228,63,18,163,54,117,36,0,145,63,115,12,29,158,38,113,198,191,130,124,22,28,184,155,149,191,72,204,100,57,0,2,148,63,72,204,100,57,0,2,148,191,130,124,22,28,184,155,149,191,115,12,29,158,38,113,198,63,18,163,54,117,36,0,145,63,193,245,76,64,142,73,228,191,89,129,126,226,39,38,231,63,141,0,171,191,219,133,201,191,147,130,208,129,103,9,164,191,91,171,123,128,91,58,158,191,96,214,144,42,51,253,155,63,72,204,100,57,0,2,148,63,130,124,22,28,184,155,149,191,115,12,29,158,38,113,198,191,18,163,54,117,36,0,145,63,193,245,76,64,142,73,228,63,89,129,126,226,39,38,231,63,141,0,171,191,219,133,201,63,147,130,208,129,103,9,164,191,91,171,123,128,91,58,158,63,96,214,144,42,51,253,155,63,96,214,144,42,51,253,155,63,91,171,123,128,91,58,158,191,147,130,208,129,103,9,164,191,141,0,171,191,219,133,201,191,89,129,126,226,39,38,231,63,193,245,76,64,142,73,228,191,18,163,54,117,36,0,145,63,115,12,29,158,38,113,198,63,130,124,22,28,184,155,149,191,72,204,100,57,0,2,148,191,110,203,68,142,48,140,143,63,249,22,186,199,141,152,108,63,167,4,162,148,153,52,190,191,131,12,214,20,81,188,168,191,16,61,197,230,117,109,223,63,140,174,182,49,91,52,233,63,243,72,171,185,162,160,213,63,72,143,212,104,95,152,178,191,158,141,86,78,212,144,149,191,14,249,215,172,46,230,166,63,46,185,82,41,82,246,92,63,183,57,68,178,162,243,127,191,183,57,68,178,162,243,127,63,46,185,82,41,82,246,92,63,14,249,215,172,46,230,166,191,158,141,86,78,212,144,149,191,72,143,212,104,95,152,178,63,243,72,171,185,162,160,213,63,140,174,182,49,91,52,233,191,16,61,197,230,117,109,223,63,131,12,214,20,81,188,168,63,167,4,162,148,153,52,190,191,249,22,186,199,141,152,108,191,110,203,68,142,48,140,143,63,183,57,68,178,162,243,127,191,46,185,82,41,82,246,92,63,14,249,215,172,46,230,166,63,158,141,86,78,212,144,149,191,72,143,212,104,95,152,178,191,243,72,171,185,162,160,213,63,140,174,182,49,91,52,233,63,16,61,197,230,117,109,223,63,131,12,214,20,81,188,168,191,167,4,162,148,153,52,190,191,249,22,186,199,141,152,108,63,110,203,68,142,48,140,143,63,110,203,68,142,48,140,143,63,249,22,186,199,141,152,108,191,167,4,162,148,153,52,190,191,131,12,214,20,81,188,168,63,16,61,197,230,117,109,223,63,140,174,182,49,91,52,233,191,243,72,171,185,162,160,213,63,72,143,212,104,95,152,178,63,158,141,86,78,212,144,149,191,14,249,215,172,46,230,166,191,46,185,82,41,82,246,92,63,183,57,68,178,162,243,127,63,229,213,170,59,44,248,101,63,123,71,247,245,12,41,81,191,246,216,223,238,15,225,137,191,64,29,70,108,117,63,159,63,150,202,57,98,106,97,177,63,192,69,245,58,253,94,169,191,107,5,204,208,30,220,145,63,191,108,39,53,191,39,225,63,74,15,18,121,134,145,232,63,179,223,65,107,232,120,210,63,30,125,204,102,17,237,193,191,247,98,45,23,82,153,187,191,115,175,39,233,11,109,112,63,217,136,56,89,123,7,133,63,217,136,56,89,123,7,133,191,115,175,39,233,11,109,112,63,247,98,45,23,82,153,187,63,30,125,204,102,17,237,193,191,179,223,65,107,232,120,210,191,74,15,18,121,134,145,232,63,191,108,39,53,191,39,225,191,107,5,204,208,30,220,145,63,192,69,245,58,253,94,169,63,150,202,57,98,106,97,177,63,64,29,70,108,117,63,159,191,246,216,223,238,15,225,137,191,123,71,247,245,12,41,81,63,229,213,170,59,44,248,101,63,217,136,56,89,123,7,133,63,115,175,39,233,11,109,112,63,247,98,45,23,82,153,187,191,30,125,204,102,17,237,193,191,179,223,65,107,232,120,210,63,74,15,18,121,134,145,232,63,191,108,39,53,191,39,225,63,107,5,204,208,30,220,145,63,192,69,245,58,253,94,169,191,150,202,57,98,106,97,177,63,64,29,70,108,117,63,159,63,246,216,223,238,15,225,137,191,123,71,247,245,12,41,81,191,229,213,170,59,44,248,101,63,229,213,170,59,44,248,101,63,123,71,247,245,12,41,81,63,246,216,223,238,15,225,137,191,64,29,70,108,117,63,159,191,150,202,57,98,106,97,177,63,192,69,245,58,253,94,169,63,107,5,204,208,30,220,145,63,191,108,39,53,191,39,225,191,74,15,18,121,134,145,232,63,179,223,65,107,232,120,210,191,30,125,204,102,17,237,193,191,247,98,45,23,82,153,187,63,115,175,39,233,11,109,112,63,217,136,56,89,123,7,133,191,107,102,131,188,112,181,107,191,231,128,76,81,188,195,65,191,94,60,48,171,86,58,160,63,179,124,62,84,7,41,127,63,173,2,182,49,119,87,194,191,177,145,159,194,56,95,175,191,244,49,241,181,152,206,222,63,209,17,79,167,180,222,232,63,144,10,231,24,4,83,215,63,209,253,171,23,165,152,170,191,243,87,74,45,78,223,155,191,252,127,110,39,130,40,169,63,205,208,210,42,136,51,111,63,231,194,120,36,74,159,142,191,108,96,58,180,41,218,51,191,3,113,178,183,6,247,94,63,3,113,178,183,6,247,94,191,108,96,58,180,41,218,51,191,231,194,120,36,74,159,142,63,205,208,210,42,136,51,111,63,252,127,110,39,130,40,169,191,243,87,74,45,78,223,155,191,209,253,171,23,165,152,170,63,144,10,231,24,4,83,215,63,209,17,79,167,180,222,232,191,244,49,241,181,152,206,222,63,177,145,159,194,56,95,175,63,173,2,182,49,119,87,194,191,179,124,62,84,7,41,127,191,94,60,48,171,86,58,160,63,231,128,76,81,188,195,65,63,107,102,131,188,112,181,107,191,3,113,178,183,6,247,94,63,108,96,58,180,41,218,51,191,231,194,120,36,74,159,142,191,205,208,210,42,136,51,111,63,252,127,110,39,130,40,169,63,243,87,74,45,78,223,155,191,209,253,171,23,165,152,170,191,144,10,231,24,4,83,215,63,209,17,79,167,180,222,232,63,244,49,241,181,152,206,222,63,177,145,159,194,56,95,175,191,173,2,182,49,119,87,194,191,179,124,62,84,7,41,127,63,94,60,48,171,86,58,160,63,231,128,76,81,188,195,65,191,107,102,131,188,112,181,107,191,107,102,131,188,112,181,107,191,231,128,76,81,188,195,65,63,94,60,48,171,86,58,160,63,179,124,62,84,7,41,127,191,173,2,182,49,119,87,194,191,177,145,159,194,56,95,175,63,244,49,241,181,152,206,222,63,209,17,79,167,180,222,232,191,144,10,231,24,4,83,215,63,209,253,171,23,165,152,170,63,243,87,74,45,78,223,155,191,252,127,110,39,130,40,169,191,205,208,210,42,136,51,111,63,231,194,120,36,74,159,142,63,108,96,58,180,41,218,51,191,3,113,178,183,6,247,94,191,152,155,145,151,221,243,86,63,191,118,14,83,25,79,68,63,103,156,156,92,85,46,139,191,119,80,150,46,26,156,135,191,47,46,227,72,69,243,158,63,0,166,222,180,112,30,67,63,141,167,172,103,118,240,171,191,197,148,230,183,183,143,206,63,24,190,139,77,3,249,230,63,45,245,51,144,60,193,227,63,25,190,30,77,60,15,162,63,16,195,248,213,188,132,200,191,179,151,184,164,223,171,146,191,182,77,186,245,168,200,175,63,252,146,52,193,206,36,130,63,196,245,148,90,83,5,133,191,189,132,8,25,55,2,63,191,158,78,190,45,196,133,81,63,158,78,190,45,196,133,81,191,189,132,8,25,55,2,63,191,196,245,148,90,83,5,133,63,252,146,52,193,206,36,130,63,182,77,186,245,168,200,175,191,179,151,184,164,223,171,146,191,16,195,248,213,188,132,200,63,25,190,30,77,60,15,162,63,45,245,51,144,60,193,227,191,24,190,139,77,3,249,230,63,197,148,230,183,183,143,206,191,141,167,172,103,118,240,171,191,0,166,222,180,112,30,67,191,47,46,227,72,69,243,158,63,119,80,150,46,26,156,135,63,103,156,156,92,85,46,139,191,191,118,14,83,25,79,68,191,152,155,145,151,221,243,86,63,158,78,190,45,196,133,81,63,189,132,8,25,55,2,63,191,196,245,148,90,83,5,133,191,252,146,52,193,206,36,130,63,182,77,186,245,168,200,175,63,179,151,184,164,223,171,146,191,16,195,248,213,188,132,200,191,25,190,30,77,60,15,162,63,45,245,51,144,60,193,227,63,24,190,139,77,3,249,230,63,197,148,230,183,183,143,206,63,141,167,172,103,118,240,171,191,0,166,222,180,112,30,67,63,47,46,227,72,69,243,158,63,119,80,150,46,26,156,135,191,103,156,156,92,85,46,139,191,191,118,14,83,25,79,68,63,152,155,145,151,221,243,86,63,152,155,145,151,221,243,86,63,191,118,14,83,25,79,68,191,103,156,156,92,85,46,139,191,119,80,150,46,26,156,135,63,47,46,227,72,69,243,158,63,0,166,222,180,112,30,67,191,141,167,172,103,118,240,171,191,197,148,230,183,183,143,206,191,24,190,139,77,3,249,230,63,45,245,51,144,60,193,227,191,25,190,30,77,60,15,162,63,16,195,248,213,188,132,200,63,179,151,184,164,223,171,146,191,182,77,186,245,168,200,175,191,252,146,52,193,206,36,130,63,196,245,148,90,83,5,133,63,189,132,8,25,55,2,63,191,158,78,190,45,196,133,81,191,0,254,174,152,145,60,73,63,191,4,210,197,204,17,25,63,143,109,81,142,135,178,129,191,148,66,210,144,66,2,88,191,207,120,252,108,198,131,167,63,201,2,3,149,237,198,135,63,134,219,218,251,78,106,196,191,98,171,28,15,58,37,178,191,191,14,21,13,46,48,222,63,133,97,94,131,211,159,232,63,26,55,135,30,158,144,216,63,216,112,72,36,223,49,162,191,218,227,54,48,0,97,160,191,0,211,18,228,240,152,169,63,44,119,96,202,242,156,119,63,128,68,57,227,236,215,148,191,188,46,84,167,115,91,74,191,91,26,87,165,74,208,114,63,47,118,33,233,64,231,13,63,49,206,95,215,68,26,62,191,49,206,95,215,68,26,62,63,47,118,33,233,64,231,13,63,91,26,87,165,74,208,114,191,188,46,84,167,115,91,74,191,128,68,57,227,236,215,148,63,44,119,96,202,242,156,119,63,0,211,18,228,240,152,169,191,218,227,54,48,0,97,160,191,216,112,72,36,223,49,162,63,26,55,135,30,158,144,216,63,133,97,94,131,211,159,232,191,191,14,21,13,46,48,222,63,98,171,28,15,58,37,178,63,134,219,218,251,78,106,196,191,201,2,3,149,237,198,135,191,207,120,252,108,198,131,167,63,148,66,210,144,66,2,88,63,143,109,81,142,135,178,129,191,191,4,210,197,204,17,25,191,0,254,174,152,145,60,73,63,49,206,95,215,68,26,62,191,47,118,33,233,64,231,13,63,91,26,87,165,74,208,114,63,188,46,84,167,115,91,74,191,128,68,57,227,236,215,148,191,44,119,96,202,242,156,119,63,0,211,18,228,240,152,169,63,218,227,54,48,0,97,160,191,216,112,72,36,223,49,162,191,26,55,135,30,158,144,216,63,133,97,94,131,211,159,232,63,191,14,21,13,46,48,222,63,98,171,28,15,58,37,178,191,134,219,218,251,78,106,196,191,201,2,3,149,237,198,135,63,207,120,252,108,198,131,167,63,148,66,210,144,66,2,88,191,143,109,81,142,135,178,129,191,191,4,210,197,204,17,25,63,0,254,174,152,145,60,73,63,0,254,174,152,145,60,73,63,191,4,210,197,204,17,25,191,143,109,81,142,135,178,129,191,148,66,210,144,66,2,88,63,207,120,252,108,198,131,167,63,201,2,3,149,237,198,135,191,134,219,218,251,78,106,196,191,98,171,28,15,58,37,178,63,191,14,21,13,46,48,222,63,133,97,94,131,211,159,232,191,26,55,135,30,158,144,216,63,216,112,72,36,223,49,162,63,218,227,54,48,0,97,160,191,0,211,18,228,240,152,169,191,44,119,96,202,242,156,119,63,128,68,57,227,236,215,148,63,188,46,84,167,115,91,74,191,91,26,87,165,74,208,114,191,47,118,33,233,64,231,13,63,49,206,95,215,68,26,62,63,10,32,84,104,101,32,68,101,99,111,109,112,111,115,105,116,105,111,110,32,73,116,101,114,97,116,105,111,110,115,32,67,97,110,110,111,116,32,69,120,99,101,101,100,32,49,48,48,46,32,69,120,105,116,105,110,103,32,10,0,0,0,0,0,10,32,69,114,114,111,114,32,45,32,84,104,101,32,83,105,103,110,97,108,32,67,97,110,32,111,110,108,121,32,98,101,32,105,116,101,114,97,116,101,100,32,37,100,32,116,105,109,101,115,32,117,115,105,110,103,32,116,104,105,115,32,119,97,118,101,108,101,116,46,32,69,120,105,116,105,110,103,10,0,10,32,70,111,114,32,83,87,84,32,116,104,101,32,115,105,103,110,97,108,32,108,101,110,103,116,104,32,109,117,115,116,32,98,101,32,97,32,109,117,108,116,105,112,108,101,32,111,102,32,50,94,74,46,32,10,0,0,0,0,0,0,0,0,100,98,0,0,0,0,0,0,99,111,105,102,0,0,0,0,10,32,77,79,68,87,84,32,105,115,32,111,110,108,121,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,111,114,116,104,111,103,111,110,97,108,32,119,97,118,101,108,101,116,32,102,97,109,105,108,105,101,115,32,45,32,100,98,44,32,115,121,109,32,97,110,100,32,99,111,105,102,32,10,0,0,0,0,0,0,0,0,100,105,114,101,99,116,0,0,102,102,116,0,0,0,0,0,70,70,84,0,0,0,0,0,83,105,103,110,97,108,32,101,120,116,101,110,115,105,111,110,32,99,97,110,32,98,101,32,101,105,116,104,101,114,32,112,101,114,32,111,114,32,115,121,109,0,0,0,0,0,0,0,68,101,99,111,109,112,111,115,105,116,105,111,110,32,70,105,108,116,101,114,115,32,109,117,115,116,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,108,101,110,103,116,104,46,0,0,0,0,0,0,0,0,83,87,84,32,79,110,108,121,32,97,99,99,101,112,116,115,32,116,119,111,32,109,101,116,104,111,100,115,32,45,32,100,105,114,101,99,116,32,97,110,100,32,102,102,116,0,0,0,67,111,110,118,111,108,117,116,105,111,110,32,79,110,108,121,32,97,99,99,101,112,116,115,32,116,119,111,32,109,101,116,104,111,100,115,32,45,32,100,105,114,101,99,116,32,97,110,100,32,102,102,116,0,0,0,100,119,116,0,0,0,0,0,68,87,84,0,0,0,0,0,112,101,114,0,0,0,0,0,115,121,109,0,0,0,0,0,115,119,116,0,0,0,0,0,83,87,84,0,0,0,0,0,109,111,100,119,116,0,0,0,77,79,68,87,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+10240); + + + + + +/* no memory initializer */ +var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8); + +assert(tempDoublePtr % 8 == 0); + +function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much + + HEAP8[tempDoublePtr] = HEAP8[ptr]; + + HEAP8[tempDoublePtr+1] = HEAP8[ptr+1]; + + HEAP8[tempDoublePtr+2] = HEAP8[ptr+2]; + + HEAP8[tempDoublePtr+3] = HEAP8[ptr+3]; + +} + +function copyTempDouble(ptr) { + + HEAP8[tempDoublePtr] = HEAP8[ptr]; + + HEAP8[tempDoublePtr+1] = HEAP8[ptr+1]; + + HEAP8[tempDoublePtr+2] = HEAP8[ptr+2]; + + HEAP8[tempDoublePtr+3] = HEAP8[ptr+3]; + + HEAP8[tempDoublePtr+4] = HEAP8[ptr+4]; + + HEAP8[tempDoublePtr+5] = HEAP8[ptr+5]; + + HEAP8[tempDoublePtr+6] = HEAP8[ptr+6]; + + HEAP8[tempDoublePtr+7] = HEAP8[ptr+7]; + +} + +// {{PRE_LIBRARY}} + + + var _BDtoIHigh=true; + + + + var ___errno_state=0;function ___setErrNo(value) { + // For convenient setting and returning of errno. + HEAP32[((___errno_state)>>2)]=value; + return value; + } + + var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _sysconf(name) { + // long sysconf(int name); + // http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html + switch(name) { + case 30: return PAGE_SIZE; + case 85: return totalMemory / PAGE_SIZE; + case 132: + case 133: + case 12: + case 137: + case 138: + case 15: + case 235: + case 16: + case 17: + case 18: + case 19: + case 20: + case 149: + case 13: + case 10: + case 236: + case 153: + case 9: + case 21: + case 22: + case 159: + case 154: + case 14: + case 77: + case 78: + case 139: + case 80: + case 81: + case 82: + case 68: + case 67: + case 164: + case 11: + case 29: + case 47: + case 48: + case 95: + case 52: + case 51: + case 46: + return 200809; + case 79: + return 0; + case 27: + case 246: + case 127: + case 128: + case 23: + case 24: + case 160: + case 161: + case 181: + case 182: + case 242: + case 183: + case 184: + case 243: + case 244: + case 245: + case 165: + case 178: + case 179: + case 49: + case 50: + case 168: + case 169: + case 175: + case 170: + case 171: + case 172: + case 97: + case 76: + case 32: + case 173: + case 35: + return -1; + case 176: + case 177: + case 7: + case 155: + case 8: + case 157: + case 125: + case 126: + case 92: + case 93: + case 129: + case 130: + case 131: + case 94: + case 91: + return 1; + case 74: + case 60: + case 69: + case 70: + case 4: + return 1024; + case 31: + case 42: + case 72: + return 32; + case 87: + case 26: + case 33: + return 2147483647; + case 34: + case 1: + return 47839; + case 38: + case 36: + return 99; + case 43: + case 37: + return 2048; + case 0: return 2097152; + case 3: return 65536; + case 28: return 32768; + case 44: return 32767; + case 75: return 16384; + case 39: return 1000; + case 89: return 700; + case 71: return 256; + case 40: return 255; + case 2: return 100; + case 180: return 64; + case 25: return 20; + case 5: return 16; + case 6: return 6; + case 73: return 4; + case 84: { + if (typeof navigator === 'object') return navigator['hardwareConcurrency'] || 1; + return 1; + } + } + ___setErrNo(ERRNO_CODES.EINVAL); + return -1; + } + + + Module["_memset"] = _memset; + + var _BDtoILow=true; + + var _ceil=Math_ceil; + + function _abort() { + Module['abort'](); + } + + + + + + var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"}; + + var PATH={splitPath:function (filename) { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + },normalizeArray:function (parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + return parts; + },normalize:function (path) { + var isAbsolute = path.charAt(0) === '/', + trailingSlash = path.substr(-1) === '/'; + // Normalize the path + path = PATH.normalizeArray(path.split('/').filter(function(p) { + return !!p; + }), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + },dirname:function (path) { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + return root + dir; + },basename:function (path) { + // EMSCRIPTEN return '/'' for '/', not an empty string + if (path === '/') return '/'; + var lastSlash = path.lastIndexOf('/'); + if (lastSlash === -1) return path; + return path.substr(lastSlash+1); + },extname:function (path) { + return PATH.splitPath(path)[3]; + },join:function () { + var paths = Array.prototype.slice.call(arguments, 0); + return PATH.normalize(paths.join('/')); + },join2:function (l, r) { + return PATH.normalize(l + '/' + r); + },resolve:function () { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + },relative:function (from, to) { + from = PATH.resolve(from).substr(1); + to = PATH.resolve(to).substr(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }}; + + var TTY={ttys:[],init:function () { + // https://github.com/kripken/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process['stdin']['setEncoding']('utf8'); + // } + },shutdown:function () { + // https://github.com/kripken/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process['stdin']['pause'](); + // } + },register:function (dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + },stream_ops:{open:function (stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(ERRNO_CODES.ENODEV); + } + stream.tty = tty; + stream.seekable = false; + },close:function (stream) { + // flush any pending line data + stream.tty.ops.flush(stream.tty); + },flush:function (stream) { + stream.tty.ops.flush(stream.tty); + },read:function (stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(ERRNO_CODES.ENXIO); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES.EIO); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.timestamp = Date.now(); + } + return bytesRead; + },write:function (stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(ERRNO_CODES.ENXIO); + } + for (var i = 0; i < length; i++) { + try { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES.EIO); + } + } + if (length) { + stream.node.timestamp = Date.now(); + } + return i; + }},default_tty_ops:{get_char:function (tty) { + if (!tty.input.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = new Buffer(BUFSIZE); + var bytesRead = 0; + + var fd = process.stdin.fd; + // Linux and Mac cannot use process.stdin.fd (which isn't set up as sync) + var usingDevice = false; + try { + fd = fs.openSync('/dev/stdin', 'r'); + usingDevice = true; + } catch (e) {} + + bytesRead = fs.readSync(fd, buf, 0, BUFSIZE, null); + + if (usingDevice) { fs.closeSync(fd); } + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8'); + } else { + result = null; + } + + } else if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + // Browser. + result = window.prompt('Input: '); // returns null on cancel + if (result !== null) { + result += '\n'; + } + } else if (typeof readline == 'function') { + // Command line. + result = readline(); + if (result !== null) { + result += '\n'; + } + } + if (!result) { + return null; + } + tty.input = intArrayFromString(result, true); + } + return tty.input.shift(); + },put_char:function (tty, val) { + if (val === null || val === 10) { + Module['print'](UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. + } + },flush:function (tty) { + if (tty.output && tty.output.length > 0) { + Module['print'](UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } + }},default_tty1_ops:{put_char:function (tty, val) { + if (val === null || val === 10) { + Module['printErr'](UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + },flush:function (tty) { + if (tty.output && tty.output.length > 0) { + Module['printErr'](UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } + }}}; + + var MEMFS={ops_table:null,mount:function (mount) { + return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0); + },createNode:function (parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + if (!MEMFS.ops_table) { + MEMFS.ops_table = { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + allocate: MEMFS.stream_ops.allocate, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + } + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.buffer.byteLength which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.timestamp = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + } + return node; + },getFileDataAsRegularArray:function (node) { + if (node.contents && node.contents.subarray) { + var arr = []; + for (var i = 0; i < node.usedBytes; ++i) arr.push(node.contents[i]); + return arr; // Returns a copy of the original data. + } + return node.contents; // No-op, the file contents are already in a JS array. Return as-is. + },getFileDataAsTypedArray:function (node) { + if (!node.contents) return new Uint8Array; + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + },expandFileStorage:function (node, newCapacity) { + // If we are asked to expand the size of a file that already exists, revert to using a standard JS array to store the file + // instead of a typed array. This makes resizing the array more flexible because we can just .push() elements at the back to + // increase the size. + if (node.contents && node.contents.subarray && newCapacity > node.contents.length) { + node.contents = MEMFS.getFileDataAsRegularArray(node); + node.usedBytes = node.contents.length; // We might be writing to a lazy-loaded file which had overridden this property, so force-reset it. + } + + if (!node.contents || node.contents.subarray) { // Keep using a typed array if creating a new storage, or if old one was a typed array as well. + var prevCapacity = node.contents ? node.contents.buffer.byteLength : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) | 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + return; + } + // Not using a typed array to back the file storage. Use a standard JS array instead. + if (!node.contents && newCapacity > 0) node.contents = []; + while (node.contents.length < newCapacity) node.contents.push(0); + },resizeFileStorage:function (node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + return; + } + if (!node.contents || node.contents.subarray) { // Resize a typed array if that is being used as the backing store. + var oldContents = node.contents; + node.contents = new Uint8Array(new ArrayBuffer(newSize)); // Allocate new storage. + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + return; + } + // Backing with a JS array. + if (!node.contents) node.contents = []; + if (node.contents.length > newSize) node.contents.length = newSize; + else while (node.contents.length < newSize) node.contents.push(0); + node.usedBytes = newSize; + },node_ops:{getattr:function (node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.timestamp); + attr.mtime = new Date(node.timestamp); + attr.ctime = new Date(node.timestamp); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + },setattr:function (node, attr) { + if (attr.mode !== undefined) { + node.mode = attr.mode; + } + if (attr.timestamp !== undefined) { + node.timestamp = attr.timestamp; + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + },lookup:function (parent, name) { + throw FS.genericErrors[ERRNO_CODES.ENOENT]; + },mknod:function (parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + },rename:function (old_node, new_dir, new_name) { + // if we're overwriting a directory at new_name, make sure it's empty. + if (FS.isDir(old_node.mode)) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + } + if (new_node) { + for (var i in new_node.contents) { + throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY); + } + } + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + old_node.name = new_name; + new_dir.contents[new_name] = old_node; + old_node.parent = new_dir; + },unlink:function (parent, name) { + delete parent.contents[name]; + },rmdir:function (parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY); + } + delete parent.contents[name]; + },readdir:function (node) { + var entries = ['.', '..'] + for (var key in node.contents) { + if (!node.contents.hasOwnProperty(key)) { + continue; + } + entries.push(key); + } + return entries; + },symlink:function (parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0); + node.link = oldpath; + return node; + },readlink:function (node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + return node.link; + }},stream_ops:{read:function (stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + if (size > 8 && contents.subarray) { // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + },write:function (stream, buffer, offset, length, position, canOwn) { + if (!length) return 0; + var node = stream.node; + node.timestamp = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? + if (canOwn) { // Can we just reuse the buffer we are given? + assert(position === 0, 'canOwn must imply no weird position inside the file'); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = new Uint8Array(buffer.subarray(offset, offset + length)); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) node.contents.set(buffer.subarray(offset, offset + length), position); // Use typed array write if available. + else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + } + node.usedBytes = Math.max(node.usedBytes, position+length); + return length; + },llseek:function (stream, offset, whence) { + var position = offset; + if (whence === 1) { // SEEK_CUR. + position += stream.position; + } else if (whence === 2) { // SEEK_END. + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + return position; + },allocate:function (stream, offset, length) { + MEMFS.expandFileStorage(stream.node, offset + length); + stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length); + },mmap:function (stream, buffer, offset, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.ENODEV); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if ( !(flags & 2) && + (contents.buffer === buffer || contents.buffer === buffer.buffer) ) { + // We can't emulate MAP_SHARED when the file is not backed by the buffer + // we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < stream.node.usedBytes) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + allocated = true; + ptr = _malloc(length); + if (!ptr) { + throw new FS.ErrnoError(ERRNO_CODES.ENOMEM); + } + buffer.set(contents, ptr); + } + return { ptr: ptr, allocated: allocated }; + },msync:function (stream, buffer, offset, length, mmapFlags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.ENODEV); + } + if (mmapFlags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + + var bytesWritten = MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + // should we check if bytesWritten and length are the same? + return 0; + }}}; + + var IDBFS={dbs:{},indexedDB:function () { + if (typeof indexedDB !== 'undefined') return indexedDB; + var ret = null; + if (typeof window === 'object') ret = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; + assert(ret, 'IDBFS used, but indexedDB not supported'); + return ret; + },DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function (mount) { + // reuse all of the core MEMFS functionality + return MEMFS.mount.apply(null, arguments); + },syncfs:function (mount, populate, callback) { + IDBFS.getLocalSet(mount, function(err, local) { + if (err) return callback(err); + + IDBFS.getRemoteSet(mount, function(err, remote) { + if (err) return callback(err); + + var src = populate ? remote : local; + var dst = populate ? local : remote; + + IDBFS.reconcile(src, dst, callback); + }); + }); + },getDB:function (name, callback) { + // check the cache first + var db = IDBFS.dbs[name]; + if (db) { + return callback(null, db); + } + + var req; + try { + req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION); + } catch (e) { + return callback(e); + } + req.onupgradeneeded = function(e) { + var db = e.target.result; + var transaction = e.target.transaction; + + var fileStore; + + if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) { + fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME); + } else { + fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME); + } + + if (!fileStore.indexNames.contains('timestamp')) { + fileStore.createIndex('timestamp', 'timestamp', { unique: false }); + } + }; + req.onsuccess = function() { + db = req.result; + + // add to the cache + IDBFS.dbs[name] = db; + callback(null, db); + }; + req.onerror = function(e) { + callback(this.error); + e.preventDefault(); + }; + },getLocalSet:function (mount, callback) { + var entries = {}; + + function isRealDir(p) { + return p !== '.' && p !== '..'; + }; + function toAbsolute(root) { + return function(p) { + return PATH.join2(root, p); + } + }; + + var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint)); + + while (check.length) { + var path = check.pop(); + var stat; + + try { + stat = FS.stat(path); + } catch (e) { + return callback(e); + } + + if (FS.isDir(stat.mode)) { + check.push.apply(check, FS.readdir(path).filter(isRealDir).map(toAbsolute(path))); + } + + entries[path] = { timestamp: stat.mtime }; + } + + return callback(null, { type: 'local', entries: entries }); + },getRemoteSet:function (mount, callback) { + var entries = {}; + + IDBFS.getDB(mount.mountpoint, function(err, db) { + if (err) return callback(err); + + var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly'); + transaction.onerror = function(e) { + callback(this.error); + e.preventDefault(); + }; + + var store = transaction.objectStore(IDBFS.DB_STORE_NAME); + var index = store.index('timestamp'); + + index.openKeyCursor().onsuccess = function(event) { + var cursor = event.target.result; + + if (!cursor) { + return callback(null, { type: 'remote', db: db, entries: entries }); + } + + entries[cursor.primaryKey] = { timestamp: cursor.key }; + + cursor.continue(); + }; + }); + },loadLocalEntry:function (path, callback) { + var stat, node; + + try { + var lookup = FS.lookupPath(path); + node = lookup.node; + stat = FS.stat(path); + } catch (e) { + return callback(e); + } + + if (FS.isDir(stat.mode)) { + return callback(null, { timestamp: stat.mtime, mode: stat.mode }); + } else if (FS.isFile(stat.mode)) { + // Performance consideration: storing a normal JavaScript array to a IndexedDB is much slower than storing a typed array. + // Therefore always convert the file contents to a typed array first before writing the data to IndexedDB. + node.contents = MEMFS.getFileDataAsTypedArray(node); + return callback(null, { timestamp: stat.mtime, mode: stat.mode, contents: node.contents }); + } else { + return callback(new Error('node type not supported')); + } + },storeLocalEntry:function (path, entry, callback) { + try { + if (FS.isDir(entry.mode)) { + FS.mkdir(path, entry.mode); + } else if (FS.isFile(entry.mode)) { + FS.writeFile(path, entry.contents, { encoding: 'binary', canOwn: true }); + } else { + return callback(new Error('node type not supported')); + } + + FS.chmod(path, entry.mode); + FS.utime(path, entry.timestamp, entry.timestamp); + } catch (e) { + return callback(e); + } + + callback(null); + },removeLocalEntry:function (path, callback) { + try { + var lookup = FS.lookupPath(path); + var stat = FS.stat(path); + + if (FS.isDir(stat.mode)) { + FS.rmdir(path); + } else if (FS.isFile(stat.mode)) { + FS.unlink(path); + } + } catch (e) { + return callback(e); + } + + callback(null); + },loadRemoteEntry:function (store, path, callback) { + var req = store.get(path); + req.onsuccess = function(event) { callback(null, event.target.result); }; + req.onerror = function(e) { + callback(this.error); + e.preventDefault(); + }; + },storeRemoteEntry:function (store, path, entry, callback) { + var req = store.put(entry, path); + req.onsuccess = function() { callback(null); }; + req.onerror = function(e) { + callback(this.error); + e.preventDefault(); + }; + },removeRemoteEntry:function (store, path, callback) { + var req = store.delete(path); + req.onsuccess = function() { callback(null); }; + req.onerror = function(e) { + callback(this.error); + e.preventDefault(); + }; + },reconcile:function (src, dst, callback) { + var total = 0; + + var create = []; + Object.keys(src.entries).forEach(function (key) { + var e = src.entries[key]; + var e2 = dst.entries[key]; + if (!e2 || e.timestamp > e2.timestamp) { + create.push(key); + total++; + } + }); + + var remove = []; + Object.keys(dst.entries).forEach(function (key) { + var e = dst.entries[key]; + var e2 = src.entries[key]; + if (!e2) { + remove.push(key); + total++; + } + }); + + if (!total) { + return callback(null); + } + + var errored = false; + var completed = 0; + var db = src.type === 'remote' ? src.db : dst.db; + var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite'); + var store = transaction.objectStore(IDBFS.DB_STORE_NAME); + + function done(err) { + if (err) { + if (!done.errored) { + done.errored = true; + return callback(err); + } + return; + } + if (++completed >= total) { + return callback(null); + } + }; + + transaction.onerror = function(e) { + done(this.error); + e.preventDefault(); + }; + + // sort paths in ascending order so directory entries are created + // before the files inside them + create.sort().forEach(function (path) { + if (dst.type === 'local') { + IDBFS.loadRemoteEntry(store, path, function (err, entry) { + if (err) return done(err); + IDBFS.storeLocalEntry(path, entry, done); + }); + } else { + IDBFS.loadLocalEntry(path, function (err, entry) { + if (err) return done(err); + IDBFS.storeRemoteEntry(store, path, entry, done); + }); + } + }); + + // sort paths in descending order so files are deleted before their + // parent directories + remove.sort().reverse().forEach(function(path) { + if (dst.type === 'local') { + IDBFS.removeLocalEntry(path, done); + } else { + IDBFS.removeRemoteEntry(store, path, done); + } + }); + }}; + + var NODEFS={isWindows:false,staticInit:function () { + NODEFS.isWindows = !!process.platform.match(/^win/); + },mount:function (mount) { + assert(ENVIRONMENT_IS_NODE); + return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0); + },createNode:function (parent, name, mode, dev) { + if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + var node = FS.createNode(parent, name, mode); + node.node_ops = NODEFS.node_ops; + node.stream_ops = NODEFS.stream_ops; + return node; + },getMode:function (path) { + var stat; + try { + stat = fs.lstatSync(path); + if (NODEFS.isWindows) { + // On Windows, directories return permission bits 'rw-rw-rw-', even though they have 'rwxrwxrwx', so + // propagate write bits to execute bits. + stat.mode = stat.mode | ((stat.mode & 146) >> 1); + } + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + return stat.mode; + },realPath:function (node) { + var parts = []; + while (node.parent !== node) { + parts.push(node.name); + node = node.parent; + } + parts.push(node.mount.opts.root); + parts.reverse(); + return PATH.join.apply(null, parts); + },flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:function (flags) { + if (flags in NODEFS.flagsToPermissionStringMap) { + return NODEFS.flagsToPermissionStringMap[flags]; + } else { + return flags; + } + },node_ops:{getattr:function (node) { + var path = NODEFS.realPath(node); + var stat; + try { + stat = fs.lstatSync(path); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + // node.js v0.10.20 doesn't report blksize and blocks on Windows. Fake them with default blksize of 4096. + // See http://support.microsoft.com/kb/140365 + if (NODEFS.isWindows && !stat.blksize) { + stat.blksize = 4096; + } + if (NODEFS.isWindows && !stat.blocks) { + stat.blocks = (stat.size+stat.blksize-1)/stat.blksize|0; + } + return { + dev: stat.dev, + ino: stat.ino, + mode: stat.mode, + nlink: stat.nlink, + uid: stat.uid, + gid: stat.gid, + rdev: stat.rdev, + size: stat.size, + atime: stat.atime, + mtime: stat.mtime, + ctime: stat.ctime, + blksize: stat.blksize, + blocks: stat.blocks + }; + },setattr:function (node, attr) { + var path = NODEFS.realPath(node); + try { + if (attr.mode !== undefined) { + fs.chmodSync(path, attr.mode); + // update the common node structure mode as well + node.mode = attr.mode; + } + if (attr.timestamp !== undefined) { + var date = new Date(attr.timestamp); + fs.utimesSync(path, date, date); + } + if (attr.size !== undefined) { + fs.truncateSync(path, attr.size); + } + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + },lookup:function (parent, name) { + var path = PATH.join2(NODEFS.realPath(parent), name); + var mode = NODEFS.getMode(path); + return NODEFS.createNode(parent, name, mode); + },mknod:function (parent, name, mode, dev) { + var node = NODEFS.createNode(parent, name, mode, dev); + // create the backing node for this in the fs root as well + var path = NODEFS.realPath(node); + try { + if (FS.isDir(node.mode)) { + fs.mkdirSync(path, node.mode); + } else { + fs.writeFileSync(path, '', { mode: node.mode }); + } + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + return node; + },rename:function (oldNode, newDir, newName) { + var oldPath = NODEFS.realPath(oldNode); + var newPath = PATH.join2(NODEFS.realPath(newDir), newName); + try { + fs.renameSync(oldPath, newPath); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + },unlink:function (parent, name) { + var path = PATH.join2(NODEFS.realPath(parent), name); + try { + fs.unlinkSync(path); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + },rmdir:function (parent, name) { + var path = PATH.join2(NODEFS.realPath(parent), name); + try { + fs.rmdirSync(path); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + },readdir:function (node) { + var path = NODEFS.realPath(node); + try { + return fs.readdirSync(path); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + },symlink:function (parent, newName, oldPath) { + var newPath = PATH.join2(NODEFS.realPath(parent), newName); + try { + fs.symlinkSync(oldPath, newPath); + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + },readlink:function (node) { + var path = NODEFS.realPath(node); + try { + path = fs.readlinkSync(path); + path = NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root), path); + return path; + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + }},stream_ops:{open:function (stream) { + var path = NODEFS.realPath(stream.node); + try { + if (FS.isFile(stream.node.mode)) { + stream.nfd = fs.openSync(path, NODEFS.flagsToPermissionString(stream.flags)); + } + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + },close:function (stream) { + try { + if (FS.isFile(stream.node.mode) && stream.nfd) { + fs.closeSync(stream.nfd); + } + } catch (e) { + if (!e.code) throw e; + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + },read:function (stream, buffer, offset, length, position) { + if (length === 0) return 0; // node errors on 0 length reads + // FIXME this is terrible. + var nbuffer = new Buffer(length); + var res; + try { + res = fs.readSync(stream.nfd, nbuffer, 0, length, position); + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + if (res > 0) { + for (var i = 0; i < res; i++) { + buffer[offset + i] = nbuffer[i]; + } + } + return res; + },write:function (stream, buffer, offset, length, position) { + // FIXME this is terrible. + var nbuffer = new Buffer(buffer.subarray(offset, offset + length)); + var res; + try { + res = fs.writeSync(stream.nfd, nbuffer, 0, length, position); + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + return res; + },llseek:function (stream, offset, whence) { + var position = offset; + if (whence === 1) { // SEEK_CUR. + position += stream.position; + } else if (whence === 2) { // SEEK_END. + if (FS.isFile(stream.node.mode)) { + try { + var stat = fs.fstatSync(stream.nfd); + position += stat.size; + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES[e.code]); + } + } + } + + if (position < 0) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + + return position; + }}}; + + var _stdin=allocate(1, "i32*", ALLOC_STATIC); + + var _stdout=allocate(1, "i32*", ALLOC_STATIC); + + var _stderr=allocate(1, "i32*", ALLOC_STATIC); + + function _fflush(stream) { + // int fflush(FILE *stream); + // http://pubs.opengroup.org/onlinepubs/000095399/functions/fflush.html + + /* + // Disabled, see https://github.com/kripken/emscripten/issues/2770 + stream = FS.getStreamFromPtr(stream); + if (stream.stream_ops.flush) { + stream.stream_ops.flush(stream); + } + */ + }var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},handleFSError:function (e) { + if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace(); + return ___setErrNo(e.errno); + },lookupPath:function (path, opts) { + path = PATH.resolve(FS.cwd(), path); + opts = opts || {}; + + if (!path) return { path: '', node: null }; + + var defaults = { + follow_mount: true, + recurse_count: 0 + }; + for (var key in defaults) { + if (opts[key] === undefined) { + opts[key] = defaults[key]; + } + } + + if (opts.recurse_count > 8) { // max recursive lookup of 8 + throw new FS.ErrnoError(ERRNO_CODES.ELOOP); + } + + // split the path + var parts = PATH.normalizeArray(path.split('/').filter(function(p) { + return !!p; + }), false); + + // start at the root + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } + + current = FS.lookupNode(current, parts[i]); + current_path = PATH.join2(current_path, parts[i]); + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current)) { + if (!islast || (islast && opts.follow_mount)) { + current = current.mounted.root; + } + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (!islast || opts.follow) { + var count = 0; + while (FS.isLink(current.mode)) { + var link = FS.readlink(current_path); + current_path = PATH.resolve(PATH.dirname(current_path), link); + + var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count }); + current = lookup.node; + + if (count++ > 40) { // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + throw new FS.ErrnoError(ERRNO_CODES.ELOOP); + } + } + } + } + + return { path: current_path, node: current }; + },getPath:function (node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path; + } + path = path ? node.name + '/' + path : node.name; + node = node.parent; + } + },hashName:function (parentid, name) { + var hash = 0; + + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + },hashAddNode:function (node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + },hashRemoveNode:function (node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + },lookupNode:function (parent, name) { + var err = FS.mayLookup(parent); + if (err) { + throw new FS.ErrnoError(err, parent); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + },createNode:function (parent, name, mode, rdev) { + if (!FS.FSNode) { + FS.FSNode = function(parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.mounted = null; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.node_ops = {}; + this.stream_ops = {}; + this.rdev = rdev; + }; + + FS.FSNode.prototype = {}; + + // compatibility + var readMode = 292 | 73; + var writeMode = 146; + + // NOTE we must use Object.defineProperties instead of individual calls to + // Object.defineProperty in order to make closure compiler happy + Object.defineProperties(FS.FSNode.prototype, { + read: { + get: function() { return (this.mode & readMode) === readMode; }, + set: function(val) { val ? this.mode |= readMode : this.mode &= ~readMode; } + }, + write: { + get: function() { return (this.mode & writeMode) === writeMode; }, + set: function(val) { val ? this.mode |= writeMode : this.mode &= ~writeMode; } + }, + isFolder: { + get: function() { return FS.isDir(this.mode); } + }, + isDevice: { + get: function() { return FS.isChrdev(this.mode); } + } + }); + } + + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + },destroyNode:function (node) { + FS.hashRemoveNode(node); + },isRoot:function (node) { + return node === node.parent; + },isMountpoint:function (node) { + return !!node.mounted; + },isFile:function (mode) { + return (mode & 61440) === 32768; + },isDir:function (mode) { + return (mode & 61440) === 16384; + },isLink:function (mode) { + return (mode & 61440) === 40960; + },isChrdev:function (mode) { + return (mode & 61440) === 8192; + },isBlkdev:function (mode) { + return (mode & 61440) === 24576; + },isFIFO:function (mode) { + return (mode & 61440) === 4096; + },isSocket:function (mode) { + return (mode & 49152) === 49152; + },flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function (str) { + var flags = FS.flagModes[str]; + if (typeof flags === 'undefined') { + throw new Error('Unknown file open mode: ' + str); + } + return flags; + },flagsToPermissionString:function (flag) { + var accmode = flag & 2097155; + var perms = ['r', 'w', 'rw'][accmode]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + },nodePermissions:function (node, perms) { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.indexOf('r') !== -1 && !(node.mode & 292)) { + return ERRNO_CODES.EACCES; + } else if (perms.indexOf('w') !== -1 && !(node.mode & 146)) { + return ERRNO_CODES.EACCES; + } else if (perms.indexOf('x') !== -1 && !(node.mode & 73)) { + return ERRNO_CODES.EACCES; + } + return 0; + },mayLookup:function (dir) { + var err = FS.nodePermissions(dir, 'x'); + if (err) return err; + if (!dir.node_ops.lookup) return ERRNO_CODES.EACCES; + return 0; + },mayCreate:function (dir, name) { + try { + var node = FS.lookupNode(dir, name); + return ERRNO_CODES.EEXIST; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + },mayDelete:function (dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var err = FS.nodePermissions(dir, 'wx'); + if (err) { + return err; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return ERRNO_CODES.ENOTDIR; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return ERRNO_CODES.EBUSY; + } + } else { + if (FS.isDir(node.mode)) { + return ERRNO_CODES.EISDIR; + } + } + return 0; + },mayOpen:function (node, flags) { + if (!node) { + return ERRNO_CODES.ENOENT; + } + if (FS.isLink(node.mode)) { + return ERRNO_CODES.ELOOP; + } else if (FS.isDir(node.mode)) { + if ((flags & 2097155) !== 0 || // opening for write + (flags & 512)) { + return ERRNO_CODES.EISDIR; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + },MAX_OPEN_FDS:4096,nextfd:function (fd_start, fd_end) { + fd_start = fd_start || 0; + fd_end = fd_end || FS.MAX_OPEN_FDS; + for (var fd = fd_start; fd <= fd_end; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(ERRNO_CODES.EMFILE); + },getStream:function (fd) { + return FS.streams[fd]; + },createStream:function (stream, fd_start, fd_end) { + if (!FS.FSStream) { + FS.FSStream = function(){}; + FS.FSStream.prototype = {}; + // compatibility + Object.defineProperties(FS.FSStream.prototype, { + object: { + get: function() { return this.node; }, + set: function(val) { this.node = val; } + }, + isRead: { + get: function() { return (this.flags & 2097155) !== 1; } + }, + isWrite: { + get: function() { return (this.flags & 2097155) !== 0; } + }, + isAppend: { + get: function() { return (this.flags & 1024); } + } + }); + } + // clone it, so we can return an instance of FSStream + var newStream = new FS.FSStream(); + for (var p in stream) { + newStream[p] = stream[p]; + } + stream = newStream; + var fd = FS.nextfd(fd_start, fd_end); + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + },closeStream:function (fd) { + FS.streams[fd] = null; + },getStreamFromPtr:function (ptr) { + return FS.streams[ptr - 1]; + },getPtrForStream:function (stream) { + return stream ? stream.fd + 1 : 0; + },chrdev_stream_ops:{open:function (stream) { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + },llseek:function () { + throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); + }},major:function (dev) { + return ((dev) >> 8); + },minor:function (dev) { + return ((dev) & 0xff); + },makedev:function (ma, mi) { + return ((ma) << 8 | (mi)); + },registerDevice:function (dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + },getDevice:function (dev) { + return FS.devices[dev]; + },getMounts:function (mount) { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push.apply(check, m.mounts); + } + + return mounts; + },syncfs:function (populate, callback) { + if (typeof(populate) === 'function') { + callback = populate; + populate = false; + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function done(err) { + if (err) { + if (!done.errored) { + done.errored = true; + return callback(err); + } + return; + } + if (++completed >= mounts.length) { + callback(null); + } + }; + + // sync all mounts + mounts.forEach(function (mount) { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + },mount:function (type, opts, mountpoint) { + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(ERRNO_CODES.EBUSY); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(ERRNO_CODES.EBUSY); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR); + } + } + + var mount = { + type: type, + opts: opts, + mountpoint: mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + },unmount:function (mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach(function (hash) { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.indexOf(current.mount) !== -1) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + },lookup:function (parent, name) { + return parent.node_ops.lookup(parent, name); + },mknod:function (path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name || name === '.' || name === '..') { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + var err = FS.mayCreate(parent, name); + if (err) { + throw new FS.ErrnoError(err); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + return parent.node_ops.mknod(parent, name, mode, dev); + },create:function (path, mode) { + mode = mode !== undefined ? mode : 438 /* 0666 */; + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + },mkdir:function (path, mode) { + mode = mode !== undefined ? mode : 511 /* 0777 */; + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + },mkdev:function (path, mode, dev) { + if (typeof(dev) === 'undefined') { + dev = mode; + mode = 438 /* 0666 */; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + },symlink:function (oldpath, newpath) { + if (!PATH.resolve(oldpath)) { + throw new FS.ErrnoError(ERRNO_CODES.ENOENT); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(ERRNO_CODES.ENOENT); + } + var newname = PATH.basename(newpath); + var err = FS.mayCreate(parent, newname); + if (err) { + throw new FS.ErrnoError(err); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + return parent.node_ops.symlink(parent, newname, oldpath); + },rename:function (old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + try { + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES.EBUSY); + } + if (!old_dir || !new_dir) throw new FS.ErrnoError(ERRNO_CODES.ENOENT); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(ERRNO_CODES.EXDEV); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + // new path should not be an ancestor of the old path + relative = PATH.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var err = FS.mayDelete(old_dir, old_name, isdir); + if (err) { + throw new FS.ErrnoError(err); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + err = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (err) { + throw new FS.ErrnoError(err); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(ERRNO_CODES.EBUSY); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + err = FS.nodePermissions(old_dir, 'w'); + if (err) { + throw new FS.ErrnoError(err); + } + } + try { + if (FS.trackingDelegate['willMovePath']) { + FS.trackingDelegate['willMovePath'](old_path, new_path); + } + } catch(e) { + console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: " + e.message); + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + try { + if (FS.trackingDelegate['onMovePath']) FS.trackingDelegate['onMovePath'](old_path, new_path); + } catch(e) { + console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: " + e.message); + } + },rmdir:function (path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var err = FS.mayDelete(parent, name, true); + if (err) { + throw new FS.ErrnoError(err); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(ERRNO_CODES.EBUSY); + } + try { + if (FS.trackingDelegate['willDeletePath']) { + FS.trackingDelegate['willDeletePath'](path); + } + } catch(e) { + console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: " + e.message); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + try { + if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path); + } catch(e) { + console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: " + e.message); + } + },readdir:function (path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + if (!node.node_ops.readdir) { + throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR); + } + return node.node_ops.readdir(node); + },unlink:function (path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var err = FS.mayDelete(parent, name, false); + if (err) { + // POSIX says unlink should set EPERM, not EISDIR + if (err === ERRNO_CODES.EISDIR) err = ERRNO_CODES.EPERM; + throw new FS.ErrnoError(err); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(ERRNO_CODES.EBUSY); + } + try { + if (FS.trackingDelegate['willDeletePath']) { + FS.trackingDelegate['willDeletePath'](path); + } + } catch(e) { + console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: " + e.message); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + try { + if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path); + } catch(e) { + console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: " + e.message); + } + },readlink:function (path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(ERRNO_CODES.ENOENT); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + return PATH.resolve(FS.getPath(lookup.node.parent), link.node_ops.readlink(link)); + },stat:function (path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + if (!node) { + throw new FS.ErrnoError(ERRNO_CODES.ENOENT); + } + if (!node.node_ops.getattr) { + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + return node.node_ops.getattr(node); + },lstat:function (path) { + return FS.stat(path, true); + },chmod:function (path, mode, dontFollow) { + var node; + if (typeof path === 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + node.node_ops.setattr(node, { + mode: (mode & 4095) | (node.mode & ~4095), + timestamp: Date.now() + }); + },lchmod:function (path, mode) { + FS.chmod(path, mode, true); + },fchmod:function (fd, mode) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(ERRNO_CODES.EBADF); + } + FS.chmod(stream.node, mode); + },chown:function (path, uid, gid, dontFollow) { + var node; + if (typeof path === 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + node.node_ops.setattr(node, { + timestamp: Date.now() + // we ignore the uid / gid for now + }); + },lchown:function (path, uid, gid) { + FS.chown(path, uid, gid, true); + },fchown:function (fd, uid, gid) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(ERRNO_CODES.EBADF); + } + FS.chown(stream.node, uid, gid); + },truncate:function (path, len) { + if (len < 0) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + var node; + if (typeof path === 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(ERRNO_CODES.EPERM); + } + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.EISDIR); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + var err = FS.nodePermissions(node, 'w'); + if (err) { + throw new FS.ErrnoError(err); + } + node.node_ops.setattr(node, { + size: len, + timestamp: Date.now() + }); + },ftruncate:function (fd, len) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(ERRNO_CODES.EBADF); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + FS.truncate(stream.node, len); + },utime:function (path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + node.node_ops.setattr(node, { + timestamp: Math.max(atime, mtime) + }); + },open:function (path, flags, mode, fd_start, fd_end) { + if (path === "") { + throw new FS.ErrnoError(ERRNO_CODES.ENOENT); + } + flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags; + mode = typeof mode === 'undefined' ? 438 /* 0666 */ : mode; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + if (typeof path === 'object') { + node = path; + } else { + path = PATH.normalize(path); + try { + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072) + }); + node = lookup.node; + } catch (e) { + // ignore + } + } + // perhaps we need to create the node + var created = false; + if ((flags & 64)) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if ((flags & 128)) { + throw new FS.ErrnoError(ERRNO_CODES.EEXIST); + } + } else { + // node doesn't exist, try to create it + node = FS.mknod(path, mode, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(ERRNO_CODES.ENOENT); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var err = FS.mayOpen(node, flags); + if (err) { + throw new FS.ErrnoError(err); + } + } + // do truncation if necessary + if ((flags & 512)) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512); + + // register the stream with the filesystem + var stream = FS.createStream({ + node: node, + path: FS.getPath(node), // we want the absolute path to the node + flags: flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }, fd_start, fd_end); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!FS.readFiles) FS.readFiles = {}; + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + Module['printErr']('read file: ' + path); + } + } + try { + if (FS.trackingDelegate['onOpenFile']) { + var trackingFlags = 0; + if ((flags & 2097155) !== 1) { + trackingFlags |= FS.tracking.openFlags.READ; + } + if ((flags & 2097155) !== 0) { + trackingFlags |= FS.tracking.openFlags.WRITE; + } + FS.trackingDelegate['onOpenFile'](path, trackingFlags); + } + } catch(e) { + console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: " + e.message); + } + return stream; + },close:function (stream) { + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + },llseek:function (stream, offset, whence) { + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + },read:function (stream, buffer, offset, length, position) { + if (length < 0 || position < 0) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(ERRNO_CODES.EBADF); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.EISDIR); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + var seeking = true; + if (typeof position === 'undefined') { + position = stream.position; + seeking = false; + } else if (!stream.seekable) { + throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + },write:function (stream, buffer, offset, length, position, canOwn) { + if (length < 0 || position < 0) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(ERRNO_CODES.EBADF); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.EISDIR); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + if (stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = true; + if (typeof position === 'undefined') { + position = stream.position; + seeking = false; + } else if (!stream.seekable) { + throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + try { + if (stream.path && FS.trackingDelegate['onWriteToFile']) FS.trackingDelegate['onWriteToFile'](stream.path); + } catch(e) { + console.log("FS.trackingDelegate['onWriteToFile']('"+path+"') threw an exception: " + e.message); + } + return bytesWritten; + },allocate:function (stream, offset, length) { + if (offset < 0 || length <= 0) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(ERRNO_CODES.EBADF); + } + if (!FS.isFile(stream.node.mode) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.ENODEV); + } + if (!stream.stream_ops.allocate) { + throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP); + } + stream.stream_ops.allocate(stream, offset, length); + },mmap:function (stream, buffer, offset, length, position, prot, flags) { + // TODO if PROT is PROT_WRITE, make sure we have write access + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(ERRNO_CODES.EACCES); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(ERRNO_CODES.ENODEV); + } + return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags); + },msync:function (stream, buffer, offset, length, mmapFlags) { + if (!stream || !stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + },munmap:function (stream) { + return 0; + },ioctl:function (stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(ERRNO_CODES.ENOTTY); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + },readFile:function (path, opts) { + opts = opts || {}; + opts.flags = opts.flags || 'r'; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error('Invalid encoding type "' + opts.encoding + '"'); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf, 0); + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + },writeFile:function (path, data, opts) { + opts = opts || {}; + opts.flags = opts.flags || 'w'; + opts.encoding = opts.encoding || 'utf8'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error('Invalid encoding type "' + opts.encoding + '"'); + } + var stream = FS.open(path, opts.flags, opts.mode); + if (opts.encoding === 'utf8') { + var buf = new Uint8Array(lengthBytesUTF8(data)+1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, 0, opts.canOwn); + } else if (opts.encoding === 'binary') { + FS.write(stream, data, 0, data.length, 0, opts.canOwn); + } + FS.close(stream); + },cwd:function () { + return FS.currentPath; + },chdir:function (path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR); + } + var err = FS.nodePermissions(lookup.node, 'x'); + if (err) { + throw new FS.ErrnoError(err); + } + FS.currentPath = lookup.path; + },createDefaultDirectories:function () { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + },createDefaultDevices:function () { + // create /dev + FS.mkdir('/dev'); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: function() { return 0; }, + write: function(stream, buffer, offset, length, pos) { return length; } + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using Module['printErr'] + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + // setup /dev/[u]random + var random_device; + if (typeof crypto !== 'undefined') { + // for modern web browsers + var randomBuffer = new Uint8Array(1); + random_device = function() { crypto.getRandomValues(randomBuffer); return randomBuffer[0]; }; + } else if (ENVIRONMENT_IS_NODE) { + // for nodejs + random_device = function() { return require('crypto').randomBytes(1)[0]; }; + } else { + // default for ES5 platforms + random_device = function() { return (Math.random()*256)|0; }; + } + FS.createDevice('/dev', 'random', random_device); + FS.createDevice('/dev', 'urandom', random_device); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + },createStandardStreams:function () { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (Module['stdin']) { + FS.createDevice('/dev', 'stdin', Module['stdin']); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (Module['stdout']) { + FS.createDevice('/dev', 'stdout', null, Module['stdout']); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (Module['stderr']) { + FS.createDevice('/dev', 'stderr', null, Module['stderr']); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open('/dev/stdin', 'r'); + HEAP32[((_stdin)>>2)]=FS.getPtrForStream(stdin); + assert(stdin.fd === 0, 'invalid handle for stdin (' + stdin.fd + ')'); + + var stdout = FS.open('/dev/stdout', 'w'); + HEAP32[((_stdout)>>2)]=FS.getPtrForStream(stdout); + assert(stdout.fd === 1, 'invalid handle for stdout (' + stdout.fd + ')'); + + var stderr = FS.open('/dev/stderr', 'w'); + HEAP32[((_stderr)>>2)]=FS.getPtrForStream(stderr); + assert(stderr.fd === 2, 'invalid handle for stderr (' + stderr.fd + ')'); + },ensureErrnoError:function () { + if (FS.ErrnoError) return; + FS.ErrnoError = function ErrnoError(errno, node) { + this.node = node; + this.setErrno = function(errno) { + this.errno = errno; + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + }; + this.setErrno(errno); + this.message = ERRNO_MESSAGES[errno]; + if (this.stack) this.stack = demangleAll(this.stack); + }; + FS.ErrnoError.prototype = new Error(); + FS.ErrnoError.prototype.constructor = FS.ErrnoError; + // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info) + [ERRNO_CODES.ENOENT].forEach(function(code) { + FS.genericErrors[code] = new FS.ErrnoError(code); + FS.genericErrors[code].stack = ''; + }); + },staticInit:function () { + FS.ensureErrnoError(); + + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + },init:function (input, output, error) { + assert(!FS.init.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)'); + FS.init.initialized = true; + + FS.ensureErrnoError(); + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + Module['stdin'] = input || Module['stdin']; + Module['stdout'] = output || Module['stdout']; + Module['stderr'] = error || Module['stderr']; + + FS.createStandardStreams(); + },quit:function () { + FS.init.initialized = false; + for (var i = 0; i < FS.streams.length; i++) { + var stream = FS.streams[i]; + if (!stream) { + continue; + } + FS.close(stream); + } + },getMode:function (canRead, canWrite) { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + },joinPath:function (parts, forceRelative) { + var path = PATH.join.apply(null, parts); + if (forceRelative && path[0] == '/') path = path.substr(1); + return path; + },absolutePath:function (relative, base) { + return PATH.resolve(base, relative); + },standardizePath:function (path) { + return PATH.normalize(path); + },findObject:function (path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (ret.exists) { + return ret.object; + } else { + ___setErrNo(ret.error); + return null; + } + },analyzePath:function (path, dontResolveLastLink) { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + },createFolder:function (parent, name, canRead, canWrite) { + var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); + var mode = FS.getMode(canRead, canWrite); + return FS.mkdir(path, mode); + },createPath:function (parent, path, canRead, canWrite) { + parent = typeof parent === 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + // ignore EEXIST + } + parent = current; + } + return current; + },createFile:function (parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); + var mode = FS.getMode(canRead, canWrite); + return FS.create(path, mode); + },createDataFile:function (parent, name, data, canRead, canWrite, canOwn) { + var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent; + var mode = FS.getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data === 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 'w'); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + return node; + },createDevice:function (parent, name, input, output) { + var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); + var mode = FS.getMode(!!input, !!output); + if (!FS.createDevice.major) FS.createDevice.major = 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open: function(stream) { + stream.seekable = false; + }, + close: function(stream) { + // flush any pending line data + if (output && output.buffer && output.buffer.length) { + output(10); + } + }, + read: function(stream, buffer, offset, length, pos /* ignored */) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES.EIO); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.timestamp = Date.now(); + } + return bytesRead; + }, + write: function(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES.EIO); + } + } + if (length) { + stream.node.timestamp = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + },createLink:function (parent, name, target, canRead, canWrite) { + var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); + return FS.symlink(target, path); + },forceLoadFile:function (obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + var success = true; + if (typeof XMLHttpRequest !== 'undefined') { + 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."); + } else if (Module['read']) { + // Command-line. + try { + // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as + // read() will try to parse UTF8. + obj.contents = intArrayFromString(Module['read'](obj.url), true); + obj.usedBytes = obj.contents.length; + } catch (e) { + success = false; + } + } else { + throw new Error('Cannot load without read() or XMLHttpRequest.'); + } + if (!success) ___setErrNo(ERRNO_CODES.EIO); + return success; + },createLazyFile:function (parent, name, url, canRead, canWrite) { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse. + function LazyUint8Array() { + this.lengthKnown = false; + this.chunks = []; // Loaded chunks. Index is the chunk number + } + LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + } + LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) { + this.getter = getter; + } + LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var chunkSize = 1024*1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (function(from, to) { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(xhr.response || []); + } else { + return intArrayFromString(xhr.responseText || '', true); + } + }); + var lazyArray = this; + lazyArray.setDataGetter(function(chunkNum) { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block + if (typeof(lazyArray.chunks[chunkNum]) === "undefined") { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!"); + return lazyArray.chunks[chunkNum]; + }); + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + } + if (typeof XMLHttpRequest !== 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + Object.defineProperty(lazyArray, "length", { + get: function() { + if(!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + }); + Object.defineProperty(lazyArray, "chunkSize", { + get: function() { + if(!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + }); + + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperty(node, "usedBytes", { + get: function() { return this.contents.length; } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach(function(key) { + var fn = node.stream_ops[key]; + stream_ops[key] = function forceLoadLazyFile() { + if (!FS.forceLoadFile(node)) { + throw new FS.ErrnoError(ERRNO_CODES.EIO); + } + return fn.apply(null, arguments); + }; + }); + // use a custom read function + stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) { + if (!FS.forceLoadFile(node)) { + throw new FS.ErrnoError(ERRNO_CODES.EIO); + } + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + if (contents.slice) { // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + }; + node.stream_ops = stream_ops; + return node; + },createPreloadedFile:function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) { + Browser.init(); + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency('cp ' + fullname); // might have several active requests for the same fullname + function processData(byteArray) { + function finish(byteArray) { + if (preFinish) preFinish(); + if (!dontCreateFile) { + FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + if (onload) onload(); + removeRunDependency(dep); + } + var handled = false; + Module['preloadPlugins'].forEach(function(plugin) { + if (handled) return; + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, function() { + if (onerror) onerror(); + removeRunDependency(dep); + }); + handled = true; + } + }); + if (!handled) finish(byteArray); + } + addRunDependency(dep); + if (typeof url == 'string') { + Browser.asyncLoad(url, function(byteArray) { + processData(byteArray); + }, onerror); + } else { + processData(url); + } + },indexedDB:function () { + return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; + },DB_NAME:function () { + return 'EM_FS_' + window.location.pathname; + },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function (paths, onload, onerror) { + onload = onload || function(){}; + onerror = onerror || function(){}; + var indexedDB = FS.indexedDB(); + try { + var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); + } catch (e) { + return onerror(e); + } + openRequest.onupgradeneeded = function openRequest_onupgradeneeded() { + console.log('creating db'); + var db = openRequest.result; + db.createObjectStore(FS.DB_STORE_NAME); + }; + openRequest.onsuccess = function openRequest_onsuccess() { + var db = openRequest.result; + var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite'); + var files = transaction.objectStore(FS.DB_STORE_NAME); + var ok = 0, fail = 0, total = paths.length; + function finish() { + if (fail == 0) onload(); else onerror(); + } + paths.forEach(function(path) { + var putRequest = files.put(FS.analyzePath(path).object.contents, path); + putRequest.onsuccess = function putRequest_onsuccess() { ok++; if (ok + fail == total) finish() }; + putRequest.onerror = function putRequest_onerror() { fail++; if (ok + fail == total) finish() }; + }); + transaction.onerror = onerror; + }; + openRequest.onerror = onerror; + },loadFilesFromDB:function (paths, onload, onerror) { + onload = onload || function(){}; + onerror = onerror || function(){}; + var indexedDB = FS.indexedDB(); + try { + var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); + } catch (e) { + return onerror(e); + } + openRequest.onupgradeneeded = onerror; // no database to load from + openRequest.onsuccess = function openRequest_onsuccess() { + var db = openRequest.result; + try { + var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly'); + } catch(e) { + onerror(e); + return; + } + var files = transaction.objectStore(FS.DB_STORE_NAME); + var ok = 0, fail = 0, total = paths.length; + function finish() { + if (fail == 0) onload(); else onerror(); + } + paths.forEach(function(path) { + var getRequest = files.get(path); + getRequest.onsuccess = function getRequest_onsuccess() { + if (FS.analyzePath(path).exists) { + FS.unlink(path); + } + FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true); + ok++; + if (ok + fail == total) finish(); + }; + getRequest.onerror = function getRequest_onerror() { fail++; if (ok + fail == total) finish() }; + }); + transaction.onerror = onerror; + }; + openRequest.onerror = onerror; + }}; + + + + + function _mkport() { throw 'TODO' }var SOCKFS={mount:function (mount) { + // If Module['websocket'] has already been defined (e.g. for configuring + // the subprotocol/url) use that, if not initialise it to a new object. + Module['websocket'] = (Module['websocket'] && + ('object' === typeof Module['websocket'])) ? Module['websocket'] : {}; + + // Add the Event registration mechanism to the exported websocket configuration + // object so we can register network callbacks from native JavaScript too. + // For more documentation see system/include/emscripten/emscripten.h + Module['websocket']._callbacks = {}; + Module['websocket']['on'] = function(event, callback) { + if ('function' === typeof callback) { + this._callbacks[event] = callback; + } + return this; + }; + + Module['websocket'].emit = function(event, param) { + if ('function' === typeof this._callbacks[event]) { + this._callbacks[event].call(this, param); + } + }; + + // If debug is enabled register simple default logging callbacks for each Event. + + return FS.createNode(null, '/', 16384 | 511 /* 0777 */, 0); + },createSocket:function (family, type, protocol) { + var streaming = type == 1; + if (protocol) { + assert(streaming == (protocol == 6)); // if SOCK_STREAM, must be tcp + } + + // create our internal socket structure + var sock = { + family: family, + type: type, + protocol: protocol, + server: null, + error: null, // Used in getsockopt for SOL_SOCKET/SO_ERROR test + peers: {}, + pending: [], + recv_queue: [], + sock_ops: SOCKFS.websocket_sock_ops + }; + + // create the filesystem node to store the socket structure + var name = SOCKFS.nextname(); + var node = FS.createNode(SOCKFS.root, name, 49152, 0); + node.sock = sock; + + // and the wrapping stream that enables library functions such + // as read and write to indirectly interact with the socket + var stream = FS.createStream({ + path: name, + node: node, + flags: FS.modeStringToFlags('r+'), + seekable: false, + stream_ops: SOCKFS.stream_ops + }); + + // map the new stream to the socket structure (sockets have a 1:1 + // relationship with a stream) + sock.stream = stream; + + return sock; + },getSocket:function (fd) { + var stream = FS.getStream(fd); + if (!stream || !FS.isSocket(stream.node.mode)) { + return null; + } + return stream.node.sock; + },stream_ops:{poll:function (stream) { + var sock = stream.node.sock; + return sock.sock_ops.poll(sock); + },ioctl:function (stream, request, varargs) { + var sock = stream.node.sock; + return sock.sock_ops.ioctl(sock, request, varargs); + },read:function (stream, buffer, offset, length, position /* ignored */) { + var sock = stream.node.sock; + var msg = sock.sock_ops.recvmsg(sock, length); + if (!msg) { + // socket is closed + return 0; + } + buffer.set(msg.buffer, offset); + return msg.buffer.length; + },write:function (stream, buffer, offset, length, position /* ignored */) { + var sock = stream.node.sock; + return sock.sock_ops.sendmsg(sock, buffer, offset, length); + },close:function (stream) { + var sock = stream.node.sock; + sock.sock_ops.close(sock); + }},nextname:function () { + if (!SOCKFS.nextname.current) { + SOCKFS.nextname.current = 0; + } + return 'socket[' + (SOCKFS.nextname.current++) + ']'; + },websocket_sock_ops:{createPeer:function (sock, addr, port) { + var ws; + + if (typeof addr === 'object') { + ws = addr; + addr = null; + port = null; + } + + if (ws) { + // for sockets that've already connected (e.g. we're the server) + // we can inspect the _socket property for the address + if (ws._socket) { + addr = ws._socket.remoteAddress; + port = ws._socket.remotePort; + } + // if we're just now initializing a connection to the remote, + // inspect the url property + else { + var result = /ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url); + if (!result) { + throw new Error('WebSocket URL must be in the format ws(s)://address:port'); + } + addr = result[1]; + port = parseInt(result[2], 10); + } + } else { + // create the actual websocket object and connect + try { + // runtimeConfig gets set to true if WebSocket runtime configuration is available. + var runtimeConfig = (Module['websocket'] && ('object' === typeof Module['websocket'])); + + // The default value is 'ws://' the replace is needed because the compiler replaces '//' comments with '#' + // comments without checking context, so we'd end up with ws:#, the replace swaps the '#' for '//' again. + var url = 'ws:#'.replace('#', '//'); + + if (runtimeConfig) { + if ('string' === typeof Module['websocket']['url']) { + url = Module['websocket']['url']; // Fetch runtime WebSocket URL config. + } + } + + if (url === 'ws://' || url === 'wss://') { // Is the supplied URL config just a prefix, if so complete it. + var parts = addr.split('/'); + url = url + parts[0] + ":" + port + "/" + parts.slice(1).join('/'); + } + + // Make the WebSocket subprotocol (Sec-WebSocket-Protocol) default to binary if no configuration is set. + var subProtocols = 'binary'; // The default value is 'binary' + + if (runtimeConfig) { + if ('string' === typeof Module['websocket']['subprotocol']) { + subProtocols = Module['websocket']['subprotocol']; // Fetch runtime WebSocket subprotocol config. + } + } + + // The regex trims the string (removes spaces at the beginning and end, then splits the string by + // , into an Array. Whitespace removal is important for Websockify and ws. + subProtocols = subProtocols.replace(/^ +| +$/g,"").split(/ *, */); + + // The node ws library API for specifying optional subprotocol is slightly different than the browser's. + var opts = ENVIRONMENT_IS_NODE ? {'protocol': subProtocols.toString()} : subProtocols; + + // If node we use the ws library. + var WebSocket = ENVIRONMENT_IS_NODE ? require('ws') : window['WebSocket']; + ws = new WebSocket(url, opts); + ws.binaryType = 'arraybuffer'; + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES.EHOSTUNREACH); + } + } + + + var peer = { + addr: addr, + port: port, + socket: ws, + dgram_send_queue: [] + }; + + SOCKFS.websocket_sock_ops.addPeer(sock, peer); + SOCKFS.websocket_sock_ops.handlePeerEvents(sock, peer); + + // if this is a bound dgram socket, send the port number first to allow + // us to override the ephemeral port reported to us by remotePort on the + // remote end. + if (sock.type === 2 && typeof sock.sport !== 'undefined') { + peer.dgram_send_queue.push(new Uint8Array([ + 255, 255, 255, 255, + 'p'.charCodeAt(0), 'o'.charCodeAt(0), 'r'.charCodeAt(0), 't'.charCodeAt(0), + ((sock.sport & 0xff00) >> 8) , (sock.sport & 0xff) + ])); + } + + return peer; + },getPeer:function (sock, addr, port) { + return sock.peers[addr + ':' + port]; + },addPeer:function (sock, peer) { + sock.peers[peer.addr + ':' + peer.port] = peer; + },removePeer:function (sock, peer) { + delete sock.peers[peer.addr + ':' + peer.port]; + },handlePeerEvents:function (sock, peer) { + var first = true; + + var handleOpen = function () { + + Module['websocket'].emit('open', sock.stream.fd); + + try { + var queued = peer.dgram_send_queue.shift(); + while (queued) { + peer.socket.send(queued); + queued = peer.dgram_send_queue.shift(); + } + } catch (e) { + // not much we can do here in the way of proper error handling as we've already + // lied and said this data was sent. shut it down. + peer.socket.close(); + } + }; + + function handleMessage(data) { + assert(typeof data !== 'string' && data.byteLength !== undefined); // must receive an ArrayBuffer + data = new Uint8Array(data); // make a typed array view on the array buffer + + + // if this is the port message, override the peer's port with it + var wasfirst = first; + first = false; + if (wasfirst && + data.length === 10 && + data[0] === 255 && data[1] === 255 && data[2] === 255 && data[3] === 255 && + data[4] === 'p'.charCodeAt(0) && data[5] === 'o'.charCodeAt(0) && data[6] === 'r'.charCodeAt(0) && data[7] === 't'.charCodeAt(0)) { + // update the peer's port and it's key in the peer map + var newport = ((data[8] << 8) | data[9]); + SOCKFS.websocket_sock_ops.removePeer(sock, peer); + peer.port = newport; + SOCKFS.websocket_sock_ops.addPeer(sock, peer); + return; + } + + sock.recv_queue.push({ addr: peer.addr, port: peer.port, data: data }); + Module['websocket'].emit('message', sock.stream.fd); + }; + + if (ENVIRONMENT_IS_NODE) { + peer.socket.on('open', handleOpen); + peer.socket.on('message', function(data, flags) { + if (!flags.binary) { + return; + } + handleMessage((new Uint8Array(data)).buffer); // copy from node Buffer -> ArrayBuffer + }); + peer.socket.on('close', function() { + Module['websocket'].emit('close', sock.stream.fd); + }); + peer.socket.on('error', function(error) { + // Although the ws library may pass errors that may be more descriptive than + // ECONNREFUSED they are not necessarily the expected error code e.g. + // ENOTFOUND on getaddrinfo seems to be node.js specific, so using ECONNREFUSED + // is still probably the most useful thing to do. + sock.error = ERRNO_CODES.ECONNREFUSED; // Used in getsockopt for SOL_SOCKET/SO_ERROR test. + Module['websocket'].emit('error', [sock.stream.fd, sock.error, 'ECONNREFUSED: Connection refused']); + // don't throw + }); + } else { + peer.socket.onopen = handleOpen; + peer.socket.onclose = function() { + Module['websocket'].emit('close', sock.stream.fd); + }; + peer.socket.onmessage = function peer_socket_onmessage(event) { + handleMessage(event.data); + }; + peer.socket.onerror = function(error) { + // The WebSocket spec only allows a 'simple event' to be thrown on error, + // so we only really know as much as ECONNREFUSED. + sock.error = ERRNO_CODES.ECONNREFUSED; // Used in getsockopt for SOL_SOCKET/SO_ERROR test. + Module['websocket'].emit('error', [sock.stream.fd, sock.error, 'ECONNREFUSED: Connection refused']); + }; + } + },poll:function (sock) { + if (sock.type === 1 && sock.server) { + // listen sockets should only say they're available for reading + // if there are pending clients. + return sock.pending.length ? (64 | 1) : 0; + } + + var mask = 0; + var dest = sock.type === 1 ? // we only care about the socket state for connection-based sockets + SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport) : + null; + + if (sock.recv_queue.length || + !dest || // connection-less sockets are always ready to read + (dest && dest.socket.readyState === dest.socket.CLOSING) || + (dest && dest.socket.readyState === dest.socket.CLOSED)) { // let recv return 0 once closed + mask |= (64 | 1); + } + + if (!dest || // connection-less sockets are always ready to write + (dest && dest.socket.readyState === dest.socket.OPEN)) { + mask |= 4; + } + + if ((dest && dest.socket.readyState === dest.socket.CLOSING) || + (dest && dest.socket.readyState === dest.socket.CLOSED)) { + mask |= 16; + } + + return mask; + },ioctl:function (sock, request, arg) { + switch (request) { + case 21531: + var bytes = 0; + if (sock.recv_queue.length) { + bytes = sock.recv_queue[0].data.length; + } + HEAP32[((arg)>>2)]=bytes; + return 0; + default: + return ERRNO_CODES.EINVAL; + } + },close:function (sock) { + // if we've spawned a listen server, close it + if (sock.server) { + try { + sock.server.close(); + } catch (e) { + } + sock.server = null; + } + // close any peer connections + var peers = Object.keys(sock.peers); + for (var i = 0; i < peers.length; i++) { + var peer = sock.peers[peers[i]]; + try { + peer.socket.close(); + } catch (e) { + } + SOCKFS.websocket_sock_ops.removePeer(sock, peer); + } + return 0; + },bind:function (sock, addr, port) { + if (typeof sock.saddr !== 'undefined' || typeof sock.sport !== 'undefined') { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already bound + } + sock.saddr = addr; + sock.sport = port || _mkport(); + // in order to emulate dgram sockets, we need to launch a listen server when + // binding on a connection-less socket + // note: this is only required on the server side + if (sock.type === 2) { + // close the existing server if it exists + if (sock.server) { + sock.server.close(); + sock.server = null; + } + // swallow error operation not supported error that occurs when binding in the + // browser where this isn't supported + try { + sock.sock_ops.listen(sock, 0); + } catch (e) { + if (!(e instanceof FS.ErrnoError)) throw e; + if (e.errno !== ERRNO_CODES.EOPNOTSUPP) throw e; + } + } + },connect:function (sock, addr, port) { + if (sock.server) { + throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP); + } + + // TODO autobind + // if (!sock.addr && sock.type == 2) { + // } + + // early out if we're already connected / in the middle of connecting + if (typeof sock.daddr !== 'undefined' && typeof sock.dport !== 'undefined') { + var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport); + if (dest) { + if (dest.socket.readyState === dest.socket.CONNECTING) { + throw new FS.ErrnoError(ERRNO_CODES.EALREADY); + } else { + throw new FS.ErrnoError(ERRNO_CODES.EISCONN); + } + } + } + + // add the socket to our peer list and set our + // destination address / port to match + var peer = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port); + sock.daddr = peer.addr; + sock.dport = peer.port; + + // always "fail" in non-blocking mode + throw new FS.ErrnoError(ERRNO_CODES.EINPROGRESS); + },listen:function (sock, backlog) { + if (!ENVIRONMENT_IS_NODE) { + throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP); + } + if (sock.server) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already listening + } + var WebSocketServer = require('ws').Server; + var host = sock.saddr; + sock.server = new WebSocketServer({ + host: host, + port: sock.sport + // TODO support backlog + }); + Module['websocket'].emit('listen', sock.stream.fd); // Send Event with listen fd. + + sock.server.on('connection', function(ws) { + if (sock.type === 1) { + var newsock = SOCKFS.createSocket(sock.family, sock.type, sock.protocol); + + // create a peer on the new socket + var peer = SOCKFS.websocket_sock_ops.createPeer(newsock, ws); + newsock.daddr = peer.addr; + newsock.dport = peer.port; + + // push to queue for accept to pick up + sock.pending.push(newsock); + Module['websocket'].emit('connection', newsock.stream.fd); + } else { + // create a peer on the listen socket so calling sendto + // with the listen socket and an address will resolve + // to the correct client + SOCKFS.websocket_sock_ops.createPeer(sock, ws); + Module['websocket'].emit('connection', sock.stream.fd); + } + }); + sock.server.on('closed', function() { + Module['websocket'].emit('close', sock.stream.fd); + sock.server = null; + }); + sock.server.on('error', function(error) { + // Although the ws library may pass errors that may be more descriptive than + // ECONNREFUSED they are not necessarily the expected error code e.g. + // ENOTFOUND on getaddrinfo seems to be node.js specific, so using EHOSTUNREACH + // is still probably the most useful thing to do. This error shouldn't + // occur in a well written app as errors should get trapped in the compiled + // app's own getaddrinfo call. + sock.error = ERRNO_CODES.EHOSTUNREACH; // Used in getsockopt for SOL_SOCKET/SO_ERROR test. + Module['websocket'].emit('error', [sock.stream.fd, sock.error, 'EHOSTUNREACH: Host is unreachable']); + // don't throw + }); + },accept:function (listensock) { + if (!listensock.server) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + var newsock = listensock.pending.shift(); + newsock.stream.flags = listensock.stream.flags; + return newsock; + },getname:function (sock, peer) { + var addr, port; + if (peer) { + if (sock.daddr === undefined || sock.dport === undefined) { + throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); + } + addr = sock.daddr; + port = sock.dport; + } else { + // TODO saddr and sport will be set for bind()'d UDP sockets, but what + // should we be returning for TCP sockets that've been connect()'d? + addr = sock.saddr || 0; + port = sock.sport || 0; + } + return { addr: addr, port: port }; + },sendmsg:function (sock, buffer, offset, length, addr, port) { + if (sock.type === 2) { + // connection-less sockets will honor the message address, + // and otherwise fall back to the bound destination address + if (addr === undefined || port === undefined) { + addr = sock.daddr; + port = sock.dport; + } + // if there was no address to fall back to, error out + if (addr === undefined || port === undefined) { + throw new FS.ErrnoError(ERRNO_CODES.EDESTADDRREQ); + } + } else { + // connection-based sockets will only use the bound + addr = sock.daddr; + port = sock.dport; + } + + // find the peer for the destination address + var dest = SOCKFS.websocket_sock_ops.getPeer(sock, addr, port); + + // early out if not connected with a connection-based socket + if (sock.type === 1) { + if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) { + throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); + } else if (dest.socket.readyState === dest.socket.CONNECTING) { + throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); + } + } + + // create a copy of the incoming data to send, as the WebSocket API + // doesn't work entirely with an ArrayBufferView, it'll just send + // the entire underlying buffer + var data; + if (buffer instanceof Array || buffer instanceof ArrayBuffer) { + data = buffer.slice(offset, offset + length); + } else { // ArrayBufferView + data = buffer.buffer.slice(buffer.byteOffset + offset, buffer.byteOffset + offset + length); + } + + // if we're emulating a connection-less dgram socket and don't have + // a cached connection, queue the buffer to send upon connect and + // lie, saying the data was sent now. + if (sock.type === 2) { + if (!dest || dest.socket.readyState !== dest.socket.OPEN) { + // if we're not connected, open a new connection + if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) { + dest = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port); + } + dest.dgram_send_queue.push(data); + return length; + } + } + + try { + // send the actual data + dest.socket.send(data); + return length; + } catch (e) { + throw new FS.ErrnoError(ERRNO_CODES.EINVAL); + } + },recvmsg:function (sock, length) { + // http://pubs.opengroup.org/onlinepubs/7908799/xns/recvmsg.html + if (sock.type === 1 && sock.server) { + // tcp servers should not be recv()'ing on the listen socket + throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); + } + + var queued = sock.recv_queue.shift(); + if (!queued) { + if (sock.type === 1) { + var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport); + + if (!dest) { + // if we have a destination address but are not connected, error out + throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); + } + else if (dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) { + // return null if the socket has closed + return null; + } + else { + // else, our socket is in a valid state but truly has nothing available + throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); + } + } else { + throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); + } + } + + // queued.data will be an ArrayBuffer if it's unadulterated, but if it's + // requeued TCP data it'll be an ArrayBufferView + var queuedLength = queued.data.byteLength || queued.data.length; + var queuedOffset = queued.data.byteOffset || 0; + var queuedBuffer = queued.data.buffer || queued.data; + var bytesRead = Math.min(length, queuedLength); + var res = { + buffer: new Uint8Array(queuedBuffer, queuedOffset, bytesRead), + addr: queued.addr, + port: queued.port + }; + + + // push back any unread data for TCP connections + if (sock.type === 1 && bytesRead < queuedLength) { + var bytesRemaining = queuedLength - bytesRead; + queued.data = new Uint8Array(queuedBuffer, queuedOffset + bytesRead, bytesRemaining); + sock.recv_queue.unshift(queued); + } + + return res; + }}};function _send(fd, buf, len, flags) { + var sock = SOCKFS.getSocket(fd); + if (!sock) { + ___setErrNo(ERRNO_CODES.EBADF); + return -1; + } + // TODO honor flags + return _write(fd, buf, len); + } + + function _pwrite(fildes, buf, nbyte, offset) { + // ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset); + // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html + var stream = FS.getStream(fildes); + if (!stream) { + ___setErrNo(ERRNO_CODES.EBADF); + return -1; + } + try { + var slab = HEAP8; + return FS.write(stream, slab, buf, nbyte, offset); + } catch (e) { + FS.handleFSError(e); + return -1; + } + }function _write(fildes, buf, nbyte) { + // ssize_t write(int fildes, const void *buf, size_t nbyte); + // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html + var stream = FS.getStream(fildes); + if (!stream) { + ___setErrNo(ERRNO_CODES.EBADF); + return -1; + } + + + try { + var slab = HEAP8; + return FS.write(stream, slab, buf, nbyte); + } catch (e) { + FS.handleFSError(e); + return -1; + } + } + + function _fileno(stream) { + // int fileno(FILE *stream); + // http://pubs.opengroup.org/onlinepubs/000095399/functions/fileno.html + stream = FS.getStreamFromPtr(stream); + if (!stream) return -1; + return stream.fd; + }function _fwrite(ptr, size, nitems, stream) { + // size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream); + // http://pubs.opengroup.org/onlinepubs/000095399/functions/fwrite.html + var bytesToWrite = nitems * size; + if (bytesToWrite == 0) return 0; + var fd = _fileno(stream); + var bytesWritten = _write(fd, ptr, bytesToWrite); + if (bytesWritten == -1) { + var streamObj = FS.getStreamFromPtr(stream); + if (streamObj) streamObj.error = true; + return 0; + } else { + return (bytesWritten / size)|0; + } + } + + + + Module["_strlen"] = _strlen; + + function __reallyNegative(x) { + return x < 0 || (x === 0 && (1/x) === -Infinity); + }function __formatString(format, varargs) { + assert((varargs & 3) === 0); + var textIndex = format; + var argIndex = 0; + function getNextArg(type) { + // NOTE: Explicitly ignoring type safety. Otherwise this fails: + // int x = 4; printf("%c\n", (char)x); + var ret; + argIndex = Runtime.prepVararg(argIndex, type); + if (type === 'double') { + ret = (HEAP32[((tempDoublePtr)>>2)]=HEAP32[(((varargs)+(argIndex))>>2)],HEAP32[(((tempDoublePtr)+(4))>>2)]=HEAP32[(((varargs)+((argIndex)+(4)))>>2)],(+(HEAPF64[(tempDoublePtr)>>3]))); + argIndex += 8; + } else if (type == 'i64') { + ret = [HEAP32[(((varargs)+(argIndex))>>2)], + HEAP32[(((varargs)+(argIndex+4))>>2)]]; + + argIndex += 8; + } else { + assert((argIndex & 3) === 0); + type = 'i32'; // varargs are always i32, i64, or double + ret = HEAP32[(((varargs)+(argIndex))>>2)]; + argIndex += 4; + } + return ret; + } + + var ret = []; + var curr, next, currArg; + while(1) { + var startTextIndex = textIndex; + curr = HEAP8[((textIndex)>>0)]; + if (curr === 0) break; + next = HEAP8[((textIndex+1)>>0)]; + if (curr == 37) { + // Handle flags. + var flagAlwaysSigned = false; + var flagLeftAlign = false; + var flagAlternative = false; + var flagZeroPad = false; + var flagPadSign = false; + flagsLoop: while (1) { + switch (next) { + case 43: + flagAlwaysSigned = true; + break; + case 45: + flagLeftAlign = true; + break; + case 35: + flagAlternative = true; + break; + case 48: + if (flagZeroPad) { + break flagsLoop; + } else { + flagZeroPad = true; + break; + } + case 32: + flagPadSign = true; + break; + default: + break flagsLoop; + } + textIndex++; + next = HEAP8[((textIndex+1)>>0)]; + } + + // Handle width. + var width = 0; + if (next == 42) { + width = getNextArg('i32'); + textIndex++; + next = HEAP8[((textIndex+1)>>0)]; + } else { + while (next >= 48 && next <= 57) { + width = width * 10 + (next - 48); + textIndex++; + next = HEAP8[((textIndex+1)>>0)]; + } + } + + // Handle precision. + var precisionSet = false, precision = -1; + if (next == 46) { + precision = 0; + precisionSet = true; + textIndex++; + next = HEAP8[((textIndex+1)>>0)]; + if (next == 42) { + precision = getNextArg('i32'); + textIndex++; + } else { + while(1) { + var precisionChr = HEAP8[((textIndex+1)>>0)]; + if (precisionChr < 48 || + precisionChr > 57) break; + precision = precision * 10 + (precisionChr - 48); + textIndex++; + } + } + next = HEAP8[((textIndex+1)>>0)]; + } + if (precision < 0) { + precision = 6; // Standard default. + precisionSet = false; + } + + // Handle integer sizes. WARNING: These assume a 32-bit architecture! + var argSize; + switch (String.fromCharCode(next)) { + case 'h': + var nextNext = HEAP8[((textIndex+2)>>0)]; + if (nextNext == 104) { + textIndex++; + argSize = 1; // char (actually i32 in varargs) + } else { + argSize = 2; // short (actually i32 in varargs) + } + break; + case 'l': + var nextNext = HEAP8[((textIndex+2)>>0)]; + if (nextNext == 108) { + textIndex++; + argSize = 8; // long long + } else { + argSize = 4; // long + } + break; + case 'L': // long long + case 'q': // int64_t + case 'j': // intmax_t + argSize = 8; + break; + case 'z': // size_t + case 't': // ptrdiff_t + case 'I': // signed ptrdiff_t or unsigned size_t + argSize = 4; + break; + default: + argSize = null; + } + if (argSize) textIndex++; + next = HEAP8[((textIndex+1)>>0)]; + + // Handle type specifier. + switch (String.fromCharCode(next)) { + case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': { + // Integer. + var signed = next == 100 || next == 105; + argSize = argSize || 4; + var currArg = getNextArg('i' + (argSize * 8)); + var origArg = currArg; + var argText; + // Flatten i64-1 [low, high] into a (slightly rounded) double + if (argSize == 8) { + currArg = Runtime.makeBigInt(currArg[0], currArg[1], next == 117); + } + // Truncate to requested size. + if (argSize <= 4) { + var limit = Math.pow(256, argSize) - 1; + currArg = (signed ? reSign : unSign)(currArg & limit, argSize * 8); + } + // Format the number. + var currAbsArg = Math.abs(currArg); + var prefix = ''; + if (next == 100 || next == 105) { + if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], null); else + argText = reSign(currArg, 8 * argSize, 1).toString(10); + } else if (next == 117) { + if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], true); else + argText = unSign(currArg, 8 * argSize, 1).toString(10); + currArg = Math.abs(currArg); + } else if (next == 111) { + argText = (flagAlternative ? '0' : '') + currAbsArg.toString(8); + } else if (next == 120 || next == 88) { + prefix = (flagAlternative && currArg != 0) ? '0x' : ''; + if (argSize == 8 && i64Math) { + if (origArg[1]) { + argText = (origArg[1]>>>0).toString(16); + var lower = (origArg[0]>>>0).toString(16); + while (lower.length < 8) lower = '0' + lower; + argText += lower; + } else { + argText = (origArg[0]>>>0).toString(16); + } + } else + if (currArg < 0) { + // Represent negative numbers in hex as 2's complement. + currArg = -currArg; + argText = (currAbsArg - 1).toString(16); + var buffer = []; + for (var i = 0; i < argText.length; i++) { + buffer.push((0xF - parseInt(argText[i], 16)).toString(16)); + } + argText = buffer.join(''); + while (argText.length < argSize * 2) argText = 'f' + argText; + } else { + argText = currAbsArg.toString(16); + } + if (next == 88) { + prefix = prefix.toUpperCase(); + argText = argText.toUpperCase(); + } + } else if (next == 112) { + if (currAbsArg === 0) { + argText = '(nil)'; + } else { + prefix = '0x'; + argText = currAbsArg.toString(16); + } + } + if (precisionSet) { + while (argText.length < precision) { + argText = '0' + argText; + } + } + + // Add sign if needed + if (currArg >= 0) { + if (flagAlwaysSigned) { + prefix = '+' + prefix; + } else if (flagPadSign) { + prefix = ' ' + prefix; + } + } + + // Move sign to prefix so we zero-pad after the sign + if (argText.charAt(0) == '-') { + prefix = '-' + prefix; + argText = argText.substr(1); + } + + // Add padding. + while (prefix.length + argText.length < width) { + if (flagLeftAlign) { + argText += ' '; + } else { + if (flagZeroPad) { + argText = '0' + argText; + } else { + prefix = ' ' + prefix; + } + } + } + + // Insert the result into the buffer. + argText = prefix + argText; + argText.split('').forEach(function(chr) { + ret.push(chr.charCodeAt(0)); + }); + break; + } + case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': { + // Float. + var currArg = getNextArg('double'); + var argText; + if (isNaN(currArg)) { + argText = 'nan'; + flagZeroPad = false; + } else if (!isFinite(currArg)) { + argText = (currArg < 0 ? '-' : '') + 'inf'; + flagZeroPad = false; + } else { + var isGeneral = false; + var effectivePrecision = Math.min(precision, 20); + + // Convert g/G to f/F or e/E, as per: + // http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html + if (next == 103 || next == 71) { + isGeneral = true; + precision = precision || 1; + var exponent = parseInt(currArg.toExponential(effectivePrecision).split('e')[1], 10); + if (precision > exponent && exponent >= -4) { + next = ((next == 103) ? 'f' : 'F').charCodeAt(0); + precision -= exponent + 1; + } else { + next = ((next == 103) ? 'e' : 'E').charCodeAt(0); + precision--; + } + effectivePrecision = Math.min(precision, 20); + } + + if (next == 101 || next == 69) { + argText = currArg.toExponential(effectivePrecision); + // Make sure the exponent has at least 2 digits. + if (/[eE][-+]\d$/.test(argText)) { + argText = argText.slice(0, -1) + '0' + argText.slice(-1); + } + } else if (next == 102 || next == 70) { + argText = currArg.toFixed(effectivePrecision); + if (currArg === 0 && __reallyNegative(currArg)) { + argText = '-' + argText; + } + } + + var parts = argText.split('e'); + if (isGeneral && !flagAlternative) { + // Discard trailing zeros and periods. + while (parts[0].length > 1 && parts[0].indexOf('.') != -1 && + (parts[0].slice(-1) == '0' || parts[0].slice(-1) == '.')) { + parts[0] = parts[0].slice(0, -1); + } + } else { + // Make sure we have a period in alternative mode. + if (flagAlternative && argText.indexOf('.') == -1) parts[0] += '.'; + // Zero pad until required precision. + while (precision > effectivePrecision++) parts[0] += '0'; + } + argText = parts[0] + (parts.length > 1 ? 'e' + parts[1] : ''); + + // Capitalize 'E' if needed. + if (next == 69) argText = argText.toUpperCase(); + + // Add sign. + if (currArg >= 0) { + if (flagAlwaysSigned) { + argText = '+' + argText; + } else if (flagPadSign) { + argText = ' ' + argText; + } + } + } + + // Add padding. + while (argText.length < width) { + if (flagLeftAlign) { + argText += ' '; + } else { + if (flagZeroPad && (argText[0] == '-' || argText[0] == '+')) { + argText = argText[0] + '0' + argText.slice(1); + } else { + argText = (flagZeroPad ? '0' : ' ') + argText; + } + } + } + + // Adjust case. + if (next < 97) argText = argText.toUpperCase(); + + // Insert the result into the buffer. + argText.split('').forEach(function(chr) { + ret.push(chr.charCodeAt(0)); + }); + break; + } + case 's': { + // String. + var arg = getNextArg('i8*'); + var argLength = arg ? _strlen(arg) : '(null)'.length; + if (precisionSet) argLength = Math.min(argLength, precision); + if (!flagLeftAlign) { + while (argLength < width--) { + ret.push(32); + } + } + if (arg) { + for (var i = 0; i < argLength; i++) { + ret.push(HEAPU8[((arg++)>>0)]); + } + } else { + ret = ret.concat(intArrayFromString('(null)'.substr(0, argLength), true)); + } + if (flagLeftAlign) { + while (argLength < width--) { + ret.push(32); + } + } + break; + } + case 'c': { + // Character. + if (flagLeftAlign) ret.push(getNextArg('i8')); + while (--width > 0) { + ret.push(32); + } + if (!flagLeftAlign) ret.push(getNextArg('i8')); + break; + } + case 'n': { + // Write the length written so far to the next parameter. + var ptr = getNextArg('i32*'); + HEAP32[((ptr)>>2)]=ret.length; + break; + } + case '%': { + // Literal percent sign. + ret.push(curr); + break; + } + default: { + // Unknown specifiers remain untouched. + for (var i = startTextIndex; i < textIndex + 2; i++) { + ret.push(HEAP8[((i)>>0)]); + } + } + } + textIndex += 2; + // TODO: Support a/A (hex float) and m (last error) specifiers. + // TODO: Support %1${specifier} for arg selection. + } else { + ret.push(curr); + textIndex += 1; + } + } + return ret; + }function _fprintf(stream, format, varargs) { + // int fprintf(FILE *restrict stream, const char *restrict format, ...); + // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html + var result = __formatString(format, varargs); + var stack = Runtime.stackSave(); + var ret = _fwrite(allocate(result, 'i8', ALLOC_STACK), 1, result.length, stream); + Runtime.stackRestore(stack); + return ret; + }function _printf(format, varargs) { + // int printf(const char *restrict format, ...); + // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html + var stdout = HEAP32[((_stdout)>>2)]; + return _fprintf(stdout, format, varargs); + } + + + + function _emscripten_memcpy_big(dest, src, num) { + HEAPU8.set(HEAPU8.subarray(src, src+num), dest); + return dest; + } + Module["_memcpy"] = _memcpy; + + var _llvm_pow_f64=Math_pow; + + var _cos=Math_cos; + + var _log=Math_log; + + function _sbrk(bytes) { + // Implement a Linux-like 'memory area' for our 'process'. + // Changes the size of the memory area by |bytes|; returns the + // address of the previous top ('break') of the memory area + // We control the "dynamic" memory - DYNAMIC_BASE to DYNAMICTOP + var self = _sbrk; + if (!self.called) { + DYNAMICTOP = alignMemoryPage(DYNAMICTOP); // make sure we start out aligned + self.called = true; + assert(Runtime.dynamicAlloc); + self.alloc = Runtime.dynamicAlloc; + Runtime.dynamicAlloc = function() { abort('cannot dynamically allocate, sbrk now has control') }; + } + var ret = DYNAMICTOP; + if (bytes != 0) { + var success = self.alloc(bytes); + if (!success) return -1 >>> 0; // sbrk failure code + } + return ret; // Previous break location. + } + + function ___errno_location() { + return ___errno_state; + } + + var _BItoD=true; + + var _sqrt=Math_sqrt; + + + Module["_strcpy"] = _strcpy; + + + function __exit(status) { + // void _exit(int status); + // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html + Module['exit'](status); + }function _exit(status) { + __exit(status); + } + + function _time(ptr) { + var ret = (Date.now()/1000)|0; + if (ptr) { + HEAP32[((ptr)>>2)]=ret; + } + return ret; + } + + + + function _emscripten_set_main_loop_timing(mode, value) { + Browser.mainLoop.timingMode = mode; + Browser.mainLoop.timingValue = value; + + if (!Browser.mainLoop.func) { + console.error('emscripten_set_main_loop_timing: Cannot set timing mode for main loop since a main loop does not exist! Call emscripten_set_main_loop first to set one up.'); + return 1; // Return non-zero on failure, can't set timing mode when there is no main loop. + } + + if (mode == 0 /*EM_TIMING_SETTIMEOUT*/) { + Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler() { + setTimeout(Browser.mainLoop.runner, value); // doing this each time means that on exception, we stop + }; + Browser.mainLoop.method = 'timeout'; + } else if (mode == 1 /*EM_TIMING_RAF*/) { + Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler() { + Browser.requestAnimationFrame(Browser.mainLoop.runner); + }; + Browser.mainLoop.method = 'rAF'; + } + return 0; + }function _emscripten_set_main_loop(func, fps, simulateInfiniteLoop, arg, noSetTiming) { + Module['noExitRuntime'] = true; + + assert(!Browser.mainLoop.func, 'emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.'); + + Browser.mainLoop.func = func; + Browser.mainLoop.arg = arg; + + var thisMainLoopId = Browser.mainLoop.currentlyRunningMainloop; + + Browser.mainLoop.runner = function Browser_mainLoop_runner() { + if (ABORT) return; + if (Browser.mainLoop.queue.length > 0) { + var start = Date.now(); + var blocker = Browser.mainLoop.queue.shift(); + blocker.func(blocker.arg); + if (Browser.mainLoop.remainingBlockers) { + var remaining = Browser.mainLoop.remainingBlockers; + var next = remaining%1 == 0 ? remaining-1 : Math.floor(remaining); + if (blocker.counted) { + Browser.mainLoop.remainingBlockers = next; + } else { + // not counted, but move the progress along a tiny bit + next = next + 0.5; // do not steal all the next one's progress + Browser.mainLoop.remainingBlockers = (8*remaining + next)/9; + } + } + console.log('main loop blocker "' + blocker.name + '" took ' + (Date.now() - start) + ' ms'); //, left: ' + Browser.mainLoop.remainingBlockers); + Browser.mainLoop.updateStatus(); + setTimeout(Browser.mainLoop.runner, 0); + return; + } + + // catch pauses from non-main loop sources + if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) return; + + // Implement very basic swap interval control + Browser.mainLoop.currentFrameNumber = Browser.mainLoop.currentFrameNumber + 1 | 0; + if (Browser.mainLoop.timingMode == 1/*EM_TIMING_RAF*/ && Browser.mainLoop.timingValue > 1 && Browser.mainLoop.currentFrameNumber % Browser.mainLoop.timingValue != 0) { + // Not the scheduled time to render this frame - skip. + Browser.mainLoop.scheduler(); + return; + } + + // Signal GL rendering layer that processing of a new frame is about to start. This helps it optimize + // VBO double-buffering and reduce GPU stalls. + + if (Browser.mainLoop.method === 'timeout' && Module.ctx) { + Module.printErr('Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!'); + Browser.mainLoop.method = ''; // just warn once per call to set main loop + } + + Browser.mainLoop.runIter(function() { + if (typeof arg !== 'undefined') { + Runtime.dynCall('vi', func, [arg]); + } else { + Runtime.dynCall('v', func); + } + }); + + // catch pauses from the main loop itself + if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) return; + + // Queue new audio data. This is important to be right after the main loop invocation, so that we will immediately be able + // to queue the newest produced audio samples. + // TODO: Consider adding pre- and post- rAF callbacks so that GL.newRenderingFrameStarted() and SDL.audio.queueNewAudioData() + // do not need to be hardcoded into this function, but can be more generic. + if (typeof SDL === 'object' && SDL.audio && SDL.audio.queueNewAudioData) SDL.audio.queueNewAudioData(); + + Browser.mainLoop.scheduler(); + } + + if (!noSetTiming) { + if (fps && fps > 0) _emscripten_set_main_loop_timing(0/*EM_TIMING_SETTIMEOUT*/, 1000.0 / fps); + else _emscripten_set_main_loop_timing(1/*EM_TIMING_RAF*/, 1); // Do rAF by rendering each frame (no decimating) + + Browser.mainLoop.scheduler(); + } + + if (simulateInfiniteLoop) { + throw 'SimulateInfiniteLoop'; + } + }var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function () { + Browser.mainLoop.scheduler = null; + Browser.mainLoop.currentlyRunningMainloop++; // Incrementing this signals the previous main loop that it's now become old, and it must return. + },resume:function () { + Browser.mainLoop.currentlyRunningMainloop++; + var timingMode = Browser.mainLoop.timingMode; + var timingValue = Browser.mainLoop.timingValue; + var func = Browser.mainLoop.func; + Browser.mainLoop.func = null; + _emscripten_set_main_loop(func, 0, false, Browser.mainLoop.arg, true /* do not set timing and call scheduler, we will do it on the next lines */); + _emscripten_set_main_loop_timing(timingMode, timingValue); + Browser.mainLoop.scheduler(); + },updateStatus:function () { + if (Module['setStatus']) { + var message = Module['statusMessage'] || 'Please wait...'; + var remaining = Browser.mainLoop.remainingBlockers; + var expected = Browser.mainLoop.expectedBlockers; + if (remaining) { + if (remaining < expected) { + Module['setStatus'](message + ' (' + (expected - remaining) + '/' + expected + ')'); + } else { + Module['setStatus'](message); + } + } else { + Module['setStatus'](''); + } + } + },runIter:function (func) { + if (ABORT) return; + if (Module['preMainLoop']) { + var preRet = Module['preMainLoop'](); + if (preRet === false) { + return; // |return false| skips a frame + } + } + try { + func(); + } catch (e) { + if (e instanceof ExitStatus) { + return; + } else { + if (e && typeof e === 'object' && e.stack) Module.printErr('exception thrown: ' + [e, e.stack]); + throw e; + } + } + if (Module['postMainLoop']) Module['postMainLoop'](); + }},isFullScreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function () { + if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; // needs to exist even in workers + + if (Browser.initted) return; + Browser.initted = true; + + try { + new Blob(); + Browser.hasBlobConstructor = true; + } catch(e) { + Browser.hasBlobConstructor = false; + console.log("warning: no blob constructor, cannot create blobs with mimetypes"); + } + Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null)); + Browser.URLObject = typeof window != "undefined" ? (window.URL ? window.URL : window.webkitURL) : undefined; + if (!Module.noImageDecoding && typeof Browser.URLObject === 'undefined') { + console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."); + Module.noImageDecoding = true; + } + + // Support for plugins that can process preloaded files. You can add more of these to + // your app by creating and appending to Module.preloadPlugins. + // + // Each plugin is asked if it can handle a file based on the file's name. If it can, + // it is given the file's raw data. When it is done, it calls a callback with the file's + // (possibly modified) data. For example, a plugin might decompress a file, or it + // might create some side data structure for use later (like an Image element, etc.). + + var imagePlugin = {}; + imagePlugin['canHandle'] = function imagePlugin_canHandle(name) { + return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name); + }; + imagePlugin['handle'] = function imagePlugin_handle(byteArray, name, onload, onerror) { + var b = null; + if (Browser.hasBlobConstructor) { + try { + b = new Blob([byteArray], { type: Browser.getMimetype(name) }); + if (b.size !== byteArray.length) { // Safari bug #118630 + // Safari's Blob can only take an ArrayBuffer + b = new Blob([(new Uint8Array(byteArray)).buffer], { type: Browser.getMimetype(name) }); + } + } catch(e) { + Runtime.warnOnce('Blob constructor present but fails: ' + e + '; falling back to blob builder'); + } + } + if (!b) { + var bb = new Browser.BlobBuilder(); + bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range + b = bb.getBlob(); + } + var url = Browser.URLObject.createObjectURL(b); + assert(typeof url == 'string', 'createObjectURL must return a url as a string'); + var img = new Image(); + img.onload = function img_onload() { + assert(img.complete, 'Image ' + name + ' could not be decoded'); + var canvas = document.createElement('canvas'); + canvas.width = img.width; + canvas.height = img.height; + var ctx = canvas.getContext('2d'); + ctx.drawImage(img, 0, 0); + Module["preloadedImages"][name] = canvas; + Browser.URLObject.revokeObjectURL(url); + if (onload) onload(byteArray); + }; + img.onerror = function img_onerror(event) { + console.log('Image ' + url + ' could not be decoded'); + if (onerror) onerror(); + }; + img.src = url; + }; + Module['preloadPlugins'].push(imagePlugin); + + var audioPlugin = {}; + audioPlugin['canHandle'] = function audioPlugin_canHandle(name) { + return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wav': 1, '.mp3': 1 }; + }; + audioPlugin['handle'] = function audioPlugin_handle(byteArray, name, onload, onerror) { + var done = false; + function finish(audio) { + if (done) return; + done = true; + Module["preloadedAudios"][name] = audio; + if (onload) onload(byteArray); + } + function fail() { + if (done) return; + done = true; + Module["preloadedAudios"][name] = new Audio(); // empty shim + if (onerror) onerror(); + } + if (Browser.hasBlobConstructor) { + try { + var b = new Blob([byteArray], { type: Browser.getMimetype(name) }); + } catch(e) { + return fail(); + } + var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this! + assert(typeof url == 'string', 'createObjectURL must return a url as a string'); + var audio = new Audio(); + audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926 + audio.onerror = function audio_onerror(event) { + if (done) return; + console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach'); + function encode64(data) { + var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + var PAD = '='; + var ret = ''; + var leftchar = 0; + var leftbits = 0; + for (var i = 0; i < data.length; i++) { + leftchar = (leftchar << 8) | data[i]; + leftbits += 8; + while (leftbits >= 6) { + var curr = (leftchar >> (leftbits-6)) & 0x3f; + leftbits -= 6; + ret += BASE[curr]; + } + } + if (leftbits == 2) { + ret += BASE[(leftchar&3) << 4]; + ret += PAD + PAD; + } else if (leftbits == 4) { + ret += BASE[(leftchar&0xf) << 2]; + ret += PAD; + } + return ret; + } + audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encode64(byteArray); + finish(audio); // we don't wait for confirmation this worked - but it's worth trying + }; + audio.src = url; + // workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror + Browser.safeSetTimeout(function() { + finish(audio); // try to use it even though it is not necessarily ready to play + }, 10000); + } else { + return fail(); + } + }; + Module['preloadPlugins'].push(audioPlugin); + + // Canvas event setup + + var canvas = Module['canvas']; + function pointerLockChange() { + Browser.pointerLock = document['pointerLockElement'] === canvas || + document['mozPointerLockElement'] === canvas || + document['webkitPointerLockElement'] === canvas || + document['msPointerLockElement'] === canvas; + } + if (canvas) { + // forced aspect ratio can be enabled by defining 'forcedAspectRatio' on Module + // Module['forcedAspectRatio'] = 4 / 3; + + canvas.requestPointerLock = canvas['requestPointerLock'] || + canvas['mozRequestPointerLock'] || + canvas['webkitRequestPointerLock'] || + canvas['msRequestPointerLock'] || + function(){}; + canvas.exitPointerLock = document['exitPointerLock'] || + document['mozExitPointerLock'] || + document['webkitExitPointerLock'] || + document['msExitPointerLock'] || + function(){}; // no-op if function does not exist + canvas.exitPointerLock = canvas.exitPointerLock.bind(document); + + + document.addEventListener('pointerlockchange', pointerLockChange, false); + document.addEventListener('mozpointerlockchange', pointerLockChange, false); + document.addEventListener('webkitpointerlockchange', pointerLockChange, false); + document.addEventListener('mspointerlockchange', pointerLockChange, false); + + if (Module['elementPointerLock']) { + canvas.addEventListener("click", function(ev) { + if (!Browser.pointerLock && canvas.requestPointerLock) { + canvas.requestPointerLock(); + ev.preventDefault(); + } + }, false); + } + } + },createContext:function (canvas, useWebGL, setInModule, webGLContextAttributes) { + if (useWebGL && Module.ctx && canvas == Module.canvas) return Module.ctx; // no need to recreate GL context if it's already been created for this canvas. + + var ctx; + var contextHandle; + if (useWebGL) { + // For GLES2/desktop GL compatibility, adjust a few defaults to be different to WebGL defaults, so that they align better with the desktop defaults. + var contextAttributes = { + antialias: false, + alpha: false + }; + + if (webGLContextAttributes) { + for (var attribute in webGLContextAttributes) { + contextAttributes[attribute] = webGLContextAttributes[attribute]; + } + } + + contextHandle = GL.createContext(canvas, contextAttributes); + if (contextHandle) { + ctx = GL.getContext(contextHandle).GLctx; + } + // Set the background of the WebGL canvas to black + canvas.style.backgroundColor = "black"; + } else { + ctx = canvas.getContext('2d'); + } + + if (!ctx) return null; + + if (setInModule) { + if (!useWebGL) assert(typeof GLctx === 'undefined', 'cannot set in module if GLctx is used, but we are a non-GL context that would replace it'); + + Module.ctx = ctx; + if (useWebGL) GL.makeContextCurrent(contextHandle); + Module.useWebGL = useWebGL; + Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() }); + Browser.init(); + } + return ctx; + },destroyContext:function (canvas, useWebGL, setInModule) {},fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:function (lockPointer, resizeCanvas, vrDevice) { + Browser.lockPointer = lockPointer; + Browser.resizeCanvas = resizeCanvas; + Browser.vrDevice = vrDevice; + if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = true; + if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false; + if (typeof Browser.vrDevice === 'undefined') Browser.vrDevice = null; + + var canvas = Module['canvas']; + function fullScreenChange() { + Browser.isFullScreen = false; + var canvasContainer = canvas.parentNode; + if ((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] || + document['mozFullScreenElement'] || document['mozFullscreenElement'] || + document['fullScreenElement'] || document['fullscreenElement'] || + document['msFullScreenElement'] || document['msFullscreenElement'] || + document['webkitCurrentFullScreenElement']) === canvasContainer) { + canvas.cancelFullScreen = document['cancelFullScreen'] || + document['mozCancelFullScreen'] || + document['webkitCancelFullScreen'] || + document['msExitFullscreen'] || + document['exitFullscreen'] || + function() {}; + canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document); + if (Browser.lockPointer) canvas.requestPointerLock(); + Browser.isFullScreen = true; + if (Browser.resizeCanvas) Browser.setFullScreenCanvasSize(); + } else { + + // remove the full screen specific parent of the canvas again to restore the HTML structure from before going full screen + canvasContainer.parentNode.insertBefore(canvas, canvasContainer); + canvasContainer.parentNode.removeChild(canvasContainer); + + if (Browser.resizeCanvas) Browser.setWindowedCanvasSize(); + } + if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullScreen); + Browser.updateCanvasDimensions(canvas); + } + + if (!Browser.fullScreenHandlersInstalled) { + Browser.fullScreenHandlersInstalled = true; + document.addEventListener('fullscreenchange', fullScreenChange, false); + document.addEventListener('mozfullscreenchange', fullScreenChange, false); + document.addEventListener('webkitfullscreenchange', fullScreenChange, false); + document.addEventListener('MSFullscreenChange', fullScreenChange, false); + } + + // create a new parent to ensure the canvas has no siblings. this allows browsers to optimize full screen performance when its parent is the full screen root + var canvasContainer = document.createElement("div"); + canvas.parentNode.insertBefore(canvasContainer, canvas); + canvasContainer.appendChild(canvas); + + // use parent of canvas as full screen root to allow aspect ratio correction (Firefox stretches the root to screen size) + canvasContainer.requestFullScreen = canvasContainer['requestFullScreen'] || + canvasContainer['mozRequestFullScreen'] || + canvasContainer['msRequestFullscreen'] || + (canvasContainer['webkitRequestFullScreen'] ? function() { canvasContainer['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null); + + if (vrDevice) { + canvasContainer.requestFullScreen({ vrDisplay: vrDevice }); + } else { + canvasContainer.requestFullScreen(); + } + },nextRAF:0,fakeRequestAnimationFrame:function (func) { + // try to keep 60fps between calls to here + var now = Date.now(); + if (Browser.nextRAF === 0) { + Browser.nextRAF = now + 1000/60; + } else { + while (now + 2 >= Browser.nextRAF) { // fudge a little, to avoid timer jitter causing us to do lots of delay:0 + Browser.nextRAF += 1000/60; + } + } + var delay = Math.max(Browser.nextRAF - now, 0); + setTimeout(func, delay); + },requestAnimationFrame:function requestAnimationFrame(func) { + if (typeof window === 'undefined') { // Provide fallback to setTimeout if window is undefined (e.g. in Node.js) + Browser.fakeRequestAnimationFrame(func); + } else { + if (!window.requestAnimationFrame) { + window.requestAnimationFrame = window['requestAnimationFrame'] || + window['mozRequestAnimationFrame'] || + window['webkitRequestAnimationFrame'] || + window['msRequestAnimationFrame'] || + window['oRequestAnimationFrame'] || + Browser.fakeRequestAnimationFrame; + } + window.requestAnimationFrame(func); + } + },safeCallback:function (func) { + return function() { + if (!ABORT) return func.apply(null, arguments); + }; + },allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function () { + Browser.allowAsyncCallbacks = false; + },resumeAsyncCallbacks:function () { // marks future callbacks as ok to execute, and synchronously runs any remaining ones right now + Browser.allowAsyncCallbacks = true; + if (Browser.queuedAsyncCallbacks.length > 0) { + var callbacks = Browser.queuedAsyncCallbacks; + Browser.queuedAsyncCallbacks = []; + callbacks.forEach(function(func) { + func(); + }); + } + },safeRequestAnimationFrame:function (func) { + return Browser.requestAnimationFrame(function() { + if (ABORT) return; + if (Browser.allowAsyncCallbacks) { + func(); + } else { + Browser.queuedAsyncCallbacks.push(func); + } + }); + },safeSetTimeout:function (func, timeout) { + Module['noExitRuntime'] = true; + return setTimeout(function() { + if (ABORT) return; + if (Browser.allowAsyncCallbacks) { + func(); + } else { + Browser.queuedAsyncCallbacks.push(func); + } + }, timeout); + },safeSetInterval:function (func, timeout) { + Module['noExitRuntime'] = true; + return setInterval(function() { + if (ABORT) return; + if (Browser.allowAsyncCallbacks) { + func(); + } // drop it on the floor otherwise, next interval will kick in + }, timeout); + },getMimetype:function (name) { + return { + 'jpg': 'image/jpeg', + 'jpeg': 'image/jpeg', + 'png': 'image/png', + 'bmp': 'image/bmp', + 'ogg': 'audio/ogg', + 'wav': 'audio/wav', + 'mp3': 'audio/mpeg' + }[name.substr(name.lastIndexOf('.')+1)]; + },getUserMedia:function (func) { + if(!window.getUserMedia) { + window.getUserMedia = navigator['getUserMedia'] || + navigator['mozGetUserMedia']; + } + window.getUserMedia(func); + },getMovementX:function (event) { + return event['movementX'] || + event['mozMovementX'] || + event['webkitMovementX'] || + 0; + },getMovementY:function (event) { + return event['movementY'] || + event['mozMovementY'] || + event['webkitMovementY'] || + 0; + },getMouseWheelDelta:function (event) { + var delta = 0; + switch (event.type) { + case 'DOMMouseScroll': + delta = event.detail; + break; + case 'mousewheel': + delta = event.wheelDelta; + break; + case 'wheel': + delta = event['deltaY']; + break; + default: + throw 'unrecognized mouse wheel event: ' + event.type; + } + return delta; + },mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function (event) { // event should be mousemove, mousedown or mouseup + if (Browser.pointerLock) { + // When the pointer is locked, calculate the coordinates + // based on the movement of the mouse. + // Workaround for Firefox bug 764498 + if (event.type != 'mousemove' && + ('mozMovementX' in event)) { + Browser.mouseMovementX = Browser.mouseMovementY = 0; + } else { + Browser.mouseMovementX = Browser.getMovementX(event); + Browser.mouseMovementY = Browser.getMovementY(event); + } + + // check if SDL is available + if (typeof SDL != "undefined") { + Browser.mouseX = SDL.mouseX + Browser.mouseMovementX; + Browser.mouseY = SDL.mouseY + Browser.mouseMovementY; + } else { + // just add the mouse delta to the current absolut mouse position + // FIXME: ideally this should be clamped against the canvas size and zero + Browser.mouseX += Browser.mouseMovementX; + Browser.mouseY += Browser.mouseMovementY; + } + } else { + // Otherwise, calculate the movement based on the changes + // in the coordinates. + var rect = Module["canvas"].getBoundingClientRect(); + var cw = Module["canvas"].width; + var ch = Module["canvas"].height; + + // Neither .scrollX or .pageXOffset are defined in a spec, but + // we prefer .scrollX because it is currently in a spec draft. + // (see: http://www.w3.org/TR/2013/WD-cssom-view-20131217/) + var scrollX = ((typeof window.scrollX !== 'undefined') ? window.scrollX : window.pageXOffset); + var scrollY = ((typeof window.scrollY !== 'undefined') ? window.scrollY : window.pageYOffset); + // If this assert lands, it's likely because the browser doesn't support scrollX or pageXOffset + // and we have no viable fallback. + assert((typeof scrollX !== 'undefined') && (typeof scrollY !== 'undefined'), 'Unable to retrieve scroll position, mouse positions likely broken.'); + + if (event.type === 'touchstart' || event.type === 'touchend' || event.type === 'touchmove') { + var touch = event.touch; + if (touch === undefined) { + return; // the "touch" property is only defined in SDL + + } + var adjustedX = touch.pageX - (scrollX + rect.left); + var adjustedY = touch.pageY - (scrollY + rect.top); + + adjustedX = adjustedX * (cw / rect.width); + adjustedY = adjustedY * (ch / rect.height); + + var coords = { x: adjustedX, y: adjustedY }; + + if (event.type === 'touchstart') { + Browser.lastTouches[touch.identifier] = coords; + Browser.touches[touch.identifier] = coords; + } else if (event.type === 'touchend' || event.type === 'touchmove') { + var last = Browser.touches[touch.identifier]; + if (!last) last = coords; + Browser.lastTouches[touch.identifier] = last; + Browser.touches[touch.identifier] = coords; + } + return; + } + + var x = event.pageX - (scrollX + rect.left); + var y = event.pageY - (scrollY + rect.top); + + // the canvas might be CSS-scaled compared to its backbuffer; + // SDL-using content will want mouse coordinates in terms + // of backbuffer units. + x = x * (cw / rect.width); + y = y * (ch / rect.height); + + Browser.mouseMovementX = x - Browser.mouseX; + Browser.mouseMovementY = y - Browser.mouseY; + Browser.mouseX = x; + Browser.mouseY = y; + } + },xhrLoad:function (url, onload, onerror) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = function xhr_onload() { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + onload(xhr.response); + } else { + onerror(); + } + }; + xhr.onerror = onerror; + xhr.send(null); + },asyncLoad:function (url, onload, onerror, noRunDep) { + Browser.xhrLoad(url, function(arrayBuffer) { + assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).'); + onload(new Uint8Array(arrayBuffer)); + if (!noRunDep) removeRunDependency('al ' + url); + }, function(event) { + if (onerror) { + onerror(); + } else { + throw 'Loading data file "' + url + '" failed.'; + } + }); + if (!noRunDep) addRunDependency('al ' + url); + },resizeListeners:[],updateResizeListeners:function () { + var canvas = Module['canvas']; + Browser.resizeListeners.forEach(function(listener) { + listener(canvas.width, canvas.height); + }); + },setCanvasSize:function (width, height, noUpdates) { + var canvas = Module['canvas']; + Browser.updateCanvasDimensions(canvas, width, height); + if (!noUpdates) Browser.updateResizeListeners(); + },windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:function () { + // check if SDL is available + if (typeof SDL != "undefined") { + var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]; + flags = flags | 0x00800000; // set SDL_FULLSCREEN flag + HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags + } + Browser.updateResizeListeners(); + },setWindowedCanvasSize:function () { + // check if SDL is available + if (typeof SDL != "undefined") { + var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]; + flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag + HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags + } + Browser.updateResizeListeners(); + },updateCanvasDimensions:function (canvas, wNative, hNative) { + if (wNative && hNative) { + canvas.widthNative = wNative; + canvas.heightNative = hNative; + } else { + wNative = canvas.widthNative; + hNative = canvas.heightNative; + } + var w = wNative; + var h = hNative; + if (Module['forcedAspectRatio'] && Module['forcedAspectRatio'] > 0) { + if (w/h < Module['forcedAspectRatio']) { + w = Math.round(h * Module['forcedAspectRatio']); + } else { + h = Math.round(w / Module['forcedAspectRatio']); + } + } + if (((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] || + document['mozFullScreenElement'] || document['mozFullscreenElement'] || + document['fullScreenElement'] || document['fullscreenElement'] || + document['msFullScreenElement'] || document['msFullscreenElement'] || + document['webkitCurrentFullScreenElement']) === canvas.parentNode) && (typeof screen != 'undefined')) { + var factor = Math.min(screen.width / w, screen.height / h); + w = Math.round(w * factor); + h = Math.round(h * factor); + } + if (Browser.resizeCanvas) { + if (canvas.width != w) canvas.width = w; + if (canvas.height != h) canvas.height = h; + if (typeof canvas.style != 'undefined') { + canvas.style.removeProperty( "width"); + canvas.style.removeProperty("height"); + } + } else { + if (canvas.width != wNative) canvas.width = wNative; + if (canvas.height != hNative) canvas.height = hNative; + if (typeof canvas.style != 'undefined') { + if (w != wNative || h != hNative) { + canvas.style.setProperty( "width", w + "px", "important"); + canvas.style.setProperty("height", h + "px", "important"); + } else { + canvas.style.removeProperty( "width"); + canvas.style.removeProperty("height"); + } + } + } + },wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function () { + var handle = Browser.nextWgetRequestHandle; + Browser.nextWgetRequestHandle++; + return handle; + }}; + + var _sin=Math_sin; +___errno_state = Runtime.staticAlloc(4); HEAP32[((___errno_state)>>2)]=0; +FS.staticInit();__ATINIT__.unshift(function() { if (!Module["noFSInit"] && !FS.init.initialized) FS.init() });__ATMAIN__.push(function() { FS.ignorePermissions = false });__ATEXIT__.push(function() { FS.quit() });Module["FS_createFolder"] = FS.createFolder;Module["FS_createPath"] = FS.createPath;Module["FS_createDataFile"] = FS.createDataFile;Module["FS_createPreloadedFile"] = FS.createPreloadedFile;Module["FS_createLazyFile"] = FS.createLazyFile;Module["FS_createLink"] = FS.createLink;Module["FS_createDevice"] = FS.createDevice; +__ATINIT__.unshift(function() { TTY.init() });__ATEXIT__.push(function() { TTY.shutdown() }); +if (ENVIRONMENT_IS_NODE) { var fs = require("fs"); var NODEJS_PATH = require("path"); NODEFS.staticInit(); } +__ATINIT__.push(function() { SOCKFS.root = FS.mount(SOCKFS, {}, null); }); +Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, resizeCanvas, vrDevice) { Browser.requestFullScreen(lockPointer, resizeCanvas, vrDevice) }; + Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) { Browser.requestAnimationFrame(func) }; + Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) { Browser.setCanvasSize(width, height, noUpdates) }; + Module["pauseMainLoop"] = function Module_pauseMainLoop() { Browser.mainLoop.pause() }; + Module["resumeMainLoop"] = function Module_resumeMainLoop() { Browser.mainLoop.resume() }; + Module["getUserMedia"] = function Module_getUserMedia() { Browser.getUserMedia() } + Module["createContext"] = function Module_createContext(canvas, useWebGL, setInModule, webGLContextAttributes) { return Browser.createContext(canvas, useWebGL, setInModule, webGLContextAttributes) } +STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP); + +staticSealed = true; // seal the static portion of memory + +STACK_MAX = STACK_BASE + TOTAL_STACK; + +DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX); + +assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack"); + + + +Module.asmGlobalArg = { "Math": Math, "Int8Array": Int8Array, "Int16Array": Int16Array, "Int32Array": Int32Array, "Uint8Array": Uint8Array, "Uint16Array": Uint16Array, "Uint32Array": Uint32Array, "Float32Array": Float32Array, "Float64Array": Float64Array, "NaN": NaN, "Infinity": Infinity }; +Module.asmLibraryArg = { "abort": abort, "assert": assert, "_sin": _sin, "_llvm_pow_f64": _llvm_pow_f64, "_send": _send, "__reallyNegative": __reallyNegative, "_fflush": _fflush, "_pwrite": _pwrite, "_emscripten_set_main_loop_timing": _emscripten_set_main_loop_timing, "_sbrk": _sbrk, "_emscripten_memcpy_big": _emscripten_memcpy_big, "_fileno": _fileno, "_sysconf": _sysconf, "___setErrNo": ___setErrNo, "_cos": _cos, "_printf": _printf, "_log": _log, "_write": _write, "_emscripten_set_main_loop": _emscripten_set_main_loop, "___errno_location": ___errno_location, "_mkport": _mkport, "__exit": __exit, "_abort": _abort, "_fwrite": _fwrite, "_time": _time, "_fprintf": _fprintf, "_ceil": _ceil, "__formatString": __formatString, "_sqrt": _sqrt, "_exit": _exit, "STACKTOP": STACKTOP, "STACK_MAX": STACK_MAX, "tempDoublePtr": tempDoublePtr, "ABORT": ABORT }; +// EMSCRIPTEN_START_ASM +var asm = (function(global, env, buffer) { + 'almost asm'; + + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + + + var STACKTOP=env.STACKTOP|0; + var STACK_MAX=env.STACK_MAX|0; + var tempDoublePtr=env.tempDoublePtr|0; + var ABORT=env.ABORT|0; + + var __THREW__ = 0; + var threwValue = 0; + var setjmpId = 0; + var undef = 0; + var nan = global.NaN, inf = global.Infinity; + var tempInt = 0, tempBigInt = 0, tempBigIntP = 0, tempBigIntS = 0, tempBigIntR = 0.0, tempBigIntI = 0, tempBigIntD = 0, tempValue = 0, tempDouble = 0.0; + + var tempRet0 = 0; + var tempRet1 = 0; + var tempRet2 = 0; + var tempRet3 = 0; + var tempRet4 = 0; + var tempRet5 = 0; + var tempRet6 = 0; + var tempRet7 = 0; + var tempRet8 = 0; + var tempRet9 = 0; + var Math_floor=global.Math.floor; + var Math_abs=global.Math.abs; + var Math_sqrt=global.Math.sqrt; + var Math_pow=global.Math.pow; + var Math_cos=global.Math.cos; + var Math_sin=global.Math.sin; + var Math_tan=global.Math.tan; + var Math_acos=global.Math.acos; + var Math_asin=global.Math.asin; + var Math_atan=global.Math.atan; + var Math_atan2=global.Math.atan2; + var Math_exp=global.Math.exp; + var Math_log=global.Math.log; + var Math_ceil=global.Math.ceil; + var Math_imul=global.Math.imul; + var Math_min=global.Math.min; + var Math_clz32=global.Math.clz32; + var abort=env.abort; + var assert=env.assert; + var _sin=env._sin; + var _llvm_pow_f64=env._llvm_pow_f64; + var _send=env._send; + var __reallyNegative=env.__reallyNegative; + var _fflush=env._fflush; + var _pwrite=env._pwrite; + var _emscripten_set_main_loop_timing=env._emscripten_set_main_loop_timing; + var _sbrk=env._sbrk; + var _emscripten_memcpy_big=env._emscripten_memcpy_big; + var _fileno=env._fileno; + var _sysconf=env._sysconf; + var ___setErrNo=env.___setErrNo; + var _cos=env._cos; + var _printf=env._printf; + var _log=env._log; + var _write=env._write; + var _emscripten_set_main_loop=env._emscripten_set_main_loop; + var ___errno_location=env.___errno_location; + var _mkport=env._mkport; + var __exit=env.__exit; + var _abort=env._abort; + var _fwrite=env._fwrite; + var _time=env._time; + var _fprintf=env._fprintf; + var _ceil=env._ceil; + var __formatString=env.__formatString; + var _sqrt=env._sqrt; + var _exit=env._exit; + var tempFloat = 0.0; + +// EMSCRIPTEN_START_FUNCS +function stackAlloc(size) { + size = size|0; + var ret = 0; + ret = STACKTOP; + STACKTOP = (STACKTOP + size)|0; + STACKTOP = (STACKTOP + 15)&-16; +if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + + return ret|0; +} +function stackSave() { + return STACKTOP|0; +} +function stackRestore(top) { + top = top|0; + STACKTOP = top; +} +function establishStackSpace(stackBase, stackMax) { + stackBase = stackBase|0; + stackMax = stackMax|0; + STACKTOP = stackBase; + STACK_MAX = stackMax; +} + +function setThrew(threw, value) { + threw = threw|0; + value = value|0; + if ((__THREW__|0) == 0) { + __THREW__ = threw; + threwValue = value; + } +} +function copyTempFloat(ptr) { + ptr = ptr|0; + HEAP8[tempDoublePtr>>0] = HEAP8[ptr>>0]; + HEAP8[tempDoublePtr+1>>0] = HEAP8[ptr+1>>0]; + HEAP8[tempDoublePtr+2>>0] = HEAP8[ptr+2>>0]; + HEAP8[tempDoublePtr+3>>0] = HEAP8[ptr+3>>0]; +} +function copyTempDouble(ptr) { + ptr = ptr|0; + HEAP8[tempDoublePtr>>0] = HEAP8[ptr>>0]; + HEAP8[tempDoublePtr+1>>0] = HEAP8[ptr+1>>0]; + HEAP8[tempDoublePtr+2>>0] = HEAP8[ptr+2>>0]; + HEAP8[tempDoublePtr+3>>0] = HEAP8[ptr+3>>0]; + HEAP8[tempDoublePtr+4>>0] = HEAP8[ptr+4>>0]; + HEAP8[tempDoublePtr+5>>0] = HEAP8[ptr+5>>0]; + HEAP8[tempDoublePtr+6>>0] = HEAP8[ptr+6>>0]; + HEAP8[tempDoublePtr+7>>0] = HEAP8[ptr+7>>0]; +} + +function setTempRet0(value) { + value = value|0; + tempRet0 = value; +} +function getTempRet0() { + return tempRet0|0; +} + +function _fft_init($N,$sgn) { + $N = $N|0; + $sgn = $sgn|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0.0, $29 = 0.0, $3 = 0, $30 = 0.0, $31 = 0.0, $32 = 0.0, $33 = 0.0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0.0, $8 = 0, $80 = 0.0; + var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $9 = 0, $K = 0, $M = 0, $ct = 0, $obj = 0, $out = 0, $twi_len = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $N; + $1 = $sgn; + $obj = 0; + $2 = $0; + $3 = (_dividebyN($2)|0); + $out = $3; + $4 = $out; + $5 = ($4|0)==(1); + $6 = $0; + if ($5) { + $7 = (($6) - 1)|0; + $8 = $7<<4; + $9 = (288 + ($8))|0; + $10 = (_malloc($9)|0); + $obj = $10; + $11 = $0; + $12 = $obj; + $13 = ((($12)) + 8|0); + $14 = (_factors($11,$13)|0); + $15 = $obj; + $16 = ((($15)) + 264|0); + HEAP32[$16>>2] = $14; + $17 = $obj; + $18 = ((($17)) + 272|0); + $19 = $0; + $20 = $obj; + $21 = ((($20)) + 8|0); + $22 = $obj; + $23 = ((($22)) + 264|0); + $24 = HEAP32[$23>>2]|0; + _longvectorN($18,$19,$21,$24); + $25 = $0; + $twi_len = $25; + $26 = $obj; + $27 = ((($26)) + 268|0); + HEAP32[$27>>2] = 0; + } else { + $28 = (+($6|0)); + $29 = (+_log10($28)); + $30 = (+_log10(2.0)); + $31 = $29 / $30; + $32 = (+Math_ceil((+$31))); + $33 = (+Math_pow(2.0,(+$32))); + $34 = (~~(($33))); + $K = $34; + $35 = $K; + $36 = $0; + $37 = $36<<1; + $38 = (($37) - 2)|0; + $39 = ($35|0)<($38|0); + $40 = $K; + if ($39) { + $41 = $40<<1; + $M = $41; + } else { + $M = $40; + } + $42 = $M; + $43 = (($42) - 1)|0; + $44 = $43<<4; + $45 = (288 + ($44))|0; + $46 = (_malloc($45)|0); + $obj = $46; + $47 = $M; + $48 = $obj; + $49 = ((($48)) + 8|0); + $50 = (_factors($47,$49)|0); + $51 = $obj; + $52 = ((($51)) + 264|0); + HEAP32[$52>>2] = $50; + $53 = $obj; + $54 = ((($53)) + 272|0); + $55 = $M; + $56 = $obj; + $57 = ((($56)) + 8|0); + $58 = $obj; + $59 = ((($58)) + 264|0); + $60 = HEAP32[$59>>2]|0; + _longvectorN($54,$55,$57,$60); + $61 = $obj; + $62 = ((($61)) + 268|0); + HEAP32[$62>>2] = 1; + $63 = $M; + $twi_len = $63; + } + $64 = $0; + $65 = $obj; + HEAP32[$65>>2] = $64; + $66 = $1; + $67 = $obj; + $68 = ((($67)) + 4|0); + HEAP32[$68>>2] = $66; + $69 = $1; + $70 = ($69|0)==(-1); + if (!($70)) { + $88 = $obj; + STACKTOP = sp;return ($88|0); + } + $ct = 0; + while(1) { + $71 = $ct; + $72 = $twi_len; + $73 = ($71|0)<($72|0); + if (!($73)) { + break; + } + $74 = $obj; + $75 = ((($74)) + 272|0); + $76 = $ct; + $77 = (($75) + ($76<<4)|0); + $78 = ((($77)) + 8|0); + $79 = +HEAPF64[$78>>3]; + $80 = -$79; + $81 = $obj; + $82 = ((($81)) + 272|0); + $83 = $ct; + $84 = (($82) + ($83<<4)|0); + $85 = ((($84)) + 8|0); + HEAPF64[$85>>3] = $80; + $86 = $ct; + $87 = (($86) + 1)|0; + $ct = $87; + } + $88 = $obj; + STACKTOP = sp;return ($88|0); +} +function _dividebyN($N) { + $N = $N|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0; + var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $1 = $N; + while(1) { + $2 = $1; + $3 = (($2|0) % 53)&-1; + $4 = ($3|0)==(0); + if (!($4)) { + break; + } + $5 = $1; + $6 = (($5|0) / 53)&-1; + $1 = $6; + } + while(1) { + $7 = $1; + $8 = (($7|0) % 47)&-1; + $9 = ($8|0)==(0); + if (!($9)) { + break; + } + $10 = $1; + $11 = (($10|0) / 47)&-1; + $1 = $11; + } + while(1) { + $12 = $1; + $13 = (($12|0) % 43)&-1; + $14 = ($13|0)==(0); + if (!($14)) { + break; + } + $15 = $1; + $16 = (($15|0) / 43)&-1; + $1 = $16; + } + while(1) { + $17 = $1; + $18 = (($17|0) % 41)&-1; + $19 = ($18|0)==(0); + if (!($19)) { + break; + } + $20 = $1; + $21 = (($20|0) / 41)&-1; + $1 = $21; + } + while(1) { + $22 = $1; + $23 = (($22|0) % 37)&-1; + $24 = ($23|0)==(0); + if (!($24)) { + break; + } + $25 = $1; + $26 = (($25|0) / 37)&-1; + $1 = $26; + } + while(1) { + $27 = $1; + $28 = (($27|0) % 31)&-1; + $29 = ($28|0)==(0); + if (!($29)) { + break; + } + $30 = $1; + $31 = (($30|0) / 31)&-1; + $1 = $31; + } + while(1) { + $32 = $1; + $33 = (($32|0) % 29)&-1; + $34 = ($33|0)==(0); + if (!($34)) { + break; + } + $35 = $1; + $36 = (($35|0) / 29)&-1; + $1 = $36; + } + while(1) { + $37 = $1; + $38 = (($37|0) % 23)&-1; + $39 = ($38|0)==(0); + if (!($39)) { + break; + } + $40 = $1; + $41 = (($40|0) / 23)&-1; + $1 = $41; + } + while(1) { + $42 = $1; + $43 = (($42|0) % 17)&-1; + $44 = ($43|0)==(0); + if (!($44)) { + break; + } + $45 = $1; + $46 = (($45|0) / 17)&-1; + $1 = $46; + } + while(1) { + $47 = $1; + $48 = (($47|0) % 13)&-1; + $49 = ($48|0)==(0); + if (!($49)) { + break; + } + $50 = $1; + $51 = (($50|0) / 13)&-1; + $1 = $51; + } + while(1) { + $52 = $1; + $53 = (($52|0) % 11)&-1; + $54 = ($53|0)==(0); + if (!($54)) { + break; + } + $55 = $1; + $56 = (($55|0) / 11)&-1; + $1 = $56; + } + while(1) { + $57 = $1; + $58 = (($57|0) % 8)&-1; + $59 = ($58|0)==(0); + if (!($59)) { + break; + } + $60 = $1; + $61 = (($60|0) / 8)&-1; + $1 = $61; + } + while(1) { + $62 = $1; + $63 = (($62|0) % 7)&-1; + $64 = ($63|0)==(0); + if (!($64)) { + break; + } + $65 = $1; + $66 = (($65|0) / 7)&-1; + $1 = $66; + } + while(1) { + $67 = $1; + $68 = (($67|0) % 5)&-1; + $69 = ($68|0)==(0); + if (!($69)) { + break; + } + $70 = $1; + $71 = (($70|0) / 5)&-1; + $1 = $71; + } + while(1) { + $72 = $1; + $73 = (($72|0) % 4)&-1; + $74 = ($73|0)==(0); + if (!($74)) { + break; + } + $75 = $1; + $76 = (($75|0) / 4)&-1; + $1 = $76; + } + while(1) { + $77 = $1; + $78 = (($77|0) % 3)&-1; + $79 = ($78|0)==(0); + if (!($79)) { + break; + } + $80 = $1; + $81 = (($80|0) / 3)&-1; + $1 = $81; + } + while(1) { + $82 = $1; + $83 = (($82|0) % 2)&-1; + $84 = ($83|0)==(0); + $85 = $1; + if (!($84)) { + break; + } + $86 = (($85|0) / 2)&-1; + $1 = $86; + } + $87 = ($85|0)==(1); + if ($87) { + $0 = 1; + $88 = $0; + STACKTOP = sp;return ($88|0); + } else { + $0 = 0; + $88 = $0; + STACKTOP = sp;return ($88|0); + } + return (0)|0; +} +function _factors($M,$arr) { + $M = $M|0; + $arr = $arr|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; + var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $23 = 0, $24 = 0, $25 = 0; + var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0; + var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0; + var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0; + var $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0; + var $99 = 0, $N = 0, $i = 0, $m1 = 0, $m2 = 0, $mult = 0, $num = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $M; + $1 = $arr; + $i = 0; + $2 = $0; + $N = $2; + while(1) { + $3 = $N; + $4 = (($3|0) % 53)&-1; + $5 = ($4|0)==(0); + if (!($5)) { + break; + } + $6 = $N; + $7 = (($6|0) / 53)&-1; + $N = $7; + $8 = $i; + $9 = $1; + $10 = (($9) + ($8<<2)|0); + HEAP32[$10>>2] = 53; + $11 = $i; + $12 = (($11) + 1)|0; + $i = $12; + } + while(1) { + $13 = $N; + $14 = (($13|0) % 47)&-1; + $15 = ($14|0)==(0); + if (!($15)) { + break; + } + $16 = $N; + $17 = (($16|0) / 47)&-1; + $N = $17; + $18 = $i; + $19 = $1; + $20 = (($19) + ($18<<2)|0); + HEAP32[$20>>2] = 47; + $21 = $i; + $22 = (($21) + 1)|0; + $i = $22; + } + while(1) { + $23 = $N; + $24 = (($23|0) % 43)&-1; + $25 = ($24|0)==(0); + if (!($25)) { + break; + } + $26 = $N; + $27 = (($26|0) / 43)&-1; + $N = $27; + $28 = $i; + $29 = $1; + $30 = (($29) + ($28<<2)|0); + HEAP32[$30>>2] = 43; + $31 = $i; + $32 = (($31) + 1)|0; + $i = $32; + } + while(1) { + $33 = $N; + $34 = (($33|0) % 41)&-1; + $35 = ($34|0)==(0); + if (!($35)) { + break; + } + $36 = $N; + $37 = (($36|0) / 41)&-1; + $N = $37; + $38 = $i; + $39 = $1; + $40 = (($39) + ($38<<2)|0); + HEAP32[$40>>2] = 41; + $41 = $i; + $42 = (($41) + 1)|0; + $i = $42; + } + while(1) { + $43 = $N; + $44 = (($43|0) % 37)&-1; + $45 = ($44|0)==(0); + if (!($45)) { + break; + } + $46 = $N; + $47 = (($46|0) / 37)&-1; + $N = $47; + $48 = $i; + $49 = $1; + $50 = (($49) + ($48<<2)|0); + HEAP32[$50>>2] = 37; + $51 = $i; + $52 = (($51) + 1)|0; + $i = $52; + } + while(1) { + $53 = $N; + $54 = (($53|0) % 31)&-1; + $55 = ($54|0)==(0); + if (!($55)) { + break; + } + $56 = $N; + $57 = (($56|0) / 31)&-1; + $N = $57; + $58 = $i; + $59 = $1; + $60 = (($59) + ($58<<2)|0); + HEAP32[$60>>2] = 31; + $61 = $i; + $62 = (($61) + 1)|0; + $i = $62; + } + while(1) { + $63 = $N; + $64 = (($63|0) % 29)&-1; + $65 = ($64|0)==(0); + if (!($65)) { + break; + } + $66 = $N; + $67 = (($66|0) / 29)&-1; + $N = $67; + $68 = $i; + $69 = $1; + $70 = (($69) + ($68<<2)|0); + HEAP32[$70>>2] = 29; + $71 = $i; + $72 = (($71) + 1)|0; + $i = $72; + } + while(1) { + $73 = $N; + $74 = (($73|0) % 23)&-1; + $75 = ($74|0)==(0); + if (!($75)) { + break; + } + $76 = $N; + $77 = (($76|0) / 23)&-1; + $N = $77; + $78 = $i; + $79 = $1; + $80 = (($79) + ($78<<2)|0); + HEAP32[$80>>2] = 23; + $81 = $i; + $82 = (($81) + 1)|0; + $i = $82; + } + while(1) { + $83 = $N; + $84 = (($83|0) % 19)&-1; + $85 = ($84|0)==(0); + if (!($85)) { + break; + } + $86 = $N; + $87 = (($86|0) / 19)&-1; + $N = $87; + $88 = $i; + $89 = $1; + $90 = (($89) + ($88<<2)|0); + HEAP32[$90>>2] = 19; + $91 = $i; + $92 = (($91) + 1)|0; + $i = $92; + } + while(1) { + $93 = $N; + $94 = (($93|0) % 17)&-1; + $95 = ($94|0)==(0); + if (!($95)) { + break; + } + $96 = $N; + $97 = (($96|0) / 17)&-1; + $N = $97; + $98 = $i; + $99 = $1; + $100 = (($99) + ($98<<2)|0); + HEAP32[$100>>2] = 17; + $101 = $i; + $102 = (($101) + 1)|0; + $i = $102; + } + while(1) { + $103 = $N; + $104 = (($103|0) % 13)&-1; + $105 = ($104|0)==(0); + if (!($105)) { + break; + } + $106 = $N; + $107 = (($106|0) / 13)&-1; + $N = $107; + $108 = $i; + $109 = $1; + $110 = (($109) + ($108<<2)|0); + HEAP32[$110>>2] = 13; + $111 = $i; + $112 = (($111) + 1)|0; + $i = $112; + } + while(1) { + $113 = $N; + $114 = (($113|0) % 11)&-1; + $115 = ($114|0)==(0); + if (!($115)) { + break; + } + $116 = $N; + $117 = (($116|0) / 11)&-1; + $N = $117; + $118 = $i; + $119 = $1; + $120 = (($119) + ($118<<2)|0); + HEAP32[$120>>2] = 11; + $121 = $i; + $122 = (($121) + 1)|0; + $i = $122; + } + while(1) { + $123 = $N; + $124 = (($123|0) % 8)&-1; + $125 = ($124|0)==(0); + if (!($125)) { + break; + } + $126 = $N; + $127 = (($126|0) / 8)&-1; + $N = $127; + $128 = $i; + $129 = $1; + $130 = (($129) + ($128<<2)|0); + HEAP32[$130>>2] = 8; + $131 = $i; + $132 = (($131) + 1)|0; + $i = $132; + } + while(1) { + $133 = $N; + $134 = (($133|0) % 7)&-1; + $135 = ($134|0)==(0); + if (!($135)) { + break; + } + $136 = $N; + $137 = (($136|0) / 7)&-1; + $N = $137; + $138 = $i; + $139 = $1; + $140 = (($139) + ($138<<2)|0); + HEAP32[$140>>2] = 7; + $141 = $i; + $142 = (($141) + 1)|0; + $i = $142; + } + while(1) { + $143 = $N; + $144 = (($143|0) % 5)&-1; + $145 = ($144|0)==(0); + if (!($145)) { + break; + } + $146 = $N; + $147 = (($146|0) / 5)&-1; + $N = $147; + $148 = $i; + $149 = $1; + $150 = (($149) + ($148<<2)|0); + HEAP32[$150>>2] = 5; + $151 = $i; + $152 = (($151) + 1)|0; + $i = $152; + } + while(1) { + $153 = $N; + $154 = (($153|0) % 4)&-1; + $155 = ($154|0)==(0); + if (!($155)) { + break; + } + $156 = $N; + $157 = (($156|0) / 4)&-1; + $N = $157; + $158 = $i; + $159 = $1; + $160 = (($159) + ($158<<2)|0); + HEAP32[$160>>2] = 4; + $161 = $i; + $162 = (($161) + 1)|0; + $i = $162; + } + while(1) { + $163 = $N; + $164 = (($163|0) % 3)&-1; + $165 = ($164|0)==(0); + if (!($165)) { + break; + } + $166 = $N; + $167 = (($166|0) / 3)&-1; + $N = $167; + $168 = $i; + $169 = $1; + $170 = (($169) + ($168<<2)|0); + HEAP32[$170>>2] = 3; + $171 = $i; + $172 = (($171) + 1)|0; + $i = $172; + } + while(1) { + $173 = $N; + $174 = (($173|0) % 2)&-1; + $175 = ($174|0)==(0); + $176 = $N; + if (!($175)) { + break; + } + $177 = (($176|0) / 2)&-1; + $N = $177; + $178 = $i; + $179 = $1; + $180 = (($179) + ($178<<2)|0); + HEAP32[$180>>2] = 2; + $181 = $i; + $182 = (($181) + 1)|0; + $i = $182; + } + $183 = ($176|0)>(31); + if (!($183)) { + $220 = $i; + STACKTOP = sp;return ($220|0); + } + $num = 2; + while(1) { + $184 = $N; + $185 = ($184|0)>(1); + if (!($185)) { + break; + } + $186 = $num; + $187 = ($186*6)|0; + $mult = $187; + $188 = $mult; + $189 = (($188) - 1)|0; + $m1 = $189; + $190 = $mult; + $191 = (($190) + 1)|0; + $m2 = $191; + while(1) { + $192 = $N; + $193 = $m1; + $194 = (($192|0) % ($193|0))&-1; + $195 = ($194|0)==(0); + if (!($195)) { + break; + } + $196 = $m1; + $197 = $i; + $198 = $1; + $199 = (($198) + ($197<<2)|0); + HEAP32[$199>>2] = $196; + $200 = $i; + $201 = (($200) + 1)|0; + $i = $201; + $202 = $N; + $203 = $m1; + $204 = (($202|0) / ($203|0))&-1; + $N = $204; + } + while(1) { + $205 = $N; + $206 = $m2; + $207 = (($205|0) % ($206|0))&-1; + $208 = ($207|0)==(0); + if (!($208)) { + break; + } + $209 = $m2; + $210 = $i; + $211 = $1; + $212 = (($211) + ($210<<2)|0); + HEAP32[$212>>2] = $209; + $213 = $i; + $214 = (($213) + 1)|0; + $i = $214; + $215 = $N; + $216 = $m2; + $217 = (($215|0) / ($216|0))&-1; + $N = $217; + } + $218 = $num; + $219 = (($218) + 1)|0; + $num = $219; + } + $220 = $i; + STACKTOP = sp;return ($220|0); +} +function _longvectorN($sig,$N,$array,$tx) { + $sig = $sig|0; + $N = $N|0; + $array = $array|0; + $tx = $tx|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0.0; + var $27 = 0.0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0.0, $46 = 0.0, $47 = 0.0, $48 = 0.0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0.0, $57 = 0.0, $58 = 0.0, $59 = 0.0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $8 = 0, $9 = 0, $L = 0, $Ls = 0, $ct = 0, $i = 0, $j = 0, $k = 0, $theta = 0.0, label = 0; + var sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $sig; + $1 = $N; + $2 = $array; + $3 = $tx; + $L = 1; + $ct = 0; + $i = 0; + while(1) { + $4 = $i; + $5 = $3; + $6 = ($4|0)<($5|0); + if (!($6)) { + break; + } + $7 = $L; + $8 = $3; + $9 = (($8) - 1)|0; + $10 = $i; + $11 = (($9) - ($10))|0; + $12 = $2; + $13 = (($12) + ($11<<2)|0); + $14 = HEAP32[$13>>2]|0; + $15 = Math_imul($7, $14)|0; + $L = $15; + $16 = $L; + $17 = $3; + $18 = (($17) - 1)|0; + $19 = $i; + $20 = (($18) - ($19))|0; + $21 = $2; + $22 = (($21) + ($20<<2)|0); + $23 = HEAP32[$22>>2]|0; + $24 = (($16|0) / ($23|0))&-1; + $Ls = $24; + $25 = $L; + $26 = (+($25|0)); + $27 = -6.2831853071795862 / $26; + $theta = $27; + $j = 0; + while(1) { + $28 = $j; + $29 = $Ls; + $30 = ($28|0)<($29|0); + if (!($30)) { + break; + } + $k = 0; + while(1) { + $31 = $k; + $32 = $3; + $33 = (($32) - 1)|0; + $34 = $i; + $35 = (($33) - ($34))|0; + $36 = $2; + $37 = (($36) + ($35<<2)|0); + $38 = HEAP32[$37>>2]|0; + $39 = (($38) - 1)|0; + $40 = ($31|0)<($39|0); + if (!($40)) { + break; + } + $41 = $k; + $42 = (($41) + 1)|0; + $43 = $j; + $44 = Math_imul($42, $43)|0; + $45 = (+($44|0)); + $46 = $theta; + $47 = $45 * $46; + $48 = (+Math_cos((+$47))); + $49 = $ct; + $50 = $0; + $51 = (($50) + ($49<<4)|0); + HEAPF64[$51>>3] = $48; + $52 = $k; + $53 = (($52) + 1)|0; + $54 = $j; + $55 = Math_imul($53, $54)|0; + $56 = (+($55|0)); + $57 = $theta; + $58 = $56 * $57; + $59 = (+Math_sin((+$58))); + $60 = $ct; + $61 = $0; + $62 = (($61) + ($60<<4)|0); + $63 = ((($62)) + 8|0); + HEAPF64[$63>>3] = $59; + $64 = $ct; + $65 = (($64) + 1)|0; + $ct = $65; + $66 = $k; + $67 = (($66) + 1)|0; + $k = $67; + } + $68 = $j; + $69 = (($68) + 1)|0; + $j = $69; + } + $70 = $i; + $71 = (($70) + 1)|0; + $i = $71; + } + STACKTOP = sp;return; +} +function _fft_exec($obj,$inp,$oup) { + $obj = $obj|0; + $inp = $inp|0; + $oup = $oup|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $inc = 0, $l = 0, $nn = 0, $nn1 = 0, $sgn1 = 0, $sgn12 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $obj; + $1 = $inp; + $2 = $oup; + $3 = $0; + $4 = ((($3)) + 268|0); + $5 = HEAP32[$4>>2]|0; + $6 = ($5|0)==(0); + $7 = $0; + if ($6) { + $8 = HEAP32[$7>>2]|0; + $nn = $8; + $9 = $0; + $10 = ((($9)) + 4|0); + $11 = HEAP32[$10>>2]|0; + $sgn1 = $11; + $l = 1; + $inc = 0; + $12 = $2; + $13 = $1; + $14 = $0; + $15 = $sgn1; + $16 = $nn; + $17 = $l; + $18 = $inc; + _mixed_radix_dit_rec($12,$13,$14,$15,$16,$17,$18); + STACKTOP = sp;return; + } + $19 = ((($7)) + 268|0); + $20 = HEAP32[$19>>2]|0; + $21 = ($20|0)==(1); + if (!($21)) { + STACKTOP = sp;return; + } + $22 = $0; + $23 = HEAP32[$22>>2]|0; + $nn1 = $23; + $24 = $0; + $25 = ((($24)) + 4|0); + $26 = HEAP32[$25>>2]|0; + $sgn12 = $26; + $27 = $1; + $28 = $2; + $29 = $0; + $30 = $sgn12; + $31 = $nn1; + _bluestein_fft($27,$28,$29,$30,$31); + STACKTOP = sp;return; +} +function _mixed_radix_dit_rec($op,$ip,$obj,$sgn,$N,$l,$inc) { + $op = $op|0; + $ip = $ip|0; + $obj = $obj|0; + $sgn = $sgn|0; + $N = $N|0; + $l = $l|0; + $inc = $inc|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $1000 = 0, $1001 = 0, $1002 = 0.0, $1003 = 0.0, $1004 = 0.0, $1005 = 0.0, $1006 = 0.0, $1007 = 0.0, $1008 = 0.0, $1009 = 0.0, $101 = 0, $1010 = 0.0, $1011 = 0.0, $1012 = 0.0, $1013 = 0.0, $1014 = 0.0; + var $1015 = 0.0, $1016 = 0.0, $1017 = 0.0, $1018 = 0.0, $1019 = 0.0, $102 = 0, $1020 = 0.0, $1021 = 0.0, $1022 = 0.0, $1023 = 0.0, $1024 = 0.0, $1025 = 0.0, $1026 = 0.0, $1027 = 0.0, $1028 = 0.0, $1029 = 0.0, $103 = 0.0, $1030 = 0.0, $1031 = 0.0, $1032 = 0.0; + var $1033 = 0.0, $1034 = 0.0, $1035 = 0.0, $1036 = 0.0, $1037 = 0.0, $1038 = 0.0, $1039 = 0.0, $104 = 0, $1040 = 0.0, $1041 = 0.0, $1042 = 0.0, $1043 = 0.0, $1044 = 0.0, $1045 = 0.0, $1046 = 0.0, $1047 = 0.0, $1048 = 0.0, $1049 = 0.0, $105 = 0, $1050 = 0; + var $1051 = 0, $1052 = 0.0, $1053 = 0.0, $1054 = 0.0, $1055 = 0, $1056 = 0, $1057 = 0.0, $1058 = 0.0, $1059 = 0.0, $106 = 0, $1060 = 0, $1061 = 0, $1062 = 0, $1063 = 0.0, $1064 = 0.0, $1065 = 0.0, $1066 = 0, $1067 = 0, $1068 = 0, $1069 = 0; + var $107 = 0, $1070 = 0.0, $1071 = 0.0, $1072 = 0.0, $1073 = 0.0, $1074 = 0.0, $1075 = 0.0, $1076 = 0.0, $1077 = 0.0, $1078 = 0.0, $1079 = 0.0, $108 = 0, $1080 = 0.0, $1081 = 0.0, $1082 = 0.0, $1083 = 0, $1084 = 0, $1085 = 0.0, $1086 = 0.0, $1087 = 0.0; + var $1088 = 0.0, $1089 = 0.0, $109 = 0, $1090 = 0.0, $1091 = 0.0, $1092 = 0.0, $1093 = 0.0, $1094 = 0.0, $1095 = 0.0, $1096 = 0.0, $1097 = 0.0, $1098 = 0, $1099 = 0, $11 = 0, $110 = 0, $1100 = 0.0, $1101 = 0.0, $1102 = 0.0, $1103 = 0.0, $1104 = 0.0; + var $1105 = 0.0, $1106 = 0.0, $1107 = 0.0, $1108 = 0.0, $1109 = 0.0, $111 = 0.0, $1110 = 0.0, $1111 = 0.0, $1112 = 0.0, $1113 = 0.0, $1114 = 0.0, $1115 = 0.0, $1116 = 0.0, $1117 = 0.0, $1118 = 0.0, $1119 = 0.0, $112 = 0, $1120 = 0.0, $1121 = 0.0, $1122 = 0.0; + var $1123 = 0.0, $1124 = 0.0, $1125 = 0.0, $1126 = 0.0, $1127 = 0.0, $1128 = 0.0, $1129 = 0.0, $113 = 0, $1130 = 0.0, $1131 = 0.0, $1132 = 0.0, $1133 = 0.0, $1134 = 0.0, $1135 = 0.0, $1136 = 0.0, $1137 = 0.0, $1138 = 0.0, $1139 = 0.0, $114 = 0, $1140 = 0.0; + var $1141 = 0.0, $1142 = 0.0, $1143 = 0.0, $1144 = 0.0, $1145 = 0.0, $1146 = 0.0, $1147 = 0.0, $1148 = 0, $1149 = 0, $115 = 0, $1150 = 0.0, $1151 = 0.0, $1152 = 0.0, $1153 = 0, $1154 = 0, $1155 = 0.0, $1156 = 0.0, $1157 = 0.0, $1158 = 0, $1159 = 0; + var $116 = 0, $1160 = 0, $1161 = 0.0, $1162 = 0.0, $1163 = 0.0, $1164 = 0, $1165 = 0, $1166 = 0, $1167 = 0.0, $1168 = 0.0, $1169 = 0.0, $117 = 0, $1170 = 0.0, $1171 = 0.0, $1172 = 0, $1173 = 0.0, $1174 = 0.0, $1175 = 0.0, $1176 = 0.0, $1177 = 0.0; + var $1178 = 0.0, $1179 = 0.0, $118 = 0, $1180 = 0, $1181 = 0, $1182 = 0.0, $1183 = 0.0, $1184 = 0, $1185 = 0, $1186 = 0, $1187 = 0.0, $1188 = 0, $1189 = 0, $119 = 0.0, $1190 = 0, $1191 = 0.0, $1192 = 0, $1193 = 0, $1194 = 0, $1195 = 0; + var $1196 = 0, $1197 = 0.0, $1198 = 0, $1199 = 0, $12 = 0, $120 = 0, $1200 = 0, $1201 = 0, $1202 = 0, $1203 = 0, $1204 = 0.0, $1205 = 0, $1206 = 0, $1207 = 0, $1208 = 0, $1209 = 0, $121 = 0, $1210 = 0, $1211 = 0, $1212 = 0.0; + var $1213 = 0, $1214 = 0, $1215 = 0, $1216 = 0, $1217 = 0, $1218 = 0, $1219 = 0, $122 = 0, $1220 = 0.0, $1221 = 0, $1222 = 0, $1223 = 0, $1224 = 0, $1225 = 0, $1226 = 0, $1227 = 0, $1228 = 0.0, $1229 = 0, $123 = 0, $1230 = 0; + var $1231 = 0, $1232 = 0, $1233 = 0, $1234 = 0, $1235 = 0, $1236 = 0.0, $1237 = 0, $1238 = 0, $1239 = 0, $124 = 0, $1240 = 0, $1241 = 0, $1242 = 0, $1243 = 0, $1244 = 0.0, $1245 = 0, $1246 = 0, $1247 = 0, $1248 = 0, $1249 = 0; + var $125 = 0.0, $1250 = 0, $1251 = 0, $1252 = 0.0, $1253 = 0, $1254 = 0, $1255 = 0, $1256 = 0, $1257 = 0, $1258 = 0, $1259 = 0, $126 = 0, $1260 = 0.0, $1261 = 0, $1262 = 0, $1263 = 0, $1264 = 0, $1265 = 0, $1266 = 0, $1267 = 0; + var $1268 = 0.0, $1269 = 0, $127 = 0, $1270 = 0, $1271 = 0, $1272 = 0, $1273 = 0, $1274 = 0, $1275 = 0, $1276 = 0.0, $1277 = 0, $1278 = 0, $1279 = 0, $128 = 0.0, $1280 = 0, $1281 = 0, $1282 = 0, $1283 = 0, $1284 = 0.0, $1285 = 0; + var $1286 = 0, $1287 = 0, $1288 = 0, $1289 = 0, $129 = 0.0, $1290 = 0, $1291 = 0, $1292 = 0.0, $1293 = 0, $1294 = 0, $1295 = 0, $1296 = 0, $1297 = 0, $1298 = 0, $1299 = 0, $13 = 0, $130 = 0, $1300 = 0.0, $1301 = 0, $1302 = 0; + var $1303 = 0, $1304 = 0, $1305 = 0.0, $1306 = 0, $1307 = 0, $1308 = 0.0, $1309 = 0.0, $131 = 0, $1310 = 0, $1311 = 0.0, $1312 = 0, $1313 = 0, $1314 = 0.0, $1315 = 0.0, $1316 = 0, $1317 = 0, $1318 = 0.0, $1319 = 0, $132 = 0, $1320 = 0; + var $1321 = 0, $1322 = 0.0, $1323 = 0.0, $1324 = 0, $1325 = 0, $1326 = 0.0, $1327 = 0, $1328 = 0, $1329 = 0, $133 = 0.0, $1330 = 0.0, $1331 = 0.0, $1332 = 0, $1333 = 0, $1334 = 0.0, $1335 = 0, $1336 = 0, $1337 = 0.0, $1338 = 0.0, $1339 = 0; + var $134 = 0, $1340 = 0, $1341 = 0.0, $1342 = 0, $1343 = 0, $1344 = 0.0, $1345 = 0.0, $1346 = 0, $1347 = 0, $1348 = 0, $1349 = 0.0, $135 = 0, $1350 = 0, $1351 = 0, $1352 = 0, $1353 = 0.0, $1354 = 0.0, $1355 = 0, $1356 = 0, $1357 = 0; + var $1358 = 0.0, $1359 = 0, $136 = 0, $1360 = 0, $1361 = 0, $1362 = 0.0, $1363 = 0.0, $1364 = 0, $1365 = 0, $1366 = 0.0, $1367 = 0, $1368 = 0, $1369 = 0.0, $137 = 0.0, $1370 = 0.0, $1371 = 0, $1372 = 0, $1373 = 0.0, $1374 = 0, $1375 = 0; + var $1376 = 0.0, $1377 = 0.0, $1378 = 0, $1379 = 0, $138 = 0.0, $1380 = 0, $1381 = 0.0, $1382 = 0, $1383 = 0, $1384 = 0, $1385 = 0.0, $1386 = 0.0, $1387 = 0, $1388 = 0, $1389 = 0, $139 = 0, $1390 = 0.0, $1391 = 0, $1392 = 0, $1393 = 0; + var $1394 = 0.0, $1395 = 0.0, $1396 = 0, $1397 = 0, $1398 = 0.0, $1399 = 0, $14 = 0, $140 = 0.0, $1400 = 0, $1401 = 0.0, $1402 = 0.0, $1403 = 0, $1404 = 0, $1405 = 0.0, $1406 = 0, $1407 = 0, $1408 = 0.0, $1409 = 0.0, $141 = 0.0, $1410 = 0; + var $1411 = 0, $1412 = 0, $1413 = 0.0, $1414 = 0, $1415 = 0, $1416 = 0, $1417 = 0.0, $1418 = 0.0, $1419 = 0, $142 = 0, $1420 = 0, $1421 = 0, $1422 = 0.0, $1423 = 0, $1424 = 0, $1425 = 0, $1426 = 0.0, $1427 = 0.0, $1428 = 0.0, $1429 = 0.0; + var $143 = 0, $1430 = 0.0, $1431 = 0.0, $1432 = 0.0, $1433 = 0.0, $1434 = 0.0, $1435 = 0, $1436 = 0.0, $1437 = 0.0, $1438 = 0.0, $1439 = 0.0, $144 = 0.0, $1440 = 0.0, $1441 = 0.0, $1442 = 0.0, $1443 = 0, $1444 = 0, $1445 = 0.0, $1446 = 0.0, $1447 = 0.0; + var $1448 = 0.0, $1449 = 0.0, $145 = 0, $1450 = 0.0, $1451 = 0.0, $1452 = 0, $1453 = 0, $1454 = 0.0, $1455 = 0.0, $1456 = 0.0, $1457 = 0.0, $1458 = 0.0, $1459 = 0.0, $146 = 0, $1460 = 0.0, $1461 = 0, $1462 = 0, $1463 = 0, $1464 = 0.0, $1465 = 0.0; + var $1466 = 0.0, $1467 = 0.0, $1468 = 0.0, $1469 = 0.0, $147 = 0.0, $1470 = 0.0, $1471 = 0.0, $1472 = 0.0, $1473 = 0.0, $1474 = 0.0, $1475 = 0.0, $1476 = 0.0, $1477 = 0.0, $1478 = 0.0, $1479 = 0.0, $148 = 0.0, $1480 = 0.0, $1481 = 0.0, $1482 = 0.0, $1483 = 0.0; + var $1484 = 0.0, $1485 = 0.0, $1486 = 0, $1487 = 0, $1488 = 0.0, $1489 = 0.0, $149 = 0.0, $1490 = 0.0, $1491 = 0.0, $1492 = 0.0, $1493 = 0.0, $1494 = 0.0, $1495 = 0.0, $1496 = 0.0, $1497 = 0.0, $1498 = 0.0, $1499 = 0.0, $15 = 0, $150 = 0, $1500 = 0.0; + var $1501 = 0.0, $1502 = 0.0, $1503 = 0.0, $1504 = 0.0, $1505 = 0.0, $1506 = 0.0, $1507 = 0.0, $1508 = 0.0, $1509 = 0.0, $151 = 0.0, $1510 = 0.0, $1511 = 0.0, $1512 = 0, $1513 = 0, $1514 = 0.0, $1515 = 0.0, $1516 = 0.0, $1517 = 0, $1518 = 0, $1519 = 0; + var $152 = 0.0, $1520 = 0.0, $1521 = 0.0, $1522 = 0.0, $1523 = 0, $1524 = 0, $1525 = 0.0, $1526 = 0.0, $1527 = 0.0, $1528 = 0, $1529 = 0, $153 = 0, $1530 = 0, $1531 = 0.0, $1532 = 0.0, $1533 = 0.0, $1534 = 0.0, $1535 = 0.0, $1536 = 0.0, $1537 = 0; + var $1538 = 0, $1539 = 0.0, $154 = 0, $1540 = 0.0, $1541 = 0.0, $1542 = 0.0, $1543 = 0.0, $1544 = 0.0, $1545 = 0.0, $1546 = 0.0, $1547 = 0.0, $1548 = 0.0, $1549 = 0.0, $155 = 0, $1550 = 0.0, $1551 = 0.0, $1552 = 0.0, $1553 = 0.0, $1554 = 0.0, $1555 = 0; + var $1556 = 0, $1557 = 0.0, $1558 = 0.0, $1559 = 0.0, $156 = 0.0, $1560 = 0, $1561 = 0, $1562 = 0, $1563 = 0.0, $1564 = 0.0, $1565 = 0.0, $1566 = 0, $1567 = 0, $1568 = 0.0, $1569 = 0.0, $157 = 0, $1570 = 0.0, $1571 = 0, $1572 = 0, $1573 = 0; + var $1574 = 0.0, $1575 = 0.0, $1576 = 0.0, $1577 = 0.0, $1578 = 0.0, $1579 = 0.0, $158 = 0, $1580 = 0.0, $1581 = 0.0, $1582 = 0.0, $1583 = 0.0, $1584 = 0, $1585 = 0, $1586 = 0.0, $1587 = 0.0, $1588 = 0.0, $1589 = 0.0, $159 = 0, $1590 = 0.0, $1591 = 0.0; + var $1592 = 0.0, $1593 = 0.0, $1594 = 0.0, $1595 = 0.0, $1596 = 0.0, $1597 = 0.0, $1598 = 0.0, $1599 = 0.0, $16 = 0, $160 = 0.0, $1600 = 0.0, $1601 = 0.0, $1602 = 0.0, $1603 = 0.0, $1604 = 0.0, $1605 = 0.0, $1606 = 0.0, $1607 = 0.0, $1608 = 0.0, $1609 = 0.0; + var $161 = 0.0, $1610 = 0, $1611 = 0, $1612 = 0.0, $1613 = 0.0, $1614 = 0.0, $1615 = 0, $1616 = 0, $1617 = 0, $1618 = 0.0, $1619 = 0.0, $162 = 0.0, $1620 = 0.0, $1621 = 0, $1622 = 0, $1623 = 0.0, $1624 = 0.0, $1625 = 0.0, $1626 = 0, $1627 = 0; + var $1628 = 0, $1629 = 0, $163 = 0, $1630 = 0, $1631 = 0, $1632 = 0, $1633 = 0, $1634 = 0, $1635 = 0, $1636 = 0, $1637 = 0, $1638 = 0, $1639 = 0, $164 = 0.0, $1640 = 0, $1641 = 0, $1642 = 0, $1643 = 0, $1644 = 0, $1645 = 0; + var $1646 = 0, $1647 = 0, $1648 = 0, $1649 = 0, $165 = 0.0, $1650 = 0, $1651 = 0, $1652 = 0, $1653 = 0, $1654 = 0, $1655 = 0, $1656 = 0, $1657 = 0, $1658 = 0, $1659 = 0, $166 = 0.0, $1660 = 0, $1661 = 0, $1662 = 0, $1663 = 0; + var $1664 = 0, $1665 = 0, $1666 = 0.0, $1667 = 0, $1668 = 0, $1669 = 0, $167 = 0.0, $1670 = 0, $1671 = 0, $1672 = 0.0, $1673 = 0, $1674 = 0, $1675 = 0, $1676 = 0, $1677 = 0, $1678 = 0, $1679 = 0.0, $168 = 0, $1680 = 0, $1681 = 0; + var $1682 = 0, $1683 = 0, $1684 = 0.0, $1685 = 0, $1686 = 0, $1687 = 0, $1688 = 0.0, $1689 = 0.0, $169 = 0, $1690 = 0.0, $1691 = 0, $1692 = 0, $1693 = 0, $1694 = 0, $1695 = 0.0, $1696 = 0.0, $1697 = 0.0, $1698 = 0.0, $1699 = 0, $17 = 0.0; + var $170 = 0.0, $1700 = 0, $1701 = 0, $1702 = 0, $1703 = 0.0, $1704 = 0.0, $1705 = 0.0, $1706 = 0, $1707 = 0, $1708 = 0, $1709 = 0.0, $171 = 0.0, $1710 = 0.0, $1711 = 0.0, $1712 = 0.0, $1713 = 0.0, $1714 = 0.0, $1715 = 0.0, $1716 = 0, $1717 = 0; + var $1718 = 0, $1719 = 0.0, $172 = 0.0, $1720 = 0.0, $1721 = 0.0, $1722 = 0, $1723 = 0, $1724 = 0, $1725 = 0, $1726 = 0.0, $1727 = 0.0, $1728 = 0.0, $1729 = 0, $173 = 0.0, $1730 = 0, $1731 = 0, $1732 = 0.0, $1733 = 0.0, $1734 = 0.0, $1735 = 0; + var $1736 = 0, $1737 = 0, $1738 = 0, $1739 = 0, $174 = 0.0, $1740 = 0, $1741 = 0, $1742 = 0, $1743 = 0, $1744 = 0, $1745 = 0, $1746 = 0, $1747 = 0, $1748 = 0, $1749 = 0, $175 = 0, $1750 = 0, $1751 = 0, $1752 = 0, $1753 = 0; + var $1754 = 0, $1755 = 0, $1756 = 0, $1757 = 0, $1758 = 0, $1759 = 0, $176 = 0.0, $1760 = 0, $1761 = 0, $1762 = 0, $1763 = 0, $1764 = 0, $1765 = 0, $1766 = 0, $1767 = 0, $1768 = 0, $1769 = 0, $177 = 0.0, $1770 = 0, $1771 = 0; + var $1772 = 0, $1773 = 0, $1774 = 0, $1775 = 0, $1776 = 0, $1777 = 0, $1778 = 0, $1779 = 0, $178 = 0, $1780 = 0, $1781 = 0, $1782 = 0, $1783 = 0, $1784 = 0, $1785 = 0, $1786 = 0, $1787 = 0, $1788 = 0, $1789 = 0, $179 = 0.0; + var $1790 = 0, $1791 = 0, $1792 = 0, $1793 = 0.0, $1794 = 0, $1795 = 0, $1796 = 0, $1797 = 0, $1798 = 0, $1799 = 0.0, $18 = 0, $180 = 0, $1800 = 0, $1801 = 0, $1802 = 0, $1803 = 0, $1804 = 0, $1805 = 0, $1806 = 0.0, $1807 = 0; + var $1808 = 0, $1809 = 0, $181 = 0, $1810 = 0, $1811 = 0, $1812 = 0.0, $1813 = 0, $1814 = 0, $1815 = 0, $1816 = 0, $1817 = 0, $1818 = 0, $1819 = 0, $182 = 0.0, $1820 = 0, $1821 = 0, $1822 = 0.0, $1823 = 0, $1824 = 0, $1825 = 0; + var $1826 = 0, $1827 = 0.0, $1828 = 0, $1829 = 0, $183 = 0.0, $1830 = 0, $1831 = 0.0, $1832 = 0.0, $1833 = 0.0, $1834 = 0, $1835 = 0, $1836 = 0, $1837 = 0, $1838 = 0.0, $1839 = 0.0, $184 = 0, $1840 = 0.0, $1841 = 0.0, $1842 = 0, $1843 = 0; + var $1844 = 0, $1845 = 0, $1846 = 0.0, $1847 = 0.0, $1848 = 0.0, $1849 = 0, $185 = 0, $1850 = 0, $1851 = 0, $1852 = 0.0, $1853 = 0.0, $1854 = 0.0, $1855 = 0.0, $1856 = 0, $1857 = 0, $1858 = 0, $1859 = 0.0, $186 = 0.0, $1860 = 0.0, $1861 = 0.0; + var $1862 = 0, $1863 = 0, $1864 = 0, $1865 = 0, $1866 = 0.0, $1867 = 0.0, $1868 = 0.0, $1869 = 0.0, $187 = 0.0, $1870 = 0, $1871 = 0, $1872 = 0, $1873 = 0, $1874 = 0.0, $1875 = 0.0, $1876 = 0.0, $1877 = 0, $1878 = 0, $1879 = 0, $188 = 0.0; + var $1880 = 0.0, $1881 = 0.0, $1882 = 0.0, $1883 = 0.0, $1884 = 0.0, $1885 = 0.0, $1886 = 0.0, $1887 = 0.0, $1888 = 0.0, $1889 = 0.0, $189 = 0, $1890 = 0, $1891 = 0.0, $1892 = 0.0, $1893 = 0.0, $1894 = 0.0, $1895 = 0.0, $1896 = 0.0, $1897 = 0, $1898 = 0.0; + var $1899 = 0.0, $19 = 0, $190 = 0, $1900 = 0.0, $1901 = 0.0, $1902 = 0.0, $1903 = 0.0, $1904 = 0.0, $1905 = 0.0, $1906 = 0.0, $1907 = 0.0, $1908 = 0.0, $1909 = 0.0, $191 = 0.0, $1910 = 0.0, $1911 = 0.0, $1912 = 0.0, $1913 = 0.0, $1914 = 0.0, $1915 = 0; + var $1916 = 0, $1917 = 0, $1918 = 0.0, $1919 = 0.0, $192 = 0.0, $1920 = 0.0, $1921 = 0, $1922 = 0, $1923 = 0, $1924 = 0, $1925 = 0.0, $1926 = 0.0, $1927 = 0.0, $1928 = 0, $1929 = 0, $193 = 0.0, $1930 = 0, $1931 = 0.0, $1932 = 0.0, $1933 = 0.0; + var $1934 = 0, $1935 = 0, $1936 = 0, $1937 = 0, $1938 = 0.0, $1939 = 0.0, $194 = 0, $1940 = 0.0, $1941 = 0, $1942 = 0, $1943 = 0, $1944 = 0.0, $1945 = 0.0, $1946 = 0.0, $1947 = 0, $1948 = 0, $1949 = 0, $195 = 0, $1950 = 0, $1951 = 0; + var $1952 = 0, $1953 = 0, $1954 = 0, $1955 = 0, $1956 = 0, $1957 = 0, $1958 = 0, $1959 = 0, $196 = 0, $1960 = 0, $1961 = 0, $1962 = 0, $1963 = 0, $1964 = 0, $1965 = 0, $1966 = 0, $1967 = 0, $1968 = 0, $1969 = 0, $197 = 0.0; + var $1970 = 0, $1971 = 0, $1972 = 0, $1973 = 0, $1974 = 0, $1975 = 0, $1976 = 0, $1977 = 0, $1978 = 0, $1979 = 0, $198 = 0.0, $1980 = 0, $1981 = 0, $1982 = 0, $1983 = 0, $1984 = 0, $1985 = 0, $1986 = 0, $1987 = 0, $1988 = 0; + var $1989 = 0, $199 = 0.0, $1990 = 0, $1991 = 0, $1992 = 0, $1993 = 0, $1994 = 0, $1995 = 0, $1996 = 0, $1997 = 0, $1998 = 0, $1999 = 0, $2 = 0, $20 = 0, $200 = 0, $2000 = 0, $2001 = 0, $2002 = 0, $2003 = 0, $2004 = 0; + var $2005 = 0, $2006 = 0, $2007 = 0, $2008 = 0, $2009 = 0, $201 = 0, $2010 = 0, $2011 = 0, $2012 = 0, $2013 = 0, $2014 = 0, $2015 = 0.0, $2016 = 0, $2017 = 0, $2018 = 0.0, $2019 = 0, $202 = 0.0, $2020 = 0, $2021 = 0, $2022 = 0.0; + var $2023 = 0, $2024 = 0, $2025 = 0, $2026 = 0, $2027 = 0.0, $2028 = 0, $2029 = 0, $203 = 0.0, $2030 = 0, $2031 = 0.0, $2032 = 0, $2033 = 0, $2034 = 0, $2035 = 0, $2036 = 0.0, $2037 = 0, $2038 = 0, $2039 = 0, $204 = 0.0, $2040 = 0.0; + var $2041 = 0, $2042 = 0, $2043 = 0, $2044 = 0, $2045 = 0.0, $2046 = 0.0, $2047 = 0.0, $2048 = 0.0, $2049 = 0.0, $205 = 0, $2050 = 0.0, $2051 = 0.0, $2052 = 0.0, $2053 = 0.0, $2054 = 0.0, $2055 = 0.0, $2056 = 0.0, $2057 = 0.0, $2058 = 0.0, $2059 = 0.0; + var $206 = 0, $2060 = 0.0, $2061 = 0.0, $2062 = 0.0, $2063 = 0.0, $2064 = 0, $2065 = 0.0, $2066 = 0.0, $2067 = 0.0, $2068 = 0.0, $2069 = 0.0, $207 = 0, $2070 = 0, $2071 = 0.0, $2072 = 0.0, $2073 = 0.0, $2074 = 0.0, $2075 = 0.0, $2076 = 0.0, $2077 = 0.0; + var $2078 = 0.0, $2079 = 0, $208 = 0, $2080 = 0.0, $2081 = 0.0, $2082 = 0.0, $2083 = 0, $2084 = 0, $2085 = 0.0, $2086 = 0.0, $2087 = 0.0, $2088 = 0, $2089 = 0, $209 = 0, $2090 = 0, $2091 = 0.0, $2092 = 0.0, $2093 = 0.0, $2094 = 0, $2095 = 0; + var $2096 = 0, $2097 = 0, $2098 = 0.0, $2099 = 0.0, $21 = 0.0, $210 = 0, $2100 = 0.0, $2101 = 0, $2102 = 0, $2103 = 0, $2104 = 0.0, $2105 = 0.0, $2106 = 0.0, $2107 = 0, $2108 = 0, $2109 = 0, $211 = 0.0, $2110 = 0, $2111 = 0.0, $2112 = 0.0; + var $2113 = 0.0, $2114 = 0, $2115 = 0, $2116 = 0, $2117 = 0.0, $2118 = 0.0, $2119 = 0.0, $212 = 0, $2120 = 0, $2121 = 0, $2122 = 0, $2123 = 0, $2124 = 0, $2125 = 0, $2126 = 0, $2127 = 0, $2128 = 0, $2129 = 0, $213 = 0, $2130 = 0; + var $2131 = 0, $2132 = 0, $2133 = 0, $2134 = 0, $2135 = 0, $2136 = 0.0, $2137 = 0, $2138 = 0, $2139 = 0, $214 = 0, $2140 = 0, $2141 = 0, $2142 = 0.0, $2143 = 0, $2144 = 0, $2145 = 0, $2146 = 0, $2147 = 0, $2148 = 0, $2149 = 0.0; + var $215 = 0.0, $2150 = 0, $2151 = 0, $2152 = 0, $2153 = 0, $2154 = 0, $2155 = 0.0, $2156 = 0, $2157 = 0, $2158 = 0, $2159 = 0, $216 = 0, $2160 = 0, $2161 = 0, $2162 = 0.0, $2163 = 0, $2164 = 0, $2165 = 0, $2166 = 0, $2167 = 0; + var $2168 = 0.0, $2169 = 0, $217 = 0, $2170 = 0, $2171 = 0, $2172 = 0, $2173 = 0, $2174 = 0, $2175 = 0, $2176 = 0, $2177 = 0, $2178 = 0, $2179 = 0, $218 = 0, $2180 = 0, $2181 = 0.0, $2182 = 0, $2183 = 0, $2184 = 0, $2185 = 0; + var $2186 = 0.0, $2187 = 0, $2188 = 0, $2189 = 0, $219 = 0, $2190 = 0.0, $2191 = 0.0, $2192 = 0.0, $2193 = 0, $2194 = 0, $2195 = 0, $2196 = 0, $2197 = 0.0, $2198 = 0.0, $2199 = 0.0, $22 = 0, $220 = 0, $2200 = 0.0, $2201 = 0, $2202 = 0; + var $2203 = 0, $2204 = 0, $2205 = 0.0, $2206 = 0.0, $2207 = 0.0, $2208 = 0, $2209 = 0, $221 = 0.0, $2210 = 0, $2211 = 0.0, $2212 = 0.0, $2213 = 0.0, $2214 = 0.0, $2215 = 0, $2216 = 0, $2217 = 0, $2218 = 0.0, $2219 = 0.0, $222 = 0, $2220 = 0.0; + var $2221 = 0, $2222 = 0, $2223 = 0, $2224 = 0, $2225 = 0.0, $2226 = 0.0, $2227 = 0.0, $2228 = 0.0, $2229 = 0, $223 = 0, $2230 = 0, $2231 = 0, $2232 = 0, $2233 = 0.0, $2234 = 0.0, $2235 = 0.0, $2236 = 0, $2237 = 0, $2238 = 0, $2239 = 0.0; + var $224 = 0, $2240 = 0.0, $2241 = 0.0, $2242 = 0.0, $2243 = 0, $2244 = 0, $2245 = 0, $2246 = 0.0, $2247 = 0.0, $2248 = 0.0, $2249 = 0, $225 = 0, $2250 = 0, $2251 = 0, $2252 = 0, $2253 = 0.0, $2254 = 0.0, $2255 = 0.0, $2256 = 0.0, $2257 = 0; + var $2258 = 0, $2259 = 0, $226 = 0, $2260 = 0, $2261 = 0.0, $2262 = 0.0, $2263 = 0.0, $2264 = 0, $2265 = 0, $2266 = 0, $2267 = 0.0, $2268 = 0.0, $2269 = 0.0, $227 = 0, $2270 = 0.0, $2271 = 0.0, $2272 = 0.0, $2273 = 0.0, $2274 = 0.0, $2275 = 0.0; + var $2276 = 0.0, $2277 = 0.0, $2278 = 0.0, $2279 = 0.0, $228 = 0.0, $2280 = 0.0, $2281 = 0.0, $2282 = 0.0, $2283 = 0.0, $2284 = 0.0, $2285 = 0.0, $2286 = 0.0, $2287 = 0.0, $2288 = 0.0, $2289 = 0, $229 = 0, $2290 = 0.0, $2291 = 0.0, $2292 = 0.0, $2293 = 0.0; + var $2294 = 0.0, $2295 = 0, $2296 = 0.0, $2297 = 0.0, $2298 = 0.0, $2299 = 0.0, $23 = 0, $230 = 0, $2300 = 0.0, $2301 = 0.0, $2302 = 0.0, $2303 = 0.0, $2304 = 0, $2305 = 0, $2306 = 0, $2307 = 0.0, $2308 = 0.0, $2309 = 0.0, $231 = 0, $2310 = 0; + var $2311 = 0, $2312 = 0, $2313 = 0, $2314 = 0.0, $2315 = 0.0, $2316 = 0.0, $2317 = 0, $2318 = 0, $2319 = 0, $232 = 0, $2320 = 0.0, $2321 = 0.0, $2322 = 0.0, $2323 = 0, $2324 = 0, $2325 = 0, $2326 = 0, $2327 = 0.0, $2328 = 0.0, $2329 = 0.0; + var $233 = 0, $2330 = 0, $2331 = 0, $2332 = 0, $2333 = 0.0, $2334 = 0.0, $2335 = 0.0, $2336 = 0, $2337 = 0, $2338 = 0, $2339 = 0, $234 = 0, $2340 = 0.0, $2341 = 0.0, $2342 = 0.0, $2343 = 0, $2344 = 0, $2345 = 0, $2346 = 0.0, $2347 = 0.0; + var $2348 = 0.0, $2349 = 0, $235 = 0, $2350 = 0, $2351 = 0, $2352 = 0, $2353 = 0, $2354 = 0, $2355 = 0, $2356 = 0, $2357 = 0, $2358 = 0, $2359 = 0, $236 = 0.0, $2360 = 0, $2361 = 0, $2362 = 0, $2363 = 0, $2364 = 0, $2365 = 0; + var $2366 = 0, $2367 = 0, $2368 = 0, $2369 = 0, $237 = 0, $2370 = 0, $2371 = 0, $2372 = 0, $2373 = 0, $2374 = 0, $2375 = 0, $2376 = 0, $2377 = 0, $2378 = 0, $2379 = 0, $238 = 0, $2380 = 0, $2381 = 0, $2382 = 0, $2383 = 0; + var $2384 = 0, $2385 = 0, $2386 = 0, $2387 = 0, $2388 = 0, $2389 = 0, $239 = 0, $2390 = 0, $2391 = 0, $2392 = 0, $2393 = 0, $2394 = 0, $2395 = 0, $2396 = 0, $2397 = 0, $2398 = 0, $2399 = 0, $24 = 0, $240 = 0, $2400 = 0; + var $2401 = 0, $2402 = 0, $2403 = 0, $2404 = 0, $2405 = 0, $2406 = 0, $2407 = 0, $2408 = 0, $2409 = 0, $241 = 0, $2410 = 0, $2411 = 0, $2412 = 0, $2413 = 0, $2414 = 0, $2415 = 0, $2416 = 0, $2417 = 0, $2418 = 0, $2419 = 0; + var $242 = 0, $2420 = 0, $2421 = 0, $2422 = 0, $2423 = 0, $2424 = 0, $2425 = 0, $2426 = 0, $2427 = 0, $2428 = 0, $2429 = 0, $243 = 0, $2430 = 0, $2431 = 0, $2432 = 0, $2433 = 0, $2434 = 0.0, $2435 = 0, $2436 = 0, $2437 = 0.0; + var $2438 = 0, $2439 = 0, $244 = 0.0, $2440 = 0, $2441 = 0.0, $2442 = 0, $2443 = 0, $2444 = 0, $2445 = 0, $2446 = 0.0, $2447 = 0, $2448 = 0, $2449 = 0, $245 = 0, $2450 = 0.0, $2451 = 0, $2452 = 0, $2453 = 0, $2454 = 0, $2455 = 0.0; + var $2456 = 0, $2457 = 0, $2458 = 0, $2459 = 0.0, $246 = 0, $2460 = 0, $2461 = 0, $2462 = 0, $2463 = 0, $2464 = 0.0, $2465 = 0, $2466 = 0, $2467 = 0, $2468 = 0.0, $2469 = 0, $247 = 0, $2470 = 0, $2471 = 0, $2472 = 0, $2473 = 0.0; + var $2474 = 0.0, $2475 = 0.0, $2476 = 0.0, $2477 = 0.0, $2478 = 0.0, $2479 = 0.0, $248 = 0, $2480 = 0.0, $2481 = 0.0, $2482 = 0.0, $2483 = 0.0, $2484 = 0.0, $2485 = 0.0, $2486 = 0.0, $2487 = 0.0, $2488 = 0.0, $2489 = 0.0, $249 = 0, $2490 = 0.0, $2491 = 0.0; + var $2492 = 0.0, $2493 = 0.0, $2494 = 0.0, $2495 = 0.0, $2496 = 0.0, $2497 = 0.0, $2498 = 0.0, $2499 = 0.0, $25 = 0, $250 = 0, $2500 = 0.0, $2501 = 0.0, $2502 = 0.0, $2503 = 0, $2504 = 0.0, $2505 = 0.0, $2506 = 0.0, $2507 = 0.0, $2508 = 0.0, $2509 = 0; + var $251 = 0, $2510 = 0, $2511 = 0.0, $2512 = 0.0, $2513 = 0.0, $2514 = 0.0, $2515 = 0.0, $2516 = 0.0, $2517 = 0.0, $2518 = 0.0, $2519 = 0.0, $252 = 0.0, $2520 = 0.0, $2521 = 0.0, $2522 = 0.0, $2523 = 0.0, $2524 = 0.0, $2525 = 0, $2526 = 0.0, $2527 = 0.0; + var $2528 = 0.0, $2529 = 0.0, $253 = 0, $2530 = 0.0, $2531 = 0.0, $2532 = 0.0, $2533 = 0.0, $2534 = 0.0, $2535 = 0, $2536 = 0.0, $2537 = 0.0, $2538 = 0.0, $2539 = 0.0, $254 = 0, $2540 = 0.0, $2541 = 0.0, $2542 = 0.0, $2543 = 0.0, $2544 = 0.0, $2545 = 0.0; + var $2546 = 0.0, $2547 = 0.0, $2548 = 0.0, $2549 = 0.0, $255 = 0, $2550 = 0.0, $2551 = 0.0, $2552 = 0.0, $2553 = 0.0, $2554 = 0, $2555 = 0, $2556 = 0, $2557 = 0.0, $2558 = 0.0, $2559 = 0.0, $256 = 0, $2560 = 0, $2561 = 0, $2562 = 0, $2563 = 0; + var $2564 = 0.0, $2565 = 0.0, $2566 = 0.0, $2567 = 0, $2568 = 0, $2569 = 0, $257 = 0, $2570 = 0.0, $2571 = 0.0, $2572 = 0.0, $2573 = 0, $2574 = 0, $2575 = 0, $2576 = 0, $2577 = 0.0, $2578 = 0.0, $2579 = 0.0, $258 = 0, $2580 = 0.0, $2581 = 0.0; + var $2582 = 0.0, $2583 = 0.0, $2584 = 0.0, $2585 = 0.0, $2586 = 0.0, $2587 = 0.0, $2588 = 0.0, $2589 = 0.0, $259 = 0, $2590 = 0.0, $2591 = 0, $2592 = 0.0, $2593 = 0.0, $2594 = 0.0, $2595 = 0.0, $2596 = 0.0, $2597 = 0.0, $2598 = 0.0, $2599 = 0.0, $26 = 0; + var $260 = 0.0, $2600 = 0.0, $2601 = 0, $2602 = 0.0, $2603 = 0.0, $2604 = 0.0, $2605 = 0.0, $2606 = 0.0, $2607 = 0.0, $2608 = 0.0, $2609 = 0.0, $261 = 0, $2610 = 0.0, $2611 = 0.0, $2612 = 0.0, $2613 = 0.0, $2614 = 0.0, $2615 = 0.0, $2616 = 0.0, $2617 = 0.0; + var $2618 = 0.0, $2619 = 0.0, $262 = 0, $2620 = 0, $2621 = 0, $2622 = 0, $2623 = 0.0, $2624 = 0.0, $2625 = 0.0, $2626 = 0, $2627 = 0, $2628 = 0, $2629 = 0, $263 = 0, $2630 = 0.0, $2631 = 0.0, $2632 = 0.0, $2633 = 0, $2634 = 0, $2635 = 0; + var $2636 = 0.0, $2637 = 0.0, $2638 = 0.0, $2639 = 0, $264 = 0, $2640 = 0, $2641 = 0, $2642 = 0, $2643 = 0, $2644 = 0, $2645 = 0, $2646 = 0, $2647 = 0, $2648 = 0, $2649 = 0, $265 = 0.0, $2650 = 0, $2651 = 0, $2652 = 0, $2653 = 0; + var $2654 = 0, $2655 = 0.0, $2656 = 0, $2657 = 0, $2658 = 0, $2659 = 0, $266 = 0, $2660 = 0, $2661 = 0.0, $2662 = 0, $2663 = 0, $2664 = 0, $2665 = 0, $2666 = 0, $2667 = 0, $2668 = 0.0, $2669 = 0, $267 = 0, $2670 = 0, $2671 = 0; + var $2672 = 0, $2673 = 0, $2674 = 0.0, $2675 = 0, $2676 = 0, $2677 = 0, $2678 = 0, $2679 = 0, $268 = 0.0, $2680 = 0, $2681 = 0.0, $2682 = 0, $2683 = 0, $2684 = 0, $2685 = 0, $2686 = 0, $2687 = 0.0, $2688 = 0, $2689 = 0, $269 = 0.0; + var $2690 = 0, $2691 = 0, $2692 = 0, $2693 = 0, $2694 = 0.0, $2695 = 0, $2696 = 0, $2697 = 0, $2698 = 0, $2699 = 0, $27 = 0.0, $270 = 0, $2700 = 0.0, $2701 = 0, $2702 = 0, $2703 = 0, $2704 = 0, $2705 = 0, $2706 = 0, $2707 = 0; + var $2708 = 0, $2709 = 0, $271 = 0, $2710 = 0, $2711 = 0, $2712 = 0, $2713 = 0, $2714 = 0, $2715 = 0, $2716 = 0.0, $2717 = 0, $2718 = 0, $2719 = 0, $272 = 0.0, $2720 = 0, $2721 = 0.0, $2722 = 0, $2723 = 0, $2724 = 0, $2725 = 0.0; + var $2726 = 0.0, $2727 = 0.0, $2728 = 0, $2729 = 0, $273 = 0, $2730 = 0, $2731 = 0, $2732 = 0.0, $2733 = 0.0, $2734 = 0.0, $2735 = 0.0, $2736 = 0, $2737 = 0, $2738 = 0, $2739 = 0, $274 = 0, $2740 = 0.0, $2741 = 0.0, $2742 = 0.0, $2743 = 0; + var $2744 = 0, $2745 = 0, $2746 = 0.0, $2747 = 0.0, $2748 = 0.0, $2749 = 0.0, $275 = 0, $2750 = 0, $2751 = 0, $2752 = 0, $2753 = 0.0, $2754 = 0.0, $2755 = 0.0, $2756 = 0, $2757 = 0, $2758 = 0, $2759 = 0, $276 = 0.0, $2760 = 0.0, $2761 = 0.0; + var $2762 = 0.0, $2763 = 0.0, $2764 = 0, $2765 = 0, $2766 = 0, $2767 = 0, $2768 = 0.0, $2769 = 0.0, $277 = 0.0, $2770 = 0.0, $2771 = 0, $2772 = 0, $2773 = 0, $2774 = 0.0, $2775 = 0.0, $2776 = 0.0, $2777 = 0.0, $2778 = 0, $2779 = 0, $278 = 0; + var $2780 = 0, $2781 = 0.0, $2782 = 0.0, $2783 = 0.0, $2784 = 0, $2785 = 0, $2786 = 0, $2787 = 0, $2788 = 0.0, $2789 = 0.0, $279 = 0.0, $2790 = 0.0, $2791 = 0.0, $2792 = 0, $2793 = 0, $2794 = 0, $2795 = 0, $2796 = 0.0, $2797 = 0.0, $2798 = 0.0; + var $2799 = 0, $28 = 0, $280 = 0, $2800 = 0, $2801 = 0, $2802 = 0.0, $2803 = 0.0, $2804 = 0.0, $2805 = 0.0, $2806 = 0, $2807 = 0, $2808 = 0, $2809 = 0.0, $281 = 0, $2810 = 0.0, $2811 = 0.0, $2812 = 0, $2813 = 0, $2814 = 0, $2815 = 0; + var $2816 = 0.0, $2817 = 0.0, $2818 = 0.0, $2819 = 0.0, $282 = 0.0, $2820 = 0, $2821 = 0, $2822 = 0, $2823 = 0, $2824 = 0.0, $2825 = 0.0, $2826 = 0.0, $2827 = 0, $2828 = 0, $2829 = 0, $283 = 0.0, $2830 = 0.0, $2831 = 0.0, $2832 = 0.0, $2833 = 0.0; + var $2834 = 0.0, $2835 = 0.0, $2836 = 0.0, $2837 = 0.0, $2838 = 0.0, $2839 = 0.0, $284 = 0, $2840 = 0.0, $2841 = 0.0, $2842 = 0.0, $2843 = 0.0, $2844 = 0.0, $2845 = 0.0, $2846 = 0.0, $2847 = 0.0, $2848 = 0.0, $2849 = 0.0, $285 = 0, $2850 = 0.0, $2851 = 0.0; + var $2852 = 0.0, $2853 = 0.0, $2854 = 0.0, $2855 = 0.0, $2856 = 0.0, $2857 = 0.0, $2858 = 0.0, $2859 = 0.0, $286 = 0.0, $2860 = 0.0, $2861 = 0.0, $2862 = 0.0, $2863 = 0, $2864 = 0, $2865 = 0, $2866 = 0.0, $2867 = 0.0, $2868 = 0.0, $2869 = 0.0, $287 = 0; + var $2870 = 0.0, $2871 = 0, $2872 = 0, $2873 = 0, $2874 = 0, $2875 = 0.0, $2876 = 0.0, $2877 = 0.0, $2878 = 0.0, $2879 = 0.0, $288 = 0, $2880 = 0.0, $2881 = 0.0, $2882 = 0.0, $2883 = 0.0, $2884 = 0.0, $2885 = 0.0, $2886 = 0.0, $2887 = 0.0, $2888 = 0.0; + var $2889 = 0, $289 = 0, $2890 = 0, $2891 = 0.0, $2892 = 0.0, $2893 = 0.0, $2894 = 0.0, $2895 = 0.0, $2896 = 0.0, $2897 = 0.0, $2898 = 0.0, $2899 = 0.0, $29 = 0, $290 = 0.0, $2900 = 0.0, $2901 = 0.0, $2902 = 0.0, $2903 = 0.0, $2904 = 0.0, $2905 = 0.0; + var $2906 = 0.0, $2907 = 0.0, $2908 = 0.0, $2909 = 0.0, $291 = 0.0, $2910 = 0.0, $2911 = 0.0, $2912 = 0.0, $2913 = 0.0, $2914 = 0.0, $2915 = 0.0, $2916 = 0.0, $2917 = 0.0, $2918 = 0.0, $2919 = 0.0, $292 = 0, $2920 = 0.0, $2921 = 0.0, $2922 = 0.0, $2923 = 0.0; + var $2924 = 0.0, $2925 = 0.0, $2926 = 0.0, $2927 = 0.0, $2928 = 0.0, $2929 = 0, $293 = 0, $2930 = 0, $2931 = 0, $2932 = 0.0, $2933 = 0.0, $2934 = 0.0, $2935 = 0, $2936 = 0, $2937 = 0, $2938 = 0, $2939 = 0.0, $294 = 0.0, $2940 = 0.0, $2941 = 0.0; + var $2942 = 0, $2943 = 0, $2944 = 0, $2945 = 0.0, $2946 = 0.0, $2947 = 0.0, $2948 = 0, $2949 = 0, $295 = 0, $2950 = 0, $2951 = 0, $2952 = 0.0, $2953 = 0.0, $2954 = 0.0, $2955 = 0.0, $2956 = 0.0, $2957 = 0.0, $2958 = 0.0, $2959 = 0.0, $296 = 0; + var $2960 = 0.0, $2961 = 0.0, $2962 = 0.0, $2963 = 0.0, $2964 = 0.0, $2965 = 0.0, $2966 = 0, $2967 = 0, $2968 = 0.0, $2969 = 0.0, $297 = 0.0, $2970 = 0.0, $2971 = 0.0, $2972 = 0.0, $2973 = 0.0, $2974 = 0.0, $2975 = 0.0, $2976 = 0.0, $2977 = 0.0, $2978 = 0.0; + var $2979 = 0.0, $298 = 0.0, $2980 = 0.0, $2981 = 0.0, $2982 = 0.0, $2983 = 0.0, $2984 = 0.0, $2985 = 0.0, $2986 = 0.0, $2987 = 0.0, $2988 = 0.0, $2989 = 0.0, $299 = 0, $2990 = 0.0, $2991 = 0.0, $2992 = 0.0, $2993 = 0.0, $2994 = 0.0, $2995 = 0.0, $2996 = 0.0; + var $2997 = 0.0, $2998 = 0.0, $2999 = 0.0, $3 = 0, $30 = 0, $300 = 0, $3000 = 0.0, $3001 = 0.0, $3002 = 0.0, $3003 = 0.0, $3004 = 0.0, $3005 = 0.0, $3006 = 0, $3007 = 0, $3008 = 0, $3009 = 0.0, $301 = 0, $3010 = 0.0, $3011 = 0.0, $3012 = 0; + var $3013 = 0, $3014 = 0, $3015 = 0, $3016 = 0.0, $3017 = 0.0, $3018 = 0.0, $3019 = 0, $302 = 0.0, $3020 = 0, $3021 = 0, $3022 = 0.0, $3023 = 0.0, $3024 = 0.0, $3025 = 0, $3026 = 0, $3027 = 0, $3028 = 0, $3029 = 0, $303 = 0, $3030 = 0; + var $3031 = 0, $3032 = 0, $3033 = 0, $3034 = 0, $3035 = 0, $3036 = 0, $3037 = 0, $3038 = 0, $3039 = 0, $304 = 0, $3040 = 0, $3041 = 0, $3042 = 0, $3043 = 0, $3044 = 0, $3045 = 0, $3046 = 0, $3047 = 0, $3048 = 0, $3049 = 0; + var $305 = 0, $3050 = 0, $3051 = 0, $3052 = 0, $3053 = 0, $3054 = 0, $3055 = 0, $3056 = 0, $3057 = 0, $3058 = 0, $3059 = 0, $306 = 0.0, $3060 = 0, $3061 = 0, $3062 = 0, $3063 = 0, $3064 = 0, $3065 = 0, $3066 = 0, $3067 = 0; + var $3068 = 0, $3069 = 0, $307 = 0.0, $3070 = 0, $3071 = 0, $3072 = 0, $3073 = 0, $3074 = 0, $3075 = 0, $3076 = 0, $3077 = 0, $3078 = 0, $3079 = 0, $308 = 0, $3080 = 0, $3081 = 0, $3082 = 0, $3083 = 0, $3084 = 0, $3085 = 0; + var $3086 = 0, $3087 = 0, $3088 = 0, $3089 = 0, $309 = 0.0, $3090 = 0, $3091 = 0, $3092 = 0, $3093 = 0, $3094 = 0, $3095 = 0, $3096 = 0, $3097 = 0, $3098 = 0, $3099 = 0, $31 = 0.0, $310 = 0, $3100 = 0, $3101 = 0, $3102 = 0; + var $3103 = 0, $3104 = 0, $3105 = 0, $3106 = 0, $3107 = 0, $3108 = 0, $3109 = 0, $311 = 0, $3110 = 0, $3111 = 0, $3112 = 0, $3113 = 0, $3114 = 0, $3115 = 0, $3116 = 0, $3117 = 0, $3118 = 0, $3119 = 0, $312 = 0.0, $3120 = 0; + var $3121 = 0, $3122 = 0, $3123 = 0, $3124 = 0, $3125 = 0, $3126 = 0, $3127 = 0, $3128 = 0, $3129 = 0, $313 = 0, $3130 = 0, $3131 = 0, $3132 = 0, $3133 = 0, $3134 = 0, $3135 = 0, $3136 = 0, $3137 = 0, $3138 = 0, $3139 = 0; + var $314 = 0, $3140 = 0, $3141 = 0, $3142 = 0, $3143 = 0, $3144 = 0.0, $3145 = 0, $3146 = 0, $3147 = 0.0, $3148 = 0, $3149 = 0, $315 = 0.0, $3150 = 0, $3151 = 0.0, $3152 = 0, $3153 = 0, $3154 = 0, $3155 = 0, $3156 = 0.0, $3157 = 0; + var $3158 = 0, $3159 = 0, $316 = 0.0, $3160 = 0.0, $3161 = 0, $3162 = 0, $3163 = 0, $3164 = 0, $3165 = 0.0, $3166 = 0, $3167 = 0, $3168 = 0, $3169 = 0.0, $317 = 0.0, $3170 = 0, $3171 = 0, $3172 = 0, $3173 = 0, $3174 = 0.0, $3175 = 0; + var $3176 = 0, $3177 = 0, $3178 = 0.0, $3179 = 0, $318 = 0, $3180 = 0, $3181 = 0, $3182 = 0, $3183 = 0.0, $3184 = 0, $3185 = 0, $3186 = 0, $3187 = 0.0, $3188 = 0, $3189 = 0, $319 = 0.0, $3190 = 0, $3191 = 0, $3192 = 0.0, $3193 = 0; + var $3194 = 0, $3195 = 0, $3196 = 0.0, $3197 = 0, $3198 = 0, $3199 = 0, $32 = 0, $320 = 0, $3200 = 0, $3201 = 0.0, $3202 = 0.0, $3203 = 0.0, $3204 = 0.0, $3205 = 0.0, $3206 = 0.0, $3207 = 0.0, $3208 = 0.0, $3209 = 0.0, $321 = 0, $3210 = 0.0; + var $3211 = 0.0, $3212 = 0.0, $3213 = 0.0, $3214 = 0.0, $3215 = 0.0, $3216 = 0.0, $3217 = 0.0, $3218 = 0.0, $3219 = 0.0, $322 = 0, $3220 = 0.0, $3221 = 0.0, $3222 = 0.0, $3223 = 0.0, $3224 = 0.0, $3225 = 0.0, $3226 = 0.0, $3227 = 0.0, $3228 = 0.0, $3229 = 0.0; + var $323 = 0.0, $3230 = 0.0, $3231 = 0.0, $3232 = 0.0, $3233 = 0.0, $3234 = 0.0, $3235 = 0.0, $3236 = 0.0, $3237 = 0.0, $3238 = 0.0, $3239 = 0.0, $324 = 0, $3240 = 0.0, $3241 = 0.0, $3242 = 0.0, $3243 = 0.0, $3244 = 0.0, $3245 = 0, $3246 = 0.0, $3247 = 0.0; + var $3248 = 0.0, $3249 = 0.0, $325 = 0, $3250 = 0.0, $3251 = 0.0, $3252 = 0.0, $3253 = 0, $3254 = 0, $3255 = 0.0, $3256 = 0.0, $3257 = 0.0, $3258 = 0.0, $3259 = 0.0, $326 = 0, $3260 = 0.0, $3261 = 0.0, $3262 = 0.0, $3263 = 0.0, $3264 = 0.0, $3265 = 0.0; + var $3266 = 0.0, $3267 = 0.0, $3268 = 0.0, $3269 = 0.0, $327 = 0.0, $3270 = 0.0, $3271 = 0.0, $3272 = 0.0, $3273 = 0.0, $3274 = 0.0, $3275 = 0.0, $3276 = 0.0, $3277 = 0.0, $3278 = 0.0, $3279 = 0.0, $328 = 0.0, $3280 = 0.0, $3281 = 0, $3282 = 0, $3283 = 0.0; + var $3284 = 0.0, $3285 = 0.0, $3286 = 0.0, $3287 = 0.0, $3288 = 0.0, $3289 = 0.0, $329 = 0.0, $3290 = 0.0, $3291 = 0.0, $3292 = 0.0, $3293 = 0.0, $3294 = 0.0, $3295 = 0.0, $3296 = 0.0, $3297 = 0.0, $3298 = 0.0, $3299 = 0.0, $33 = 0, $330 = 0.0, $3300 = 0.0; + var $3301 = 0.0, $3302 = 0.0, $3303 = 0.0, $3304 = 0.0, $3305 = 0.0, $3306 = 0.0, $3307 = 0.0, $3308 = 0.0, $3309 = 0.0, $331 = 0.0, $3310 = 0.0, $3311 = 0.0, $3312 = 0.0, $3313 = 0.0, $3314 = 0.0, $3315 = 0.0, $3316 = 0.0, $3317 = 0.0, $3318 = 0.0, $3319 = 0.0; + var $332 = 0.0, $3320 = 0.0, $3321 = 0.0, $3322 = 0.0, $3323 = 0.0, $3324 = 0.0, $3325 = 0.0, $3326 = 0.0, $3327 = 0.0, $3328 = 0.0, $3329 = 0.0, $333 = 0, $3330 = 0.0, $3331 = 0, $3332 = 0, $3333 = 0, $3334 = 0.0, $3335 = 0.0, $3336 = 0.0, $3337 = 0; + var $3338 = 0, $3339 = 0, $334 = 0.0, $3340 = 0, $3341 = 0.0, $3342 = 0.0, $3343 = 0.0, $3344 = 0, $3345 = 0, $3346 = 0, $3347 = 0.0, $3348 = 0.0, $3349 = 0.0, $335 = 0.0, $3350 = 0, $3351 = 0, $3352 = 0, $3353 = 0, $3354 = 0.0, $3355 = 0.0; + var $3356 = 0.0, $3357 = 0.0, $3358 = 0.0, $3359 = 0.0, $336 = 0.0, $3360 = 0.0, $3361 = 0.0, $3362 = 0.0, $3363 = 0.0, $3364 = 0.0, $3365 = 0.0, $3366 = 0.0, $3367 = 0.0, $3368 = 0.0, $3369 = 0.0, $337 = 0, $3370 = 0.0, $3371 = 0.0, $3372 = 0.0, $3373 = 0.0; + var $3374 = 0.0, $3375 = 0.0, $3376 = 0.0, $3377 = 0.0, $3378 = 0.0, $3379 = 0.0, $338 = 0, $3380 = 0, $3381 = 0, $3382 = 0.0, $3383 = 0.0, $3384 = 0.0, $3385 = 0.0, $3386 = 0.0, $3387 = 0.0, $3388 = 0.0, $3389 = 0.0, $339 = 0.0, $3390 = 0.0, $3391 = 0.0; + var $3392 = 0.0, $3393 = 0.0, $3394 = 0.0, $3395 = 0.0, $3396 = 0.0, $3397 = 0.0, $3398 = 0.0, $3399 = 0.0, $34 = 0, $340 = 0.0, $3400 = 0.0, $3401 = 0.0, $3402 = 0.0, $3403 = 0.0, $3404 = 0.0, $3405 = 0.0, $3406 = 0.0, $3407 = 0.0, $3408 = 0.0, $3409 = 0.0; + var $341 = 0.0, $3410 = 0.0, $3411 = 0.0, $3412 = 0.0, $3413 = 0.0, $3414 = 0.0, $3415 = 0.0, $3416 = 0.0, $3417 = 0.0, $3418 = 0.0, $3419 = 0.0, $342 = 0, $3420 = 0.0, $3421 = 0.0, $3422 = 0.0, $3423 = 0.0, $3424 = 0.0, $3425 = 0.0, $3426 = 0.0, $3427 = 0.0; + var $3428 = 0.0, $3429 = 0.0, $343 = 0, $3430 = 0, $3431 = 0, $3432 = 0, $3433 = 0.0, $3434 = 0.0, $3435 = 0.0, $3436 = 0, $3437 = 0, $3438 = 0, $3439 = 0, $344 = 0.0, $3440 = 0.0, $3441 = 0.0, $3442 = 0.0, $3443 = 0, $3444 = 0, $3445 = 0; + var $3446 = 0.0, $3447 = 0.0, $3448 = 0.0, $3449 = 0, $345 = 0.0, $3450 = 0, $3451 = 0, $3452 = 0, $3453 = 0.0, $3454 = 0.0, $3455 = 0.0, $3456 = 0.0, $3457 = 0.0, $3458 = 0.0, $3459 = 0.0, $346 = 0.0, $3460 = 0.0, $3461 = 0.0, $3462 = 0.0, $3463 = 0.0; + var $3464 = 0.0, $3465 = 0.0, $3466 = 0.0, $3467 = 0.0, $3468 = 0.0, $3469 = 0.0, $347 = 0, $3470 = 0.0, $3471 = 0.0, $3472 = 0.0, $3473 = 0.0, $3474 = 0.0, $3475 = 0.0, $3476 = 0.0, $3477 = 0.0, $3478 = 0.0, $3479 = 0, $348 = 0, $3480 = 0, $3481 = 0.0; + var $3482 = 0.0, $3483 = 0.0, $3484 = 0.0, $3485 = 0.0, $3486 = 0.0, $3487 = 0.0, $3488 = 0.0, $3489 = 0.0, $349 = 0, $3490 = 0.0, $3491 = 0.0, $3492 = 0.0, $3493 = 0.0, $3494 = 0.0, $3495 = 0.0, $3496 = 0.0, $3497 = 0.0, $3498 = 0.0, $3499 = 0.0, $35 = 0; + var $350 = 0.0, $3500 = 0.0, $3501 = 0.0, $3502 = 0.0, $3503 = 0.0, $3504 = 0.0, $3505 = 0.0, $3506 = 0.0, $3507 = 0.0, $3508 = 0.0, $3509 = 0.0, $351 = 0.0, $3510 = 0.0, $3511 = 0.0, $3512 = 0.0, $3513 = 0.0, $3514 = 0.0, $3515 = 0.0, $3516 = 0.0, $3517 = 0.0; + var $3518 = 0.0, $3519 = 0.0, $352 = 0.0, $3520 = 0.0, $3521 = 0.0, $3522 = 0.0, $3523 = 0.0, $3524 = 0.0, $3525 = 0.0, $3526 = 0.0, $3527 = 0.0, $3528 = 0.0, $3529 = 0, $353 = 0, $3530 = 0, $3531 = 0, $3532 = 0.0, $3533 = 0.0, $3534 = 0.0, $3535 = 0; + var $3536 = 0, $3537 = 0, $3538 = 0, $3539 = 0.0, $354 = 0, $3540 = 0.0, $3541 = 0.0, $3542 = 0, $3543 = 0, $3544 = 0, $3545 = 0.0, $3546 = 0.0, $3547 = 0.0, $3548 = 0, $3549 = 0, $355 = 0.0, $3550 = 0, $3551 = 0, $3552 = 0, $3553 = 0; + var $3554 = 0, $3555 = 0, $3556 = 0, $3557 = 0, $3558 = 0, $3559 = 0, $356 = 0.0, $3560 = 0, $3561 = 0, $3562 = 0, $3563 = 0, $3564 = 0.0, $3565 = 0, $3566 = 0, $3567 = 0, $3568 = 0, $3569 = 0, $357 = 0.0, $3570 = 0.0, $3571 = 0; + var $3572 = 0, $3573 = 0, $3574 = 0, $3575 = 0, $3576 = 0, $3577 = 0.0, $3578 = 0, $3579 = 0, $358 = 0, $3580 = 0, $3581 = 0, $3582 = 0, $3583 = 0.0, $3584 = 0, $3585 = 0, $3586 = 0, $3587 = 0, $3588 = 0, $3589 = 0, $359 = 0; + var $3590 = 0.0, $3591 = 0, $3592 = 0, $3593 = 0, $3594 = 0, $3595 = 0, $3596 = 0.0, $3597 = 0, $3598 = 0, $3599 = 0, $36 = 0, $360 = 0, $3600 = 0, $3601 = 0, $3602 = 0, $3603 = 0.0, $3604 = 0, $3605 = 0, $3606 = 0, $3607 = 0; + var $3608 = 0, $3609 = 0.0, $361 = 0.0, $3610 = 0, $3611 = 0, $3612 = 0, $3613 = 0, $3614 = 0, $3615 = 0, $3616 = 0.0, $3617 = 0, $3618 = 0, $3619 = 0, $362 = 0.0, $3620 = 0, $3621 = 0, $3622 = 0.0, $3623 = 0, $3624 = 0, $3625 = 0; + var $3626 = 0, $3627 = 0, $3628 = 0, $3629 = 0.0, $363 = 0.0, $3630 = 0, $3631 = 0, $3632 = 0, $3633 = 0, $3634 = 0, $3635 = 0.0, $3636 = 0, $3637 = 0, $3638 = 0, $3639 = 0, $364 = 0, $3640 = 0, $3641 = 0, $3642 = 0, $3643 = 0; + var $3644 = 0, $3645 = 0, $3646 = 0, $3647 = 0, $3648 = 0, $3649 = 0, $365 = 0, $3650 = 0, $3651 = 0, $3652 = 0, $3653 = 0, $3654 = 0, $3655 = 0, $3656 = 0, $3657 = 0.0, $3658 = 0, $3659 = 0, $366 = 0.0, $3660 = 0, $3661 = 0; + var $3662 = 0.0, $3663 = 0, $3664 = 0, $3665 = 0, $3666 = 0.0, $3667 = 0.0, $3668 = 0.0, $3669 = 0, $367 = 0.0, $3670 = 0, $3671 = 0, $3672 = 0, $3673 = 0.0, $3674 = 0.0, $3675 = 0.0, $3676 = 0.0, $3677 = 0, $3678 = 0, $3679 = 0, $368 = 0.0; + var $3680 = 0, $3681 = 0.0, $3682 = 0.0, $3683 = 0.0, $3684 = 0, $3685 = 0, $3686 = 0, $3687 = 0.0, $3688 = 0.0, $3689 = 0.0, $369 = 0, $3690 = 0.0, $3691 = 0, $3692 = 0, $3693 = 0, $3694 = 0.0, $3695 = 0.0, $3696 = 0.0, $3697 = 0, $3698 = 0; + var $3699 = 0, $37 = 0.0, $370 = 0, $3700 = 0, $3701 = 0.0, $3702 = 0.0, $3703 = 0.0, $3704 = 0.0, $3705 = 0, $3706 = 0, $3707 = 0, $3708 = 0, $3709 = 0.0, $371 = 0, $3710 = 0.0, $3711 = 0.0, $3712 = 0, $3713 = 0, $3714 = 0, $3715 = 0.0; + var $3716 = 0.0, $3717 = 0.0, $3718 = 0.0, $3719 = 0, $372 = 0, $3720 = 0, $3721 = 0, $3722 = 0.0, $3723 = 0.0, $3724 = 0.0, $3725 = 0, $3726 = 0, $3727 = 0, $3728 = 0, $3729 = 0.0, $373 = 0, $3730 = 0.0, $3731 = 0.0, $3732 = 0.0, $3733 = 0; + var $3734 = 0, $3735 = 0, $3736 = 0, $3737 = 0.0, $3738 = 0.0, $3739 = 0.0, $374 = 0, $3740 = 0, $3741 = 0, $3742 = 0, $3743 = 0.0, $3744 = 0.0, $3745 = 0.0, $3746 = 0.0, $3747 = 0, $3748 = 0, $3749 = 0, $375 = 0.0, $3750 = 0.0, $3751 = 0.0; + var $3752 = 0.0, $3753 = 0, $3754 = 0, $3755 = 0, $3756 = 0, $3757 = 0.0, $3758 = 0.0, $3759 = 0.0, $376 = 0, $3760 = 0.0, $3761 = 0, $3762 = 0, $3763 = 0, $3764 = 0, $3765 = 0.0, $3766 = 0.0, $3767 = 0.0, $3768 = 0, $3769 = 0, $377 = 0; + var $3770 = 0, $3771 = 0.0, $3772 = 0.0, $3773 = 0.0, $3774 = 0.0, $3775 = 0, $3776 = 0, $3777 = 0, $3778 = 0.0, $3779 = 0.0, $378 = 0, $3780 = 0.0, $3781 = 0, $3782 = 0, $3783 = 0, $3784 = 0, $3785 = 0.0, $3786 = 0.0, $3787 = 0.0, $3788 = 0.0; + var $3789 = 0, $379 = 0.0, $3790 = 0, $3791 = 0, $3792 = 0, $3793 = 0.0, $3794 = 0.0, $3795 = 0.0, $3796 = 0, $3797 = 0, $3798 = 0, $3799 = 0.0, $38 = 0, $380 = 0, $3800 = 0.0, $3801 = 0.0, $3802 = 0.0, $3803 = 0, $3804 = 0, $3805 = 0; + var $3806 = 0.0, $3807 = 0.0, $3808 = 0.0, $3809 = 0, $381 = 0, $3810 = 0, $3811 = 0, $3812 = 0, $3813 = 0.0, $3814 = 0.0, $3815 = 0.0, $3816 = 0.0, $3817 = 0, $3818 = 0, $3819 = 0, $382 = 0, $3820 = 0, $3821 = 0.0, $3822 = 0.0, $3823 = 0.0; + var $3824 = 0, $3825 = 0, $3826 = 0, $3827 = 0.0, $3828 = 0.0, $3829 = 0.0, $383 = 0, $3830 = 0.0, $3831 = 0.0, $3832 = 0.0, $3833 = 0.0, $3834 = 0.0, $3835 = 0.0, $3836 = 0.0, $3837 = 0.0, $3838 = 0.0, $3839 = 0.0, $384 = 0, $3840 = 0.0, $3841 = 0.0; + var $3842 = 0.0, $3843 = 0.0, $3844 = 0.0, $3845 = 0.0, $3846 = 0.0, $3847 = 0.0, $3848 = 0.0, $3849 = 0.0, $385 = 0.0, $3850 = 0.0, $3851 = 0.0, $3852 = 0.0, $3853 = 0.0, $3854 = 0.0, $3855 = 0.0, $3856 = 0.0, $3857 = 0.0, $3858 = 0.0, $3859 = 0.0, $386 = 0; + var $3860 = 0.0, $3861 = 0.0, $3862 = 0.0, $3863 = 0.0, $3864 = 0.0, $3865 = 0.0, $3866 = 0.0, $3867 = 0.0, $3868 = 0.0, $3869 = 0.0, $387 = 0, $3870 = 0.0, $3871 = 0.0, $3872 = 0.0, $3873 = 0.0, $3874 = 0, $3875 = 0, $3876 = 0, $3877 = 0.0, $3878 = 0.0; + var $3879 = 0.0, $388 = 0, $3880 = 0.0, $3881 = 0.0, $3882 = 0.0, $3883 = 0.0, $3884 = 0, $3885 = 0, $3886 = 0, $3887 = 0, $3888 = 0.0, $3889 = 0.0, $389 = 0, $3890 = 0.0, $3891 = 0.0, $3892 = 0.0, $3893 = 0.0, $3894 = 0.0, $3895 = 0.0, $3896 = 0.0; + var $3897 = 0.0, $3898 = 0.0, $3899 = 0.0, $39 = 0, $390 = 0, $3900 = 0.0, $3901 = 0.0, $3902 = 0.0, $3903 = 0.0, $3904 = 0.0, $3905 = 0.0, $3906 = 0.0, $3907 = 0.0, $3908 = 0.0, $3909 = 0.0, $391 = 0, $3910 = 0.0, $3911 = 0.0, $3912 = 0.0, $3913 = 0.0; + var $3914 = 0, $3915 = 0, $3916 = 0.0, $3917 = 0.0, $3918 = 0.0, $3919 = 0.0, $392 = 0.0, $3920 = 0.0, $3921 = 0.0, $3922 = 0.0, $3923 = 0.0, $3924 = 0.0, $3925 = 0.0, $3926 = 0.0, $3927 = 0.0, $3928 = 0.0, $3929 = 0.0, $393 = 0, $3930 = 0.0, $3931 = 0.0; + var $3932 = 0.0, $3933 = 0.0, $3934 = 0.0, $3935 = 0.0, $3936 = 0.0, $3937 = 0.0, $3938 = 0.0, $3939 = 0.0, $394 = 0, $3940 = 0.0, $3941 = 0.0, $3942 = 0.0, $3943 = 0.0, $3944 = 0.0, $3945 = 0.0, $3946 = 0.0, $3947 = 0.0, $3948 = 0.0, $3949 = 0.0, $395 = 0; + var $3950 = 0.0, $3951 = 0.0, $3952 = 0.0, $3953 = 0.0, $3954 = 0.0, $3955 = 0.0, $3956 = 0.0, $3957 = 0.0, $3958 = 0.0, $3959 = 0.0, $396 = 0, $3960 = 0.0, $3961 = 0.0, $3962 = 0.0, $3963 = 0.0, $3964 = 0, $3965 = 0, $3966 = 0, $3967 = 0.0, $3968 = 0.0; + var $3969 = 0.0, $397 = 0, $3970 = 0, $3971 = 0, $3972 = 0, $3973 = 0, $3974 = 0.0, $3975 = 0.0, $3976 = 0.0, $3977 = 0, $3978 = 0, $3979 = 0, $398 = 0, $3980 = 0.0, $3981 = 0.0, $3982 = 0.0, $3983 = 0, $3984 = 0, $3985 = 0, $3986 = 0; + var $3987 = 0.0, $3988 = 0.0, $3989 = 0.0, $399 = 0, $3990 = 0.0, $3991 = 0.0, $3992 = 0.0, $3993 = 0.0, $3994 = 0.0, $3995 = 0.0, $3996 = 0.0, $3997 = 0.0, $3998 = 0.0, $3999 = 0.0, $4 = 0, $40 = 0, $400 = 0.0, $4000 = 0.0, $4001 = 0.0, $4002 = 0.0; + var $4003 = 0.0, $4004 = 0.0, $4005 = 0.0, $4006 = 0.0, $4007 = 0.0, $4008 = 0.0, $4009 = 0.0, $401 = 0, $4010 = 0.0, $4011 = 0.0, $4012 = 0.0, $4013 = 0, $4014 = 0, $4015 = 0.0, $4016 = 0.0, $4017 = 0.0, $4018 = 0.0, $4019 = 0.0, $402 = 0, $4020 = 0.0; + var $4021 = 0.0, $4022 = 0.0, $4023 = 0.0, $4024 = 0.0, $4025 = 0.0, $4026 = 0.0, $4027 = 0.0, $4028 = 0.0, $4029 = 0.0, $403 = 0, $4030 = 0.0, $4031 = 0.0, $4032 = 0.0, $4033 = 0.0, $4034 = 0.0, $4035 = 0.0, $4036 = 0.0, $4037 = 0.0, $4038 = 0.0, $4039 = 0.0; + var $404 = 0, $4040 = 0.0, $4041 = 0.0, $4042 = 0.0, $4043 = 0.0, $4044 = 0.0, $4045 = 0.0, $4046 = 0.0, $4047 = 0.0, $4048 = 0.0, $4049 = 0.0, $405 = 0, $4050 = 0.0, $4051 = 0.0, $4052 = 0.0, $4053 = 0.0, $4054 = 0.0, $4055 = 0.0, $4056 = 0.0, $4057 = 0.0; + var $4058 = 0.0, $4059 = 0.0, $406 = 0, $4060 = 0.0, $4061 = 0.0, $4062 = 0.0, $4063 = 0, $4064 = 0, $4065 = 0, $4066 = 0.0, $4067 = 0.0, $4068 = 0.0, $4069 = 0, $407 = 0, $4070 = 0, $4071 = 0, $4072 = 0, $4073 = 0.0, $4074 = 0.0, $4075 = 0.0; + var $4076 = 0, $4077 = 0, $4078 = 0, $4079 = 0.0, $408 = 0.0, $4080 = 0.0, $4081 = 0.0, $4082 = 0, $4083 = 0, $4084 = 0, $4085 = 0, $4086 = 0.0, $4087 = 0.0, $4088 = 0.0, $4089 = 0.0, $409 = 0, $4090 = 0.0, $4091 = 0.0, $4092 = 0.0, $4093 = 0.0; + var $4094 = 0.0, $4095 = 0.0, $4096 = 0.0, $4097 = 0.0, $4098 = 0.0, $4099 = 0.0, $41 = 0, $410 = 0, $4100 = 0.0, $4101 = 0.0, $4102 = 0.0, $4103 = 0.0, $4104 = 0.0, $4105 = 0.0, $4106 = 0.0, $4107 = 0.0, $4108 = 0.0, $4109 = 0.0, $411 = 0, $4110 = 0.0; + var $4111 = 0.0, $4112 = 0, $4113 = 0, $4114 = 0.0, $4115 = 0.0, $4116 = 0.0, $4117 = 0.0, $4118 = 0.0, $4119 = 0.0, $412 = 0, $4120 = 0.0, $4121 = 0.0, $4122 = 0.0, $4123 = 0.0, $4124 = 0.0, $4125 = 0.0, $4126 = 0.0, $4127 = 0.0, $4128 = 0.0, $4129 = 0.0; + var $413 = 0, $4130 = 0.0, $4131 = 0.0, $4132 = 0.0, $4133 = 0.0, $4134 = 0.0, $4135 = 0.0, $4136 = 0.0, $4137 = 0.0, $4138 = 0.0, $4139 = 0.0, $414 = 0, $4140 = 0.0, $4141 = 0.0, $4142 = 0.0, $4143 = 0.0, $4144 = 0.0, $4145 = 0.0, $4146 = 0.0, $4147 = 0.0; + var $4148 = 0.0, $4149 = 0.0, $415 = 0, $4150 = 0.0, $4151 = 0.0, $4152 = 0.0, $4153 = 0.0, $4154 = 0.0, $4155 = 0.0, $4156 = 0.0, $4157 = 0.0, $4158 = 0.0, $4159 = 0.0, $416 = 0.0, $4160 = 0.0, $4161 = 0.0, $4162 = 0, $4163 = 0, $4164 = 0, $4165 = 0.0; + var $4166 = 0.0, $4167 = 0.0, $4168 = 0, $4169 = 0, $417 = 0, $4170 = 0, $4171 = 0, $4172 = 0.0, $4173 = 0.0, $4174 = 0.0, $4175 = 0, $4176 = 0, $4177 = 0, $4178 = 0.0, $4179 = 0.0, $418 = 0, $4180 = 0.0, $4181 = 0, $4182 = 0, $4183 = 0; + var $4184 = 0, $4185 = 0, $4186 = 0, $4187 = 0, $4188 = 0, $4189 = 0, $419 = 0, $4190 = 0, $4191 = 0, $4192 = 0, $4193 = 0, $4194 = 0, $4195 = 0, $4196 = 0, $4197 = 0, $4198 = 0, $4199 = 0, $42 = 0, $420 = 0, $4200 = 0; + var $4201 = 0, $4202 = 0, $4203 = 0, $4204 = 0, $4205 = 0, $4206 = 0, $4207 = 0, $4208 = 0, $4209 = 0, $421 = 0, $4210 = 0, $4211 = 0, $4212 = 0, $4213 = 0, $4214 = 0, $4215 = 0, $4216 = 0, $4217 = 0, $4218 = 0, $4219 = 0; + var $422 = 0, $4220 = 0, $4221 = 0, $4222 = 0, $4223 = 0, $4224 = 0, $4225 = 0, $4226 = 0, $4227 = 0, $4228 = 0, $4229 = 0, $423 = 0, $4230 = 0, $4231 = 0, $4232 = 0, $4233 = 0, $4234 = 0, $4235 = 0, $4236 = 0, $4237 = 0; + var $4238 = 0, $4239 = 0, $424 = 0.0, $4240 = 0, $4241 = 0, $4242 = 0, $4243 = 0, $4244 = 0, $4245 = 0, $4246 = 0, $4247 = 0, $4248 = 0, $4249 = 0, $425 = 0, $4250 = 0, $4251 = 0, $4252 = 0, $4253 = 0, $4254 = 0, $4255 = 0; + var $4256 = 0, $4257 = 0, $4258 = 0, $4259 = 0, $426 = 0, $4260 = 0, $4261 = 0, $4262 = 0, $4263 = 0, $4264 = 0, $4265 = 0, $4266 = 0, $4267 = 0, $4268 = 0, $4269 = 0, $427 = 0, $4270 = 0, $4271 = 0, $4272 = 0, $4273 = 0; + var $4274 = 0, $4275 = 0, $4276 = 0, $4277 = 0, $4278 = 0, $4279 = 0, $428 = 0, $4280 = 0, $4281 = 0, $4282 = 0, $4283 = 0, $4284 = 0, $4285 = 0, $4286 = 0, $4287 = 0, $4288 = 0, $4289 = 0, $429 = 0, $4290 = 0, $4291 = 0; + var $4292 = 0, $4293 = 0, $4294 = 0, $4295 = 0, $4296 = 0, $4297 = 0, $4298 = 0, $4299 = 0, $43 = 0, $430 = 0, $4300 = 0, $4301 = 0, $4302 = 0, $4303 = 0, $4304 = 0, $4305 = 0, $4306 = 0, $4307 = 0, $4308 = 0, $4309 = 0.0; + var $431 = 0, $4310 = 0, $4311 = 0, $4312 = 0, $4313 = 0, $4314 = 0, $4315 = 0.0, $4316 = 0, $4317 = 0, $4318 = 0, $4319 = 0, $432 = 0.0, $4320 = 0, $4321 = 0, $4322 = 0.0, $4323 = 0, $4324 = 0, $4325 = 0, $4326 = 0, $4327 = 0; + var $4328 = 0.0, $4329 = 0, $433 = 0, $4330 = 0, $4331 = 0, $4332 = 0, $4333 = 0, $4334 = 0, $4335 = 0.0, $4336 = 0, $4337 = 0, $4338 = 0, $4339 = 0, $434 = 0, $4340 = 0, $4341 = 0.0, $4342 = 0, $4343 = 0, $4344 = 0, $4345 = 0; + var $4346 = 0, $4347 = 0, $4348 = 0.0, $4349 = 0, $435 = 0, $4350 = 0, $4351 = 0, $4352 = 0, $4353 = 0, $4354 = 0.0, $4355 = 0, $4356 = 0, $4357 = 0, $4358 = 0, $4359 = 0, $436 = 0, $4360 = 0, $4361 = 0.0, $4362 = 0, $4363 = 0; + var $4364 = 0, $4365 = 0, $4366 = 0, $4367 = 0.0, $4368 = 0, $4369 = 0, $437 = 0, $4370 = 0, $4371 = 0, $4372 = 0, $4373 = 0, $4374 = 0.0, $4375 = 0, $4376 = 0, $4377 = 0, $4378 = 0, $4379 = 0, $438 = 0, $4380 = 0.0, $4381 = 0; + var $4382 = 0, $4383 = 0, $4384 = 0, $4385 = 0, $4386 = 0, $4387 = 0.0, $4388 = 0, $4389 = 0, $439 = 0, $4390 = 0, $4391 = 0, $4392 = 0, $4393 = 0.0, $4394 = 0, $4395 = 0, $4396 = 0, $4397 = 0, $4398 = 0, $4399 = 0, $44 = 0.0; + var $440 = 0.0, $4400 = 0, $4401 = 0, $4402 = 0, $4403 = 0, $4404 = 0, $4405 = 0, $4406 = 0, $4407 = 0, $4408 = 0, $4409 = 0, $441 = 0, $4410 = 0, $4411 = 0, $4412 = 0, $4413 = 0, $4414 = 0, $4415 = 0, $4416 = 0, $4417 = 0; + var $4418 = 0.0, $4419 = 0, $442 = 0, $4420 = 0, $4421 = 0, $4422 = 0, $4423 = 0.0, $4424 = 0, $4425 = 0, $4426 = 0, $4427 = 0.0, $4428 = 0.0, $4429 = 0.0, $443 = 0, $4430 = 0, $4431 = 0, $4432 = 0, $4433 = 0, $4434 = 0.0, $4435 = 0.0; + var $4436 = 0.0, $4437 = 0.0, $4438 = 0, $4439 = 0, $444 = 0, $4440 = 0, $4441 = 0, $4442 = 0.0, $4443 = 0.0, $4444 = 0.0, $4445 = 0, $4446 = 0, $4447 = 0, $4448 = 0.0, $4449 = 0.0, $445 = 0, $4450 = 0.0, $4451 = 0.0, $4452 = 0, $4453 = 0; + var $4454 = 0, $4455 = 0.0, $4456 = 0.0, $4457 = 0.0, $4458 = 0, $4459 = 0, $446 = 0.0, $4460 = 0, $4461 = 0, $4462 = 0.0, $4463 = 0.0, $4464 = 0.0, $4465 = 0.0, $4466 = 0, $4467 = 0, $4468 = 0, $4469 = 0, $447 = 0, $4470 = 0.0, $4471 = 0.0; + var $4472 = 0.0, $4473 = 0, $4474 = 0, $4475 = 0, $4476 = 0.0, $4477 = 0.0, $4478 = 0.0, $4479 = 0.0, $448 = 0, $4480 = 0, $4481 = 0, $4482 = 0, $4483 = 0.0, $4484 = 0.0, $4485 = 0.0, $4486 = 0, $4487 = 0, $4488 = 0, $4489 = 0, $449 = 0.0; + var $4490 = 0.0, $4491 = 0.0, $4492 = 0.0, $4493 = 0.0, $4494 = 0, $4495 = 0, $4496 = 0, $4497 = 0, $4498 = 0.0, $4499 = 0.0, $45 = 0, $450 = 0.0, $4500 = 0.0, $4501 = 0, $4502 = 0, $4503 = 0, $4504 = 0.0, $4505 = 0.0, $4506 = 0.0, $4507 = 0.0; + var $4508 = 0, $4509 = 0, $451 = 0, $4510 = 0, $4511 = 0.0, $4512 = 0.0, $4513 = 0.0, $4514 = 0, $4515 = 0, $4516 = 0, $4517 = 0, $4518 = 0.0, $4519 = 0.0, $452 = 0, $4520 = 0.0, $4521 = 0.0, $4522 = 0, $4523 = 0, $4524 = 0, $4525 = 0; + var $4526 = 0.0, $4527 = 0.0, $4528 = 0.0, $4529 = 0, $453 = 0.0, $4530 = 0, $4531 = 0, $4532 = 0.0, $4533 = 0.0, $4534 = 0.0, $4535 = 0.0, $4536 = 0, $4537 = 0, $4538 = 0, $4539 = 0.0, $454 = 0, $4540 = 0.0, $4541 = 0.0, $4542 = 0, $4543 = 0; + var $4544 = 0, $4545 = 0, $4546 = 0.0, $4547 = 0.0, $4548 = 0.0, $4549 = 0.0, $455 = 0, $4550 = 0, $4551 = 0, $4552 = 0, $4553 = 0, $4554 = 0.0, $4555 = 0.0, $4556 = 0.0, $4557 = 0, $4558 = 0, $4559 = 0, $456 = 0.0, $4560 = 0.0, $4561 = 0.0; + var $4562 = 0.0, $4563 = 0.0, $4564 = 0, $4565 = 0, $4566 = 0, $4567 = 0.0, $4568 = 0.0, $4569 = 0.0, $457 = 0.0, $4570 = 0, $4571 = 0, $4572 = 0, $4573 = 0, $4574 = 0.0, $4575 = 0.0, $4576 = 0.0, $4577 = 0.0, $4578 = 0, $4579 = 0, $458 = 0; + var $4580 = 0, $4581 = 0, $4582 = 0.0, $4583 = 0.0, $4584 = 0.0, $4585 = 0, $4586 = 0, $4587 = 0, $4588 = 0.0, $4589 = 0.0, $459 = 0, $4590 = 0.0, $4591 = 0.0, $4592 = 0, $4593 = 0, $4594 = 0, $4595 = 0.0, $4596 = 0.0, $4597 = 0.0, $4598 = 0; + var $4599 = 0, $46 = 0, $460 = 0, $4600 = 0, $4601 = 0, $4602 = 0.0, $4603 = 0.0, $4604 = 0.0, $4605 = 0.0, $4606 = 0, $4607 = 0, $4608 = 0, $4609 = 0, $461 = 0.0, $4610 = 0.0, $4611 = 0.0, $4612 = 0.0, $4613 = 0, $4614 = 0, $4615 = 0; + var $4616 = 0.0, $4617 = 0.0, $4618 = 0.0, $4619 = 0.0, $462 = 0, $4620 = 0.0, $4621 = 0.0, $4622 = 0.0, $4623 = 0.0, $4624 = 0.0, $4625 = 0.0, $4626 = 0.0, $4627 = 0.0, $4628 = 0.0, $4629 = 0.0, $463 = 0, $4630 = 0.0, $4631 = 0.0, $4632 = 0.0, $4633 = 0.0; + var $4634 = 0.0, $4635 = 0.0, $4636 = 0.0, $4637 = 0.0, $4638 = 0.0, $4639 = 0.0, $464 = 0, $4640 = 0.0, $4641 = 0.0, $4642 = 0.0, $4643 = 0.0, $4644 = 0.0, $4645 = 0.0, $4646 = 0.0, $4647 = 0.0, $4648 = 0.0, $4649 = 0.0, $465 = 0.0, $4650 = 0.0, $4651 = 0.0; + var $4652 = 0.0, $4653 = 0.0, $4654 = 0.0, $4655 = 0.0, $4656 = 0.0, $4657 = 0.0, $4658 = 0.0, $4659 = 0.0, $466 = 0.0, $4660 = 0.0, $4661 = 0.0, $4662 = 0.0, $4663 = 0.0, $4664 = 0.0, $4665 = 0.0, $4666 = 0.0, $4667 = 0.0, $4668 = 0.0, $4669 = 0.0, $467 = 0; + var $4670 = 0.0, $4671 = 0.0, $4672 = 0.0, $4673 = 0.0, $4674 = 0.0, $4675 = 0, $4676 = 0, $4677 = 0, $4678 = 0.0, $4679 = 0.0, $468 = 0, $4680 = 0.0, $4681 = 0.0, $4682 = 0.0, $4683 = 0.0, $4684 = 0.0, $4685 = 0, $4686 = 0, $4687 = 0, $4688 = 0; + var $4689 = 0.0, $469 = 0, $4690 = 0.0, $4691 = 0.0, $4692 = 0.0, $4693 = 0.0, $4694 = 0.0, $4695 = 0.0, $4696 = 0, $4697 = 0, $4698 = 0, $4699 = 0.0, $47 = 0, $470 = 0.0, $4700 = 0.0, $4701 = 0.0, $4702 = 0.0, $4703 = 0.0, $4704 = 0.0, $4705 = 0.0; + var $4706 = 0, $4707 = 0, $4708 = 0, $4709 = 0, $471 = 0, $4710 = 0.0, $4711 = 0.0, $4712 = 0.0, $4713 = 0.0, $4714 = 0.0, $4715 = 0.0, $4716 = 0.0, $4717 = 0.0, $4718 = 0.0, $4719 = 0.0, $472 = 0, $4720 = 0.0, $4721 = 0.0, $4722 = 0.0, $4723 = 0.0; + var $4724 = 0.0, $4725 = 0.0, $4726 = 0.0, $4727 = 0.0, $4728 = 0.0, $4729 = 0.0, $473 = 0, $4730 = 0.0, $4731 = 0.0, $4732 = 0, $4733 = 0, $4734 = 0.0, $4735 = 0.0, $4736 = 0.0, $4737 = 0.0, $4738 = 0.0, $4739 = 0.0, $474 = 0.0, $4740 = 0.0, $4741 = 0.0; + var $4742 = 0.0, $4743 = 0.0, $4744 = 0.0, $4745 = 0.0, $4746 = 0.0, $4747 = 0.0, $4748 = 0.0, $4749 = 0.0, $475 = 0.0, $4750 = 0.0, $4751 = 0.0, $4752 = 0.0, $4753 = 0.0, $4754 = 0.0, $4755 = 0.0, $4756 = 0.0, $4757 = 0.0, $4758 = 0, $4759 = 0, $476 = 0; + var $4760 = 0, $4761 = 0.0, $4762 = 0.0, $4763 = 0.0, $4764 = 0, $4765 = 0, $4766 = 0, $4767 = 0, $4768 = 0.0, $4769 = 0.0, $477 = 0, $4770 = 0.0, $4771 = 0, $4772 = 0, $4773 = 0, $4774 = 0.0, $4775 = 0.0, $4776 = 0.0, $4777 = 0, $4778 = 0; + var $4779 = 0, $478 = 0.0, $4780 = 0, $4781 = 0.0, $4782 = 0.0, $4783 = 0.0, $4784 = 0.0, $4785 = 0.0, $4786 = 0.0, $4787 = 0, $4788 = 0, $4789 = 0.0, $479 = 0, $4790 = 0.0, $4791 = 0.0, $4792 = 0.0, $4793 = 0.0, $4794 = 0.0, $4795 = 0.0, $4796 = 0.0; + var $4797 = 0.0, $4798 = 0.0, $4799 = 0.0, $48 = 0, $480 = 0, $4800 = 0.0, $4801 = 0.0, $4802 = 0.0, $4803 = 0.0, $4804 = 0.0, $4805 = 0, $4806 = 0, $4807 = 0, $4808 = 0.0, $4809 = 0.0, $481 = 0.0, $4810 = 0.0, $4811 = 0, $4812 = 0, $4813 = 0; + var $4814 = 0, $4815 = 0.0, $4816 = 0.0, $4817 = 0.0, $4818 = 0, $4819 = 0, $482 = 0.0, $4820 = 0, $4821 = 0.0, $4822 = 0.0, $4823 = 0.0, $4824 = 0, $4825 = 0, $4826 = 0, $4827 = 0, $4828 = 0.0, $4829 = 0.0, $483 = 0, $4830 = 0.0, $4831 = 0.0; + var $4832 = 0.0, $4833 = 0.0, $4834 = 0.0, $4835 = 0.0, $4836 = 0.0, $4837 = 0.0, $4838 = 0, $4839 = 0, $484 = 0, $4840 = 0.0, $4841 = 0.0, $4842 = 0.0, $4843 = 0.0, $4844 = 0.0, $4845 = 0.0, $4846 = 0.0, $4847 = 0.0, $4848 = 0.0, $4849 = 0.0, $485 = 0.0; + var $4850 = 0.0, $4851 = 0.0, $4852 = 0.0, $4853 = 0.0, $4854 = 0.0, $4855 = 0.0, $4856 = 0.0, $4857 = 0.0, $4858 = 0.0, $4859 = 0.0, $486 = 0, $4860 = 0.0, $4861 = 0.0, $4862 = 0.0, $4863 = 0.0, $4864 = 0, $4865 = 0, $4866 = 0, $4867 = 0.0, $4868 = 0.0; + var $4869 = 0.0, $487 = 0, $4870 = 0, $4871 = 0, $4872 = 0, $4873 = 0, $4874 = 0.0, $4875 = 0.0, $4876 = 0.0, $4877 = 0, $4878 = 0, $4879 = 0, $488 = 0.0, $4880 = 0.0, $4881 = 0.0, $4882 = 0.0, $4883 = 0, $4884 = 0, $4885 = 0, $4886 = 0; + var $4887 = 0, $4888 = 0, $4889 = 0, $489 = 0.0, $4890 = 0, $4891 = 0, $4892 = 0, $4893 = 0, $4894 = 0, $4895 = 0, $4896 = 0, $4897 = 0, $4898 = 0, $4899 = 0, $49 = 0.0, $490 = 0, $4900 = 0, $4901 = 0, $4902 = 0, $4903 = 0; + var $4904 = 0, $4905 = 0, $4906 = 0, $4907 = 0, $4908 = 0, $4909 = 0, $491 = 0, $4910 = 0, $4911 = 0, $4912 = 0, $4913 = 0, $4914 = 0, $4915 = 0, $4916 = 0, $4917 = 0, $4918 = 0, $4919 = 0, $492 = 0, $4920 = 0, $4921 = 0; + var $4922 = 0, $4923 = 0, $4924 = 0, $4925 = 0, $4926 = 0, $4927 = 0, $4928 = 0, $4929 = 0, $493 = 0.0, $4930 = 0, $4931 = 0, $4932 = 0, $4933 = 0, $4934 = 0, $4935 = 0, $4936 = 0, $4937 = 0, $4938 = 0, $4939 = 0, $494 = 0; + var $4940 = 0, $4941 = 0, $4942 = 0, $4943 = 0, $4944 = 0, $4945 = 0, $4946 = 0, $4947 = 0, $4948 = 0, $4949 = 0, $495 = 0, $4950 = 0, $4951 = 0, $4952 = 0, $4953 = 0, $4954 = 0.0, $4955 = 0.0, $4956 = 0, $4957 = 0.0, $4958 = 0.0; + var $4959 = 0.0, $496 = 0, $4960 = 0, $4961 = 0, $4962 = 0, $4963 = 0, $4964 = 0, $4965 = 0.0, $4966 = 0.0, $4967 = 0, $4968 = 0.0, $4969 = 0.0, $497 = 0.0, $4970 = 0.0, $4971 = 0, $4972 = 0, $4973 = 0, $4974 = 0, $4975 = 0, $4976 = 0; + var $4977 = 0, $4978 = 0, $4979 = 0, $498 = 0.0, $4980 = 0, $4981 = 0, $4982 = 0, $4983 = 0, $4984 = 0, $4985 = 0, $4986 = 0.0, $4987 = 0.0, $4988 = 0, $4989 = 0, $499 = 0, $4990 = 0, $4991 = 0, $4992 = 0, $4993 = 0, $4994 = 0; + var $4995 = 0, $4996 = 0, $4997 = 0, $4998 = 0, $4999 = 0.0, $5 = 0, $50 = 0, $500 = 0, $5000 = 0, $5001 = 0, $5002 = 0, $5003 = 0, $5004 = 0, $5005 = 0, $5006 = 0, $5007 = 0, $5008 = 0, $5009 = 0, $501 = 0, $5010 = 0; + var $5011 = 0, $5012 = 0, $5013 = 0, $5014 = 0, $5015 = 0, $5016 = 0, $5017 = 0, $5018 = 0, $5019 = 0, $502 = 0.0, $5020 = 0.0, $5021 = 0, $5022 = 0, $5023 = 0, $5024 = 0, $5025 = 0, $5026 = 0.0, $5027 = 0, $5028 = 0, $5029 = 0; + var $503 = 0, $5030 = 0, $5031 = 0, $5032 = 0, $5033 = 0, $5034 = 0, $5035 = 0, $5036 = 0.0, $5037 = 0, $5038 = 0, $5039 = 0, $504 = 0, $5040 = 0, $5041 = 0, $5042 = 0, $5043 = 0, $5044 = 0, $5045 = 0.0, $5046 = 0, $5047 = 0; + var $5048 = 0, $5049 = 0, $505 = 0, $5050 = 0, $5051 = 0, $5052 = 0, $5053 = 0, $5054 = 0, $5055 = 0, $5056 = 0, $5057 = 0, $5058 = 0.0, $5059 = 0, $506 = 0.0, $5060 = 0, $5061 = 0, $5062 = 0.0, $5063 = 0.0, $5064 = 0, $5065 = 0; + var $5066 = 0, $5067 = 0, $5068 = 0.0, $5069 = 0, $507 = 0.0, $5070 = 0, $5071 = 0, $5072 = 0.0, $5073 = 0.0, $5074 = 0.0, $5075 = 0, $5076 = 0, $5077 = 0, $5078 = 0, $5079 = 0, $508 = 0.0, $5080 = 0, $5081 = 0, $5082 = 0, $5083 = 0.0; + var $5084 = 0, $5085 = 0, $5086 = 0, $5087 = 0.0, $5088 = 0.0, $5089 = 0, $509 = 0.0, $5090 = 0, $5091 = 0, $5092 = 0.0, $5093 = 0, $5094 = 0, $5095 = 0, $5096 = 0.0, $5097 = 0.0, $5098 = 0.0, $5099 = 0, $51 = 0, $510 = 0.0, $5100 = 0; + var $5101 = 0, $5102 = 0, $5103 = 0, $5104 = 0, $5105 = 0, $5106 = 0, $5107 = 0, $5108 = 0, $5109 = 0, $511 = 0.0, $5110 = 0, $5111 = 0, $5112 = 0, $5113 = 0, $5114 = 0.0, $5115 = 0, $5116 = 0, $5117 = 0, $5118 = 0, $5119 = 0; + var $512 = 0.0, $5120 = 0, $5121 = 0.0, $5122 = 0.0, $5123 = 0, $5124 = 0, $5125 = 0, $5126 = 0, $5127 = 0, $5128 = 0, $5129 = 0, $513 = 0.0, $5130 = 0.0, $5131 = 0, $5132 = 0, $5133 = 0, $5134 = 0, $5135 = 0, $5136 = 0, $5137 = 0.0; + var $5138 = 0.0, $5139 = 0, $514 = 0.0, $5140 = 0, $5141 = 0, $5142 = 0, $5143 = 0, $5144 = 0, $5145 = 0, $5146 = 0, $5147 = 0, $5148 = 0.0, $5149 = 0, $515 = 0.0, $5150 = 0, $5151 = 0, $5152 = 0, $5153 = 0, $5154 = 0, $5155 = 0.0; + var $5156 = 0.0, $5157 = 0, $5158 = 0, $5159 = 0, $516 = 0.0, $5160 = 0, $5161 = 0, $5162 = 0, $5163 = 0, $5164 = 0.0, $5165 = 0, $5166 = 0, $5167 = 0, $5168 = 0, $5169 = 0, $517 = 0.0, $5170 = 0, $5171 = 0.0, $5172 = 0.0, $5173 = 0; + var $5174 = 0, $5175 = 0, $5176 = 0, $5177 = 0, $5178 = 0, $5179 = 0, $518 = 0.0, $5180 = 0, $5181 = 0.0, $5182 = 0, $5183 = 0.0, $5184 = 0, $5185 = 0, $5186 = 0, $5187 = 0, $5188 = 0, $5189 = 0, $519 = 0.0, $5190 = 0.0, $5191 = 0.0; + var $5192 = 0.0, $5193 = 0, $5194 = 0, $5195 = 0, $5196 = 0.0, $5197 = 0.0, $5198 = 0.0, $5199 = 0, $52 = 0.0, $520 = 0.0, $5200 = 0, $5201 = 0.0, $5202 = 0, $5203 = 0, $5204 = 0, $5205 = 0.0, $5206 = 0, $5207 = 0, $5208 = 0, $5209 = 0; + var $521 = 0.0, $5210 = 0, $5211 = 0, $5212 = 0, $5213 = 0, $5214 = 0.0, $5215 = 0, $5216 = 0.0, $5217 = 0, $5218 = 0, $5219 = 0, $522 = 0, $5220 = 0, $5221 = 0, $5222 = 0, $5223 = 0, $5224 = 0, $5225 = 0, $5226 = 0, $5227 = 0; + var $5228 = 0, $5229 = 0, $523 = 0, $5230 = 0, $5231 = 0, $5232 = 0, $5233 = 0, $5234 = 0, $5235 = 0, $5236 = 0.0, $5237 = 0, $5238 = 0, $5239 = 0, $524 = 0.0, $5240 = 0.0, $5241 = 0.0, $5242 = 0.0, $5243 = 0.0, $5244 = 0, $5245 = 0; + var $5246 = 0, $5247 = 0.0, $5248 = 0, $5249 = 0, $525 = 0.0, $5250 = 0, $5251 = 0.0, $5252 = 0.0, $5253 = 0.0, $5254 = 0.0, $5255 = 0, $5256 = 0, $5257 = 0, $5258 = 0.0, $5259 = 0, $526 = 0.0, $5260 = 0, $5261 = 0, $5262 = 0, $5263 = 0; + var $5264 = 0.0, $5265 = 0.0, $5266 = 0.0, $5267 = 0.0, $5268 = 0, $5269 = 0, $527 = 0.0, $5270 = 0, $5271 = 0.0, $5272 = 0, $5273 = 0, $5274 = 0, $5275 = 0, $5276 = 0, $5277 = 0.0, $5278 = 0.0, $5279 = 0.0, $528 = 0.0, $5280 = 0.0, $5281 = 0; + var $5282 = 0, $5283 = 0, $5284 = 0.0, $5285 = 0.0, $5286 = 0.0, $5287 = 0, $5288 = 0.0, $5289 = 0.0, $529 = 0.0, $5290 = 0.0, $5291 = 0.0, $5292 = 0.0, $5293 = 0.0, $5294 = 0, $5295 = 0, $5296 = 0, $5297 = 0, $5298 = 0, $5299 = 0, $53 = 0.0; + var $530 = 0.0, $5300 = 0, $5301 = 0, $5302 = 0.0, $5303 = 0.0, $5304 = 0.0, $5305 = 0, $5306 = 0, $5307 = 0, $5308 = 0, $5309 = 0, $531 = 0.0, $5310 = 0, $5311 = 0, $5312 = 0, $5313 = 0, $5314 = 0.0, $5315 = 0.0, $5316 = 0.0, $5317 = 0; + var $5318 = 0, $5319 = 0, $532 = 0.0, $5320 = 0, $5321 = 0, $5322 = 0, $5323 = 0, $5324 = 0, $5325 = 0, $5326 = 0, $5327 = 0.0, $5328 = 0.0, $5329 = 0.0, $533 = 0.0, $5330 = 0, $5331 = 0, $5332 = 0, $5333 = 0, $5334 = 0, $5335 = 0; + var $5336 = 0, $5337 = 0, $5338 = 0, $5339 = 0, $534 = 0.0, $5340 = 0, $5341 = 0, $5342 = 0, $5343 = 0, $5344 = 0, $5345 = 0, $5346 = 0, $5347 = 0, $5348 = 0, $5349 = 0, $535 = 0.0, $5350 = 0, $5351 = 0, $5352 = 0, $536 = 0.0; + var $537 = 0.0, $538 = 0.0, $539 = 0.0, $54 = 0, $540 = 0.0, $541 = 0.0, $542 = 0.0, $543 = 0.0, $544 = 0.0, $545 = 0.0, $546 = 0.0, $547 = 0.0, $548 = 0.0, $549 = 0.0, $55 = 0, $550 = 0.0, $551 = 0.0, $552 = 0.0, $553 = 0, $554 = 0.0; + var $555 = 0.0, $556 = 0.0, $557 = 0, $558 = 0, $559 = 0.0, $56 = 0.0, $560 = 0.0, $561 = 0.0, $562 = 0.0, $563 = 0.0, $564 = 0.0, $565 = 0, $566 = 0, $567 = 0.0, $568 = 0.0, $569 = 0.0, $57 = 0.0, $570 = 0, $571 = 0, $572 = 0; + var $573 = 0.0, $574 = 0.0, $575 = 0.0, $576 = 0, $577 = 0, $578 = 0.0, $579 = 0.0, $58 = 0, $580 = 0.0, $581 = 0, $582 = 0, $583 = 0, $584 = 0.0, $585 = 0.0, $586 = 0.0, $587 = 0.0, $588 = 0.0, $589 = 0.0, $59 = 0.0, $590 = 0.0; + var $591 = 0.0, $592 = 0.0, $593 = 0.0, $594 = 0.0, $595 = 0.0, $596 = 0.0, $597 = 0.0, $598 = 0, $599 = 0, $6 = 0, $60 = 0, $600 = 0.0, $601 = 0.0, $602 = 0.0, $603 = 0.0, $604 = 0.0, $605 = 0.0, $606 = 0.0, $607 = 0.0, $608 = 0.0; + var $609 = 0.0, $61 = 0, $610 = 0.0, $611 = 0.0, $612 = 0.0, $613 = 0.0, $614 = 0.0, $615 = 0.0, $616 = 0.0, $617 = 0.0, $618 = 0.0, $619 = 0.0, $62 = 0, $620 = 0.0, $621 = 0.0, $622 = 0.0, $623 = 0.0, $624 = 0.0, $625 = 0.0, $626 = 0.0; + var $627 = 0.0, $628 = 0.0, $629 = 0, $63 = 0.0, $630 = 0.0, $631 = 0.0, $632 = 0.0, $633 = 0, $634 = 0, $635 = 0.0, $636 = 0.0, $637 = 0.0, $638 = 0.0, $639 = 0.0, $64 = 0.0, $640 = 0.0, $641 = 0, $642 = 0, $643 = 0.0, $644 = 0.0; + var $645 = 0.0, $646 = 0, $647 = 0, $648 = 0, $649 = 0.0, $65 = 0, $650 = 0.0, $651 = 0.0, $652 = 0, $653 = 0, $654 = 0.0, $655 = 0.0, $656 = 0.0, $657 = 0, $658 = 0, $659 = 0, $66 = 0, $660 = 0.0, $661 = 0.0, $662 = 0.0; + var $663 = 0, $664 = 0.0, $665 = 0.0, $666 = 0.0, $667 = 0.0, $668 = 0.0, $669 = 0, $67 = 0.0, $670 = 0, $671 = 0.0, $672 = 0.0, $673 = 0, $674 = 0, $675 = 0, $676 = 0.0, $677 = 0, $678 = 0, $679 = 0, $68 = 0, $680 = 0.0; + var $681 = 0, $682 = 0, $683 = 0, $684 = 0, $685 = 0, $686 = 0.0, $687 = 0, $688 = 0, $689 = 0, $69 = 0, $690 = 0, $691 = 0, $692 = 0, $693 = 0.0, $694 = 0, $695 = 0, $696 = 0, $697 = 0, $698 = 0, $699 = 0; + var $7 = 0, $70 = 0.0, $700 = 0, $701 = 0.0, $702 = 0, $703 = 0, $704 = 0, $705 = 0, $706 = 0, $707 = 0, $708 = 0, $709 = 0.0, $71 = 0.0, $710 = 0, $711 = 0, $712 = 0, $713 = 0, $714 = 0, $715 = 0, $716 = 0; + var $717 = 0.0, $718 = 0, $719 = 0, $72 = 0, $720 = 0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0.0, $726 = 0, $727 = 0, $728 = 0, $729 = 0, $73 = 0, $730 = 0, $731 = 0, $732 = 0, $733 = 0.0, $734 = 0; + var $735 = 0, $736 = 0, $737 = 0, $738 = 0, $739 = 0, $74 = 0.0, $740 = 0, $741 = 0.0, $742 = 0, $743 = 0, $744 = 0, $745 = 0, $746 = 0, $747 = 0, $748 = 0, $749 = 0.0, $75 = 0, $750 = 0, $751 = 0, $752 = 0; + var $753 = 0, $754 = 0, $755 = 0, $756 = 0, $757 = 0.0, $758 = 0, $759 = 0, $76 = 0, $760 = 0, $761 = 0, $762 = 0, $763 = 0, $764 = 0, $765 = 0.0, $766 = 0, $767 = 0, $768 = 0, $769 = 0, $77 = 0, $770 = 0; + var $771 = 0, $772 = 0, $773 = 0.0, $774 = 0, $775 = 0, $776 = 0, $777 = 0, $778 = 0, $779 = 0.0, $78 = 0.0, $780 = 0, $781 = 0, $782 = 0.0, $783 = 0.0, $784 = 0, $785 = 0, $786 = 0.0, $787 = 0, $788 = 0, $789 = 0.0; + var $79 = 0.0, $790 = 0.0, $791 = 0, $792 = 0, $793 = 0, $794 = 0.0, $795 = 0, $796 = 0, $797 = 0, $798 = 0.0, $799 = 0.0, $8 = 0, $80 = 0, $800 = 0, $801 = 0, $802 = 0, $803 = 0.0, $804 = 0, $805 = 0, $806 = 0; + var $807 = 0.0, $808 = 0.0, $809 = 0, $81 = 0, $810 = 0, $811 = 0.0, $812 = 0, $813 = 0, $814 = 0.0, $815 = 0.0, $816 = 0, $817 = 0, $818 = 0.0, $819 = 0, $82 = 0, $820 = 0, $821 = 0.0, $822 = 0.0, $823 = 0, $824 = 0; + var $825 = 0, $826 = 0.0, $827 = 0, $828 = 0, $829 = 0, $83 = 0, $830 = 0.0, $831 = 0.0, $832 = 0, $833 = 0, $834 = 0, $835 = 0.0, $836 = 0, $837 = 0, $838 = 0, $839 = 0.0, $84 = 0, $840 = 0.0, $841 = 0, $842 = 0; + var $843 = 0.0, $844 = 0, $845 = 0, $846 = 0.0, $847 = 0.0, $848 = 0, $849 = 0, $85 = 0, $850 = 0.0, $851 = 0, $852 = 0, $853 = 0.0, $854 = 0.0, $855 = 0, $856 = 0, $857 = 0, $858 = 0.0, $859 = 0, $86 = 0.0, $860 = 0; + var $861 = 0, $862 = 0.0, $863 = 0.0, $864 = 0, $865 = 0, $866 = 0, $867 = 0.0, $868 = 0, $869 = 0, $87 = 0, $870 = 0, $871 = 0.0, $872 = 0.0, $873 = 0, $874 = 0.0, $875 = 0.0, $876 = 0.0, $877 = 0.0, $878 = 0.0, $879 = 0.0; + var $88 = 0, $880 = 0.0, $881 = 0.0, $882 = 0.0, $883 = 0.0, $884 = 0.0, $885 = 0.0, $886 = 0.0, $887 = 0, $888 = 0, $889 = 0.0, $89 = 0, $890 = 0.0, $891 = 0.0, $892 = 0.0, $893 = 0.0, $894 = 0.0, $895 = 0.0, $896 = 0.0, $897 = 0.0; + var $898 = 0.0, $899 = 0.0, $9 = 0, $90 = 0.0, $900 = 0.0, $901 = 0.0, $902 = 0, $903 = 0, $904 = 0.0, $905 = 0.0, $906 = 0.0, $907 = 0.0, $908 = 0.0, $909 = 0.0, $91 = 0, $910 = 0.0, $911 = 0.0, $912 = 0.0, $913 = 0.0, $914 = 0.0; + var $915 = 0.0, $916 = 0.0, $917 = 0.0, $918 = 0.0, $919 = 0.0, $92 = 0, $920 = 0.0, $921 = 0.0, $922 = 0.0, $923 = 0.0, $924 = 0.0, $925 = 0.0, $926 = 0.0, $927 = 0.0, $928 = 0.0, $929 = 0.0, $93 = 0, $930 = 0.0, $931 = 0.0, $932 = 0.0; + var $933 = 0.0, $934 = 0.0, $935 = 0.0, $936 = 0.0, $937 = 0.0, $938 = 0.0, $939 = 0.0, $94 = 0, $940 = 0.0, $941 = 0.0, $942 = 0.0, $943 = 0.0, $944 = 0.0, $945 = 0.0, $946 = 0.0, $947 = 0.0, $948 = 0.0, $949 = 0.0, $95 = 0, $950 = 0.0; + var $951 = 0.0, $952 = 0, $953 = 0, $954 = 0.0, $955 = 0.0, $956 = 0.0, $957 = 0, $958 = 0, $959 = 0.0, $96 = 0.0, $960 = 0.0, $961 = 0.0, $962 = 0, $963 = 0, $964 = 0, $965 = 0.0, $966 = 0.0, $967 = 0.0, $968 = 0, $969 = 0; + var $97 = 0, $970 = 0, $971 = 0, $972 = 0.0, $973 = 0.0, $974 = 0.0, $975 = 0.0, $976 = 0.0, $977 = 0.0, $978 = 0.0, $979 = 0.0, $98 = 0, $980 = 0.0, $981 = 0.0, $982 = 0.0, $983 = 0.0, $984 = 0.0, $985 = 0, $986 = 0, $987 = 0.0; + var $988 = 0.0, $989 = 0.0, $99 = 0, $990 = 0.0, $991 = 0.0, $992 = 0.0, $993 = 0.0, $994 = 0.0, $995 = 0.0, $996 = 0.0, $997 = 0.0, $998 = 0.0, $999 = 0.0, $M = 0, $ai = 0.0, $ai110 = 0.0, $ai150 = 0.0, $ai202 = 0.0, $ai85 = 0.0, $ar = 0.0; + var $ar109 = 0.0, $ar149 = 0.0, $ar201 = 0.0, $ar84 = 0.0, $bi = 0.0, $bi112 = 0.0, $bi152 = 0.0, $bi204 = 0.0, $bi87 = 0.0, $br = 0.0, $br111 = 0.0, $br151 = 0.0, $br203 = 0.0, $br86 = 0.0, $c1 = 0.0, $c1123 = 0.0, $c1167 = 0.0, $c1227 = 0.0, $c1241 = 0, $c131 = 0.0; + var $c151 = 0.0, $c2 = 0.0, $c2124 = 0.0, $c2168 = 0.0, $c232 = 0.0, $c3 = 0.0, $c3169 = 0.0, $ci = 0.0, $ci114 = 0.0, $ci154 = 0.0, $ci206 = 0.0, $ci89 = 0.0, $cr = 0.0, $cr113 = 0.0, $cr153 = 0.0, $cr205 = 0.0, $cr88 = 0.0, $di = 0.0, $di116 = 0.0, $di156 = 0.0; + var $di208 = 0.0, $dr = 0.0, $dr115 = 0.0, $dr155 = 0.0, $dr207 = 0.0, $ei = 0.0, $ei158 = 0.0, $ei210 = 0.0, $er = 0.0, $er157 = 0.0, $er209 = 0.0, $fi = 0.0, $fi212 = 0.0, $fr = 0.0, $fr211 = 0.0, $gi = 0.0, $gi214 = 0.0, $gr = 0.0, $gr213 = 0.0, $hi = 0.0; + var $hr = 0.0, $i = 0, $ind = 0, $ind132 = 0, $ind180 = 0, $ind234 = 0, $ind59 = 0, $ind71 = 0, $ind94 = 0, $k = 0, $k127 = 0, $k173 = 0, $k233 = 0, $k57 = 0, $k68 = 0, $k90 = 0, $ll = 0, $m = 0, $radix = 0, $s1 = 0.0; + var $s1125 = 0.0, $s1170 = 0.0, $s1228 = 0.0, $s1242 = 0, $s133 = 0.0, $s152 = 0.0, $s2 = 0.0, $s2126 = 0.0, $s2171 = 0.0, $s234 = 0.0, $s3 = 0.0, $s3172 = 0.0, $t = 0, $tau0i = 0.0, $tau0i10 = 0.0, $tau0i102 = 0.0, $tau0i142 = 0.0, $tau0i18 = 0.0, $tau0i194 = 0.0, $tau0i36 = 0.0; + var $tau0i4 = 0.0, $tau0i63 = 0.0, $tau0i77 = 0.0, $tau0r = 0.0, $tau0r101 = 0.0, $tau0r141 = 0.0, $tau0r17 = 0.0, $tau0r193 = 0.0, $tau0r3 = 0.0, $tau0r35 = 0.0, $tau0r62 = 0.0, $tau0r76 = 0.0, $tau0r9 = 0.0, $tau1i = 0.0, $tau1i104 = 0.0, $tau1i12 = 0.0, $tau1i144 = 0.0, $tau1i196 = 0.0, $tau1i2 = 0.0, $tau1i20 = 0.0; + var $tau1i38 = 0.0, $tau1i54 = 0.0, $tau1i6 = 0.0, $tau1i65 = 0.0, $tau1i79 = 0.0, $tau1r = 0.0, $tau1r1 = 0.0, $tau1r103 = 0.0, $tau1r11 = 0.0, $tau1r143 = 0.0, $tau1r19 = 0.0, $tau1r195 = 0.0, $tau1r37 = 0.0, $tau1r5 = 0.0, $tau1r53 = 0.0, $tau1r64 = 0.0, $tau1r78 = 0.0, $tau2i = 0.0, $tau2i106 = 0.0, $tau2i14 = 0.0; + var $tau2i146 = 0.0, $tau2i198 = 0.0, $tau2i22 = 0.0, $tau2i40 = 0.0, $tau2i56 = 0.0, $tau2i67 = 0.0, $tau2i8 = 0.0, $tau2i81 = 0.0, $tau2r = 0.0, $tau2r105 = 0.0, $tau2r13 = 0.0, $tau2r145 = 0.0, $tau2r197 = 0.0, $tau2r21 = 0.0, $tau2r39 = 0.0, $tau2r55 = 0.0, $tau2r66 = 0.0, $tau2r7 = 0.0, $tau2r80 = 0.0, $tau3i = 0.0; + var $tau3i108 = 0.0, $tau3i148 = 0.0, $tau3i16 = 0.0, $tau3i200 = 0.0, $tau3i24 = 0.0, $tau3i42 = 0.0, $tau3i83 = 0.0, $tau3r = 0.0, $tau3r107 = 0.0, $tau3r147 = 0.0, $tau3r15 = 0.0, $tau3r199 = 0.0, $tau3r23 = 0.0, $tau3r41 = 0.0, $tau3r82 = 0.0, $tau4i = 0.0, $tau4i118 = 0.0, $tau4i160 = 0.0, $tau4i216 = 0.0, $tau4i26 = 0.0; + var $tau4i44 = 0.0, $tau4r = 0.0, $tau4r117 = 0.0, $tau4r159 = 0.0, $tau4r215 = 0.0, $tau4r25 = 0.0, $tau4r43 = 0.0, $tau5i = 0.0, $tau5i120 = 0.0, $tau5i162 = 0.0, $tau5i218 = 0.0, $tau5i28 = 0.0, $tau5i46 = 0.0, $tau5r = 0.0, $tau5r119 = 0.0, $tau5r161 = 0.0, $tau5r217 = 0.0, $tau5r27 = 0.0, $tau5r45 = 0.0, $tau6i = 0.0; + var $tau6i122 = 0.0, $tau6i164 = 0.0, $tau6i220 = 0.0, $tau6i30 = 0.0, $tau6i48 = 0.0, $tau6r = 0.0, $tau6r121 = 0.0, $tau6r163 = 0.0, $tau6r219 = 0.0, $tau6r29 = 0.0, $tau6r47 = 0.0, $tau7i = 0.0, $tau7i166 = 0.0, $tau7i222 = 0.0, $tau7i50 = 0.0, $tau7r = 0.0, $tau7r165 = 0.0, $tau7r221 = 0.0, $tau7r49 = 0.0, $tau8i = 0.0; + var $tau8i224 = 0.0, $tau8r = 0.0, $tau8r223 = 0.0, $tau9i = 0.0, $tau9i226 = 0.0, $tau9r = 0.0, $tau9r225 = 0.0, $taui = 0, $taur = 0, $temp1i = 0.0, $temp1i230 = 0.0, $temp1i236 = 0.0, $temp1r = 0.0, $temp1r229 = 0.0, $temp1r235 = 0.0, $temp2i = 0.0, $temp2i232 = 0.0, $temp2i238 = 0.0, $temp2r = 0.0, $temp2r231 = 0.0; + var $temp2r237 = 0.0, $tkm = 0, $tkm1 = 0, $tkm1128 = 0, $tkm1174 = 0, $tkm158 = 0, $tkm169 = 0, $tkm191 = 0, $tkm2 = 0, $tkm2129 = 0, $tkm2175 = 0, $tkm270 = 0, $tkm292 = 0, $tkm3 = 0, $tkm3130 = 0, $tkm3176 = 0, $tkm393 = 0, $tkm4 = 0, $tkm4131 = 0, $tkm4177 = 0; + var $tkm5 = 0, $tkm5178 = 0, $tkm6 = 0, $tkm6179 = 0, $tkm7 = 0, $tt = 0, $u = 0, $v = 0, $wl2i = 0.0, $wl2i136 = 0.0, $wl2i184 = 0.0, $wl2i75 = 0.0, $wl2i98 = 0.0, $wl2r = 0.0, $wl2r135 = 0.0, $wl2r183 = 0.0, $wl2r74 = 0.0, $wl2r97 = 0.0, $wl3i = 0.0, $wl3i100 = 0.0; + var $wl3i138 = 0.0, $wl3i186 = 0.0, $wl3r = 0.0, $wl3r137 = 0.0, $wl3r185 = 0.0, $wl3r99 = 0.0, $wl4i = 0.0, $wl4i140 = 0.0, $wl4i188 = 0.0, $wl4r = 0.0, $wl4r139 = 0.0, $wl4r187 = 0.0, $wl5i = 0.0, $wl5i190 = 0.0, $wl5r = 0.0, $wl5r189 = 0.0, $wl6i = 0.0, $wl6i192 = 0.0, $wl6r = 0.0, $wl6r191 = 0.0; + var $wl7i = 0.0, $wl7r = 0.0, $wli = 0.0, $wli134 = 0.0, $wli182 = 0.0, $wli240 = 0, $wli61 = 0.0, $wli73 = 0.0, $wli96 = 0.0, $wlr = 0.0, $wlr133 = 0.0, $wlr181 = 0.0, $wlr239 = 0, $wlr60 = 0.0, $wlr72 = 0.0, $wlr95 = 0.0, $yi = 0, $yr = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 2416|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $op; + $1 = $ip; + $2 = $obj; + $3 = $sgn; + $4 = $N; + $5 = $l; + $6 = $inc; + $7 = $4; + $8 = ($7|0)>(1); + if ($8) { + $9 = $6; + $10 = $2; + $11 = ((($10)) + 8|0); + $12 = (($11) + ($9<<2)|0); + $13 = HEAP32[$12>>2]|0; + $radix = $13; + } + $14 = $4; + $15 = ($14|0)==(1); + if ($15) { + $16 = $1; + $17 = +HEAPF64[$16>>3]; + $18 = $0; + HEAPF64[$18>>3] = $17; + $19 = $1; + $20 = ((($19)) + 8|0); + $21 = +HEAPF64[$20>>3]; + $22 = $0; + $23 = ((($22)) + 8|0); + HEAPF64[$23>>3] = $21; + STACKTOP = sp;return; + } + $24 = $4; + $25 = ($24|0)==(2); + if ($25) { + $26 = $1; + $27 = +HEAPF64[$26>>3]; + $28 = $0; + HEAPF64[$28>>3] = $27; + $29 = $1; + $30 = ((($29)) + 8|0); + $31 = +HEAPF64[$30>>3]; + $32 = $0; + $33 = ((($32)) + 8|0); + HEAPF64[$33>>3] = $31; + $34 = $5; + $35 = $1; + $36 = (($35) + ($34<<4)|0); + $37 = +HEAPF64[$36>>3]; + $38 = $0; + $39 = ((($38)) + 16|0); + HEAPF64[$39>>3] = $37; + $40 = $5; + $41 = $1; + $42 = (($41) + ($40<<4)|0); + $43 = ((($42)) + 8|0); + $44 = +HEAPF64[$43>>3]; + $45 = $0; + $46 = ((($45)) + 16|0); + $47 = ((($46)) + 8|0); + HEAPF64[$47>>3] = $44; + $48 = $0; + $49 = +HEAPF64[$48>>3]; + $tau1r = $49; + $50 = $0; + $51 = ((($50)) + 8|0); + $52 = +HEAPF64[$51>>3]; + $tau1i = $52; + $53 = $tau1r; + $54 = $0; + $55 = ((($54)) + 16|0); + $56 = +HEAPF64[$55>>3]; + $57 = $53 + $56; + $58 = $0; + HEAPF64[$58>>3] = $57; + $59 = $tau1i; + $60 = $0; + $61 = ((($60)) + 16|0); + $62 = ((($61)) + 8|0); + $63 = +HEAPF64[$62>>3]; + $64 = $59 + $63; + $65 = $0; + $66 = ((($65)) + 8|0); + HEAPF64[$66>>3] = $64; + $67 = $tau1r; + $68 = $0; + $69 = ((($68)) + 16|0); + $70 = +HEAPF64[$69>>3]; + $71 = $67 - $70; + $72 = $0; + $73 = ((($72)) + 16|0); + HEAPF64[$73>>3] = $71; + $74 = $tau1i; + $75 = $0; + $76 = ((($75)) + 16|0); + $77 = ((($76)) + 8|0); + $78 = +HEAPF64[$77>>3]; + $79 = $74 - $78; + $80 = $0; + $81 = ((($80)) + 16|0); + $82 = ((($81)) + 8|0); + HEAPF64[$82>>3] = $79; + STACKTOP = sp;return; + } + $83 = $4; + $84 = ($83|0)==(3); + if ($84) { + $85 = $1; + $86 = +HEAPF64[$85>>3]; + $87 = $0; + HEAPF64[$87>>3] = $86; + $88 = $1; + $89 = ((($88)) + 8|0); + $90 = +HEAPF64[$89>>3]; + $91 = $0; + $92 = ((($91)) + 8|0); + HEAPF64[$92>>3] = $90; + $93 = $5; + $94 = $1; + $95 = (($94) + ($93<<4)|0); + $96 = +HEAPF64[$95>>3]; + $97 = $0; + $98 = ((($97)) + 16|0); + HEAPF64[$98>>3] = $96; + $99 = $5; + $100 = $1; + $101 = (($100) + ($99<<4)|0); + $102 = ((($101)) + 8|0); + $103 = +HEAPF64[$102>>3]; + $104 = $0; + $105 = ((($104)) + 16|0); + $106 = ((($105)) + 8|0); + HEAPF64[$106>>3] = $103; + $107 = $5; + $108 = $107<<1; + $109 = $1; + $110 = (($109) + ($108<<4)|0); + $111 = +HEAPF64[$110>>3]; + $112 = $0; + $113 = ((($112)) + 32|0); + HEAPF64[$113>>3] = $111; + $114 = $5; + $115 = $114<<1; + $116 = $1; + $117 = (($116) + ($115<<4)|0); + $118 = ((($117)) + 8|0); + $119 = +HEAPF64[$118>>3]; + $120 = $0; + $121 = ((($120)) + 32|0); + $122 = ((($121)) + 8|0); + HEAPF64[$122>>3] = $119; + $123 = $0; + $124 = ((($123)) + 16|0); + $125 = +HEAPF64[$124>>3]; + $126 = $0; + $127 = ((($126)) + 32|0); + $128 = +HEAPF64[$127>>3]; + $129 = $125 + $128; + $tau0r = $129; + $130 = $0; + $131 = ((($130)) + 16|0); + $132 = ((($131)) + 8|0); + $133 = +HEAPF64[$132>>3]; + $134 = $0; + $135 = ((($134)) + 32|0); + $136 = ((($135)) + 8|0); + $137 = +HEAPF64[$136>>3]; + $138 = $133 + $137; + $tau0i = $138; + $139 = $3; + $140 = (+($139|0)); + $141 = $140 * 0.86602540378000004; + $142 = $0; + $143 = ((($142)) + 16|0); + $144 = +HEAPF64[$143>>3]; + $145 = $0; + $146 = ((($145)) + 32|0); + $147 = +HEAPF64[$146>>3]; + $148 = $144 - $147; + $149 = $141 * $148; + $tau1r1 = $149; + $150 = $3; + $151 = (+($150|0)); + $152 = $151 * 0.86602540378000004; + $153 = $0; + $154 = ((($153)) + 16|0); + $155 = ((($154)) + 8|0); + $156 = +HEAPF64[$155>>3]; + $157 = $0; + $158 = ((($157)) + 32|0); + $159 = ((($158)) + 8|0); + $160 = +HEAPF64[$159>>3]; + $161 = $156 - $160; + $162 = $152 * $161; + $tau1i2 = $162; + $163 = $0; + $164 = +HEAPF64[$163>>3]; + $165 = $tau0r; + $166 = $165 * 0.5; + $167 = $164 - $166; + $tau2r = $167; + $168 = $0; + $169 = ((($168)) + 8|0); + $170 = +HEAPF64[$169>>3]; + $171 = $tau0i; + $172 = $171 * 0.5; + $173 = $170 - $172; + $tau2i = $173; + $174 = $tau0r; + $175 = $0; + $176 = +HEAPF64[$175>>3]; + $177 = $174 + $176; + $178 = $0; + HEAPF64[$178>>3] = $177; + $179 = $tau0i; + $180 = $0; + $181 = ((($180)) + 8|0); + $182 = +HEAPF64[$181>>3]; + $183 = $179 + $182; + $184 = $0; + $185 = ((($184)) + 8|0); + HEAPF64[$185>>3] = $183; + $186 = $tau2r; + $187 = $tau1i2; + $188 = $186 + $187; + $189 = $0; + $190 = ((($189)) + 16|0); + HEAPF64[$190>>3] = $188; + $191 = $tau2i; + $192 = $tau1r1; + $193 = $191 - $192; + $194 = $0; + $195 = ((($194)) + 16|0); + $196 = ((($195)) + 8|0); + HEAPF64[$196>>3] = $193; + $197 = $tau2r; + $198 = $tau1i2; + $199 = $197 - $198; + $200 = $0; + $201 = ((($200)) + 32|0); + HEAPF64[$201>>3] = $199; + $202 = $tau2i; + $203 = $tau1r1; + $204 = $202 + $203; + $205 = $0; + $206 = ((($205)) + 32|0); + $207 = ((($206)) + 8|0); + HEAPF64[$207>>3] = $204; + STACKTOP = sp;return; + } + $208 = $4; + $209 = ($208|0)==(4); + if ($209) { + $210 = $1; + $211 = +HEAPF64[$210>>3]; + $212 = $0; + HEAPF64[$212>>3] = $211; + $213 = $1; + $214 = ((($213)) + 8|0); + $215 = +HEAPF64[$214>>3]; + $216 = $0; + $217 = ((($216)) + 8|0); + HEAPF64[$217>>3] = $215; + $218 = $5; + $219 = $1; + $220 = (($219) + ($218<<4)|0); + $221 = +HEAPF64[$220>>3]; + $222 = $0; + $223 = ((($222)) + 16|0); + HEAPF64[$223>>3] = $221; + $224 = $5; + $225 = $1; + $226 = (($225) + ($224<<4)|0); + $227 = ((($226)) + 8|0); + $228 = +HEAPF64[$227>>3]; + $229 = $0; + $230 = ((($229)) + 16|0); + $231 = ((($230)) + 8|0); + HEAPF64[$231>>3] = $228; + $232 = $5; + $233 = $232<<1; + $234 = $1; + $235 = (($234) + ($233<<4)|0); + $236 = +HEAPF64[$235>>3]; + $237 = $0; + $238 = ((($237)) + 32|0); + HEAPF64[$238>>3] = $236; + $239 = $5; + $240 = $239<<1; + $241 = $1; + $242 = (($241) + ($240<<4)|0); + $243 = ((($242)) + 8|0); + $244 = +HEAPF64[$243>>3]; + $245 = $0; + $246 = ((($245)) + 32|0); + $247 = ((($246)) + 8|0); + HEAPF64[$247>>3] = $244; + $248 = $5; + $249 = ($248*3)|0; + $250 = $1; + $251 = (($250) + ($249<<4)|0); + $252 = +HEAPF64[$251>>3]; + $253 = $0; + $254 = ((($253)) + 48|0); + HEAPF64[$254>>3] = $252; + $255 = $5; + $256 = ($255*3)|0; + $257 = $1; + $258 = (($257) + ($256<<4)|0); + $259 = ((($258)) + 8|0); + $260 = +HEAPF64[$259>>3]; + $261 = $0; + $262 = ((($261)) + 48|0); + $263 = ((($262)) + 8|0); + HEAPF64[$263>>3] = $260; + $264 = $0; + $265 = +HEAPF64[$264>>3]; + $266 = $0; + $267 = ((($266)) + 32|0); + $268 = +HEAPF64[$267>>3]; + $269 = $265 + $268; + $tau0r3 = $269; + $270 = $0; + $271 = ((($270)) + 8|0); + $272 = +HEAPF64[$271>>3]; + $273 = $0; + $274 = ((($273)) + 32|0); + $275 = ((($274)) + 8|0); + $276 = +HEAPF64[$275>>3]; + $277 = $272 + $276; + $tau0i4 = $277; + $278 = $0; + $279 = +HEAPF64[$278>>3]; + $280 = $0; + $281 = ((($280)) + 32|0); + $282 = +HEAPF64[$281>>3]; + $283 = $279 - $282; + $tau1r5 = $283; + $284 = $0; + $285 = ((($284)) + 8|0); + $286 = +HEAPF64[$285>>3]; + $287 = $0; + $288 = ((($287)) + 32|0); + $289 = ((($288)) + 8|0); + $290 = +HEAPF64[$289>>3]; + $291 = $286 - $290; + $tau1i6 = $291; + $292 = $0; + $293 = ((($292)) + 16|0); + $294 = +HEAPF64[$293>>3]; + $295 = $0; + $296 = ((($295)) + 48|0); + $297 = +HEAPF64[$296>>3]; + $298 = $294 + $297; + $tau2r7 = $298; + $299 = $0; + $300 = ((($299)) + 16|0); + $301 = ((($300)) + 8|0); + $302 = +HEAPF64[$301>>3]; + $303 = $0; + $304 = ((($303)) + 48|0); + $305 = ((($304)) + 8|0); + $306 = +HEAPF64[$305>>3]; + $307 = $302 + $306; + $tau2i8 = $307; + $308 = $3; + $309 = (+($308|0)); + $310 = $0; + $311 = ((($310)) + 16|0); + $312 = +HEAPF64[$311>>3]; + $313 = $0; + $314 = ((($313)) + 48|0); + $315 = +HEAPF64[$314>>3]; + $316 = $312 - $315; + $317 = $309 * $316; + $tau3r = $317; + $318 = $3; + $319 = (+($318|0)); + $320 = $0; + $321 = ((($320)) + 16|0); + $322 = ((($321)) + 8|0); + $323 = +HEAPF64[$322>>3]; + $324 = $0; + $325 = ((($324)) + 48|0); + $326 = ((($325)) + 8|0); + $327 = +HEAPF64[$326>>3]; + $328 = $323 - $327; + $329 = $319 * $328; + $tau3i = $329; + $330 = $tau0r3; + $331 = $tau2r7; + $332 = $330 + $331; + $333 = $0; + HEAPF64[$333>>3] = $332; + $334 = $tau0i4; + $335 = $tau2i8; + $336 = $334 + $335; + $337 = $0; + $338 = ((($337)) + 8|0); + HEAPF64[$338>>3] = $336; + $339 = $tau1r5; + $340 = $tau3i; + $341 = $339 + $340; + $342 = $0; + $343 = ((($342)) + 16|0); + HEAPF64[$343>>3] = $341; + $344 = $tau1i6; + $345 = $tau3r; + $346 = $344 - $345; + $347 = $0; + $348 = ((($347)) + 16|0); + $349 = ((($348)) + 8|0); + HEAPF64[$349>>3] = $346; + $350 = $tau0r3; + $351 = $tau2r7; + $352 = $350 - $351; + $353 = $0; + $354 = ((($353)) + 32|0); + HEAPF64[$354>>3] = $352; + $355 = $tau0i4; + $356 = $tau2i8; + $357 = $355 - $356; + $358 = $0; + $359 = ((($358)) + 32|0); + $360 = ((($359)) + 8|0); + HEAPF64[$360>>3] = $357; + $361 = $tau1r5; + $362 = $tau3i; + $363 = $361 - $362; + $364 = $0; + $365 = ((($364)) + 48|0); + HEAPF64[$365>>3] = $363; + $366 = $tau1i6; + $367 = $tau3r; + $368 = $366 + $367; + $369 = $0; + $370 = ((($369)) + 48|0); + $371 = ((($370)) + 8|0); + HEAPF64[$371>>3] = $368; + STACKTOP = sp;return; + } + $372 = $4; + $373 = ($372|0)==(5); + if ($373) { + $374 = $1; + $375 = +HEAPF64[$374>>3]; + $376 = $0; + HEAPF64[$376>>3] = $375; + $377 = $1; + $378 = ((($377)) + 8|0); + $379 = +HEAPF64[$378>>3]; + $380 = $0; + $381 = ((($380)) + 8|0); + HEAPF64[$381>>3] = $379; + $382 = $5; + $383 = $1; + $384 = (($383) + ($382<<4)|0); + $385 = +HEAPF64[$384>>3]; + $386 = $0; + $387 = ((($386)) + 16|0); + HEAPF64[$387>>3] = $385; + $388 = $5; + $389 = $1; + $390 = (($389) + ($388<<4)|0); + $391 = ((($390)) + 8|0); + $392 = +HEAPF64[$391>>3]; + $393 = $0; + $394 = ((($393)) + 16|0); + $395 = ((($394)) + 8|0); + HEAPF64[$395>>3] = $392; + $396 = $5; + $397 = $396<<1; + $398 = $1; + $399 = (($398) + ($397<<4)|0); + $400 = +HEAPF64[$399>>3]; + $401 = $0; + $402 = ((($401)) + 32|0); + HEAPF64[$402>>3] = $400; + $403 = $5; + $404 = $403<<1; + $405 = $1; + $406 = (($405) + ($404<<4)|0); + $407 = ((($406)) + 8|0); + $408 = +HEAPF64[$407>>3]; + $409 = $0; + $410 = ((($409)) + 32|0); + $411 = ((($410)) + 8|0); + HEAPF64[$411>>3] = $408; + $412 = $5; + $413 = ($412*3)|0; + $414 = $1; + $415 = (($414) + ($413<<4)|0); + $416 = +HEAPF64[$415>>3]; + $417 = $0; + $418 = ((($417)) + 48|0); + HEAPF64[$418>>3] = $416; + $419 = $5; + $420 = ($419*3)|0; + $421 = $1; + $422 = (($421) + ($420<<4)|0); + $423 = ((($422)) + 8|0); + $424 = +HEAPF64[$423>>3]; + $425 = $0; + $426 = ((($425)) + 48|0); + $427 = ((($426)) + 8|0); + HEAPF64[$427>>3] = $424; + $428 = $5; + $429 = $428<<2; + $430 = $1; + $431 = (($430) + ($429<<4)|0); + $432 = +HEAPF64[$431>>3]; + $433 = $0; + $434 = ((($433)) + 64|0); + HEAPF64[$434>>3] = $432; + $435 = $5; + $436 = $435<<2; + $437 = $1; + $438 = (($437) + ($436<<4)|0); + $439 = ((($438)) + 8|0); + $440 = +HEAPF64[$439>>3]; + $441 = $0; + $442 = ((($441)) + 64|0); + $443 = ((($442)) + 8|0); + HEAPF64[$443>>3] = $440; + $c1 = 0.30901699437000002; + $c2 = -0.80901699436999996; + $s1 = 0.95105651628999998; + $s2 = 0.58778525229; + $444 = $0; + $445 = ((($444)) + 16|0); + $446 = +HEAPF64[$445>>3]; + $447 = $0; + $448 = ((($447)) + 64|0); + $449 = +HEAPF64[$448>>3]; + $450 = $446 + $449; + $tau0r9 = $450; + $451 = $0; + $452 = ((($451)) + 16|0); + $453 = +HEAPF64[$452>>3]; + $454 = $0; + $455 = ((($454)) + 64|0); + $456 = +HEAPF64[$455>>3]; + $457 = $453 - $456; + $tau2r13 = $457; + $458 = $0; + $459 = ((($458)) + 16|0); + $460 = ((($459)) + 8|0); + $461 = +HEAPF64[$460>>3]; + $462 = $0; + $463 = ((($462)) + 64|0); + $464 = ((($463)) + 8|0); + $465 = +HEAPF64[$464>>3]; + $466 = $461 + $465; + $tau0i10 = $466; + $467 = $0; + $468 = ((($467)) + 16|0); + $469 = ((($468)) + 8|0); + $470 = +HEAPF64[$469>>3]; + $471 = $0; + $472 = ((($471)) + 64|0); + $473 = ((($472)) + 8|0); + $474 = +HEAPF64[$473>>3]; + $475 = $470 - $474; + $tau2i14 = $475; + $476 = $0; + $477 = ((($476)) + 32|0); + $478 = +HEAPF64[$477>>3]; + $479 = $0; + $480 = ((($479)) + 48|0); + $481 = +HEAPF64[$480>>3]; + $482 = $478 + $481; + $tau1r11 = $482; + $483 = $0; + $484 = ((($483)) + 32|0); + $485 = +HEAPF64[$484>>3]; + $486 = $0; + $487 = ((($486)) + 48|0); + $488 = +HEAPF64[$487>>3]; + $489 = $485 - $488; + $tau3r15 = $489; + $490 = $0; + $491 = ((($490)) + 32|0); + $492 = ((($491)) + 8|0); + $493 = +HEAPF64[$492>>3]; + $494 = $0; + $495 = ((($494)) + 48|0); + $496 = ((($495)) + 8|0); + $497 = +HEAPF64[$496>>3]; + $498 = $493 + $497; + $tau1i12 = $498; + $499 = $0; + $500 = ((($499)) + 32|0); + $501 = ((($500)) + 8|0); + $502 = +HEAPF64[$501>>3]; + $503 = $0; + $504 = ((($503)) + 48|0); + $505 = ((($504)) + 8|0); + $506 = +HEAPF64[$505>>3]; + $507 = $502 - $506; + $tau3i16 = $507; + $508 = $c1; + $509 = $tau0r9; + $510 = $508 * $509; + $511 = $c2; + $512 = $tau1r11; + $513 = $511 * $512; + $514 = $510 + $513; + $tau4r = $514; + $515 = $c1; + $516 = $tau0i10; + $517 = $515 * $516; + $518 = $c2; + $519 = $tau1i12; + $520 = $518 * $519; + $521 = $517 + $520; + $tau4i = $521; + $522 = $3; + $523 = ($522|0)==(1); + $524 = $s1; + if ($523) { + $525 = $tau2r13; + $526 = $524 * $525; + $527 = $s2; + $528 = $tau3r15; + $529 = $527 * $528; + $530 = $526 + $529; + $tau5r = $530; + $531 = $s1; + $532 = $tau2i14; + $533 = $531 * $532; + $534 = $s2; + $535 = $tau3i16; + $536 = $534 * $535; + $537 = $533 + $536; + $tau5i = $537; + } else { + $538 = -$524; + $539 = $tau2r13; + $540 = $538 * $539; + $541 = $s2; + $542 = $tau3r15; + $543 = $541 * $542; + $544 = $540 - $543; + $tau5r = $544; + $545 = $s1; + $546 = -$545; + $547 = $tau2i14; + $548 = $546 * $547; + $549 = $s2; + $550 = $tau3i16; + $551 = $549 * $550; + $552 = $548 - $551; + $tau5i = $552; + } + $553 = $0; + $554 = +HEAPF64[$553>>3]; + $555 = $tau4r; + $556 = $554 + $555; + $tau6r = $556; + $557 = $0; + $558 = ((($557)) + 8|0); + $559 = +HEAPF64[$558>>3]; + $560 = $tau4i; + $561 = $559 + $560; + $tau6i = $561; + $562 = $tau6r; + $563 = $tau5i; + $564 = $562 + $563; + $565 = $0; + $566 = ((($565)) + 16|0); + HEAPF64[$566>>3] = $564; + $567 = $tau6i; + $568 = $tau5r; + $569 = $567 - $568; + $570 = $0; + $571 = ((($570)) + 16|0); + $572 = ((($571)) + 8|0); + HEAPF64[$572>>3] = $569; + $573 = $tau6r; + $574 = $tau5i; + $575 = $573 - $574; + $576 = $0; + $577 = ((($576)) + 64|0); + HEAPF64[$577>>3] = $575; + $578 = $tau6i; + $579 = $tau5r; + $580 = $578 + $579; + $581 = $0; + $582 = ((($581)) + 64|0); + $583 = ((($582)) + 8|0); + HEAPF64[$583>>3] = $580; + $584 = $c2; + $585 = $tau0r9; + $586 = $584 * $585; + $587 = $c1; + $588 = $tau1r11; + $589 = $587 * $588; + $590 = $586 + $589; + $tau4r = $590; + $591 = $c2; + $592 = $tau0i10; + $593 = $591 * $592; + $594 = $c1; + $595 = $tau1i12; + $596 = $594 * $595; + $597 = $593 + $596; + $tau4i = $597; + $598 = $3; + $599 = ($598|0)==(1); + $600 = $s2; + if ($599) { + $601 = $tau2r13; + $602 = $600 * $601; + $603 = $s1; + $604 = $tau3r15; + $605 = $603 * $604; + $606 = $602 - $605; + $tau5r = $606; + $607 = $s2; + $608 = $tau2i14; + $609 = $607 * $608; + $610 = $s1; + $611 = $tau3i16; + $612 = $610 * $611; + $613 = $609 - $612; + $tau5i = $613; + } else { + $614 = -$600; + $615 = $tau2r13; + $616 = $614 * $615; + $617 = $s1; + $618 = $tau3r15; + $619 = $617 * $618; + $620 = $616 + $619; + $tau5r = $620; + $621 = $s2; + $622 = -$621; + $623 = $tau2i14; + $624 = $622 * $623; + $625 = $s1; + $626 = $tau3i16; + $627 = $625 * $626; + $628 = $624 + $627; + $tau5i = $628; + } + $629 = $0; + $630 = +HEAPF64[$629>>3]; + $631 = $tau4r; + $632 = $630 + $631; + $tau6r = $632; + $633 = $0; + $634 = ((($633)) + 8|0); + $635 = +HEAPF64[$634>>3]; + $636 = $tau4i; + $637 = $635 + $636; + $tau6i = $637; + $638 = $tau6r; + $639 = $tau5i; + $640 = $638 + $639; + $641 = $0; + $642 = ((($641)) + 32|0); + HEAPF64[$642>>3] = $640; + $643 = $tau6i; + $644 = $tau5r; + $645 = $643 - $644; + $646 = $0; + $647 = ((($646)) + 32|0); + $648 = ((($647)) + 8|0); + HEAPF64[$648>>3] = $645; + $649 = $tau6r; + $650 = $tau5i; + $651 = $649 - $650; + $652 = $0; + $653 = ((($652)) + 48|0); + HEAPF64[$653>>3] = $651; + $654 = $tau6i; + $655 = $tau5r; + $656 = $654 + $655; + $657 = $0; + $658 = ((($657)) + 48|0); + $659 = ((($658)) + 8|0); + HEAPF64[$659>>3] = $656; + $660 = $tau0r9; + $661 = $tau1r11; + $662 = $660 + $661; + $663 = $0; + $664 = +HEAPF64[$663>>3]; + $665 = $664 + $662; + HEAPF64[$663>>3] = $665; + $666 = $tau0i10; + $667 = $tau1i12; + $668 = $666 + $667; + $669 = $0; + $670 = ((($669)) + 8|0); + $671 = +HEAPF64[$670>>3]; + $672 = $671 + $668; + HEAPF64[$670>>3] = $672; + STACKTOP = sp;return; + } + $673 = $4; + $674 = ($673|0)==(7); + if ($674) { + $675 = $1; + $676 = +HEAPF64[$675>>3]; + $677 = $0; + HEAPF64[$677>>3] = $676; + $678 = $1; + $679 = ((($678)) + 8|0); + $680 = +HEAPF64[$679>>3]; + $681 = $0; + $682 = ((($681)) + 8|0); + HEAPF64[$682>>3] = $680; + $683 = $5; + $684 = $1; + $685 = (($684) + ($683<<4)|0); + $686 = +HEAPF64[$685>>3]; + $687 = $0; + $688 = ((($687)) + 16|0); + HEAPF64[$688>>3] = $686; + $689 = $5; + $690 = $1; + $691 = (($690) + ($689<<4)|0); + $692 = ((($691)) + 8|0); + $693 = +HEAPF64[$692>>3]; + $694 = $0; + $695 = ((($694)) + 16|0); + $696 = ((($695)) + 8|0); + HEAPF64[$696>>3] = $693; + $697 = $5; + $698 = $697<<1; + $699 = $1; + $700 = (($699) + ($698<<4)|0); + $701 = +HEAPF64[$700>>3]; + $702 = $0; + $703 = ((($702)) + 32|0); + HEAPF64[$703>>3] = $701; + $704 = $5; + $705 = $704<<1; + $706 = $1; + $707 = (($706) + ($705<<4)|0); + $708 = ((($707)) + 8|0); + $709 = +HEAPF64[$708>>3]; + $710 = $0; + $711 = ((($710)) + 32|0); + $712 = ((($711)) + 8|0); + HEAPF64[$712>>3] = $709; + $713 = $5; + $714 = ($713*3)|0; + $715 = $1; + $716 = (($715) + ($714<<4)|0); + $717 = +HEAPF64[$716>>3]; + $718 = $0; + $719 = ((($718)) + 48|0); + HEAPF64[$719>>3] = $717; + $720 = $5; + $721 = ($720*3)|0; + $722 = $1; + $723 = (($722) + ($721<<4)|0); + $724 = ((($723)) + 8|0); + $725 = +HEAPF64[$724>>3]; + $726 = $0; + $727 = ((($726)) + 48|0); + $728 = ((($727)) + 8|0); + HEAPF64[$728>>3] = $725; + $729 = $5; + $730 = $729<<2; + $731 = $1; + $732 = (($731) + ($730<<4)|0); + $733 = +HEAPF64[$732>>3]; + $734 = $0; + $735 = ((($734)) + 64|0); + HEAPF64[$735>>3] = $733; + $736 = $5; + $737 = $736<<2; + $738 = $1; + $739 = (($738) + ($737<<4)|0); + $740 = ((($739)) + 8|0); + $741 = +HEAPF64[$740>>3]; + $742 = $0; + $743 = ((($742)) + 64|0); + $744 = ((($743)) + 8|0); + HEAPF64[$744>>3] = $741; + $745 = $5; + $746 = ($745*5)|0; + $747 = $1; + $748 = (($747) + ($746<<4)|0); + $749 = +HEAPF64[$748>>3]; + $750 = $0; + $751 = ((($750)) + 80|0); + HEAPF64[$751>>3] = $749; + $752 = $5; + $753 = ($752*5)|0; + $754 = $1; + $755 = (($754) + ($753<<4)|0); + $756 = ((($755)) + 8|0); + $757 = +HEAPF64[$756>>3]; + $758 = $0; + $759 = ((($758)) + 80|0); + $760 = ((($759)) + 8|0); + HEAPF64[$760>>3] = $757; + $761 = $5; + $762 = ($761*6)|0; + $763 = $1; + $764 = (($763) + ($762<<4)|0); + $765 = +HEAPF64[$764>>3]; + $766 = $0; + $767 = ((($766)) + 96|0); + HEAPF64[$767>>3] = $765; + $768 = $5; + $769 = ($768*6)|0; + $770 = $1; + $771 = (($770) + ($769<<4)|0); + $772 = ((($771)) + 8|0); + $773 = +HEAPF64[$772>>3]; + $774 = $0; + $775 = ((($774)) + 96|0); + $776 = ((($775)) + 8|0); + HEAPF64[$776>>3] = $773; + $c131 = 0.62348980185000002; + $c232 = -0.22252093395; + $c3 = -0.90096886789999997; + $s133 = 0.78183148246; + $s234 = 0.97492791217999996; + $s3 = 0.43388373911; + $777 = $0; + $778 = ((($777)) + 16|0); + $779 = +HEAPF64[$778>>3]; + $780 = $0; + $781 = ((($780)) + 96|0); + $782 = +HEAPF64[$781>>3]; + $783 = $779 + $782; + $tau0r17 = $783; + $784 = $0; + $785 = ((($784)) + 16|0); + $786 = +HEAPF64[$785>>3]; + $787 = $0; + $788 = ((($787)) + 96|0); + $789 = +HEAPF64[$788>>3]; + $790 = $786 - $789; + $tau3r23 = $790; + $791 = $0; + $792 = ((($791)) + 16|0); + $793 = ((($792)) + 8|0); + $794 = +HEAPF64[$793>>3]; + $795 = $0; + $796 = ((($795)) + 96|0); + $797 = ((($796)) + 8|0); + $798 = +HEAPF64[$797>>3]; + $799 = $794 + $798; + $tau0i18 = $799; + $800 = $0; + $801 = ((($800)) + 16|0); + $802 = ((($801)) + 8|0); + $803 = +HEAPF64[$802>>3]; + $804 = $0; + $805 = ((($804)) + 96|0); + $806 = ((($805)) + 8|0); + $807 = +HEAPF64[$806>>3]; + $808 = $803 - $807; + $tau3i24 = $808; + $809 = $0; + $810 = ((($809)) + 32|0); + $811 = +HEAPF64[$810>>3]; + $812 = $0; + $813 = ((($812)) + 80|0); + $814 = +HEAPF64[$813>>3]; + $815 = $811 + $814; + $tau1r19 = $815; + $816 = $0; + $817 = ((($816)) + 32|0); + $818 = +HEAPF64[$817>>3]; + $819 = $0; + $820 = ((($819)) + 80|0); + $821 = +HEAPF64[$820>>3]; + $822 = $818 - $821; + $tau4r25 = $822; + $823 = $0; + $824 = ((($823)) + 32|0); + $825 = ((($824)) + 8|0); + $826 = +HEAPF64[$825>>3]; + $827 = $0; + $828 = ((($827)) + 80|0); + $829 = ((($828)) + 8|0); + $830 = +HEAPF64[$829>>3]; + $831 = $826 + $830; + $tau1i20 = $831; + $832 = $0; + $833 = ((($832)) + 32|0); + $834 = ((($833)) + 8|0); + $835 = +HEAPF64[$834>>3]; + $836 = $0; + $837 = ((($836)) + 80|0); + $838 = ((($837)) + 8|0); + $839 = +HEAPF64[$838>>3]; + $840 = $835 - $839; + $tau4i26 = $840; + $841 = $0; + $842 = ((($841)) + 48|0); + $843 = +HEAPF64[$842>>3]; + $844 = $0; + $845 = ((($844)) + 64|0); + $846 = +HEAPF64[$845>>3]; + $847 = $843 + $846; + $tau2r21 = $847; + $848 = $0; + $849 = ((($848)) + 48|0); + $850 = +HEAPF64[$849>>3]; + $851 = $0; + $852 = ((($851)) + 64|0); + $853 = +HEAPF64[$852>>3]; + $854 = $850 - $853; + $tau5r27 = $854; + $855 = $0; + $856 = ((($855)) + 48|0); + $857 = ((($856)) + 8|0); + $858 = +HEAPF64[$857>>3]; + $859 = $0; + $860 = ((($859)) + 64|0); + $861 = ((($860)) + 8|0); + $862 = +HEAPF64[$861>>3]; + $863 = $858 + $862; + $tau2i22 = $863; + $864 = $0; + $865 = ((($864)) + 48|0); + $866 = ((($865)) + 8|0); + $867 = +HEAPF64[$866>>3]; + $868 = $0; + $869 = ((($868)) + 64|0); + $870 = ((($869)) + 8|0); + $871 = +HEAPF64[$870>>3]; + $872 = $867 - $871; + $tau5i28 = $872; + $873 = $0; + $874 = +HEAPF64[$873>>3]; + $875 = $c131; + $876 = $tau0r17; + $877 = $875 * $876; + $878 = $874 + $877; + $879 = $c232; + $880 = $tau1r19; + $881 = $879 * $880; + $882 = $878 + $881; + $883 = $c3; + $884 = $tau2r21; + $885 = $883 * $884; + $886 = $882 + $885; + $tau6r29 = $886; + $887 = $0; + $888 = ((($887)) + 8|0); + $889 = +HEAPF64[$888>>3]; + $890 = $c131; + $891 = $tau0i18; + $892 = $890 * $891; + $893 = $889 + $892; + $894 = $c232; + $895 = $tau1i20; + $896 = $894 * $895; + $897 = $893 + $896; + $898 = $c3; + $899 = $tau2i22; + $900 = $898 * $899; + $901 = $897 + $900; + $tau6i30 = $901; + $902 = $3; + $903 = ($902|0)==(1); + $904 = $s133; + if ($903) { + $905 = -$904; + $906 = $tau3r23; + $907 = $905 * $906; + $908 = $s234; + $909 = $tau4r25; + $910 = $908 * $909; + $911 = $907 - $910; + $912 = $s3; + $913 = $tau5r27; + $914 = $912 * $913; + $915 = $911 - $914; + $tau7r = $915; + $916 = $s133; + $917 = -$916; + $918 = $tau3i24; + $919 = $917 * $918; + $920 = $s234; + $921 = $tau4i26; + $922 = $920 * $921; + $923 = $919 - $922; + $924 = $s3; + $925 = $tau5i28; + $926 = $924 * $925; + $927 = $923 - $926; + $tau7i = $927; + } else { + $928 = $tau3r23; + $929 = $904 * $928; + $930 = $s234; + $931 = $tau4r25; + $932 = $930 * $931; + $933 = $929 + $932; + $934 = $s3; + $935 = $tau5r27; + $936 = $934 * $935; + $937 = $933 + $936; + $tau7r = $937; + $938 = $s133; + $939 = $tau3i24; + $940 = $938 * $939; + $941 = $s234; + $942 = $tau4i26; + $943 = $941 * $942; + $944 = $940 + $943; + $945 = $s3; + $946 = $tau5i28; + $947 = $945 * $946; + $948 = $944 + $947; + $tau7i = $948; + } + $949 = $tau6r29; + $950 = $tau7i; + $951 = $949 - $950; + $952 = $0; + $953 = ((($952)) + 16|0); + HEAPF64[$953>>3] = $951; + $954 = $tau6r29; + $955 = $tau7i; + $956 = $954 + $955; + $957 = $0; + $958 = ((($957)) + 96|0); + HEAPF64[$958>>3] = $956; + $959 = $tau6i30; + $960 = $tau7r; + $961 = $959 + $960; + $962 = $0; + $963 = ((($962)) + 16|0); + $964 = ((($963)) + 8|0); + HEAPF64[$964>>3] = $961; + $965 = $tau6i30; + $966 = $tau7r; + $967 = $965 - $966; + $968 = $0; + $969 = ((($968)) + 96|0); + $970 = ((($969)) + 8|0); + HEAPF64[$970>>3] = $967; + $971 = $0; + $972 = +HEAPF64[$971>>3]; + $973 = $c232; + $974 = $tau0r17; + $975 = $973 * $974; + $976 = $972 + $975; + $977 = $c3; + $978 = $tau1r19; + $979 = $977 * $978; + $980 = $976 + $979; + $981 = $c131; + $982 = $tau2r21; + $983 = $981 * $982; + $984 = $980 + $983; + $tau6r29 = $984; + $985 = $0; + $986 = ((($985)) + 8|0); + $987 = +HEAPF64[$986>>3]; + $988 = $c232; + $989 = $tau0i18; + $990 = $988 * $989; + $991 = $987 + $990; + $992 = $c3; + $993 = $tau1i20; + $994 = $992 * $993; + $995 = $991 + $994; + $996 = $c131; + $997 = $tau2i22; + $998 = $996 * $997; + $999 = $995 + $998; + $tau6i30 = $999; + $1000 = $3; + $1001 = ($1000|0)==(1); + $1002 = $s234; + if ($1001) { + $1003 = -$1002; + $1004 = $tau3r23; + $1005 = $1003 * $1004; + $1006 = $s3; + $1007 = $tau4r25; + $1008 = $1006 * $1007; + $1009 = $1005 + $1008; + $1010 = $s133; + $1011 = $tau5r27; + $1012 = $1010 * $1011; + $1013 = $1009 + $1012; + $tau7r = $1013; + $1014 = $s234; + $1015 = -$1014; + $1016 = $tau3i24; + $1017 = $1015 * $1016; + $1018 = $s3; + $1019 = $tau4i26; + $1020 = $1018 * $1019; + $1021 = $1017 + $1020; + $1022 = $s133; + $1023 = $tau5i28; + $1024 = $1022 * $1023; + $1025 = $1021 + $1024; + $tau7i = $1025; + } else { + $1026 = $tau3r23; + $1027 = $1002 * $1026; + $1028 = $s3; + $1029 = $tau4r25; + $1030 = $1028 * $1029; + $1031 = $1027 - $1030; + $1032 = $s133; + $1033 = $tau5r27; + $1034 = $1032 * $1033; + $1035 = $1031 - $1034; + $tau7r = $1035; + $1036 = $s234; + $1037 = $tau3i24; + $1038 = $1036 * $1037; + $1039 = $s3; + $1040 = $tau4i26; + $1041 = $1039 * $1040; + $1042 = $1038 - $1041; + $1043 = $s133; + $1044 = $tau5i28; + $1045 = $1043 * $1044; + $1046 = $1042 - $1045; + $tau7i = $1046; + } + $1047 = $tau6r29; + $1048 = $tau7i; + $1049 = $1047 - $1048; + $1050 = $0; + $1051 = ((($1050)) + 32|0); + HEAPF64[$1051>>3] = $1049; + $1052 = $tau6r29; + $1053 = $tau7i; + $1054 = $1052 + $1053; + $1055 = $0; + $1056 = ((($1055)) + 80|0); + HEAPF64[$1056>>3] = $1054; + $1057 = $tau6i30; + $1058 = $tau7r; + $1059 = $1057 + $1058; + $1060 = $0; + $1061 = ((($1060)) + 32|0); + $1062 = ((($1061)) + 8|0); + HEAPF64[$1062>>3] = $1059; + $1063 = $tau6i30; + $1064 = $tau7r; + $1065 = $1063 - $1064; + $1066 = $0; + $1067 = ((($1066)) + 80|0); + $1068 = ((($1067)) + 8|0); + HEAPF64[$1068>>3] = $1065; + $1069 = $0; + $1070 = +HEAPF64[$1069>>3]; + $1071 = $c3; + $1072 = $tau0r17; + $1073 = $1071 * $1072; + $1074 = $1070 + $1073; + $1075 = $c131; + $1076 = $tau1r19; + $1077 = $1075 * $1076; + $1078 = $1074 + $1077; + $1079 = $c232; + $1080 = $tau2r21; + $1081 = $1079 * $1080; + $1082 = $1078 + $1081; + $tau6r29 = $1082; + $1083 = $0; + $1084 = ((($1083)) + 8|0); + $1085 = +HEAPF64[$1084>>3]; + $1086 = $c3; + $1087 = $tau0i18; + $1088 = $1086 * $1087; + $1089 = $1085 + $1088; + $1090 = $c131; + $1091 = $tau1i20; + $1092 = $1090 * $1091; + $1093 = $1089 + $1092; + $1094 = $c232; + $1095 = $tau2i22; + $1096 = $1094 * $1095; + $1097 = $1093 + $1096; + $tau6i30 = $1097; + $1098 = $3; + $1099 = ($1098|0)==(1); + $1100 = $s3; + if ($1099) { + $1101 = -$1100; + $1102 = $tau3r23; + $1103 = $1101 * $1102; + $1104 = $s133; + $1105 = $tau4r25; + $1106 = $1104 * $1105; + $1107 = $1103 + $1106; + $1108 = $s234; + $1109 = $tau5r27; + $1110 = $1108 * $1109; + $1111 = $1107 - $1110; + $tau7r = $1111; + $1112 = $s3; + $1113 = -$1112; + $1114 = $tau3i24; + $1115 = $1113 * $1114; + $1116 = $s133; + $1117 = $tau4i26; + $1118 = $1116 * $1117; + $1119 = $1115 + $1118; + $1120 = $s234; + $1121 = $tau5i28; + $1122 = $1120 * $1121; + $1123 = $1119 - $1122; + $tau7i = $1123; + } else { + $1124 = $tau3r23; + $1125 = $1100 * $1124; + $1126 = $s133; + $1127 = $tau4r25; + $1128 = $1126 * $1127; + $1129 = $1125 - $1128; + $1130 = $s234; + $1131 = $tau5r27; + $1132 = $1130 * $1131; + $1133 = $1129 + $1132; + $tau7r = $1133; + $1134 = $s3; + $1135 = $tau3i24; + $1136 = $1134 * $1135; + $1137 = $s133; + $1138 = $tau4i26; + $1139 = $1137 * $1138; + $1140 = $1136 - $1139; + $1141 = $s234; + $1142 = $tau5i28; + $1143 = $1141 * $1142; + $1144 = $1140 + $1143; + $tau7i = $1144; + } + $1145 = $tau6r29; + $1146 = $tau7i; + $1147 = $1145 - $1146; + $1148 = $0; + $1149 = ((($1148)) + 48|0); + HEAPF64[$1149>>3] = $1147; + $1150 = $tau6r29; + $1151 = $tau7i; + $1152 = $1150 + $1151; + $1153 = $0; + $1154 = ((($1153)) + 64|0); + HEAPF64[$1154>>3] = $1152; + $1155 = $tau6i30; + $1156 = $tau7r; + $1157 = $1155 + $1156; + $1158 = $0; + $1159 = ((($1158)) + 48|0); + $1160 = ((($1159)) + 8|0); + HEAPF64[$1160>>3] = $1157; + $1161 = $tau6i30; + $1162 = $tau7r; + $1163 = $1161 - $1162; + $1164 = $0; + $1165 = ((($1164)) + 64|0); + $1166 = ((($1165)) + 8|0); + HEAPF64[$1166>>3] = $1163; + $1167 = $tau0r17; + $1168 = $tau1r19; + $1169 = $1167 + $1168; + $1170 = $tau2r21; + $1171 = $1169 + $1170; + $1172 = $0; + $1173 = +HEAPF64[$1172>>3]; + $1174 = $1173 + $1171; + HEAPF64[$1172>>3] = $1174; + $1175 = $tau0i18; + $1176 = $tau1i20; + $1177 = $1175 + $1176; + $1178 = $tau2i22; + $1179 = $1177 + $1178; + $1180 = $0; + $1181 = ((($1180)) + 8|0); + $1182 = +HEAPF64[$1181>>3]; + $1183 = $1182 + $1179; + HEAPF64[$1181>>3] = $1183; + STACKTOP = sp;return; + } + $1184 = $4; + $1185 = ($1184|0)==(8); + if ($1185) { + $1186 = $1; + $1187 = +HEAPF64[$1186>>3]; + $1188 = $0; + HEAPF64[$1188>>3] = $1187; + $1189 = $1; + $1190 = ((($1189)) + 8|0); + $1191 = +HEAPF64[$1190>>3]; + $1192 = $0; + $1193 = ((($1192)) + 8|0); + HEAPF64[$1193>>3] = $1191; + $1194 = $5; + $1195 = $1; + $1196 = (($1195) + ($1194<<4)|0); + $1197 = +HEAPF64[$1196>>3]; + $1198 = $0; + $1199 = ((($1198)) + 16|0); + HEAPF64[$1199>>3] = $1197; + $1200 = $5; + $1201 = $1; + $1202 = (($1201) + ($1200<<4)|0); + $1203 = ((($1202)) + 8|0); + $1204 = +HEAPF64[$1203>>3]; + $1205 = $0; + $1206 = ((($1205)) + 16|0); + $1207 = ((($1206)) + 8|0); + HEAPF64[$1207>>3] = $1204; + $1208 = $5; + $1209 = $1208<<1; + $1210 = $1; + $1211 = (($1210) + ($1209<<4)|0); + $1212 = +HEAPF64[$1211>>3]; + $1213 = $0; + $1214 = ((($1213)) + 32|0); + HEAPF64[$1214>>3] = $1212; + $1215 = $5; + $1216 = $1215<<1; + $1217 = $1; + $1218 = (($1217) + ($1216<<4)|0); + $1219 = ((($1218)) + 8|0); + $1220 = +HEAPF64[$1219>>3]; + $1221 = $0; + $1222 = ((($1221)) + 32|0); + $1223 = ((($1222)) + 8|0); + HEAPF64[$1223>>3] = $1220; + $1224 = $5; + $1225 = ($1224*3)|0; + $1226 = $1; + $1227 = (($1226) + ($1225<<4)|0); + $1228 = +HEAPF64[$1227>>3]; + $1229 = $0; + $1230 = ((($1229)) + 48|0); + HEAPF64[$1230>>3] = $1228; + $1231 = $5; + $1232 = ($1231*3)|0; + $1233 = $1; + $1234 = (($1233) + ($1232<<4)|0); + $1235 = ((($1234)) + 8|0); + $1236 = +HEAPF64[$1235>>3]; + $1237 = $0; + $1238 = ((($1237)) + 48|0); + $1239 = ((($1238)) + 8|0); + HEAPF64[$1239>>3] = $1236; + $1240 = $5; + $1241 = $1240<<2; + $1242 = $1; + $1243 = (($1242) + ($1241<<4)|0); + $1244 = +HEAPF64[$1243>>3]; + $1245 = $0; + $1246 = ((($1245)) + 64|0); + HEAPF64[$1246>>3] = $1244; + $1247 = $5; + $1248 = $1247<<2; + $1249 = $1; + $1250 = (($1249) + ($1248<<4)|0); + $1251 = ((($1250)) + 8|0); + $1252 = +HEAPF64[$1251>>3]; + $1253 = $0; + $1254 = ((($1253)) + 64|0); + $1255 = ((($1254)) + 8|0); + HEAPF64[$1255>>3] = $1252; + $1256 = $5; + $1257 = ($1256*5)|0; + $1258 = $1; + $1259 = (($1258) + ($1257<<4)|0); + $1260 = +HEAPF64[$1259>>3]; + $1261 = $0; + $1262 = ((($1261)) + 80|0); + HEAPF64[$1262>>3] = $1260; + $1263 = $5; + $1264 = ($1263*5)|0; + $1265 = $1; + $1266 = (($1265) + ($1264<<4)|0); + $1267 = ((($1266)) + 8|0); + $1268 = +HEAPF64[$1267>>3]; + $1269 = $0; + $1270 = ((($1269)) + 80|0); + $1271 = ((($1270)) + 8|0); + HEAPF64[$1271>>3] = $1268; + $1272 = $5; + $1273 = ($1272*6)|0; + $1274 = $1; + $1275 = (($1274) + ($1273<<4)|0); + $1276 = +HEAPF64[$1275>>3]; + $1277 = $0; + $1278 = ((($1277)) + 96|0); + HEAPF64[$1278>>3] = $1276; + $1279 = $5; + $1280 = ($1279*6)|0; + $1281 = $1; + $1282 = (($1281) + ($1280<<4)|0); + $1283 = ((($1282)) + 8|0); + $1284 = +HEAPF64[$1283>>3]; + $1285 = $0; + $1286 = ((($1285)) + 96|0); + $1287 = ((($1286)) + 8|0); + HEAPF64[$1287>>3] = $1284; + $1288 = $5; + $1289 = ($1288*7)|0; + $1290 = $1; + $1291 = (($1290) + ($1289<<4)|0); + $1292 = +HEAPF64[$1291>>3]; + $1293 = $0; + $1294 = ((($1293)) + 112|0); + HEAPF64[$1294>>3] = $1292; + $1295 = $5; + $1296 = ($1295*7)|0; + $1297 = $1; + $1298 = (($1297) + ($1296<<4)|0); + $1299 = ((($1298)) + 8|0); + $1300 = +HEAPF64[$1299>>3]; + $1301 = $0; + $1302 = ((($1301)) + 112|0); + $1303 = ((($1302)) + 8|0); + HEAPF64[$1303>>3] = $1300; + $c151 = 0.70710678118654757; + $s152 = 0.70710678118654757; + $1304 = $0; + $1305 = +HEAPF64[$1304>>3]; + $1306 = $0; + $1307 = ((($1306)) + 64|0); + $1308 = +HEAPF64[$1307>>3]; + $1309 = $1305 + $1308; + $tau0r35 = $1309; + $1310 = $0; + $1311 = +HEAPF64[$1310>>3]; + $1312 = $0; + $1313 = ((($1312)) + 64|0); + $1314 = +HEAPF64[$1313>>3]; + $1315 = $1311 - $1314; + $tau4r43 = $1315; + $1316 = $0; + $1317 = ((($1316)) + 8|0); + $1318 = +HEAPF64[$1317>>3]; + $1319 = $0; + $1320 = ((($1319)) + 64|0); + $1321 = ((($1320)) + 8|0); + $1322 = +HEAPF64[$1321>>3]; + $1323 = $1318 + $1322; + $tau0i36 = $1323; + $1324 = $0; + $1325 = ((($1324)) + 8|0); + $1326 = +HEAPF64[$1325>>3]; + $1327 = $0; + $1328 = ((($1327)) + 64|0); + $1329 = ((($1328)) + 8|0); + $1330 = +HEAPF64[$1329>>3]; + $1331 = $1326 - $1330; + $tau4i44 = $1331; + $1332 = $0; + $1333 = ((($1332)) + 16|0); + $1334 = +HEAPF64[$1333>>3]; + $1335 = $0; + $1336 = ((($1335)) + 112|0); + $1337 = +HEAPF64[$1336>>3]; + $1338 = $1334 + $1337; + $tau1r37 = $1338; + $1339 = $0; + $1340 = ((($1339)) + 16|0); + $1341 = +HEAPF64[$1340>>3]; + $1342 = $0; + $1343 = ((($1342)) + 112|0); + $1344 = +HEAPF64[$1343>>3]; + $1345 = $1341 - $1344; + $tau5r45 = $1345; + $1346 = $0; + $1347 = ((($1346)) + 16|0); + $1348 = ((($1347)) + 8|0); + $1349 = +HEAPF64[$1348>>3]; + $1350 = $0; + $1351 = ((($1350)) + 112|0); + $1352 = ((($1351)) + 8|0); + $1353 = +HEAPF64[$1352>>3]; + $1354 = $1349 + $1353; + $tau1i38 = $1354; + $1355 = $0; + $1356 = ((($1355)) + 16|0); + $1357 = ((($1356)) + 8|0); + $1358 = +HEAPF64[$1357>>3]; + $1359 = $0; + $1360 = ((($1359)) + 112|0); + $1361 = ((($1360)) + 8|0); + $1362 = +HEAPF64[$1361>>3]; + $1363 = $1358 - $1362; + $tau5i46 = $1363; + $1364 = $0; + $1365 = ((($1364)) + 48|0); + $1366 = +HEAPF64[$1365>>3]; + $1367 = $0; + $1368 = ((($1367)) + 80|0); + $1369 = +HEAPF64[$1368>>3]; + $1370 = $1366 + $1369; + $tau2r39 = $1370; + $1371 = $0; + $1372 = ((($1371)) + 48|0); + $1373 = +HEAPF64[$1372>>3]; + $1374 = $0; + $1375 = ((($1374)) + 80|0); + $1376 = +HEAPF64[$1375>>3]; + $1377 = $1373 - $1376; + $tau6r47 = $1377; + $1378 = $0; + $1379 = ((($1378)) + 48|0); + $1380 = ((($1379)) + 8|0); + $1381 = +HEAPF64[$1380>>3]; + $1382 = $0; + $1383 = ((($1382)) + 80|0); + $1384 = ((($1383)) + 8|0); + $1385 = +HEAPF64[$1384>>3]; + $1386 = $1381 + $1385; + $tau2i40 = $1386; + $1387 = $0; + $1388 = ((($1387)) + 48|0); + $1389 = ((($1388)) + 8|0); + $1390 = +HEAPF64[$1389>>3]; + $1391 = $0; + $1392 = ((($1391)) + 80|0); + $1393 = ((($1392)) + 8|0); + $1394 = +HEAPF64[$1393>>3]; + $1395 = $1390 - $1394; + $tau6i48 = $1395; + $1396 = $0; + $1397 = ((($1396)) + 32|0); + $1398 = +HEAPF64[$1397>>3]; + $1399 = $0; + $1400 = ((($1399)) + 96|0); + $1401 = +HEAPF64[$1400>>3]; + $1402 = $1398 + $1401; + $tau3r41 = $1402; + $1403 = $0; + $1404 = ((($1403)) + 32|0); + $1405 = +HEAPF64[$1404>>3]; + $1406 = $0; + $1407 = ((($1406)) + 96|0); + $1408 = +HEAPF64[$1407>>3]; + $1409 = $1405 - $1408; + $tau7r49 = $1409; + $1410 = $0; + $1411 = ((($1410)) + 32|0); + $1412 = ((($1411)) + 8|0); + $1413 = +HEAPF64[$1412>>3]; + $1414 = $0; + $1415 = ((($1414)) + 96|0); + $1416 = ((($1415)) + 8|0); + $1417 = +HEAPF64[$1416>>3]; + $1418 = $1413 + $1417; + $tau3i42 = $1418; + $1419 = $0; + $1420 = ((($1419)) + 32|0); + $1421 = ((($1420)) + 8|0); + $1422 = +HEAPF64[$1421>>3]; + $1423 = $0; + $1424 = ((($1423)) + 96|0); + $1425 = ((($1424)) + 8|0); + $1426 = +HEAPF64[$1425>>3]; + $1427 = $1422 - $1426; + $tau7i50 = $1427; + $1428 = $tau0r35; + $1429 = $tau1r37; + $1430 = $1428 + $1429; + $1431 = $tau2r39; + $1432 = $1430 + $1431; + $1433 = $tau3r41; + $1434 = $1432 + $1433; + $1435 = $0; + HEAPF64[$1435>>3] = $1434; + $1436 = $tau0i36; + $1437 = $tau1i38; + $1438 = $1436 + $1437; + $1439 = $tau2i40; + $1440 = $1438 + $1439; + $1441 = $tau3i42; + $1442 = $1440 + $1441; + $1443 = $0; + $1444 = ((($1443)) + 8|0); + HEAPF64[$1444>>3] = $1442; + $1445 = $tau0r35; + $1446 = $tau1r37; + $1447 = $1445 - $1446; + $1448 = $tau2r39; + $1449 = $1447 - $1448; + $1450 = $tau3r41; + $1451 = $1449 + $1450; + $1452 = $0; + $1453 = ((($1452)) + 64|0); + HEAPF64[$1453>>3] = $1451; + $1454 = $tau0i36; + $1455 = $tau1i38; + $1456 = $1454 - $1455; + $1457 = $tau2i40; + $1458 = $1456 - $1457; + $1459 = $tau3i42; + $1460 = $1458 + $1459; + $1461 = $0; + $1462 = ((($1461)) + 64|0); + $1463 = ((($1462)) + 8|0); + HEAPF64[$1463>>3] = $1460; + $1464 = $tau1r37; + $1465 = $tau2r39; + $1466 = $1464 - $1465; + $temp1r = $1466; + $1467 = $tau1i38; + $1468 = $tau2i40; + $1469 = $1467 - $1468; + $temp1i = $1469; + $1470 = $tau5r45; + $1471 = $tau6r47; + $1472 = $1470 + $1471; + $temp2r = $1472; + $1473 = $tau5i46; + $1474 = $tau6i48; + $1475 = $1473 + $1474; + $temp2i = $1475; + $1476 = $tau4r43; + $1477 = $c151; + $1478 = $temp1r; + $1479 = $1477 * $1478; + $1480 = $1476 + $1479; + $tau8r = $1480; + $1481 = $tau4i44; + $1482 = $c151; + $1483 = $temp1i; + $1484 = $1482 * $1483; + $1485 = $1481 + $1484; + $tau8i = $1485; + $1486 = $3; + $1487 = ($1486|0)==(1); + $1488 = $s152; + if ($1487) { + $1489 = -$1488; + $1490 = $temp2r; + $1491 = $1489 * $1490; + $1492 = $tau7r49; + $1493 = $1491 - $1492; + $tau9r = $1493; + $1494 = $s152; + $1495 = -$1494; + $1496 = $temp2i; + $1497 = $1495 * $1496; + $1498 = $tau7i50; + $1499 = $1497 - $1498; + $tau9i = $1499; + } else { + $1500 = $temp2r; + $1501 = $1488 * $1500; + $1502 = $tau7r49; + $1503 = $1501 + $1502; + $tau9r = $1503; + $1504 = $s152; + $1505 = $temp2i; + $1506 = $1504 * $1505; + $1507 = $tau7i50; + $1508 = $1506 + $1507; + $tau9i = $1508; + } + $1509 = $tau8r; + $1510 = $tau9i; + $1511 = $1509 - $1510; + $1512 = $0; + $1513 = ((($1512)) + 16|0); + HEAPF64[$1513>>3] = $1511; + $1514 = $tau8i; + $1515 = $tau9r; + $1516 = $1514 + $1515; + $1517 = $0; + $1518 = ((($1517)) + 16|0); + $1519 = ((($1518)) + 8|0); + HEAPF64[$1519>>3] = $1516; + $1520 = $tau8r; + $1521 = $tau9i; + $1522 = $1520 + $1521; + $1523 = $0; + $1524 = ((($1523)) + 112|0); + HEAPF64[$1524>>3] = $1522; + $1525 = $tau8i; + $1526 = $tau9r; + $1527 = $1525 - $1526; + $1528 = $0; + $1529 = ((($1528)) + 112|0); + $1530 = ((($1529)) + 8|0); + HEAPF64[$1530>>3] = $1527; + $1531 = $tau0r35; + $1532 = $tau3r41; + $1533 = $1531 - $1532; + $tau8r = $1533; + $1534 = $tau0i36; + $1535 = $tau3i42; + $1536 = $1534 - $1535; + $tau8i = $1536; + $1537 = $3; + $1538 = ($1537|0)==(1); + $1539 = $tau5r45; + if ($1538) { + $1540 = -$1539; + $1541 = $tau6r47; + $1542 = $1540 + $1541; + $tau9r = $1542; + $1543 = $tau5i46; + $1544 = -$1543; + $1545 = $tau6i48; + $1546 = $1544 + $1545; + $tau9i = $1546; + } else { + $1547 = $tau6r47; + $1548 = $1539 - $1547; + $tau9r = $1548; + $1549 = $tau5i46; + $1550 = $tau6i48; + $1551 = $1549 - $1550; + $tau9i = $1551; + } + $1552 = $tau8r; + $1553 = $tau9i; + $1554 = $1552 - $1553; + $1555 = $0; + $1556 = ((($1555)) + 32|0); + HEAPF64[$1556>>3] = $1554; + $1557 = $tau8i; + $1558 = $tau9r; + $1559 = $1557 + $1558; + $1560 = $0; + $1561 = ((($1560)) + 32|0); + $1562 = ((($1561)) + 8|0); + HEAPF64[$1562>>3] = $1559; + $1563 = $tau8r; + $1564 = $tau9i; + $1565 = $1563 + $1564; + $1566 = $0; + $1567 = ((($1566)) + 96|0); + HEAPF64[$1567>>3] = $1565; + $1568 = $tau8i; + $1569 = $tau9r; + $1570 = $1568 - $1569; + $1571 = $0; + $1572 = ((($1571)) + 96|0); + $1573 = ((($1572)) + 8|0); + HEAPF64[$1573>>3] = $1570; + $1574 = $tau4r43; + $1575 = $c151; + $1576 = $temp1r; + $1577 = $1575 * $1576; + $1578 = $1574 - $1577; + $tau8r = $1578; + $1579 = $tau4i44; + $1580 = $c151; + $1581 = $temp1i; + $1582 = $1580 * $1581; + $1583 = $1579 - $1582; + $tau8i = $1583; + $1584 = $3; + $1585 = ($1584|0)==(1); + $1586 = $s152; + if ($1585) { + $1587 = -$1586; + $1588 = $temp2r; + $1589 = $1587 * $1588; + $1590 = $tau7r49; + $1591 = $1589 + $1590; + $tau9r = $1591; + $1592 = $s152; + $1593 = -$1592; + $1594 = $temp2i; + $1595 = $1593 * $1594; + $1596 = $tau7i50; + $1597 = $1595 + $1596; + $tau9i = $1597; + } else { + $1598 = $temp2r; + $1599 = $1586 * $1598; + $1600 = $tau7r49; + $1601 = $1599 - $1600; + $tau9r = $1601; + $1602 = $s152; + $1603 = $temp2i; + $1604 = $1602 * $1603; + $1605 = $tau7i50; + $1606 = $1604 - $1605; + $tau9i = $1606; + } + $1607 = $tau8r; + $1608 = $tau9i; + $1609 = $1607 - $1608; + $1610 = $0; + $1611 = ((($1610)) + 48|0); + HEAPF64[$1611>>3] = $1609; + $1612 = $tau8i; + $1613 = $tau9r; + $1614 = $1612 + $1613; + $1615 = $0; + $1616 = ((($1615)) + 48|0); + $1617 = ((($1616)) + 8|0); + HEAPF64[$1617>>3] = $1614; + $1618 = $tau8r; + $1619 = $tau9i; + $1620 = $1618 + $1619; + $1621 = $0; + $1622 = ((($1621)) + 80|0); + HEAPF64[$1622>>3] = $1620; + $1623 = $tau8i; + $1624 = $tau9r; + $1625 = $1623 - $1624; + $1626 = $0; + $1627 = ((($1626)) + 80|0); + $1628 = ((($1627)) + 8|0); + HEAPF64[$1628>>3] = $1625; + STACKTOP = sp;return; + } + $1629 = $radix; + $1630 = ($1629|0)==(2); + if ($1630) { + $1631 = $4; + $1632 = (($1631|0) / 2)&-1; + $m = $1632; + $1633 = $5; + $1634 = $1633<<1; + $ll = $1634; + $1635 = $0; + $1636 = $1; + $1637 = $2; + $1638 = $3; + $1639 = $m; + $1640 = $ll; + $1641 = $6; + $1642 = (($1641) + 1)|0; + _mixed_radix_dit_rec($1635,$1636,$1637,$1638,$1639,$1640,$1642); + $1643 = $0; + $1644 = $m; + $1645 = (($1643) + ($1644<<4)|0); + $1646 = $1; + $1647 = $5; + $1648 = (($1646) + ($1647<<4)|0); + $1649 = $2; + $1650 = $3; + $1651 = $m; + $1652 = $ll; + $1653 = $6; + $1654 = (($1653) + 1)|0; + _mixed_radix_dit_rec($1645,$1648,$1649,$1650,$1651,$1652,$1654); + $k = 0; + while(1) { + $1655 = $k; + $1656 = $m; + $1657 = ($1655|0)<($1656|0); + if (!($1657)) { + break; + } + $1658 = $m; + $1659 = (($1658) - 1)|0; + $1660 = $k; + $1661 = (($1659) + ($1660))|0; + $ind = $1661; + $1662 = $2; + $1663 = ((($1662)) + 272|0); + $1664 = $ind; + $1665 = (($1663) + ($1664<<4)|0); + $1666 = +HEAPF64[$1665>>3]; + $wlr = $1666; + $1667 = $2; + $1668 = ((($1667)) + 272|0); + $1669 = $ind; + $1670 = (($1668) + ($1669<<4)|0); + $1671 = ((($1670)) + 8|0); + $1672 = +HEAPF64[$1671>>3]; + $wli = $1672; + $1673 = $k; + $1674 = $m; + $1675 = (($1673) + ($1674))|0; + $tkm1 = $1675; + $1676 = $k; + $1677 = $0; + $1678 = (($1677) + ($1676<<4)|0); + $1679 = +HEAPF64[$1678>>3]; + $tau1r53 = $1679; + $1680 = $k; + $1681 = $0; + $1682 = (($1681) + ($1680<<4)|0); + $1683 = ((($1682)) + 8|0); + $1684 = +HEAPF64[$1683>>3]; + $tau1i54 = $1684; + $1685 = $tkm1; + $1686 = $0; + $1687 = (($1686) + ($1685<<4)|0); + $1688 = +HEAPF64[$1687>>3]; + $1689 = $wlr; + $1690 = $1688 * $1689; + $1691 = $tkm1; + $1692 = $0; + $1693 = (($1692) + ($1691<<4)|0); + $1694 = ((($1693)) + 8|0); + $1695 = +HEAPF64[$1694>>3]; + $1696 = $wli; + $1697 = $1695 * $1696; + $1698 = $1690 - $1697; + $tau2r55 = $1698; + $1699 = $tkm1; + $1700 = $0; + $1701 = (($1700) + ($1699<<4)|0); + $1702 = ((($1701)) + 8|0); + $1703 = +HEAPF64[$1702>>3]; + $1704 = $wlr; + $1705 = $1703 * $1704; + $1706 = $tkm1; + $1707 = $0; + $1708 = (($1707) + ($1706<<4)|0); + $1709 = +HEAPF64[$1708>>3]; + $1710 = $wli; + $1711 = $1709 * $1710; + $1712 = $1705 + $1711; + $tau2i56 = $1712; + $1713 = $tau1r53; + $1714 = $tau2r55; + $1715 = $1713 + $1714; + $1716 = $k; + $1717 = $0; + $1718 = (($1717) + ($1716<<4)|0); + HEAPF64[$1718>>3] = $1715; + $1719 = $tau1i54; + $1720 = $tau2i56; + $1721 = $1719 + $1720; + $1722 = $k; + $1723 = $0; + $1724 = (($1723) + ($1722<<4)|0); + $1725 = ((($1724)) + 8|0); + HEAPF64[$1725>>3] = $1721; + $1726 = $tau1r53; + $1727 = $tau2r55; + $1728 = $1726 - $1727; + $1729 = $tkm1; + $1730 = $0; + $1731 = (($1730) + ($1729<<4)|0); + HEAPF64[$1731>>3] = $1728; + $1732 = $tau1i54; + $1733 = $tau2i56; + $1734 = $1732 - $1733; + $1735 = $tkm1; + $1736 = $0; + $1737 = (($1736) + ($1735<<4)|0); + $1738 = ((($1737)) + 8|0); + HEAPF64[$1738>>3] = $1734; + $1739 = $k; + $1740 = (($1739) + 1)|0; + $k = $1740; + } + STACKTOP = sp;return; + } + $1741 = $radix; + $1742 = ($1741|0)==(3); + if ($1742) { + $1743 = $4; + $1744 = (($1743|0) / 3)&-1; + $m = $1744; + $1745 = $5; + $1746 = ($1745*3)|0; + $ll = $1746; + $1747 = $0; + $1748 = $1; + $1749 = $2; + $1750 = $3; + $1751 = $m; + $1752 = $ll; + $1753 = $6; + $1754 = (($1753) + 1)|0; + _mixed_radix_dit_rec($1747,$1748,$1749,$1750,$1751,$1752,$1754); + $1755 = $0; + $1756 = $m; + $1757 = (($1755) + ($1756<<4)|0); + $1758 = $1; + $1759 = $5; + $1760 = (($1758) + ($1759<<4)|0); + $1761 = $2; + $1762 = $3; + $1763 = $m; + $1764 = $ll; + $1765 = $6; + $1766 = (($1765) + 1)|0; + _mixed_radix_dit_rec($1757,$1760,$1761,$1762,$1763,$1764,$1766); + $1767 = $0; + $1768 = $m; + $1769 = $1768<<1; + $1770 = (($1767) + ($1769<<4)|0); + $1771 = $1; + $1772 = $5; + $1773 = $1772<<1; + $1774 = (($1771) + ($1773<<4)|0); + $1775 = $2; + $1776 = $3; + $1777 = $m; + $1778 = $ll; + $1779 = $6; + $1780 = (($1779) + 1)|0; + _mixed_radix_dit_rec($1770,$1774,$1775,$1776,$1777,$1778,$1780); + $k57 = 0; + while(1) { + $1781 = $k57; + $1782 = $m; + $1783 = ($1781|0)<($1782|0); + if (!($1783)) { + break; + } + $1784 = $m; + $1785 = (($1784) - 1)|0; + $1786 = $k57; + $1787 = $1786<<1; + $1788 = (($1785) + ($1787))|0; + $ind59 = $1788; + $1789 = $2; + $1790 = ((($1789)) + 272|0); + $1791 = $ind59; + $1792 = (($1790) + ($1791<<4)|0); + $1793 = +HEAPF64[$1792>>3]; + $wlr60 = $1793; + $1794 = $2; + $1795 = ((($1794)) + 272|0); + $1796 = $ind59; + $1797 = (($1795) + ($1796<<4)|0); + $1798 = ((($1797)) + 8|0); + $1799 = +HEAPF64[$1798>>3]; + $wli61 = $1799; + $1800 = $ind59; + $1801 = (($1800) + 1)|0; + $ind59 = $1801; + $1802 = $2; + $1803 = ((($1802)) + 272|0); + $1804 = $ind59; + $1805 = (($1803) + ($1804<<4)|0); + $1806 = +HEAPF64[$1805>>3]; + $wl2r = $1806; + $1807 = $2; + $1808 = ((($1807)) + 272|0); + $1809 = $ind59; + $1810 = (($1808) + ($1809<<4)|0); + $1811 = ((($1810)) + 8|0); + $1812 = +HEAPF64[$1811>>3]; + $wl2i = $1812; + $1813 = $k57; + $1814 = $m; + $1815 = (($1813) + ($1814))|0; + $tkm158 = $1815; + $1816 = $tkm158; + $1817 = $m; + $1818 = (($1816) + ($1817))|0; + $tkm2 = $1818; + $1819 = $k57; + $1820 = $0; + $1821 = (($1820) + ($1819<<4)|0); + $1822 = +HEAPF64[$1821>>3]; + $ar = $1822; + $1823 = $k57; + $1824 = $0; + $1825 = (($1824) + ($1823<<4)|0); + $1826 = ((($1825)) + 8|0); + $1827 = +HEAPF64[$1826>>3]; + $ai = $1827; + $1828 = $tkm158; + $1829 = $0; + $1830 = (($1829) + ($1828<<4)|0); + $1831 = +HEAPF64[$1830>>3]; + $1832 = $wlr60; + $1833 = $1831 * $1832; + $1834 = $tkm158; + $1835 = $0; + $1836 = (($1835) + ($1834<<4)|0); + $1837 = ((($1836)) + 8|0); + $1838 = +HEAPF64[$1837>>3]; + $1839 = $wli61; + $1840 = $1838 * $1839; + $1841 = $1833 - $1840; + $br = $1841; + $1842 = $tkm158; + $1843 = $0; + $1844 = (($1843) + ($1842<<4)|0); + $1845 = ((($1844)) + 8|0); + $1846 = +HEAPF64[$1845>>3]; + $1847 = $wlr60; + $1848 = $1846 * $1847; + $1849 = $tkm158; + $1850 = $0; + $1851 = (($1850) + ($1849<<4)|0); + $1852 = +HEAPF64[$1851>>3]; + $1853 = $wli61; + $1854 = $1852 * $1853; + $1855 = $1848 + $1854; + $bi = $1855; + $1856 = $tkm2; + $1857 = $0; + $1858 = (($1857) + ($1856<<4)|0); + $1859 = +HEAPF64[$1858>>3]; + $1860 = $wl2r; + $1861 = $1859 * $1860; + $1862 = $tkm2; + $1863 = $0; + $1864 = (($1863) + ($1862<<4)|0); + $1865 = ((($1864)) + 8|0); + $1866 = +HEAPF64[$1865>>3]; + $1867 = $wl2i; + $1868 = $1866 * $1867; + $1869 = $1861 - $1868; + $cr = $1869; + $1870 = $tkm2; + $1871 = $0; + $1872 = (($1871) + ($1870<<4)|0); + $1873 = ((($1872)) + 8|0); + $1874 = +HEAPF64[$1873>>3]; + $1875 = $wl2r; + $1876 = $1874 * $1875; + $1877 = $tkm2; + $1878 = $0; + $1879 = (($1878) + ($1877<<4)|0); + $1880 = +HEAPF64[$1879>>3]; + $1881 = $wl2i; + $1882 = $1880 * $1881; + $1883 = $1876 + $1882; + $ci = $1883; + $1884 = $br; + $1885 = $cr; + $1886 = $1884 + $1885; + $tau0r62 = $1886; + $1887 = $bi; + $1888 = $ci; + $1889 = $1887 + $1888; + $tau0i63 = $1889; + $1890 = $3; + $1891 = (+($1890|0)); + $1892 = $1891 * 0.86602540378000004; + $1893 = $br; + $1894 = $cr; + $1895 = $1893 - $1894; + $1896 = $1892 * $1895; + $tau1r64 = $1896; + $1897 = $3; + $1898 = (+($1897|0)); + $1899 = $1898 * 0.86602540378000004; + $1900 = $bi; + $1901 = $ci; + $1902 = $1900 - $1901; + $1903 = $1899 * $1902; + $tau1i65 = $1903; + $1904 = $ar; + $1905 = $tau0r62; + $1906 = $1905 * 0.5; + $1907 = $1904 - $1906; + $tau2r66 = $1907; + $1908 = $ai; + $1909 = $tau0i63; + $1910 = $1909 * 0.5; + $1911 = $1908 - $1910; + $tau2i67 = $1911; + $1912 = $ar; + $1913 = $tau0r62; + $1914 = $1912 + $1913; + $1915 = $k57; + $1916 = $0; + $1917 = (($1916) + ($1915<<4)|0); + HEAPF64[$1917>>3] = $1914; + $1918 = $ai; + $1919 = $tau0i63; + $1920 = $1918 + $1919; + $1921 = $k57; + $1922 = $0; + $1923 = (($1922) + ($1921<<4)|0); + $1924 = ((($1923)) + 8|0); + HEAPF64[$1924>>3] = $1920; + $1925 = $tau2r66; + $1926 = $tau1i65; + $1927 = $1925 + $1926; + $1928 = $tkm158; + $1929 = $0; + $1930 = (($1929) + ($1928<<4)|0); + HEAPF64[$1930>>3] = $1927; + $1931 = $tau2i67; + $1932 = $tau1r64; + $1933 = $1931 - $1932; + $1934 = $tkm158; + $1935 = $0; + $1936 = (($1935) + ($1934<<4)|0); + $1937 = ((($1936)) + 8|0); + HEAPF64[$1937>>3] = $1933; + $1938 = $tau2r66; + $1939 = $tau1i65; + $1940 = $1938 - $1939; + $1941 = $tkm2; + $1942 = $0; + $1943 = (($1942) + ($1941<<4)|0); + HEAPF64[$1943>>3] = $1940; + $1944 = $tau2i67; + $1945 = $tau1r64; + $1946 = $1944 + $1945; + $1947 = $tkm2; + $1948 = $0; + $1949 = (($1948) + ($1947<<4)|0); + $1950 = ((($1949)) + 8|0); + HEAPF64[$1950>>3] = $1946; + $1951 = $k57; + $1952 = (($1951) + 1)|0; + $k57 = $1952; + } + STACKTOP = sp;return; + } + $1953 = $radix; + $1954 = ($1953|0)==(4); + if ($1954) { + $1955 = $4; + $1956 = (($1955|0) / 4)&-1; + $m = $1956; + $1957 = $5; + $1958 = $1957<<2; + $ll = $1958; + $1959 = $0; + $1960 = $1; + $1961 = $2; + $1962 = $3; + $1963 = $m; + $1964 = $ll; + $1965 = $6; + $1966 = (($1965) + 1)|0; + _mixed_radix_dit_rec($1959,$1960,$1961,$1962,$1963,$1964,$1966); + $1967 = $0; + $1968 = $m; + $1969 = (($1967) + ($1968<<4)|0); + $1970 = $1; + $1971 = $5; + $1972 = (($1970) + ($1971<<4)|0); + $1973 = $2; + $1974 = $3; + $1975 = $m; + $1976 = $ll; + $1977 = $6; + $1978 = (($1977) + 1)|0; + _mixed_radix_dit_rec($1969,$1972,$1973,$1974,$1975,$1976,$1978); + $1979 = $0; + $1980 = $m; + $1981 = $1980<<1; + $1982 = (($1979) + ($1981<<4)|0); + $1983 = $1; + $1984 = $5; + $1985 = $1984<<1; + $1986 = (($1983) + ($1985<<4)|0); + $1987 = $2; + $1988 = $3; + $1989 = $m; + $1990 = $ll; + $1991 = $6; + $1992 = (($1991) + 1)|0; + _mixed_radix_dit_rec($1982,$1986,$1987,$1988,$1989,$1990,$1992); + $1993 = $0; + $1994 = $m; + $1995 = ($1994*3)|0; + $1996 = (($1993) + ($1995<<4)|0); + $1997 = $1; + $1998 = $5; + $1999 = ($1998*3)|0; + $2000 = (($1997) + ($1999<<4)|0); + $2001 = $2; + $2002 = $3; + $2003 = $m; + $2004 = $ll; + $2005 = $6; + $2006 = (($2005) + 1)|0; + _mixed_radix_dit_rec($1996,$2000,$2001,$2002,$2003,$2004,$2006); + $2007 = $m; + $tkm169 = $2007; + $2008 = $tkm169; + $2009 = $m; + $2010 = (($2008) + ($2009))|0; + $tkm270 = $2010; + $2011 = $tkm270; + $2012 = $m; + $2013 = (($2011) + ($2012))|0; + $tkm3 = $2013; + $2014 = $0; + $2015 = +HEAPF64[$2014>>3]; + $ar84 = $2015; + $2016 = $0; + $2017 = ((($2016)) + 8|0); + $2018 = +HEAPF64[$2017>>3]; + $ai85 = $2018; + $2019 = $tkm169; + $2020 = $0; + $2021 = (($2020) + ($2019<<4)|0); + $2022 = +HEAPF64[$2021>>3]; + $br86 = $2022; + $2023 = $tkm169; + $2024 = $0; + $2025 = (($2024) + ($2023<<4)|0); + $2026 = ((($2025)) + 8|0); + $2027 = +HEAPF64[$2026>>3]; + $bi87 = $2027; + $2028 = $tkm270; + $2029 = $0; + $2030 = (($2029) + ($2028<<4)|0); + $2031 = +HEAPF64[$2030>>3]; + $cr88 = $2031; + $2032 = $tkm270; + $2033 = $0; + $2034 = (($2033) + ($2032<<4)|0); + $2035 = ((($2034)) + 8|0); + $2036 = +HEAPF64[$2035>>3]; + $ci89 = $2036; + $2037 = $tkm3; + $2038 = $0; + $2039 = (($2038) + ($2037<<4)|0); + $2040 = +HEAPF64[$2039>>3]; + $dr = $2040; + $2041 = $tkm3; + $2042 = $0; + $2043 = (($2042) + ($2041<<4)|0); + $2044 = ((($2043)) + 8|0); + $2045 = +HEAPF64[$2044>>3]; + $di = $2045; + $2046 = $ar84; + $2047 = $cr88; + $2048 = $2046 + $2047; + $tau0r76 = $2048; + $2049 = $ai85; + $2050 = $ci89; + $2051 = $2049 + $2050; + $tau0i77 = $2051; + $2052 = $ar84; + $2053 = $cr88; + $2054 = $2052 - $2053; + $tau1r78 = $2054; + $2055 = $ai85; + $2056 = $ci89; + $2057 = $2055 - $2056; + $tau1i79 = $2057; + $2058 = $br86; + $2059 = $dr; + $2060 = $2058 + $2059; + $tau2r80 = $2060; + $2061 = $bi87; + $2062 = $di; + $2063 = $2061 + $2062; + $tau2i81 = $2063; + $2064 = $3; + $2065 = (+($2064|0)); + $2066 = $br86; + $2067 = $dr; + $2068 = $2066 - $2067; + $2069 = $2065 * $2068; + $tau3r82 = $2069; + $2070 = $3; + $2071 = (+($2070|0)); + $2072 = $bi87; + $2073 = $di; + $2074 = $2072 - $2073; + $2075 = $2071 * $2074; + $tau3i83 = $2075; + $2076 = $tau0r76; + $2077 = $tau2r80; + $2078 = $2076 + $2077; + $2079 = $0; + HEAPF64[$2079>>3] = $2078; + $2080 = $tau0i77; + $2081 = $tau2i81; + $2082 = $2080 + $2081; + $2083 = $0; + $2084 = ((($2083)) + 8|0); + HEAPF64[$2084>>3] = $2082; + $2085 = $tau1r78; + $2086 = $tau3i83; + $2087 = $2085 + $2086; + $2088 = $tkm169; + $2089 = $0; + $2090 = (($2089) + ($2088<<4)|0); + HEAPF64[$2090>>3] = $2087; + $2091 = $tau1i79; + $2092 = $tau3r82; + $2093 = $2091 - $2092; + $2094 = $tkm169; + $2095 = $0; + $2096 = (($2095) + ($2094<<4)|0); + $2097 = ((($2096)) + 8|0); + HEAPF64[$2097>>3] = $2093; + $2098 = $tau0r76; + $2099 = $tau2r80; + $2100 = $2098 - $2099; + $2101 = $tkm270; + $2102 = $0; + $2103 = (($2102) + ($2101<<4)|0); + HEAPF64[$2103>>3] = $2100; + $2104 = $tau0i77; + $2105 = $tau2i81; + $2106 = $2104 - $2105; + $2107 = $tkm270; + $2108 = $0; + $2109 = (($2108) + ($2107<<4)|0); + $2110 = ((($2109)) + 8|0); + HEAPF64[$2110>>3] = $2106; + $2111 = $tau1r78; + $2112 = $tau3i83; + $2113 = $2111 - $2112; + $2114 = $tkm3; + $2115 = $0; + $2116 = (($2115) + ($2114<<4)|0); + HEAPF64[$2116>>3] = $2113; + $2117 = $tau1i79; + $2118 = $tau3r82; + $2119 = $2117 + $2118; + $2120 = $tkm3; + $2121 = $0; + $2122 = (($2121) + ($2120<<4)|0); + $2123 = ((($2122)) + 8|0); + HEAPF64[$2123>>3] = $2119; + $k68 = 1; + while(1) { + $2124 = $k68; + $2125 = $m; + $2126 = ($2124|0)<($2125|0); + if (!($2126)) { + break; + } + $2127 = $m; + $2128 = (($2127) - 1)|0; + $2129 = $k68; + $2130 = ($2129*3)|0; + $2131 = (($2128) + ($2130))|0; + $ind71 = $2131; + $2132 = $2; + $2133 = ((($2132)) + 272|0); + $2134 = $ind71; + $2135 = (($2133) + ($2134<<4)|0); + $2136 = +HEAPF64[$2135>>3]; + $wlr72 = $2136; + $2137 = $2; + $2138 = ((($2137)) + 272|0); + $2139 = $ind71; + $2140 = (($2138) + ($2139<<4)|0); + $2141 = ((($2140)) + 8|0); + $2142 = +HEAPF64[$2141>>3]; + $wli73 = $2142; + $2143 = $ind71; + $2144 = (($2143) + 1)|0; + $ind71 = $2144; + $2145 = $2; + $2146 = ((($2145)) + 272|0); + $2147 = $ind71; + $2148 = (($2146) + ($2147<<4)|0); + $2149 = +HEAPF64[$2148>>3]; + $wl2r74 = $2149; + $2150 = $2; + $2151 = ((($2150)) + 272|0); + $2152 = $ind71; + $2153 = (($2151) + ($2152<<4)|0); + $2154 = ((($2153)) + 8|0); + $2155 = +HEAPF64[$2154>>3]; + $wl2i75 = $2155; + $2156 = $ind71; + $2157 = (($2156) + 1)|0; + $ind71 = $2157; + $2158 = $2; + $2159 = ((($2158)) + 272|0); + $2160 = $ind71; + $2161 = (($2159) + ($2160<<4)|0); + $2162 = +HEAPF64[$2161>>3]; + $wl3r = $2162; + $2163 = $2; + $2164 = ((($2163)) + 272|0); + $2165 = $ind71; + $2166 = (($2164) + ($2165<<4)|0); + $2167 = ((($2166)) + 8|0); + $2168 = +HEAPF64[$2167>>3]; + $wl3i = $2168; + $2169 = $k68; + $2170 = $m; + $2171 = (($2169) + ($2170))|0; + $tkm169 = $2171; + $2172 = $tkm169; + $2173 = $m; + $2174 = (($2172) + ($2173))|0; + $tkm270 = $2174; + $2175 = $tkm270; + $2176 = $m; + $2177 = (($2175) + ($2176))|0; + $tkm3 = $2177; + $2178 = $k68; + $2179 = $0; + $2180 = (($2179) + ($2178<<4)|0); + $2181 = +HEAPF64[$2180>>3]; + $ar84 = $2181; + $2182 = $k68; + $2183 = $0; + $2184 = (($2183) + ($2182<<4)|0); + $2185 = ((($2184)) + 8|0); + $2186 = +HEAPF64[$2185>>3]; + $ai85 = $2186; + $2187 = $tkm169; + $2188 = $0; + $2189 = (($2188) + ($2187<<4)|0); + $2190 = +HEAPF64[$2189>>3]; + $2191 = $wlr72; + $2192 = $2190 * $2191; + $2193 = $tkm169; + $2194 = $0; + $2195 = (($2194) + ($2193<<4)|0); + $2196 = ((($2195)) + 8|0); + $2197 = +HEAPF64[$2196>>3]; + $2198 = $wli73; + $2199 = $2197 * $2198; + $2200 = $2192 - $2199; + $br86 = $2200; + $2201 = $tkm169; + $2202 = $0; + $2203 = (($2202) + ($2201<<4)|0); + $2204 = ((($2203)) + 8|0); + $2205 = +HEAPF64[$2204>>3]; + $2206 = $wlr72; + $2207 = $2205 * $2206; + $2208 = $tkm169; + $2209 = $0; + $2210 = (($2209) + ($2208<<4)|0); + $2211 = +HEAPF64[$2210>>3]; + $2212 = $wli73; + $2213 = $2211 * $2212; + $2214 = $2207 + $2213; + $bi87 = $2214; + $2215 = $tkm270; + $2216 = $0; + $2217 = (($2216) + ($2215<<4)|0); + $2218 = +HEAPF64[$2217>>3]; + $2219 = $wl2r74; + $2220 = $2218 * $2219; + $2221 = $tkm270; + $2222 = $0; + $2223 = (($2222) + ($2221<<4)|0); + $2224 = ((($2223)) + 8|0); + $2225 = +HEAPF64[$2224>>3]; + $2226 = $wl2i75; + $2227 = $2225 * $2226; + $2228 = $2220 - $2227; + $cr88 = $2228; + $2229 = $tkm270; + $2230 = $0; + $2231 = (($2230) + ($2229<<4)|0); + $2232 = ((($2231)) + 8|0); + $2233 = +HEAPF64[$2232>>3]; + $2234 = $wl2r74; + $2235 = $2233 * $2234; + $2236 = $tkm270; + $2237 = $0; + $2238 = (($2237) + ($2236<<4)|0); + $2239 = +HEAPF64[$2238>>3]; + $2240 = $wl2i75; + $2241 = $2239 * $2240; + $2242 = $2235 + $2241; + $ci89 = $2242; + $2243 = $tkm3; + $2244 = $0; + $2245 = (($2244) + ($2243<<4)|0); + $2246 = +HEAPF64[$2245>>3]; + $2247 = $wl3r; + $2248 = $2246 * $2247; + $2249 = $tkm3; + $2250 = $0; + $2251 = (($2250) + ($2249<<4)|0); + $2252 = ((($2251)) + 8|0); + $2253 = +HEAPF64[$2252>>3]; + $2254 = $wl3i; + $2255 = $2253 * $2254; + $2256 = $2248 - $2255; + $dr = $2256; + $2257 = $tkm3; + $2258 = $0; + $2259 = (($2258) + ($2257<<4)|0); + $2260 = ((($2259)) + 8|0); + $2261 = +HEAPF64[$2260>>3]; + $2262 = $wl3r; + $2263 = $2261 * $2262; + $2264 = $tkm3; + $2265 = $0; + $2266 = (($2265) + ($2264<<4)|0); + $2267 = +HEAPF64[$2266>>3]; + $2268 = $wl3i; + $2269 = $2267 * $2268; + $2270 = $2263 + $2269; + $di = $2270; + $2271 = $ar84; + $2272 = $cr88; + $2273 = $2271 + $2272; + $tau0r76 = $2273; + $2274 = $ai85; + $2275 = $ci89; + $2276 = $2274 + $2275; + $tau0i77 = $2276; + $2277 = $ar84; + $2278 = $cr88; + $2279 = $2277 - $2278; + $tau1r78 = $2279; + $2280 = $ai85; + $2281 = $ci89; + $2282 = $2280 - $2281; + $tau1i79 = $2282; + $2283 = $br86; + $2284 = $dr; + $2285 = $2283 + $2284; + $tau2r80 = $2285; + $2286 = $bi87; + $2287 = $di; + $2288 = $2286 + $2287; + $tau2i81 = $2288; + $2289 = $3; + $2290 = (+($2289|0)); + $2291 = $br86; + $2292 = $dr; + $2293 = $2291 - $2292; + $2294 = $2290 * $2293; + $tau3r82 = $2294; + $2295 = $3; + $2296 = (+($2295|0)); + $2297 = $bi87; + $2298 = $di; + $2299 = $2297 - $2298; + $2300 = $2296 * $2299; + $tau3i83 = $2300; + $2301 = $tau0r76; + $2302 = $tau2r80; + $2303 = $2301 + $2302; + $2304 = $k68; + $2305 = $0; + $2306 = (($2305) + ($2304<<4)|0); + HEAPF64[$2306>>3] = $2303; + $2307 = $tau0i77; + $2308 = $tau2i81; + $2309 = $2307 + $2308; + $2310 = $k68; + $2311 = $0; + $2312 = (($2311) + ($2310<<4)|0); + $2313 = ((($2312)) + 8|0); + HEAPF64[$2313>>3] = $2309; + $2314 = $tau1r78; + $2315 = $tau3i83; + $2316 = $2314 + $2315; + $2317 = $tkm169; + $2318 = $0; + $2319 = (($2318) + ($2317<<4)|0); + HEAPF64[$2319>>3] = $2316; + $2320 = $tau1i79; + $2321 = $tau3r82; + $2322 = $2320 - $2321; + $2323 = $tkm169; + $2324 = $0; + $2325 = (($2324) + ($2323<<4)|0); + $2326 = ((($2325)) + 8|0); + HEAPF64[$2326>>3] = $2322; + $2327 = $tau0r76; + $2328 = $tau2r80; + $2329 = $2327 - $2328; + $2330 = $tkm270; + $2331 = $0; + $2332 = (($2331) + ($2330<<4)|0); + HEAPF64[$2332>>3] = $2329; + $2333 = $tau0i77; + $2334 = $tau2i81; + $2335 = $2333 - $2334; + $2336 = $tkm270; + $2337 = $0; + $2338 = (($2337) + ($2336<<4)|0); + $2339 = ((($2338)) + 8|0); + HEAPF64[$2339>>3] = $2335; + $2340 = $tau1r78; + $2341 = $tau3i83; + $2342 = $2340 - $2341; + $2343 = $tkm3; + $2344 = $0; + $2345 = (($2344) + ($2343<<4)|0); + HEAPF64[$2345>>3] = $2342; + $2346 = $tau1i79; + $2347 = $tau3r82; + $2348 = $2346 + $2347; + $2349 = $tkm3; + $2350 = $0; + $2351 = (($2350) + ($2349<<4)|0); + $2352 = ((($2351)) + 8|0); + HEAPF64[$2352>>3] = $2348; + $2353 = $k68; + $2354 = (($2353) + 1)|0; + $k68 = $2354; + } + STACKTOP = sp;return; + } + $2355 = $radix; + $2356 = ($2355|0)==(5); + if ($2356) { + $2357 = $4; + $2358 = (($2357|0) / 5)&-1; + $m = $2358; + $2359 = $5; + $2360 = ($2359*5)|0; + $ll = $2360; + $2361 = $0; + $2362 = $1; + $2363 = $2; + $2364 = $3; + $2365 = $m; + $2366 = $ll; + $2367 = $6; + $2368 = (($2367) + 1)|0; + _mixed_radix_dit_rec($2361,$2362,$2363,$2364,$2365,$2366,$2368); + $2369 = $0; + $2370 = $m; + $2371 = (($2369) + ($2370<<4)|0); + $2372 = $1; + $2373 = $5; + $2374 = (($2372) + ($2373<<4)|0); + $2375 = $2; + $2376 = $3; + $2377 = $m; + $2378 = $ll; + $2379 = $6; + $2380 = (($2379) + 1)|0; + _mixed_radix_dit_rec($2371,$2374,$2375,$2376,$2377,$2378,$2380); + $2381 = $0; + $2382 = $m; + $2383 = $2382<<1; + $2384 = (($2381) + ($2383<<4)|0); + $2385 = $1; + $2386 = $5; + $2387 = $2386<<1; + $2388 = (($2385) + ($2387<<4)|0); + $2389 = $2; + $2390 = $3; + $2391 = $m; + $2392 = $ll; + $2393 = $6; + $2394 = (($2393) + 1)|0; + _mixed_radix_dit_rec($2384,$2388,$2389,$2390,$2391,$2392,$2394); + $2395 = $0; + $2396 = $m; + $2397 = ($2396*3)|0; + $2398 = (($2395) + ($2397<<4)|0); + $2399 = $1; + $2400 = $5; + $2401 = ($2400*3)|0; + $2402 = (($2399) + ($2401<<4)|0); + $2403 = $2; + $2404 = $3; + $2405 = $m; + $2406 = $ll; + $2407 = $6; + $2408 = (($2407) + 1)|0; + _mixed_radix_dit_rec($2398,$2402,$2403,$2404,$2405,$2406,$2408); + $2409 = $0; + $2410 = $m; + $2411 = $2410<<2; + $2412 = (($2409) + ($2411<<4)|0); + $2413 = $1; + $2414 = $5; + $2415 = $2414<<2; + $2416 = (($2413) + ($2415<<4)|0); + $2417 = $2; + $2418 = $3; + $2419 = $m; + $2420 = $ll; + $2421 = $6; + $2422 = (($2421) + 1)|0; + _mixed_radix_dit_rec($2412,$2416,$2417,$2418,$2419,$2420,$2422); + $c1123 = 0.30901699437000002; + $c2124 = -0.80901699436999996; + $s1125 = 0.95105651628999998; + $s2126 = 0.58778525229; + $2423 = $m; + $tkm191 = $2423; + $2424 = $tkm191; + $2425 = $m; + $2426 = (($2424) + ($2425))|0; + $tkm292 = $2426; + $2427 = $tkm292; + $2428 = $m; + $2429 = (($2427) + ($2428))|0; + $tkm393 = $2429; + $2430 = $tkm393; + $2431 = $m; + $2432 = (($2430) + ($2431))|0; + $tkm4 = $2432; + $2433 = $0; + $2434 = +HEAPF64[$2433>>3]; + $ar109 = $2434; + $2435 = $0; + $2436 = ((($2435)) + 8|0); + $2437 = +HEAPF64[$2436>>3]; + $ai110 = $2437; + $2438 = $tkm191; + $2439 = $0; + $2440 = (($2439) + ($2438<<4)|0); + $2441 = +HEAPF64[$2440>>3]; + $br111 = $2441; + $2442 = $tkm191; + $2443 = $0; + $2444 = (($2443) + ($2442<<4)|0); + $2445 = ((($2444)) + 8|0); + $2446 = +HEAPF64[$2445>>3]; + $bi112 = $2446; + $2447 = $tkm292; + $2448 = $0; + $2449 = (($2448) + ($2447<<4)|0); + $2450 = +HEAPF64[$2449>>3]; + $cr113 = $2450; + $2451 = $tkm292; + $2452 = $0; + $2453 = (($2452) + ($2451<<4)|0); + $2454 = ((($2453)) + 8|0); + $2455 = +HEAPF64[$2454>>3]; + $ci114 = $2455; + $2456 = $tkm393; + $2457 = $0; + $2458 = (($2457) + ($2456<<4)|0); + $2459 = +HEAPF64[$2458>>3]; + $dr115 = $2459; + $2460 = $tkm393; + $2461 = $0; + $2462 = (($2461) + ($2460<<4)|0); + $2463 = ((($2462)) + 8|0); + $2464 = +HEAPF64[$2463>>3]; + $di116 = $2464; + $2465 = $tkm4; + $2466 = $0; + $2467 = (($2466) + ($2465<<4)|0); + $2468 = +HEAPF64[$2467>>3]; + $er = $2468; + $2469 = $tkm4; + $2470 = $0; + $2471 = (($2470) + ($2469<<4)|0); + $2472 = ((($2471)) + 8|0); + $2473 = +HEAPF64[$2472>>3]; + $ei = $2473; + $2474 = $br111; + $2475 = $er; + $2476 = $2474 + $2475; + $tau0r101 = $2476; + $2477 = $bi112; + $2478 = $ei; + $2479 = $2477 + $2478; + $tau0i102 = $2479; + $2480 = $cr113; + $2481 = $dr115; + $2482 = $2480 + $2481; + $tau1r103 = $2482; + $2483 = $ci114; + $2484 = $di116; + $2485 = $2483 + $2484; + $tau1i104 = $2485; + $2486 = $br111; + $2487 = $er; + $2488 = $2486 - $2487; + $tau2r105 = $2488; + $2489 = $bi112; + $2490 = $ei; + $2491 = $2489 - $2490; + $tau2i106 = $2491; + $2492 = $cr113; + $2493 = $dr115; + $2494 = $2492 - $2493; + $tau3r107 = $2494; + $2495 = $ci114; + $2496 = $di116; + $2497 = $2495 - $2496; + $tau3i108 = $2497; + $2498 = $ar109; + $2499 = $tau0r101; + $2500 = $2498 + $2499; + $2501 = $tau1r103; + $2502 = $2500 + $2501; + $2503 = $0; + HEAPF64[$2503>>3] = $2502; + $2504 = $ai110; + $2505 = $tau0i102; + $2506 = $2504 + $2505; + $2507 = $tau1i104; + $2508 = $2506 + $2507; + $2509 = $0; + $2510 = ((($2509)) + 8|0); + HEAPF64[$2510>>3] = $2508; + $2511 = $c1123; + $2512 = $tau0r101; + $2513 = $2511 * $2512; + $2514 = $c2124; + $2515 = $tau1r103; + $2516 = $2514 * $2515; + $2517 = $2513 + $2516; + $tau4r117 = $2517; + $2518 = $c1123; + $2519 = $tau0i102; + $2520 = $2518 * $2519; + $2521 = $c2124; + $2522 = $tau1i104; + $2523 = $2521 * $2522; + $2524 = $2520 + $2523; + $tau4i118 = $2524; + $2525 = $3; + $2526 = (+($2525|0)); + $2527 = $s1125; + $2528 = $tau2r105; + $2529 = $2527 * $2528; + $2530 = $s2126; + $2531 = $tau3r107; + $2532 = $2530 * $2531; + $2533 = $2529 + $2532; + $2534 = $2526 * $2533; + $tau5r119 = $2534; + $2535 = $3; + $2536 = (+($2535|0)); + $2537 = $s1125; + $2538 = $tau2i106; + $2539 = $2537 * $2538; + $2540 = $s2126; + $2541 = $tau3i108; + $2542 = $2540 * $2541; + $2543 = $2539 + $2542; + $2544 = $2536 * $2543; + $tau5i120 = $2544; + $2545 = $ar109; + $2546 = $tau4r117; + $2547 = $2545 + $2546; + $tau6r121 = $2547; + $2548 = $ai110; + $2549 = $tau4i118; + $2550 = $2548 + $2549; + $tau6i122 = $2550; + $2551 = $tau6r121; + $2552 = $tau5i120; + $2553 = $2551 + $2552; + $2554 = $tkm191; + $2555 = $0; + $2556 = (($2555) + ($2554<<4)|0); + HEAPF64[$2556>>3] = $2553; + $2557 = $tau6i122; + $2558 = $tau5r119; + $2559 = $2557 - $2558; + $2560 = $tkm191; + $2561 = $0; + $2562 = (($2561) + ($2560<<4)|0); + $2563 = ((($2562)) + 8|0); + HEAPF64[$2563>>3] = $2559; + $2564 = $tau6r121; + $2565 = $tau5i120; + $2566 = $2564 - $2565; + $2567 = $tkm4; + $2568 = $0; + $2569 = (($2568) + ($2567<<4)|0); + HEAPF64[$2569>>3] = $2566; + $2570 = $tau6i122; + $2571 = $tau5r119; + $2572 = $2570 + $2571; + $2573 = $tkm4; + $2574 = $0; + $2575 = (($2574) + ($2573<<4)|0); + $2576 = ((($2575)) + 8|0); + HEAPF64[$2576>>3] = $2572; + $2577 = $c2124; + $2578 = $tau0r101; + $2579 = $2577 * $2578; + $2580 = $c1123; + $2581 = $tau1r103; + $2582 = $2580 * $2581; + $2583 = $2579 + $2582; + $tau4r117 = $2583; + $2584 = $c2124; + $2585 = $tau0i102; + $2586 = $2584 * $2585; + $2587 = $c1123; + $2588 = $tau1i104; + $2589 = $2587 * $2588; + $2590 = $2586 + $2589; + $tau4i118 = $2590; + $2591 = $3; + $2592 = (+($2591|0)); + $2593 = $s2126; + $2594 = $tau2r105; + $2595 = $2593 * $2594; + $2596 = $s1125; + $2597 = $tau3r107; + $2598 = $2596 * $2597; + $2599 = $2595 - $2598; + $2600 = $2592 * $2599; + $tau5r119 = $2600; + $2601 = $3; + $2602 = (+($2601|0)); + $2603 = $s2126; + $2604 = $tau2i106; + $2605 = $2603 * $2604; + $2606 = $s1125; + $2607 = $tau3i108; + $2608 = $2606 * $2607; + $2609 = $2605 - $2608; + $2610 = $2602 * $2609; + $tau5i120 = $2610; + $2611 = $ar109; + $2612 = $tau4r117; + $2613 = $2611 + $2612; + $tau6r121 = $2613; + $2614 = $ai110; + $2615 = $tau4i118; + $2616 = $2614 + $2615; + $tau6i122 = $2616; + $2617 = $tau6r121; + $2618 = $tau5i120; + $2619 = $2617 + $2618; + $2620 = $tkm292; + $2621 = $0; + $2622 = (($2621) + ($2620<<4)|0); + HEAPF64[$2622>>3] = $2619; + $2623 = $tau6i122; + $2624 = $tau5r119; + $2625 = $2623 - $2624; + $2626 = $tkm292; + $2627 = $0; + $2628 = (($2627) + ($2626<<4)|0); + $2629 = ((($2628)) + 8|0); + HEAPF64[$2629>>3] = $2625; + $2630 = $tau6r121; + $2631 = $tau5i120; + $2632 = $2630 - $2631; + $2633 = $tkm393; + $2634 = $0; + $2635 = (($2634) + ($2633<<4)|0); + HEAPF64[$2635>>3] = $2632; + $2636 = $tau6i122; + $2637 = $tau5r119; + $2638 = $2636 + $2637; + $2639 = $tkm393; + $2640 = $0; + $2641 = (($2640) + ($2639<<4)|0); + $2642 = ((($2641)) + 8|0); + HEAPF64[$2642>>3] = $2638; + $k90 = 1; + while(1) { + $2643 = $k90; + $2644 = $m; + $2645 = ($2643|0)<($2644|0); + if (!($2645)) { + break; + } + $2646 = $m; + $2647 = (($2646) - 1)|0; + $2648 = $k90; + $2649 = $2648<<2; + $2650 = (($2647) + ($2649))|0; + $ind94 = $2650; + $2651 = $2; + $2652 = ((($2651)) + 272|0); + $2653 = $ind94; + $2654 = (($2652) + ($2653<<4)|0); + $2655 = +HEAPF64[$2654>>3]; + $wlr95 = $2655; + $2656 = $2; + $2657 = ((($2656)) + 272|0); + $2658 = $ind94; + $2659 = (($2657) + ($2658<<4)|0); + $2660 = ((($2659)) + 8|0); + $2661 = +HEAPF64[$2660>>3]; + $wli96 = $2661; + $2662 = $ind94; + $2663 = (($2662) + 1)|0; + $ind94 = $2663; + $2664 = $2; + $2665 = ((($2664)) + 272|0); + $2666 = $ind94; + $2667 = (($2665) + ($2666<<4)|0); + $2668 = +HEAPF64[$2667>>3]; + $wl2r97 = $2668; + $2669 = $2; + $2670 = ((($2669)) + 272|0); + $2671 = $ind94; + $2672 = (($2670) + ($2671<<4)|0); + $2673 = ((($2672)) + 8|0); + $2674 = +HEAPF64[$2673>>3]; + $wl2i98 = $2674; + $2675 = $ind94; + $2676 = (($2675) + 1)|0; + $ind94 = $2676; + $2677 = $2; + $2678 = ((($2677)) + 272|0); + $2679 = $ind94; + $2680 = (($2678) + ($2679<<4)|0); + $2681 = +HEAPF64[$2680>>3]; + $wl3r99 = $2681; + $2682 = $2; + $2683 = ((($2682)) + 272|0); + $2684 = $ind94; + $2685 = (($2683) + ($2684<<4)|0); + $2686 = ((($2685)) + 8|0); + $2687 = +HEAPF64[$2686>>3]; + $wl3i100 = $2687; + $2688 = $ind94; + $2689 = (($2688) + 1)|0; + $ind94 = $2689; + $2690 = $2; + $2691 = ((($2690)) + 272|0); + $2692 = $ind94; + $2693 = (($2691) + ($2692<<4)|0); + $2694 = +HEAPF64[$2693>>3]; + $wl4r = $2694; + $2695 = $2; + $2696 = ((($2695)) + 272|0); + $2697 = $ind94; + $2698 = (($2696) + ($2697<<4)|0); + $2699 = ((($2698)) + 8|0); + $2700 = +HEAPF64[$2699>>3]; + $wl4i = $2700; + $2701 = $k90; + $2702 = $m; + $2703 = (($2701) + ($2702))|0; + $tkm191 = $2703; + $2704 = $tkm191; + $2705 = $m; + $2706 = (($2704) + ($2705))|0; + $tkm292 = $2706; + $2707 = $tkm292; + $2708 = $m; + $2709 = (($2707) + ($2708))|0; + $tkm393 = $2709; + $2710 = $tkm393; + $2711 = $m; + $2712 = (($2710) + ($2711))|0; + $tkm4 = $2712; + $2713 = $k90; + $2714 = $0; + $2715 = (($2714) + ($2713<<4)|0); + $2716 = +HEAPF64[$2715>>3]; + $ar109 = $2716; + $2717 = $k90; + $2718 = $0; + $2719 = (($2718) + ($2717<<4)|0); + $2720 = ((($2719)) + 8|0); + $2721 = +HEAPF64[$2720>>3]; + $ai110 = $2721; + $2722 = $tkm191; + $2723 = $0; + $2724 = (($2723) + ($2722<<4)|0); + $2725 = +HEAPF64[$2724>>3]; + $2726 = $wlr95; + $2727 = $2725 * $2726; + $2728 = $tkm191; + $2729 = $0; + $2730 = (($2729) + ($2728<<4)|0); + $2731 = ((($2730)) + 8|0); + $2732 = +HEAPF64[$2731>>3]; + $2733 = $wli96; + $2734 = $2732 * $2733; + $2735 = $2727 - $2734; + $br111 = $2735; + $2736 = $tkm191; + $2737 = $0; + $2738 = (($2737) + ($2736<<4)|0); + $2739 = ((($2738)) + 8|0); + $2740 = +HEAPF64[$2739>>3]; + $2741 = $wlr95; + $2742 = $2740 * $2741; + $2743 = $tkm191; + $2744 = $0; + $2745 = (($2744) + ($2743<<4)|0); + $2746 = +HEAPF64[$2745>>3]; + $2747 = $wli96; + $2748 = $2746 * $2747; + $2749 = $2742 + $2748; + $bi112 = $2749; + $2750 = $tkm292; + $2751 = $0; + $2752 = (($2751) + ($2750<<4)|0); + $2753 = +HEAPF64[$2752>>3]; + $2754 = $wl2r97; + $2755 = $2753 * $2754; + $2756 = $tkm292; + $2757 = $0; + $2758 = (($2757) + ($2756<<4)|0); + $2759 = ((($2758)) + 8|0); + $2760 = +HEAPF64[$2759>>3]; + $2761 = $wl2i98; + $2762 = $2760 * $2761; + $2763 = $2755 - $2762; + $cr113 = $2763; + $2764 = $tkm292; + $2765 = $0; + $2766 = (($2765) + ($2764<<4)|0); + $2767 = ((($2766)) + 8|0); + $2768 = +HEAPF64[$2767>>3]; + $2769 = $wl2r97; + $2770 = $2768 * $2769; + $2771 = $tkm292; + $2772 = $0; + $2773 = (($2772) + ($2771<<4)|0); + $2774 = +HEAPF64[$2773>>3]; + $2775 = $wl2i98; + $2776 = $2774 * $2775; + $2777 = $2770 + $2776; + $ci114 = $2777; + $2778 = $tkm393; + $2779 = $0; + $2780 = (($2779) + ($2778<<4)|0); + $2781 = +HEAPF64[$2780>>3]; + $2782 = $wl3r99; + $2783 = $2781 * $2782; + $2784 = $tkm393; + $2785 = $0; + $2786 = (($2785) + ($2784<<4)|0); + $2787 = ((($2786)) + 8|0); + $2788 = +HEAPF64[$2787>>3]; + $2789 = $wl3i100; + $2790 = $2788 * $2789; + $2791 = $2783 - $2790; + $dr115 = $2791; + $2792 = $tkm393; + $2793 = $0; + $2794 = (($2793) + ($2792<<4)|0); + $2795 = ((($2794)) + 8|0); + $2796 = +HEAPF64[$2795>>3]; + $2797 = $wl3r99; + $2798 = $2796 * $2797; + $2799 = $tkm393; + $2800 = $0; + $2801 = (($2800) + ($2799<<4)|0); + $2802 = +HEAPF64[$2801>>3]; + $2803 = $wl3i100; + $2804 = $2802 * $2803; + $2805 = $2798 + $2804; + $di116 = $2805; + $2806 = $tkm4; + $2807 = $0; + $2808 = (($2807) + ($2806<<4)|0); + $2809 = +HEAPF64[$2808>>3]; + $2810 = $wl4r; + $2811 = $2809 * $2810; + $2812 = $tkm4; + $2813 = $0; + $2814 = (($2813) + ($2812<<4)|0); + $2815 = ((($2814)) + 8|0); + $2816 = +HEAPF64[$2815>>3]; + $2817 = $wl4i; + $2818 = $2816 * $2817; + $2819 = $2811 - $2818; + $er = $2819; + $2820 = $tkm4; + $2821 = $0; + $2822 = (($2821) + ($2820<<4)|0); + $2823 = ((($2822)) + 8|0); + $2824 = +HEAPF64[$2823>>3]; + $2825 = $wl4r; + $2826 = $2824 * $2825; + $2827 = $tkm4; + $2828 = $0; + $2829 = (($2828) + ($2827<<4)|0); + $2830 = +HEAPF64[$2829>>3]; + $2831 = $wl4i; + $2832 = $2830 * $2831; + $2833 = $2826 + $2832; + $ei = $2833; + $2834 = $br111; + $2835 = $er; + $2836 = $2834 + $2835; + $tau0r101 = $2836; + $2837 = $bi112; + $2838 = $ei; + $2839 = $2837 + $2838; + $tau0i102 = $2839; + $2840 = $cr113; + $2841 = $dr115; + $2842 = $2840 + $2841; + $tau1r103 = $2842; + $2843 = $ci114; + $2844 = $di116; + $2845 = $2843 + $2844; + $tau1i104 = $2845; + $2846 = $br111; + $2847 = $er; + $2848 = $2846 - $2847; + $tau2r105 = $2848; + $2849 = $bi112; + $2850 = $ei; + $2851 = $2849 - $2850; + $tau2i106 = $2851; + $2852 = $cr113; + $2853 = $dr115; + $2854 = $2852 - $2853; + $tau3r107 = $2854; + $2855 = $ci114; + $2856 = $di116; + $2857 = $2855 - $2856; + $tau3i108 = $2857; + $2858 = $ar109; + $2859 = $tau0r101; + $2860 = $2858 + $2859; + $2861 = $tau1r103; + $2862 = $2860 + $2861; + $2863 = $k90; + $2864 = $0; + $2865 = (($2864) + ($2863<<4)|0); + HEAPF64[$2865>>3] = $2862; + $2866 = $ai110; + $2867 = $tau0i102; + $2868 = $2866 + $2867; + $2869 = $tau1i104; + $2870 = $2868 + $2869; + $2871 = $k90; + $2872 = $0; + $2873 = (($2872) + ($2871<<4)|0); + $2874 = ((($2873)) + 8|0); + HEAPF64[$2874>>3] = $2870; + $2875 = $c1123; + $2876 = $tau0r101; + $2877 = $2875 * $2876; + $2878 = $c2124; + $2879 = $tau1r103; + $2880 = $2878 * $2879; + $2881 = $2877 + $2880; + $tau4r117 = $2881; + $2882 = $c1123; + $2883 = $tau0i102; + $2884 = $2882 * $2883; + $2885 = $c2124; + $2886 = $tau1i104; + $2887 = $2885 * $2886; + $2888 = $2884 + $2887; + $tau4i118 = $2888; + $2889 = $3; + $2890 = ($2889|0)==(1); + $2891 = $s1125; + if ($2890) { + $2892 = $tau2r105; + $2893 = $2891 * $2892; + $2894 = $s2126; + $2895 = $tau3r107; + $2896 = $2894 * $2895; + $2897 = $2893 + $2896; + $tau5r119 = $2897; + $2898 = $s1125; + $2899 = $tau2i106; + $2900 = $2898 * $2899; + $2901 = $s2126; + $2902 = $tau3i108; + $2903 = $2901 * $2902; + $2904 = $2900 + $2903; + $tau5i120 = $2904; + } else { + $2905 = -$2891; + $2906 = $tau2r105; + $2907 = $2905 * $2906; + $2908 = $s2126; + $2909 = $tau3r107; + $2910 = $2908 * $2909; + $2911 = $2907 - $2910; + $tau5r119 = $2911; + $2912 = $s1125; + $2913 = -$2912; + $2914 = $tau2i106; + $2915 = $2913 * $2914; + $2916 = $s2126; + $2917 = $tau3i108; + $2918 = $2916 * $2917; + $2919 = $2915 - $2918; + $tau5i120 = $2919; + } + $2920 = $ar109; + $2921 = $tau4r117; + $2922 = $2920 + $2921; + $tau6r121 = $2922; + $2923 = $ai110; + $2924 = $tau4i118; + $2925 = $2923 + $2924; + $tau6i122 = $2925; + $2926 = $tau6r121; + $2927 = $tau5i120; + $2928 = $2926 + $2927; + $2929 = $tkm191; + $2930 = $0; + $2931 = (($2930) + ($2929<<4)|0); + HEAPF64[$2931>>3] = $2928; + $2932 = $tau6i122; + $2933 = $tau5r119; + $2934 = $2932 - $2933; + $2935 = $tkm191; + $2936 = $0; + $2937 = (($2936) + ($2935<<4)|0); + $2938 = ((($2937)) + 8|0); + HEAPF64[$2938>>3] = $2934; + $2939 = $tau6r121; + $2940 = $tau5i120; + $2941 = $2939 - $2940; + $2942 = $tkm4; + $2943 = $0; + $2944 = (($2943) + ($2942<<4)|0); + HEAPF64[$2944>>3] = $2941; + $2945 = $tau6i122; + $2946 = $tau5r119; + $2947 = $2945 + $2946; + $2948 = $tkm4; + $2949 = $0; + $2950 = (($2949) + ($2948<<4)|0); + $2951 = ((($2950)) + 8|0); + HEAPF64[$2951>>3] = $2947; + $2952 = $c2124; + $2953 = $tau0r101; + $2954 = $2952 * $2953; + $2955 = $c1123; + $2956 = $tau1r103; + $2957 = $2955 * $2956; + $2958 = $2954 + $2957; + $tau4r117 = $2958; + $2959 = $c2124; + $2960 = $tau0i102; + $2961 = $2959 * $2960; + $2962 = $c1123; + $2963 = $tau1i104; + $2964 = $2962 * $2963; + $2965 = $2961 + $2964; + $tau4i118 = $2965; + $2966 = $3; + $2967 = ($2966|0)==(1); + $2968 = $s2126; + if ($2967) { + $2969 = $tau2r105; + $2970 = $2968 * $2969; + $2971 = $s1125; + $2972 = $tau3r107; + $2973 = $2971 * $2972; + $2974 = $2970 - $2973; + $tau5r119 = $2974; + $2975 = $s2126; + $2976 = $tau2i106; + $2977 = $2975 * $2976; + $2978 = $s1125; + $2979 = $tau3i108; + $2980 = $2978 * $2979; + $2981 = $2977 - $2980; + $tau5i120 = $2981; + } else { + $2982 = -$2968; + $2983 = $tau2r105; + $2984 = $2982 * $2983; + $2985 = $s1125; + $2986 = $tau3r107; + $2987 = $2985 * $2986; + $2988 = $2984 + $2987; + $tau5r119 = $2988; + $2989 = $s2126; + $2990 = -$2989; + $2991 = $tau2i106; + $2992 = $2990 * $2991; + $2993 = $s1125; + $2994 = $tau3i108; + $2995 = $2993 * $2994; + $2996 = $2992 + $2995; + $tau5i120 = $2996; + } + $2997 = $ar109; + $2998 = $tau4r117; + $2999 = $2997 + $2998; + $tau6r121 = $2999; + $3000 = $ai110; + $3001 = $tau4i118; + $3002 = $3000 + $3001; + $tau6i122 = $3002; + $3003 = $tau6r121; + $3004 = $tau5i120; + $3005 = $3003 + $3004; + $3006 = $tkm292; + $3007 = $0; + $3008 = (($3007) + ($3006<<4)|0); + HEAPF64[$3008>>3] = $3005; + $3009 = $tau6i122; + $3010 = $tau5r119; + $3011 = $3009 - $3010; + $3012 = $tkm292; + $3013 = $0; + $3014 = (($3013) + ($3012<<4)|0); + $3015 = ((($3014)) + 8|0); + HEAPF64[$3015>>3] = $3011; + $3016 = $tau6r121; + $3017 = $tau5i120; + $3018 = $3016 - $3017; + $3019 = $tkm393; + $3020 = $0; + $3021 = (($3020) + ($3019<<4)|0); + HEAPF64[$3021>>3] = $3018; + $3022 = $tau6i122; + $3023 = $tau5r119; + $3024 = $3022 + $3023; + $3025 = $tkm393; + $3026 = $0; + $3027 = (($3026) + ($3025<<4)|0); + $3028 = ((($3027)) + 8|0); + HEAPF64[$3028>>3] = $3024; + $3029 = $k90; + $3030 = (($3029) + 1)|0; + $k90 = $3030; + } + STACKTOP = sp;return; + } + $3031 = $radix; + $3032 = ($3031|0)==(7); + if ($3032) { + $3033 = $4; + $3034 = (($3033|0) / 7)&-1; + $m = $3034; + $3035 = $5; + $3036 = ($3035*7)|0; + $ll = $3036; + $3037 = $0; + $3038 = $1; + $3039 = $2; + $3040 = $3; + $3041 = $m; + $3042 = $ll; + $3043 = $6; + $3044 = (($3043) + 1)|0; + _mixed_radix_dit_rec($3037,$3038,$3039,$3040,$3041,$3042,$3044); + $3045 = $0; + $3046 = $m; + $3047 = (($3045) + ($3046<<4)|0); + $3048 = $1; + $3049 = $5; + $3050 = (($3048) + ($3049<<4)|0); + $3051 = $2; + $3052 = $3; + $3053 = $m; + $3054 = $ll; + $3055 = $6; + $3056 = (($3055) + 1)|0; + _mixed_radix_dit_rec($3047,$3050,$3051,$3052,$3053,$3054,$3056); + $3057 = $0; + $3058 = $m; + $3059 = $3058<<1; + $3060 = (($3057) + ($3059<<4)|0); + $3061 = $1; + $3062 = $5; + $3063 = $3062<<1; + $3064 = (($3061) + ($3063<<4)|0); + $3065 = $2; + $3066 = $3; + $3067 = $m; + $3068 = $ll; + $3069 = $6; + $3070 = (($3069) + 1)|0; + _mixed_radix_dit_rec($3060,$3064,$3065,$3066,$3067,$3068,$3070); + $3071 = $0; + $3072 = $m; + $3073 = ($3072*3)|0; + $3074 = (($3071) + ($3073<<4)|0); + $3075 = $1; + $3076 = $5; + $3077 = ($3076*3)|0; + $3078 = (($3075) + ($3077<<4)|0); + $3079 = $2; + $3080 = $3; + $3081 = $m; + $3082 = $ll; + $3083 = $6; + $3084 = (($3083) + 1)|0; + _mixed_radix_dit_rec($3074,$3078,$3079,$3080,$3081,$3082,$3084); + $3085 = $0; + $3086 = $m; + $3087 = $3086<<2; + $3088 = (($3085) + ($3087<<4)|0); + $3089 = $1; + $3090 = $5; + $3091 = $3090<<2; + $3092 = (($3089) + ($3091<<4)|0); + $3093 = $2; + $3094 = $3; + $3095 = $m; + $3096 = $ll; + $3097 = $6; + $3098 = (($3097) + 1)|0; + _mixed_radix_dit_rec($3088,$3092,$3093,$3094,$3095,$3096,$3098); + $3099 = $0; + $3100 = $m; + $3101 = ($3100*5)|0; + $3102 = (($3099) + ($3101<<4)|0); + $3103 = $1; + $3104 = $5; + $3105 = ($3104*5)|0; + $3106 = (($3103) + ($3105<<4)|0); + $3107 = $2; + $3108 = $3; + $3109 = $m; + $3110 = $ll; + $3111 = $6; + $3112 = (($3111) + 1)|0; + _mixed_radix_dit_rec($3102,$3106,$3107,$3108,$3109,$3110,$3112); + $3113 = $0; + $3114 = $m; + $3115 = ($3114*6)|0; + $3116 = (($3113) + ($3115<<4)|0); + $3117 = $1; + $3118 = $5; + $3119 = ($3118*6)|0; + $3120 = (($3117) + ($3119<<4)|0); + $3121 = $2; + $3122 = $3; + $3123 = $m; + $3124 = $ll; + $3125 = $6; + $3126 = (($3125) + 1)|0; + _mixed_radix_dit_rec($3116,$3120,$3121,$3122,$3123,$3124,$3126); + $c1167 = 0.62348980185000002; + $c2168 = -0.22252093395; + $c3169 = -0.90096886789999997; + $s1170 = 0.78183148246; + $s2171 = 0.97492791217999996; + $s3172 = 0.43388373911; + $3127 = $m; + $tkm1128 = $3127; + $3128 = $tkm1128; + $3129 = $m; + $3130 = (($3128) + ($3129))|0; + $tkm2129 = $3130; + $3131 = $tkm2129; + $3132 = $m; + $3133 = (($3131) + ($3132))|0; + $tkm3130 = $3133; + $3134 = $tkm3130; + $3135 = $m; + $3136 = (($3134) + ($3135))|0; + $tkm4131 = $3136; + $3137 = $tkm4131; + $3138 = $m; + $3139 = (($3137) + ($3138))|0; + $tkm5 = $3139; + $3140 = $tkm5; + $3141 = $m; + $3142 = (($3140) + ($3141))|0; + $tkm6 = $3142; + $3143 = $0; + $3144 = +HEAPF64[$3143>>3]; + $ar149 = $3144; + $3145 = $0; + $3146 = ((($3145)) + 8|0); + $3147 = +HEAPF64[$3146>>3]; + $ai150 = $3147; + $3148 = $tkm1128; + $3149 = $0; + $3150 = (($3149) + ($3148<<4)|0); + $3151 = +HEAPF64[$3150>>3]; + $br151 = $3151; + $3152 = $tkm1128; + $3153 = $0; + $3154 = (($3153) + ($3152<<4)|0); + $3155 = ((($3154)) + 8|0); + $3156 = +HEAPF64[$3155>>3]; + $bi152 = $3156; + $3157 = $tkm2129; + $3158 = $0; + $3159 = (($3158) + ($3157<<4)|0); + $3160 = +HEAPF64[$3159>>3]; + $cr153 = $3160; + $3161 = $tkm2129; + $3162 = $0; + $3163 = (($3162) + ($3161<<4)|0); + $3164 = ((($3163)) + 8|0); + $3165 = +HEAPF64[$3164>>3]; + $ci154 = $3165; + $3166 = $tkm3130; + $3167 = $0; + $3168 = (($3167) + ($3166<<4)|0); + $3169 = +HEAPF64[$3168>>3]; + $dr155 = $3169; + $3170 = $tkm3130; + $3171 = $0; + $3172 = (($3171) + ($3170<<4)|0); + $3173 = ((($3172)) + 8|0); + $3174 = +HEAPF64[$3173>>3]; + $di156 = $3174; + $3175 = $tkm4131; + $3176 = $0; + $3177 = (($3176) + ($3175<<4)|0); + $3178 = +HEAPF64[$3177>>3]; + $er157 = $3178; + $3179 = $tkm4131; + $3180 = $0; + $3181 = (($3180) + ($3179<<4)|0); + $3182 = ((($3181)) + 8|0); + $3183 = +HEAPF64[$3182>>3]; + $ei158 = $3183; + $3184 = $tkm5; + $3185 = $0; + $3186 = (($3185) + ($3184<<4)|0); + $3187 = +HEAPF64[$3186>>3]; + $fr = $3187; + $3188 = $tkm5; + $3189 = $0; + $3190 = (($3189) + ($3188<<4)|0); + $3191 = ((($3190)) + 8|0); + $3192 = +HEAPF64[$3191>>3]; + $fi = $3192; + $3193 = $tkm6; + $3194 = $0; + $3195 = (($3194) + ($3193<<4)|0); + $3196 = +HEAPF64[$3195>>3]; + $gr = $3196; + $3197 = $tkm6; + $3198 = $0; + $3199 = (($3198) + ($3197<<4)|0); + $3200 = ((($3199)) + 8|0); + $3201 = +HEAPF64[$3200>>3]; + $gi = $3201; + $3202 = $br151; + $3203 = $gr; + $3204 = $3202 + $3203; + $tau0r141 = $3204; + $3205 = $br151; + $3206 = $gr; + $3207 = $3205 - $3206; + $tau3r147 = $3207; + $3208 = $bi152; + $3209 = $gi; + $3210 = $3208 + $3209; + $tau0i142 = $3210; + $3211 = $bi152; + $3212 = $gi; + $3213 = $3211 - $3212; + $tau3i148 = $3213; + $3214 = $cr153; + $3215 = $fr; + $3216 = $3214 + $3215; + $tau1r143 = $3216; + $3217 = $cr153; + $3218 = $fr; + $3219 = $3217 - $3218; + $tau4r159 = $3219; + $3220 = $ci154; + $3221 = $fi; + $3222 = $3220 + $3221; + $tau1i144 = $3222; + $3223 = $ci154; + $3224 = $fi; + $3225 = $3223 - $3224; + $tau4i160 = $3225; + $3226 = $dr155; + $3227 = $er157; + $3228 = $3226 + $3227; + $tau2r145 = $3228; + $3229 = $dr155; + $3230 = $er157; + $3231 = $3229 - $3230; + $tau5r161 = $3231; + $3232 = $di156; + $3233 = $ei158; + $3234 = $3232 + $3233; + $tau2i146 = $3234; + $3235 = $di156; + $3236 = $ei158; + $3237 = $3235 - $3236; + $tau5i162 = $3237; + $3238 = $ar149; + $3239 = $tau0r141; + $3240 = $3238 + $3239; + $3241 = $tau1r143; + $3242 = $3240 + $3241; + $3243 = $tau2r145; + $3244 = $3242 + $3243; + $3245 = $0; + HEAPF64[$3245>>3] = $3244; + $3246 = $ai150; + $3247 = $tau0i142; + $3248 = $3246 + $3247; + $3249 = $tau1i144; + $3250 = $3248 + $3249; + $3251 = $tau2i146; + $3252 = $3250 + $3251; + $3253 = $0; + $3254 = ((($3253)) + 8|0); + HEAPF64[$3254>>3] = $3252; + $3255 = $ar149; + $3256 = $c1167; + $3257 = $tau0r141; + $3258 = $3256 * $3257; + $3259 = $3255 + $3258; + $3260 = $c2168; + $3261 = $tau1r143; + $3262 = $3260 * $3261; + $3263 = $3259 + $3262; + $3264 = $c3169; + $3265 = $tau2r145; + $3266 = $3264 * $3265; + $3267 = $3263 + $3266; + $tau6r163 = $3267; + $3268 = $ai150; + $3269 = $c1167; + $3270 = $tau0i142; + $3271 = $3269 * $3270; + $3272 = $3268 + $3271; + $3273 = $c2168; + $3274 = $tau1i144; + $3275 = $3273 * $3274; + $3276 = $3272 + $3275; + $3277 = $c3169; + $3278 = $tau2i146; + $3279 = $3277 * $3278; + $3280 = $3276 + $3279; + $tau6i164 = $3280; + $3281 = $3; + $3282 = ($3281|0)==(1); + $3283 = $s1170; + if ($3282) { + $3284 = -$3283; + $3285 = $tau3r147; + $3286 = $3284 * $3285; + $3287 = $s2171; + $3288 = $tau4r159; + $3289 = $3287 * $3288; + $3290 = $3286 - $3289; + $3291 = $s3172; + $3292 = $tau5r161; + $3293 = $3291 * $3292; + $3294 = $3290 - $3293; + $tau7r165 = $3294; + $3295 = $s1170; + $3296 = -$3295; + $3297 = $tau3i148; + $3298 = $3296 * $3297; + $3299 = $s2171; + $3300 = $tau4i160; + $3301 = $3299 * $3300; + $3302 = $3298 - $3301; + $3303 = $s3172; + $3304 = $tau5i162; + $3305 = $3303 * $3304; + $3306 = $3302 - $3305; + $tau7i166 = $3306; + } else { + $3307 = $tau3r147; + $3308 = $3283 * $3307; + $3309 = $s2171; + $3310 = $tau4r159; + $3311 = $3309 * $3310; + $3312 = $3308 + $3311; + $3313 = $s3172; + $3314 = $tau5r161; + $3315 = $3313 * $3314; + $3316 = $3312 + $3315; + $tau7r165 = $3316; + $3317 = $s1170; + $3318 = $tau3i148; + $3319 = $3317 * $3318; + $3320 = $s2171; + $3321 = $tau4i160; + $3322 = $3320 * $3321; + $3323 = $3319 + $3322; + $3324 = $s3172; + $3325 = $tau5i162; + $3326 = $3324 * $3325; + $3327 = $3323 + $3326; + $tau7i166 = $3327; + } + $3328 = $tau6r163; + $3329 = $tau7i166; + $3330 = $3328 - $3329; + $3331 = $tkm1128; + $3332 = $0; + $3333 = (($3332) + ($3331<<4)|0); + HEAPF64[$3333>>3] = $3330; + $3334 = $tau6i164; + $3335 = $tau7r165; + $3336 = $3334 + $3335; + $3337 = $tkm1128; + $3338 = $0; + $3339 = (($3338) + ($3337<<4)|0); + $3340 = ((($3339)) + 8|0); + HEAPF64[$3340>>3] = $3336; + $3341 = $tau6r163; + $3342 = $tau7i166; + $3343 = $3341 + $3342; + $3344 = $tkm6; + $3345 = $0; + $3346 = (($3345) + ($3344<<4)|0); + HEAPF64[$3346>>3] = $3343; + $3347 = $tau6i164; + $3348 = $tau7r165; + $3349 = $3347 - $3348; + $3350 = $tkm6; + $3351 = $0; + $3352 = (($3351) + ($3350<<4)|0); + $3353 = ((($3352)) + 8|0); + HEAPF64[$3353>>3] = $3349; + $3354 = $ar149; + $3355 = $c2168; + $3356 = $tau0r141; + $3357 = $3355 * $3356; + $3358 = $3354 + $3357; + $3359 = $c3169; + $3360 = $tau1r143; + $3361 = $3359 * $3360; + $3362 = $3358 + $3361; + $3363 = $c1167; + $3364 = $tau2r145; + $3365 = $3363 * $3364; + $3366 = $3362 + $3365; + $tau6r163 = $3366; + $3367 = $ai150; + $3368 = $c2168; + $3369 = $tau0i142; + $3370 = $3368 * $3369; + $3371 = $3367 + $3370; + $3372 = $c3169; + $3373 = $tau1i144; + $3374 = $3372 * $3373; + $3375 = $3371 + $3374; + $3376 = $c1167; + $3377 = $tau2i146; + $3378 = $3376 * $3377; + $3379 = $3375 + $3378; + $tau6i164 = $3379; + $3380 = $3; + $3381 = ($3380|0)==(1); + $3382 = $s2171; + if ($3381) { + $3383 = -$3382; + $3384 = $tau3r147; + $3385 = $3383 * $3384; + $3386 = $s3172; + $3387 = $tau4r159; + $3388 = $3386 * $3387; + $3389 = $3385 + $3388; + $3390 = $s1170; + $3391 = $tau5r161; + $3392 = $3390 * $3391; + $3393 = $3389 + $3392; + $tau7r165 = $3393; + $3394 = $s2171; + $3395 = -$3394; + $3396 = $tau3i148; + $3397 = $3395 * $3396; + $3398 = $s3172; + $3399 = $tau4i160; + $3400 = $3398 * $3399; + $3401 = $3397 + $3400; + $3402 = $s1170; + $3403 = $tau5i162; + $3404 = $3402 * $3403; + $3405 = $3401 + $3404; + $tau7i166 = $3405; + } else { + $3406 = $tau3r147; + $3407 = $3382 * $3406; + $3408 = $s3172; + $3409 = $tau4r159; + $3410 = $3408 * $3409; + $3411 = $3407 - $3410; + $3412 = $s1170; + $3413 = $tau5r161; + $3414 = $3412 * $3413; + $3415 = $3411 - $3414; + $tau7r165 = $3415; + $3416 = $s2171; + $3417 = $tau3i148; + $3418 = $3416 * $3417; + $3419 = $s3172; + $3420 = $tau4i160; + $3421 = $3419 * $3420; + $3422 = $3418 - $3421; + $3423 = $s1170; + $3424 = $tau5i162; + $3425 = $3423 * $3424; + $3426 = $3422 - $3425; + $tau7i166 = $3426; + } + $3427 = $tau6r163; + $3428 = $tau7i166; + $3429 = $3427 - $3428; + $3430 = $tkm2129; + $3431 = $0; + $3432 = (($3431) + ($3430<<4)|0); + HEAPF64[$3432>>3] = $3429; + $3433 = $tau6i164; + $3434 = $tau7r165; + $3435 = $3433 + $3434; + $3436 = $tkm2129; + $3437 = $0; + $3438 = (($3437) + ($3436<<4)|0); + $3439 = ((($3438)) + 8|0); + HEAPF64[$3439>>3] = $3435; + $3440 = $tau6r163; + $3441 = $tau7i166; + $3442 = $3440 + $3441; + $3443 = $tkm5; + $3444 = $0; + $3445 = (($3444) + ($3443<<4)|0); + HEAPF64[$3445>>3] = $3442; + $3446 = $tau6i164; + $3447 = $tau7r165; + $3448 = $3446 - $3447; + $3449 = $tkm5; + $3450 = $0; + $3451 = (($3450) + ($3449<<4)|0); + $3452 = ((($3451)) + 8|0); + HEAPF64[$3452>>3] = $3448; + $3453 = $ar149; + $3454 = $c3169; + $3455 = $tau0r141; + $3456 = $3454 * $3455; + $3457 = $3453 + $3456; + $3458 = $c1167; + $3459 = $tau1r143; + $3460 = $3458 * $3459; + $3461 = $3457 + $3460; + $3462 = $c2168; + $3463 = $tau2r145; + $3464 = $3462 * $3463; + $3465 = $3461 + $3464; + $tau6r163 = $3465; + $3466 = $ai150; + $3467 = $c3169; + $3468 = $tau0i142; + $3469 = $3467 * $3468; + $3470 = $3466 + $3469; + $3471 = $c1167; + $3472 = $tau1i144; + $3473 = $3471 * $3472; + $3474 = $3470 + $3473; + $3475 = $c2168; + $3476 = $tau2i146; + $3477 = $3475 * $3476; + $3478 = $3474 + $3477; + $tau6i164 = $3478; + $3479 = $3; + $3480 = ($3479|0)==(1); + $3481 = $s3172; + if ($3480) { + $3482 = -$3481; + $3483 = $tau3r147; + $3484 = $3482 * $3483; + $3485 = $s1170; + $3486 = $tau4r159; + $3487 = $3485 * $3486; + $3488 = $3484 + $3487; + $3489 = $s2171; + $3490 = $tau5r161; + $3491 = $3489 * $3490; + $3492 = $3488 - $3491; + $tau7r165 = $3492; + $3493 = $s3172; + $3494 = -$3493; + $3495 = $tau3i148; + $3496 = $3494 * $3495; + $3497 = $s1170; + $3498 = $tau4i160; + $3499 = $3497 * $3498; + $3500 = $3496 + $3499; + $3501 = $s2171; + $3502 = $tau5i162; + $3503 = $3501 * $3502; + $3504 = $3500 - $3503; + $tau7i166 = $3504; + } else { + $3505 = $tau3r147; + $3506 = $3481 * $3505; + $3507 = $s1170; + $3508 = $tau4r159; + $3509 = $3507 * $3508; + $3510 = $3506 - $3509; + $3511 = $s2171; + $3512 = $tau5r161; + $3513 = $3511 * $3512; + $3514 = $3510 + $3513; + $tau7r165 = $3514; + $3515 = $s3172; + $3516 = $tau3i148; + $3517 = $3515 * $3516; + $3518 = $s1170; + $3519 = $tau4i160; + $3520 = $3518 * $3519; + $3521 = $3517 - $3520; + $3522 = $s2171; + $3523 = $tau5i162; + $3524 = $3522 * $3523; + $3525 = $3521 + $3524; + $tau7i166 = $3525; + } + $3526 = $tau6r163; + $3527 = $tau7i166; + $3528 = $3526 - $3527; + $3529 = $tkm3130; + $3530 = $0; + $3531 = (($3530) + ($3529<<4)|0); + HEAPF64[$3531>>3] = $3528; + $3532 = $tau6i164; + $3533 = $tau7r165; + $3534 = $3532 + $3533; + $3535 = $tkm3130; + $3536 = $0; + $3537 = (($3536) + ($3535<<4)|0); + $3538 = ((($3537)) + 8|0); + HEAPF64[$3538>>3] = $3534; + $3539 = $tau6r163; + $3540 = $tau7i166; + $3541 = $3539 + $3540; + $3542 = $tkm4131; + $3543 = $0; + $3544 = (($3543) + ($3542<<4)|0); + HEAPF64[$3544>>3] = $3541; + $3545 = $tau6i164; + $3546 = $tau7r165; + $3547 = $3545 - $3546; + $3548 = $tkm4131; + $3549 = $0; + $3550 = (($3549) + ($3548<<4)|0); + $3551 = ((($3550)) + 8|0); + HEAPF64[$3551>>3] = $3547; + $k127 = 1; + while(1) { + $3552 = $k127; + $3553 = $m; + $3554 = ($3552|0)<($3553|0); + if (!($3554)) { + break; + } + $3555 = $m; + $3556 = (($3555) - 1)|0; + $3557 = $k127; + $3558 = ($3557*6)|0; + $3559 = (($3556) + ($3558))|0; + $ind132 = $3559; + $3560 = $2; + $3561 = ((($3560)) + 272|0); + $3562 = $ind132; + $3563 = (($3561) + ($3562<<4)|0); + $3564 = +HEAPF64[$3563>>3]; + $wlr133 = $3564; + $3565 = $2; + $3566 = ((($3565)) + 272|0); + $3567 = $ind132; + $3568 = (($3566) + ($3567<<4)|0); + $3569 = ((($3568)) + 8|0); + $3570 = +HEAPF64[$3569>>3]; + $wli134 = $3570; + $3571 = $ind132; + $3572 = (($3571) + 1)|0; + $ind132 = $3572; + $3573 = $2; + $3574 = ((($3573)) + 272|0); + $3575 = $ind132; + $3576 = (($3574) + ($3575<<4)|0); + $3577 = +HEAPF64[$3576>>3]; + $wl2r135 = $3577; + $3578 = $2; + $3579 = ((($3578)) + 272|0); + $3580 = $ind132; + $3581 = (($3579) + ($3580<<4)|0); + $3582 = ((($3581)) + 8|0); + $3583 = +HEAPF64[$3582>>3]; + $wl2i136 = $3583; + $3584 = $ind132; + $3585 = (($3584) + 1)|0; + $ind132 = $3585; + $3586 = $2; + $3587 = ((($3586)) + 272|0); + $3588 = $ind132; + $3589 = (($3587) + ($3588<<4)|0); + $3590 = +HEAPF64[$3589>>3]; + $wl3r137 = $3590; + $3591 = $2; + $3592 = ((($3591)) + 272|0); + $3593 = $ind132; + $3594 = (($3592) + ($3593<<4)|0); + $3595 = ((($3594)) + 8|0); + $3596 = +HEAPF64[$3595>>3]; + $wl3i138 = $3596; + $3597 = $ind132; + $3598 = (($3597) + 1)|0; + $ind132 = $3598; + $3599 = $2; + $3600 = ((($3599)) + 272|0); + $3601 = $ind132; + $3602 = (($3600) + ($3601<<4)|0); + $3603 = +HEAPF64[$3602>>3]; + $wl4r139 = $3603; + $3604 = $2; + $3605 = ((($3604)) + 272|0); + $3606 = $ind132; + $3607 = (($3605) + ($3606<<4)|0); + $3608 = ((($3607)) + 8|0); + $3609 = +HEAPF64[$3608>>3]; + $wl4i140 = $3609; + $3610 = $ind132; + $3611 = (($3610) + 1)|0; + $ind132 = $3611; + $3612 = $2; + $3613 = ((($3612)) + 272|0); + $3614 = $ind132; + $3615 = (($3613) + ($3614<<4)|0); + $3616 = +HEAPF64[$3615>>3]; + $wl5r = $3616; + $3617 = $2; + $3618 = ((($3617)) + 272|0); + $3619 = $ind132; + $3620 = (($3618) + ($3619<<4)|0); + $3621 = ((($3620)) + 8|0); + $3622 = +HEAPF64[$3621>>3]; + $wl5i = $3622; + $3623 = $ind132; + $3624 = (($3623) + 1)|0; + $ind132 = $3624; + $3625 = $2; + $3626 = ((($3625)) + 272|0); + $3627 = $ind132; + $3628 = (($3626) + ($3627<<4)|0); + $3629 = +HEAPF64[$3628>>3]; + $wl6r = $3629; + $3630 = $2; + $3631 = ((($3630)) + 272|0); + $3632 = $ind132; + $3633 = (($3631) + ($3632<<4)|0); + $3634 = ((($3633)) + 8|0); + $3635 = +HEAPF64[$3634>>3]; + $wl6i = $3635; + $3636 = $k127; + $3637 = $m; + $3638 = (($3636) + ($3637))|0; + $tkm1128 = $3638; + $3639 = $tkm1128; + $3640 = $m; + $3641 = (($3639) + ($3640))|0; + $tkm2129 = $3641; + $3642 = $tkm2129; + $3643 = $m; + $3644 = (($3642) + ($3643))|0; + $tkm3130 = $3644; + $3645 = $tkm3130; + $3646 = $m; + $3647 = (($3645) + ($3646))|0; + $tkm4131 = $3647; + $3648 = $tkm4131; + $3649 = $m; + $3650 = (($3648) + ($3649))|0; + $tkm5 = $3650; + $3651 = $tkm5; + $3652 = $m; + $3653 = (($3651) + ($3652))|0; + $tkm6 = $3653; + $3654 = $k127; + $3655 = $0; + $3656 = (($3655) + ($3654<<4)|0); + $3657 = +HEAPF64[$3656>>3]; + $ar149 = $3657; + $3658 = $k127; + $3659 = $0; + $3660 = (($3659) + ($3658<<4)|0); + $3661 = ((($3660)) + 8|0); + $3662 = +HEAPF64[$3661>>3]; + $ai150 = $3662; + $3663 = $tkm1128; + $3664 = $0; + $3665 = (($3664) + ($3663<<4)|0); + $3666 = +HEAPF64[$3665>>3]; + $3667 = $wlr133; + $3668 = $3666 * $3667; + $3669 = $tkm1128; + $3670 = $0; + $3671 = (($3670) + ($3669<<4)|0); + $3672 = ((($3671)) + 8|0); + $3673 = +HEAPF64[$3672>>3]; + $3674 = $wli134; + $3675 = $3673 * $3674; + $3676 = $3668 - $3675; + $br151 = $3676; + $3677 = $tkm1128; + $3678 = $0; + $3679 = (($3678) + ($3677<<4)|0); + $3680 = ((($3679)) + 8|0); + $3681 = +HEAPF64[$3680>>3]; + $3682 = $wlr133; + $3683 = $3681 * $3682; + $3684 = $tkm1128; + $3685 = $0; + $3686 = (($3685) + ($3684<<4)|0); + $3687 = +HEAPF64[$3686>>3]; + $3688 = $wli134; + $3689 = $3687 * $3688; + $3690 = $3683 + $3689; + $bi152 = $3690; + $3691 = $tkm2129; + $3692 = $0; + $3693 = (($3692) + ($3691<<4)|0); + $3694 = +HEAPF64[$3693>>3]; + $3695 = $wl2r135; + $3696 = $3694 * $3695; + $3697 = $tkm2129; + $3698 = $0; + $3699 = (($3698) + ($3697<<4)|0); + $3700 = ((($3699)) + 8|0); + $3701 = +HEAPF64[$3700>>3]; + $3702 = $wl2i136; + $3703 = $3701 * $3702; + $3704 = $3696 - $3703; + $cr153 = $3704; + $3705 = $tkm2129; + $3706 = $0; + $3707 = (($3706) + ($3705<<4)|0); + $3708 = ((($3707)) + 8|0); + $3709 = +HEAPF64[$3708>>3]; + $3710 = $wl2r135; + $3711 = $3709 * $3710; + $3712 = $tkm2129; + $3713 = $0; + $3714 = (($3713) + ($3712<<4)|0); + $3715 = +HEAPF64[$3714>>3]; + $3716 = $wl2i136; + $3717 = $3715 * $3716; + $3718 = $3711 + $3717; + $ci154 = $3718; + $3719 = $tkm3130; + $3720 = $0; + $3721 = (($3720) + ($3719<<4)|0); + $3722 = +HEAPF64[$3721>>3]; + $3723 = $wl3r137; + $3724 = $3722 * $3723; + $3725 = $tkm3130; + $3726 = $0; + $3727 = (($3726) + ($3725<<4)|0); + $3728 = ((($3727)) + 8|0); + $3729 = +HEAPF64[$3728>>3]; + $3730 = $wl3i138; + $3731 = $3729 * $3730; + $3732 = $3724 - $3731; + $dr155 = $3732; + $3733 = $tkm3130; + $3734 = $0; + $3735 = (($3734) + ($3733<<4)|0); + $3736 = ((($3735)) + 8|0); + $3737 = +HEAPF64[$3736>>3]; + $3738 = $wl3r137; + $3739 = $3737 * $3738; + $3740 = $tkm3130; + $3741 = $0; + $3742 = (($3741) + ($3740<<4)|0); + $3743 = +HEAPF64[$3742>>3]; + $3744 = $wl3i138; + $3745 = $3743 * $3744; + $3746 = $3739 + $3745; + $di156 = $3746; + $3747 = $tkm4131; + $3748 = $0; + $3749 = (($3748) + ($3747<<4)|0); + $3750 = +HEAPF64[$3749>>3]; + $3751 = $wl4r139; + $3752 = $3750 * $3751; + $3753 = $tkm4131; + $3754 = $0; + $3755 = (($3754) + ($3753<<4)|0); + $3756 = ((($3755)) + 8|0); + $3757 = +HEAPF64[$3756>>3]; + $3758 = $wl4i140; + $3759 = $3757 * $3758; + $3760 = $3752 - $3759; + $er157 = $3760; + $3761 = $tkm4131; + $3762 = $0; + $3763 = (($3762) + ($3761<<4)|0); + $3764 = ((($3763)) + 8|0); + $3765 = +HEAPF64[$3764>>3]; + $3766 = $wl4r139; + $3767 = $3765 * $3766; + $3768 = $tkm4131; + $3769 = $0; + $3770 = (($3769) + ($3768<<4)|0); + $3771 = +HEAPF64[$3770>>3]; + $3772 = $wl4i140; + $3773 = $3771 * $3772; + $3774 = $3767 + $3773; + $ei158 = $3774; + $3775 = $tkm5; + $3776 = $0; + $3777 = (($3776) + ($3775<<4)|0); + $3778 = +HEAPF64[$3777>>3]; + $3779 = $wl5r; + $3780 = $3778 * $3779; + $3781 = $tkm5; + $3782 = $0; + $3783 = (($3782) + ($3781<<4)|0); + $3784 = ((($3783)) + 8|0); + $3785 = +HEAPF64[$3784>>3]; + $3786 = $wl5i; + $3787 = $3785 * $3786; + $3788 = $3780 - $3787; + $fr = $3788; + $3789 = $tkm5; + $3790 = $0; + $3791 = (($3790) + ($3789<<4)|0); + $3792 = ((($3791)) + 8|0); + $3793 = +HEAPF64[$3792>>3]; + $3794 = $wl5r; + $3795 = $3793 * $3794; + $3796 = $tkm5; + $3797 = $0; + $3798 = (($3797) + ($3796<<4)|0); + $3799 = +HEAPF64[$3798>>3]; + $3800 = $wl5i; + $3801 = $3799 * $3800; + $3802 = $3795 + $3801; + $fi = $3802; + $3803 = $tkm6; + $3804 = $0; + $3805 = (($3804) + ($3803<<4)|0); + $3806 = +HEAPF64[$3805>>3]; + $3807 = $wl6r; + $3808 = $3806 * $3807; + $3809 = $tkm6; + $3810 = $0; + $3811 = (($3810) + ($3809<<4)|0); + $3812 = ((($3811)) + 8|0); + $3813 = +HEAPF64[$3812>>3]; + $3814 = $wl6i; + $3815 = $3813 * $3814; + $3816 = $3808 - $3815; + $gr = $3816; + $3817 = $tkm6; + $3818 = $0; + $3819 = (($3818) + ($3817<<4)|0); + $3820 = ((($3819)) + 8|0); + $3821 = +HEAPF64[$3820>>3]; + $3822 = $wl6r; + $3823 = $3821 * $3822; + $3824 = $tkm6; + $3825 = $0; + $3826 = (($3825) + ($3824<<4)|0); + $3827 = +HEAPF64[$3826>>3]; + $3828 = $wl6i; + $3829 = $3827 * $3828; + $3830 = $3823 + $3829; + $gi = $3830; + $3831 = $br151; + $3832 = $gr; + $3833 = $3831 + $3832; + $tau0r141 = $3833; + $3834 = $br151; + $3835 = $gr; + $3836 = $3834 - $3835; + $tau3r147 = $3836; + $3837 = $bi152; + $3838 = $gi; + $3839 = $3837 + $3838; + $tau0i142 = $3839; + $3840 = $bi152; + $3841 = $gi; + $3842 = $3840 - $3841; + $tau3i148 = $3842; + $3843 = $cr153; + $3844 = $fr; + $3845 = $3843 + $3844; + $tau1r143 = $3845; + $3846 = $cr153; + $3847 = $fr; + $3848 = $3846 - $3847; + $tau4r159 = $3848; + $3849 = $ci154; + $3850 = $fi; + $3851 = $3849 + $3850; + $tau1i144 = $3851; + $3852 = $ci154; + $3853 = $fi; + $3854 = $3852 - $3853; + $tau4i160 = $3854; + $3855 = $dr155; + $3856 = $er157; + $3857 = $3855 + $3856; + $tau2r145 = $3857; + $3858 = $dr155; + $3859 = $er157; + $3860 = $3858 - $3859; + $tau5r161 = $3860; + $3861 = $di156; + $3862 = $ei158; + $3863 = $3861 + $3862; + $tau2i146 = $3863; + $3864 = $di156; + $3865 = $ei158; + $3866 = $3864 - $3865; + $tau5i162 = $3866; + $3867 = $ar149; + $3868 = $tau0r141; + $3869 = $3867 + $3868; + $3870 = $tau1r143; + $3871 = $3869 + $3870; + $3872 = $tau2r145; + $3873 = $3871 + $3872; + $3874 = $k127; + $3875 = $0; + $3876 = (($3875) + ($3874<<4)|0); + HEAPF64[$3876>>3] = $3873; + $3877 = $ai150; + $3878 = $tau0i142; + $3879 = $3877 + $3878; + $3880 = $tau1i144; + $3881 = $3879 + $3880; + $3882 = $tau2i146; + $3883 = $3881 + $3882; + $3884 = $k127; + $3885 = $0; + $3886 = (($3885) + ($3884<<4)|0); + $3887 = ((($3886)) + 8|0); + HEAPF64[$3887>>3] = $3883; + $3888 = $ar149; + $3889 = $c1167; + $3890 = $tau0r141; + $3891 = $3889 * $3890; + $3892 = $3888 + $3891; + $3893 = $c2168; + $3894 = $tau1r143; + $3895 = $3893 * $3894; + $3896 = $3892 + $3895; + $3897 = $c3169; + $3898 = $tau2r145; + $3899 = $3897 * $3898; + $3900 = $3896 + $3899; + $tau6r163 = $3900; + $3901 = $ai150; + $3902 = $c1167; + $3903 = $tau0i142; + $3904 = $3902 * $3903; + $3905 = $3901 + $3904; + $3906 = $c2168; + $3907 = $tau1i144; + $3908 = $3906 * $3907; + $3909 = $3905 + $3908; + $3910 = $c3169; + $3911 = $tau2i146; + $3912 = $3910 * $3911; + $3913 = $3909 + $3912; + $tau6i164 = $3913; + $3914 = $3; + $3915 = ($3914|0)==(1); + $3916 = $s1170; + if ($3915) { + $3917 = -$3916; + $3918 = $tau3r147; + $3919 = $3917 * $3918; + $3920 = $s2171; + $3921 = $tau4r159; + $3922 = $3920 * $3921; + $3923 = $3919 - $3922; + $3924 = $s3172; + $3925 = $tau5r161; + $3926 = $3924 * $3925; + $3927 = $3923 - $3926; + $tau7r165 = $3927; + $3928 = $s1170; + $3929 = -$3928; + $3930 = $tau3i148; + $3931 = $3929 * $3930; + $3932 = $s2171; + $3933 = $tau4i160; + $3934 = $3932 * $3933; + $3935 = $3931 - $3934; + $3936 = $s3172; + $3937 = $tau5i162; + $3938 = $3936 * $3937; + $3939 = $3935 - $3938; + $tau7i166 = $3939; + } else { + $3940 = $tau3r147; + $3941 = $3916 * $3940; + $3942 = $s2171; + $3943 = $tau4r159; + $3944 = $3942 * $3943; + $3945 = $3941 + $3944; + $3946 = $s3172; + $3947 = $tau5r161; + $3948 = $3946 * $3947; + $3949 = $3945 + $3948; + $tau7r165 = $3949; + $3950 = $s1170; + $3951 = $tau3i148; + $3952 = $3950 * $3951; + $3953 = $s2171; + $3954 = $tau4i160; + $3955 = $3953 * $3954; + $3956 = $3952 + $3955; + $3957 = $s3172; + $3958 = $tau5i162; + $3959 = $3957 * $3958; + $3960 = $3956 + $3959; + $tau7i166 = $3960; + } + $3961 = $tau6r163; + $3962 = $tau7i166; + $3963 = $3961 - $3962; + $3964 = $tkm1128; + $3965 = $0; + $3966 = (($3965) + ($3964<<4)|0); + HEAPF64[$3966>>3] = $3963; + $3967 = $tau6i164; + $3968 = $tau7r165; + $3969 = $3967 + $3968; + $3970 = $tkm1128; + $3971 = $0; + $3972 = (($3971) + ($3970<<4)|0); + $3973 = ((($3972)) + 8|0); + HEAPF64[$3973>>3] = $3969; + $3974 = $tau6r163; + $3975 = $tau7i166; + $3976 = $3974 + $3975; + $3977 = $tkm6; + $3978 = $0; + $3979 = (($3978) + ($3977<<4)|0); + HEAPF64[$3979>>3] = $3976; + $3980 = $tau6i164; + $3981 = $tau7r165; + $3982 = $3980 - $3981; + $3983 = $tkm6; + $3984 = $0; + $3985 = (($3984) + ($3983<<4)|0); + $3986 = ((($3985)) + 8|0); + HEAPF64[$3986>>3] = $3982; + $3987 = $ar149; + $3988 = $c2168; + $3989 = $tau0r141; + $3990 = $3988 * $3989; + $3991 = $3987 + $3990; + $3992 = $c3169; + $3993 = $tau1r143; + $3994 = $3992 * $3993; + $3995 = $3991 + $3994; + $3996 = $c1167; + $3997 = $tau2r145; + $3998 = $3996 * $3997; + $3999 = $3995 + $3998; + $tau6r163 = $3999; + $4000 = $ai150; + $4001 = $c2168; + $4002 = $tau0i142; + $4003 = $4001 * $4002; + $4004 = $4000 + $4003; + $4005 = $c3169; + $4006 = $tau1i144; + $4007 = $4005 * $4006; + $4008 = $4004 + $4007; + $4009 = $c1167; + $4010 = $tau2i146; + $4011 = $4009 * $4010; + $4012 = $4008 + $4011; + $tau6i164 = $4012; + $4013 = $3; + $4014 = ($4013|0)==(1); + $4015 = $s2171; + if ($4014) { + $4016 = -$4015; + $4017 = $tau3r147; + $4018 = $4016 * $4017; + $4019 = $s3172; + $4020 = $tau4r159; + $4021 = $4019 * $4020; + $4022 = $4018 + $4021; + $4023 = $s1170; + $4024 = $tau5r161; + $4025 = $4023 * $4024; + $4026 = $4022 + $4025; + $tau7r165 = $4026; + $4027 = $s2171; + $4028 = -$4027; + $4029 = $tau3i148; + $4030 = $4028 * $4029; + $4031 = $s3172; + $4032 = $tau4i160; + $4033 = $4031 * $4032; + $4034 = $4030 + $4033; + $4035 = $s1170; + $4036 = $tau5i162; + $4037 = $4035 * $4036; + $4038 = $4034 + $4037; + $tau7i166 = $4038; + } else { + $4039 = $tau3r147; + $4040 = $4015 * $4039; + $4041 = $s3172; + $4042 = $tau4r159; + $4043 = $4041 * $4042; + $4044 = $4040 - $4043; + $4045 = $s1170; + $4046 = $tau5r161; + $4047 = $4045 * $4046; + $4048 = $4044 - $4047; + $tau7r165 = $4048; + $4049 = $s2171; + $4050 = $tau3i148; + $4051 = $4049 * $4050; + $4052 = $s3172; + $4053 = $tau4i160; + $4054 = $4052 * $4053; + $4055 = $4051 - $4054; + $4056 = $s1170; + $4057 = $tau5i162; + $4058 = $4056 * $4057; + $4059 = $4055 - $4058; + $tau7i166 = $4059; + } + $4060 = $tau6r163; + $4061 = $tau7i166; + $4062 = $4060 - $4061; + $4063 = $tkm2129; + $4064 = $0; + $4065 = (($4064) + ($4063<<4)|0); + HEAPF64[$4065>>3] = $4062; + $4066 = $tau6i164; + $4067 = $tau7r165; + $4068 = $4066 + $4067; + $4069 = $tkm2129; + $4070 = $0; + $4071 = (($4070) + ($4069<<4)|0); + $4072 = ((($4071)) + 8|0); + HEAPF64[$4072>>3] = $4068; + $4073 = $tau6r163; + $4074 = $tau7i166; + $4075 = $4073 + $4074; + $4076 = $tkm5; + $4077 = $0; + $4078 = (($4077) + ($4076<<4)|0); + HEAPF64[$4078>>3] = $4075; + $4079 = $tau6i164; + $4080 = $tau7r165; + $4081 = $4079 - $4080; + $4082 = $tkm5; + $4083 = $0; + $4084 = (($4083) + ($4082<<4)|0); + $4085 = ((($4084)) + 8|0); + HEAPF64[$4085>>3] = $4081; + $4086 = $ar149; + $4087 = $c3169; + $4088 = $tau0r141; + $4089 = $4087 * $4088; + $4090 = $4086 + $4089; + $4091 = $c1167; + $4092 = $tau1r143; + $4093 = $4091 * $4092; + $4094 = $4090 + $4093; + $4095 = $c2168; + $4096 = $tau2r145; + $4097 = $4095 * $4096; + $4098 = $4094 + $4097; + $tau6r163 = $4098; + $4099 = $ai150; + $4100 = $c3169; + $4101 = $tau0i142; + $4102 = $4100 * $4101; + $4103 = $4099 + $4102; + $4104 = $c1167; + $4105 = $tau1i144; + $4106 = $4104 * $4105; + $4107 = $4103 + $4106; + $4108 = $c2168; + $4109 = $tau2i146; + $4110 = $4108 * $4109; + $4111 = $4107 + $4110; + $tau6i164 = $4111; + $4112 = $3; + $4113 = ($4112|0)==(1); + $4114 = $s3172; + if ($4113) { + $4115 = -$4114; + $4116 = $tau3r147; + $4117 = $4115 * $4116; + $4118 = $s1170; + $4119 = $tau4r159; + $4120 = $4118 * $4119; + $4121 = $4117 + $4120; + $4122 = $s2171; + $4123 = $tau5r161; + $4124 = $4122 * $4123; + $4125 = $4121 - $4124; + $tau7r165 = $4125; + $4126 = $s3172; + $4127 = -$4126; + $4128 = $tau3i148; + $4129 = $4127 * $4128; + $4130 = $s1170; + $4131 = $tau4i160; + $4132 = $4130 * $4131; + $4133 = $4129 + $4132; + $4134 = $s2171; + $4135 = $tau5i162; + $4136 = $4134 * $4135; + $4137 = $4133 - $4136; + $tau7i166 = $4137; + } else { + $4138 = $tau3r147; + $4139 = $4114 * $4138; + $4140 = $s1170; + $4141 = $tau4r159; + $4142 = $4140 * $4141; + $4143 = $4139 - $4142; + $4144 = $s2171; + $4145 = $tau5r161; + $4146 = $4144 * $4145; + $4147 = $4143 + $4146; + $tau7r165 = $4147; + $4148 = $s3172; + $4149 = $tau3i148; + $4150 = $4148 * $4149; + $4151 = $s1170; + $4152 = $tau4i160; + $4153 = $4151 * $4152; + $4154 = $4150 - $4153; + $4155 = $s2171; + $4156 = $tau5i162; + $4157 = $4155 * $4156; + $4158 = $4154 + $4157; + $tau7i166 = $4158; + } + $4159 = $tau6r163; + $4160 = $tau7i166; + $4161 = $4159 - $4160; + $4162 = $tkm3130; + $4163 = $0; + $4164 = (($4163) + ($4162<<4)|0); + HEAPF64[$4164>>3] = $4161; + $4165 = $tau6i164; + $4166 = $tau7r165; + $4167 = $4165 + $4166; + $4168 = $tkm3130; + $4169 = $0; + $4170 = (($4169) + ($4168<<4)|0); + $4171 = ((($4170)) + 8|0); + HEAPF64[$4171>>3] = $4167; + $4172 = $tau6r163; + $4173 = $tau7i166; + $4174 = $4172 + $4173; + $4175 = $tkm4131; + $4176 = $0; + $4177 = (($4176) + ($4175<<4)|0); + HEAPF64[$4177>>3] = $4174; + $4178 = $tau6i164; + $4179 = $tau7r165; + $4180 = $4178 - $4179; + $4181 = $tkm4131; + $4182 = $0; + $4183 = (($4182) + ($4181<<4)|0); + $4184 = ((($4183)) + 8|0); + HEAPF64[$4184>>3] = $4180; + $4185 = $k127; + $4186 = (($4185) + 1)|0; + $k127 = $4186; + } + STACKTOP = sp;return; + } + $4187 = $radix; + $4188 = ($4187|0)==(8); + if ($4188) { + $4189 = $4; + $4190 = (($4189|0) / 8)&-1; + $m = $4190; + $4191 = $5; + $4192 = $4191<<3; + $ll = $4192; + $4193 = $0; + $4194 = $1; + $4195 = $2; + $4196 = $3; + $4197 = $m; + $4198 = $ll; + $4199 = $6; + $4200 = (($4199) + 1)|0; + _mixed_radix_dit_rec($4193,$4194,$4195,$4196,$4197,$4198,$4200); + $4201 = $0; + $4202 = $m; + $4203 = (($4201) + ($4202<<4)|0); + $4204 = $1; + $4205 = $5; + $4206 = (($4204) + ($4205<<4)|0); + $4207 = $2; + $4208 = $3; + $4209 = $m; + $4210 = $ll; + $4211 = $6; + $4212 = (($4211) + 1)|0; + _mixed_radix_dit_rec($4203,$4206,$4207,$4208,$4209,$4210,$4212); + $4213 = $0; + $4214 = $m; + $4215 = $4214<<1; + $4216 = (($4213) + ($4215<<4)|0); + $4217 = $1; + $4218 = $5; + $4219 = $4218<<1; + $4220 = (($4217) + ($4219<<4)|0); + $4221 = $2; + $4222 = $3; + $4223 = $m; + $4224 = $ll; + $4225 = $6; + $4226 = (($4225) + 1)|0; + _mixed_radix_dit_rec($4216,$4220,$4221,$4222,$4223,$4224,$4226); + $4227 = $0; + $4228 = $m; + $4229 = ($4228*3)|0; + $4230 = (($4227) + ($4229<<4)|0); + $4231 = $1; + $4232 = $5; + $4233 = ($4232*3)|0; + $4234 = (($4231) + ($4233<<4)|0); + $4235 = $2; + $4236 = $3; + $4237 = $m; + $4238 = $ll; + $4239 = $6; + $4240 = (($4239) + 1)|0; + _mixed_radix_dit_rec($4230,$4234,$4235,$4236,$4237,$4238,$4240); + $4241 = $0; + $4242 = $m; + $4243 = $4242<<2; + $4244 = (($4241) + ($4243<<4)|0); + $4245 = $1; + $4246 = $5; + $4247 = $4246<<2; + $4248 = (($4245) + ($4247<<4)|0); + $4249 = $2; + $4250 = $3; + $4251 = $m; + $4252 = $ll; + $4253 = $6; + $4254 = (($4253) + 1)|0; + _mixed_radix_dit_rec($4244,$4248,$4249,$4250,$4251,$4252,$4254); + $4255 = $0; + $4256 = $m; + $4257 = ($4256*5)|0; + $4258 = (($4255) + ($4257<<4)|0); + $4259 = $1; + $4260 = $5; + $4261 = ($4260*5)|0; + $4262 = (($4259) + ($4261<<4)|0); + $4263 = $2; + $4264 = $3; + $4265 = $m; + $4266 = $ll; + $4267 = $6; + $4268 = (($4267) + 1)|0; + _mixed_radix_dit_rec($4258,$4262,$4263,$4264,$4265,$4266,$4268); + $4269 = $0; + $4270 = $m; + $4271 = ($4270*6)|0; + $4272 = (($4269) + ($4271<<4)|0); + $4273 = $1; + $4274 = $5; + $4275 = ($4274*6)|0; + $4276 = (($4273) + ($4275<<4)|0); + $4277 = $2; + $4278 = $3; + $4279 = $m; + $4280 = $ll; + $4281 = $6; + $4282 = (($4281) + 1)|0; + _mixed_radix_dit_rec($4272,$4276,$4277,$4278,$4279,$4280,$4282); + $4283 = $0; + $4284 = $m; + $4285 = ($4284*7)|0; + $4286 = (($4283) + ($4285<<4)|0); + $4287 = $1; + $4288 = $5; + $4289 = ($4288*7)|0; + $4290 = (($4287) + ($4289<<4)|0); + $4291 = $2; + $4292 = $3; + $4293 = $m; + $4294 = $ll; + $4295 = $6; + $4296 = (($4295) + 1)|0; + _mixed_radix_dit_rec($4286,$4290,$4291,$4292,$4293,$4294,$4296); + $c1227 = 0.70710678118654757; + $s1228 = 0.70710678118654757; + $k173 = 0; + while(1) { + $4297 = $k173; + $4298 = $m; + $4299 = ($4297|0)<($4298|0); + if (!($4299)) { + break; + } + $4300 = $m; + $4301 = (($4300) - 1)|0; + $4302 = $k173; + $4303 = ($4302*7)|0; + $4304 = (($4301) + ($4303))|0; + $ind180 = $4304; + $4305 = $2; + $4306 = ((($4305)) + 272|0); + $4307 = $ind180; + $4308 = (($4306) + ($4307<<4)|0); + $4309 = +HEAPF64[$4308>>3]; + $wlr181 = $4309; + $4310 = $2; + $4311 = ((($4310)) + 272|0); + $4312 = $ind180; + $4313 = (($4311) + ($4312<<4)|0); + $4314 = ((($4313)) + 8|0); + $4315 = +HEAPF64[$4314>>3]; + $wli182 = $4315; + $4316 = $ind180; + $4317 = (($4316) + 1)|0; + $ind180 = $4317; + $4318 = $2; + $4319 = ((($4318)) + 272|0); + $4320 = $ind180; + $4321 = (($4319) + ($4320<<4)|0); + $4322 = +HEAPF64[$4321>>3]; + $wl2r183 = $4322; + $4323 = $2; + $4324 = ((($4323)) + 272|0); + $4325 = $ind180; + $4326 = (($4324) + ($4325<<4)|0); + $4327 = ((($4326)) + 8|0); + $4328 = +HEAPF64[$4327>>3]; + $wl2i184 = $4328; + $4329 = $ind180; + $4330 = (($4329) + 1)|0; + $ind180 = $4330; + $4331 = $2; + $4332 = ((($4331)) + 272|0); + $4333 = $ind180; + $4334 = (($4332) + ($4333<<4)|0); + $4335 = +HEAPF64[$4334>>3]; + $wl3r185 = $4335; + $4336 = $2; + $4337 = ((($4336)) + 272|0); + $4338 = $ind180; + $4339 = (($4337) + ($4338<<4)|0); + $4340 = ((($4339)) + 8|0); + $4341 = +HEAPF64[$4340>>3]; + $wl3i186 = $4341; + $4342 = $ind180; + $4343 = (($4342) + 1)|0; + $ind180 = $4343; + $4344 = $2; + $4345 = ((($4344)) + 272|0); + $4346 = $ind180; + $4347 = (($4345) + ($4346<<4)|0); + $4348 = +HEAPF64[$4347>>3]; + $wl4r187 = $4348; + $4349 = $2; + $4350 = ((($4349)) + 272|0); + $4351 = $ind180; + $4352 = (($4350) + ($4351<<4)|0); + $4353 = ((($4352)) + 8|0); + $4354 = +HEAPF64[$4353>>3]; + $wl4i188 = $4354; + $4355 = $ind180; + $4356 = (($4355) + 1)|0; + $ind180 = $4356; + $4357 = $2; + $4358 = ((($4357)) + 272|0); + $4359 = $ind180; + $4360 = (($4358) + ($4359<<4)|0); + $4361 = +HEAPF64[$4360>>3]; + $wl5r189 = $4361; + $4362 = $2; + $4363 = ((($4362)) + 272|0); + $4364 = $ind180; + $4365 = (($4363) + ($4364<<4)|0); + $4366 = ((($4365)) + 8|0); + $4367 = +HEAPF64[$4366>>3]; + $wl5i190 = $4367; + $4368 = $ind180; + $4369 = (($4368) + 1)|0; + $ind180 = $4369; + $4370 = $2; + $4371 = ((($4370)) + 272|0); + $4372 = $ind180; + $4373 = (($4371) + ($4372<<4)|0); + $4374 = +HEAPF64[$4373>>3]; + $wl6r191 = $4374; + $4375 = $2; + $4376 = ((($4375)) + 272|0); + $4377 = $ind180; + $4378 = (($4376) + ($4377<<4)|0); + $4379 = ((($4378)) + 8|0); + $4380 = +HEAPF64[$4379>>3]; + $wl6i192 = $4380; + $4381 = $ind180; + $4382 = (($4381) + 1)|0; + $ind180 = $4382; + $4383 = $2; + $4384 = ((($4383)) + 272|0); + $4385 = $ind180; + $4386 = (($4384) + ($4385<<4)|0); + $4387 = +HEAPF64[$4386>>3]; + $wl7r = $4387; + $4388 = $2; + $4389 = ((($4388)) + 272|0); + $4390 = $ind180; + $4391 = (($4389) + ($4390<<4)|0); + $4392 = ((($4391)) + 8|0); + $4393 = +HEAPF64[$4392>>3]; + $wl7i = $4393; + $4394 = $k173; + $4395 = $m; + $4396 = (($4394) + ($4395))|0; + $tkm1174 = $4396; + $4397 = $tkm1174; + $4398 = $m; + $4399 = (($4397) + ($4398))|0; + $tkm2175 = $4399; + $4400 = $tkm2175; + $4401 = $m; + $4402 = (($4400) + ($4401))|0; + $tkm3176 = $4402; + $4403 = $tkm3176; + $4404 = $m; + $4405 = (($4403) + ($4404))|0; + $tkm4177 = $4405; + $4406 = $tkm4177; + $4407 = $m; + $4408 = (($4406) + ($4407))|0; + $tkm5178 = $4408; + $4409 = $tkm5178; + $4410 = $m; + $4411 = (($4409) + ($4410))|0; + $tkm6179 = $4411; + $4412 = $tkm6179; + $4413 = $m; + $4414 = (($4412) + ($4413))|0; + $tkm7 = $4414; + $4415 = $k173; + $4416 = $0; + $4417 = (($4416) + ($4415<<4)|0); + $4418 = +HEAPF64[$4417>>3]; + $ar201 = $4418; + $4419 = $k173; + $4420 = $0; + $4421 = (($4420) + ($4419<<4)|0); + $4422 = ((($4421)) + 8|0); + $4423 = +HEAPF64[$4422>>3]; + $ai202 = $4423; + $4424 = $tkm1174; + $4425 = $0; + $4426 = (($4425) + ($4424<<4)|0); + $4427 = +HEAPF64[$4426>>3]; + $4428 = $wlr181; + $4429 = $4427 * $4428; + $4430 = $tkm1174; + $4431 = $0; + $4432 = (($4431) + ($4430<<4)|0); + $4433 = ((($4432)) + 8|0); + $4434 = +HEAPF64[$4433>>3]; + $4435 = $wli182; + $4436 = $4434 * $4435; + $4437 = $4429 - $4436; + $br203 = $4437; + $4438 = $tkm1174; + $4439 = $0; + $4440 = (($4439) + ($4438<<4)|0); + $4441 = ((($4440)) + 8|0); + $4442 = +HEAPF64[$4441>>3]; + $4443 = $wlr181; + $4444 = $4442 * $4443; + $4445 = $tkm1174; + $4446 = $0; + $4447 = (($4446) + ($4445<<4)|0); + $4448 = +HEAPF64[$4447>>3]; + $4449 = $wli182; + $4450 = $4448 * $4449; + $4451 = $4444 + $4450; + $bi204 = $4451; + $4452 = $tkm2175; + $4453 = $0; + $4454 = (($4453) + ($4452<<4)|0); + $4455 = +HEAPF64[$4454>>3]; + $4456 = $wl2r183; + $4457 = $4455 * $4456; + $4458 = $tkm2175; + $4459 = $0; + $4460 = (($4459) + ($4458<<4)|0); + $4461 = ((($4460)) + 8|0); + $4462 = +HEAPF64[$4461>>3]; + $4463 = $wl2i184; + $4464 = $4462 * $4463; + $4465 = $4457 - $4464; + $cr205 = $4465; + $4466 = $tkm2175; + $4467 = $0; + $4468 = (($4467) + ($4466<<4)|0); + $4469 = ((($4468)) + 8|0); + $4470 = +HEAPF64[$4469>>3]; + $4471 = $wl2r183; + $4472 = $4470 * $4471; + $4473 = $tkm2175; + $4474 = $0; + $4475 = (($4474) + ($4473<<4)|0); + $4476 = +HEAPF64[$4475>>3]; + $4477 = $wl2i184; + $4478 = $4476 * $4477; + $4479 = $4472 + $4478; + $ci206 = $4479; + $4480 = $tkm3176; + $4481 = $0; + $4482 = (($4481) + ($4480<<4)|0); + $4483 = +HEAPF64[$4482>>3]; + $4484 = $wl3r185; + $4485 = $4483 * $4484; + $4486 = $tkm3176; + $4487 = $0; + $4488 = (($4487) + ($4486<<4)|0); + $4489 = ((($4488)) + 8|0); + $4490 = +HEAPF64[$4489>>3]; + $4491 = $wl3i186; + $4492 = $4490 * $4491; + $4493 = $4485 - $4492; + $dr207 = $4493; + $4494 = $tkm3176; + $4495 = $0; + $4496 = (($4495) + ($4494<<4)|0); + $4497 = ((($4496)) + 8|0); + $4498 = +HEAPF64[$4497>>3]; + $4499 = $wl3r185; + $4500 = $4498 * $4499; + $4501 = $tkm3176; + $4502 = $0; + $4503 = (($4502) + ($4501<<4)|0); + $4504 = +HEAPF64[$4503>>3]; + $4505 = $wl3i186; + $4506 = $4504 * $4505; + $4507 = $4500 + $4506; + $di208 = $4507; + $4508 = $tkm4177; + $4509 = $0; + $4510 = (($4509) + ($4508<<4)|0); + $4511 = +HEAPF64[$4510>>3]; + $4512 = $wl4r187; + $4513 = $4511 * $4512; + $4514 = $tkm4177; + $4515 = $0; + $4516 = (($4515) + ($4514<<4)|0); + $4517 = ((($4516)) + 8|0); + $4518 = +HEAPF64[$4517>>3]; + $4519 = $wl4i188; + $4520 = $4518 * $4519; + $4521 = $4513 - $4520; + $er209 = $4521; + $4522 = $tkm4177; + $4523 = $0; + $4524 = (($4523) + ($4522<<4)|0); + $4525 = ((($4524)) + 8|0); + $4526 = +HEAPF64[$4525>>3]; + $4527 = $wl4r187; + $4528 = $4526 * $4527; + $4529 = $tkm4177; + $4530 = $0; + $4531 = (($4530) + ($4529<<4)|0); + $4532 = +HEAPF64[$4531>>3]; + $4533 = $wl4i188; + $4534 = $4532 * $4533; + $4535 = $4528 + $4534; + $ei210 = $4535; + $4536 = $tkm5178; + $4537 = $0; + $4538 = (($4537) + ($4536<<4)|0); + $4539 = +HEAPF64[$4538>>3]; + $4540 = $wl5r189; + $4541 = $4539 * $4540; + $4542 = $tkm5178; + $4543 = $0; + $4544 = (($4543) + ($4542<<4)|0); + $4545 = ((($4544)) + 8|0); + $4546 = +HEAPF64[$4545>>3]; + $4547 = $wl5i190; + $4548 = $4546 * $4547; + $4549 = $4541 - $4548; + $fr211 = $4549; + $4550 = $tkm5178; + $4551 = $0; + $4552 = (($4551) + ($4550<<4)|0); + $4553 = ((($4552)) + 8|0); + $4554 = +HEAPF64[$4553>>3]; + $4555 = $wl5r189; + $4556 = $4554 * $4555; + $4557 = $tkm5178; + $4558 = $0; + $4559 = (($4558) + ($4557<<4)|0); + $4560 = +HEAPF64[$4559>>3]; + $4561 = $wl5i190; + $4562 = $4560 * $4561; + $4563 = $4556 + $4562; + $fi212 = $4563; + $4564 = $tkm6179; + $4565 = $0; + $4566 = (($4565) + ($4564<<4)|0); + $4567 = +HEAPF64[$4566>>3]; + $4568 = $wl6r191; + $4569 = $4567 * $4568; + $4570 = $tkm6179; + $4571 = $0; + $4572 = (($4571) + ($4570<<4)|0); + $4573 = ((($4572)) + 8|0); + $4574 = +HEAPF64[$4573>>3]; + $4575 = $wl6i192; + $4576 = $4574 * $4575; + $4577 = $4569 - $4576; + $gr213 = $4577; + $4578 = $tkm6179; + $4579 = $0; + $4580 = (($4579) + ($4578<<4)|0); + $4581 = ((($4580)) + 8|0); + $4582 = +HEAPF64[$4581>>3]; + $4583 = $wl6r191; + $4584 = $4582 * $4583; + $4585 = $tkm6179; + $4586 = $0; + $4587 = (($4586) + ($4585<<4)|0); + $4588 = +HEAPF64[$4587>>3]; + $4589 = $wl6i192; + $4590 = $4588 * $4589; + $4591 = $4584 + $4590; + $gi214 = $4591; + $4592 = $tkm7; + $4593 = $0; + $4594 = (($4593) + ($4592<<4)|0); + $4595 = +HEAPF64[$4594>>3]; + $4596 = $wl7r; + $4597 = $4595 * $4596; + $4598 = $tkm7; + $4599 = $0; + $4600 = (($4599) + ($4598<<4)|0); + $4601 = ((($4600)) + 8|0); + $4602 = +HEAPF64[$4601>>3]; + $4603 = $wl7i; + $4604 = $4602 * $4603; + $4605 = $4597 - $4604; + $hr = $4605; + $4606 = $tkm7; + $4607 = $0; + $4608 = (($4607) + ($4606<<4)|0); + $4609 = ((($4608)) + 8|0); + $4610 = +HEAPF64[$4609>>3]; + $4611 = $wl7r; + $4612 = $4610 * $4611; + $4613 = $tkm7; + $4614 = $0; + $4615 = (($4614) + ($4613<<4)|0); + $4616 = +HEAPF64[$4615>>3]; + $4617 = $wl7i; + $4618 = $4616 * $4617; + $4619 = $4612 + $4618; + $hi = $4619; + $4620 = $ar201; + $4621 = $er209; + $4622 = $4620 + $4621; + $tau0r193 = $4622; + $4623 = $ar201; + $4624 = $er209; + $4625 = $4623 - $4624; + $tau4r215 = $4625; + $4626 = $ai202; + $4627 = $ei210; + $4628 = $4626 + $4627; + $tau0i194 = $4628; + $4629 = $ai202; + $4630 = $ei210; + $4631 = $4629 - $4630; + $tau4i216 = $4631; + $4632 = $br203; + $4633 = $hr; + $4634 = $4632 + $4633; + $tau1r195 = $4634; + $4635 = $br203; + $4636 = $hr; + $4637 = $4635 - $4636; + $tau5r217 = $4637; + $4638 = $bi204; + $4639 = $hi; + $4640 = $4638 + $4639; + $tau1i196 = $4640; + $4641 = $bi204; + $4642 = $hi; + $4643 = $4641 - $4642; + $tau5i218 = $4643; + $4644 = $dr207; + $4645 = $fr211; + $4646 = $4644 + $4645; + $tau2r197 = $4646; + $4647 = $dr207; + $4648 = $fr211; + $4649 = $4647 - $4648; + $tau6r219 = $4649; + $4650 = $di208; + $4651 = $fi212; + $4652 = $4650 - $4651; + $tau6i220 = $4652; + $4653 = $di208; + $4654 = $fi212; + $4655 = $4653 + $4654; + $tau2i198 = $4655; + $4656 = $cr205; + $4657 = $gr213; + $4658 = $4656 + $4657; + $tau3r199 = $4658; + $4659 = $cr205; + $4660 = $gr213; + $4661 = $4659 - $4660; + $tau7r221 = $4661; + $4662 = $ci206; + $4663 = $gi214; + $4664 = $4662 - $4663; + $tau7i222 = $4664; + $4665 = $ci206; + $4666 = $gi214; + $4667 = $4665 + $4666; + $tau3i200 = $4667; + $4668 = $tau0r193; + $4669 = $tau1r195; + $4670 = $4668 + $4669; + $4671 = $tau2r197; + $4672 = $4670 + $4671; + $4673 = $tau3r199; + $4674 = $4672 + $4673; + $4675 = $k173; + $4676 = $0; + $4677 = (($4676) + ($4675<<4)|0); + HEAPF64[$4677>>3] = $4674; + $4678 = $tau0i194; + $4679 = $tau1i196; + $4680 = $4678 + $4679; + $4681 = $tau2i198; + $4682 = $4680 + $4681; + $4683 = $tau3i200; + $4684 = $4682 + $4683; + $4685 = $k173; + $4686 = $0; + $4687 = (($4686) + ($4685<<4)|0); + $4688 = ((($4687)) + 8|0); + HEAPF64[$4688>>3] = $4684; + $4689 = $tau0r193; + $4690 = $tau1r195; + $4691 = $4689 - $4690; + $4692 = $tau2r197; + $4693 = $4691 - $4692; + $4694 = $tau3r199; + $4695 = $4693 + $4694; + $4696 = $tkm4177; + $4697 = $0; + $4698 = (($4697) + ($4696<<4)|0); + HEAPF64[$4698>>3] = $4695; + $4699 = $tau0i194; + $4700 = $tau1i196; + $4701 = $4699 - $4700; + $4702 = $tau2i198; + $4703 = $4701 - $4702; + $4704 = $tau3i200; + $4705 = $4703 + $4704; + $4706 = $tkm4177; + $4707 = $0; + $4708 = (($4707) + ($4706<<4)|0); + $4709 = ((($4708)) + 8|0); + HEAPF64[$4709>>3] = $4705; + $4710 = $tau1r195; + $4711 = $tau2r197; + $4712 = $4710 - $4711; + $temp1r229 = $4712; + $4713 = $tau1i196; + $4714 = $tau2i198; + $4715 = $4713 - $4714; + $temp1i230 = $4715; + $4716 = $tau5r217; + $4717 = $tau6r219; + $4718 = $4716 + $4717; + $temp2r231 = $4718; + $4719 = $tau5i218; + $4720 = $tau6i220; + $4721 = $4719 + $4720; + $temp2i232 = $4721; + $4722 = $tau4r215; + $4723 = $c1227; + $4724 = $temp1r229; + $4725 = $4723 * $4724; + $4726 = $4722 + $4725; + $tau8r223 = $4726; + $4727 = $tau4i216; + $4728 = $c1227; + $4729 = $temp1i230; + $4730 = $4728 * $4729; + $4731 = $4727 + $4730; + $tau8i224 = $4731; + $4732 = $3; + $4733 = ($4732|0)==(1); + $4734 = $s1228; + if ($4733) { + $4735 = -$4734; + $4736 = $temp2r231; + $4737 = $4735 * $4736; + $4738 = $tau7r221; + $4739 = $4737 - $4738; + $tau9r225 = $4739; + $4740 = $s1228; + $4741 = -$4740; + $4742 = $temp2i232; + $4743 = $4741 * $4742; + $4744 = $tau7i222; + $4745 = $4743 - $4744; + $tau9i226 = $4745; + } else { + $4746 = $temp2r231; + $4747 = $4734 * $4746; + $4748 = $tau7r221; + $4749 = $4747 + $4748; + $tau9r225 = $4749; + $4750 = $s1228; + $4751 = $temp2i232; + $4752 = $4750 * $4751; + $4753 = $tau7i222; + $4754 = $4752 + $4753; + $tau9i226 = $4754; + } + $4755 = $tau8r223; + $4756 = $tau9i226; + $4757 = $4755 - $4756; + $4758 = $tkm1174; + $4759 = $0; + $4760 = (($4759) + ($4758<<4)|0); + HEAPF64[$4760>>3] = $4757; + $4761 = $tau8i224; + $4762 = $tau9r225; + $4763 = $4761 + $4762; + $4764 = $tkm1174; + $4765 = $0; + $4766 = (($4765) + ($4764<<4)|0); + $4767 = ((($4766)) + 8|0); + HEAPF64[$4767>>3] = $4763; + $4768 = $tau8r223; + $4769 = $tau9i226; + $4770 = $4768 + $4769; + $4771 = $tkm7; + $4772 = $0; + $4773 = (($4772) + ($4771<<4)|0); + HEAPF64[$4773>>3] = $4770; + $4774 = $tau8i224; + $4775 = $tau9r225; + $4776 = $4774 - $4775; + $4777 = $tkm7; + $4778 = $0; + $4779 = (($4778) + ($4777<<4)|0); + $4780 = ((($4779)) + 8|0); + HEAPF64[$4780>>3] = $4776; + $4781 = $tau0r193; + $4782 = $tau3r199; + $4783 = $4781 - $4782; + $tau8r223 = $4783; + $4784 = $tau0i194; + $4785 = $tau3i200; + $4786 = $4784 - $4785; + $tau8i224 = $4786; + $4787 = $3; + $4788 = ($4787|0)==(1); + $4789 = $tau5r217; + if ($4788) { + $4790 = -$4789; + $4791 = $tau6r219; + $4792 = $4790 + $4791; + $tau9r225 = $4792; + $4793 = $tau5i218; + $4794 = -$4793; + $4795 = $tau6i220; + $4796 = $4794 + $4795; + $tau9i226 = $4796; + } else { + $4797 = $tau6r219; + $4798 = $4789 - $4797; + $tau9r225 = $4798; + $4799 = $tau5i218; + $4800 = $tau6i220; + $4801 = $4799 - $4800; + $tau9i226 = $4801; + } + $4802 = $tau8r223; + $4803 = $tau9i226; + $4804 = $4802 - $4803; + $4805 = $tkm2175; + $4806 = $0; + $4807 = (($4806) + ($4805<<4)|0); + HEAPF64[$4807>>3] = $4804; + $4808 = $tau8i224; + $4809 = $tau9r225; + $4810 = $4808 + $4809; + $4811 = $tkm2175; + $4812 = $0; + $4813 = (($4812) + ($4811<<4)|0); + $4814 = ((($4813)) + 8|0); + HEAPF64[$4814>>3] = $4810; + $4815 = $tau8r223; + $4816 = $tau9i226; + $4817 = $4815 + $4816; + $4818 = $tkm6179; + $4819 = $0; + $4820 = (($4819) + ($4818<<4)|0); + HEAPF64[$4820>>3] = $4817; + $4821 = $tau8i224; + $4822 = $tau9r225; + $4823 = $4821 - $4822; + $4824 = $tkm6179; + $4825 = $0; + $4826 = (($4825) + ($4824<<4)|0); + $4827 = ((($4826)) + 8|0); + HEAPF64[$4827>>3] = $4823; + $4828 = $tau4r215; + $4829 = $c1227; + $4830 = $temp1r229; + $4831 = $4829 * $4830; + $4832 = $4828 - $4831; + $tau8r223 = $4832; + $4833 = $tau4i216; + $4834 = $c1227; + $4835 = $temp1i230; + $4836 = $4834 * $4835; + $4837 = $4833 - $4836; + $tau8i224 = $4837; + $4838 = $3; + $4839 = ($4838|0)==(1); + $4840 = $s1228; + if ($4839) { + $4841 = -$4840; + $4842 = $temp2r231; + $4843 = $4841 * $4842; + $4844 = $tau7r221; + $4845 = $4843 + $4844; + $tau9r225 = $4845; + $4846 = $s1228; + $4847 = -$4846; + $4848 = $temp2i232; + $4849 = $4847 * $4848; + $4850 = $tau7i222; + $4851 = $4849 + $4850; + $tau9i226 = $4851; + } else { + $4852 = $temp2r231; + $4853 = $4840 * $4852; + $4854 = $tau7r221; + $4855 = $4853 - $4854; + $tau9r225 = $4855; + $4856 = $s1228; + $4857 = $temp2i232; + $4858 = $4856 * $4857; + $4859 = $tau7i222; + $4860 = $4858 - $4859; + $tau9i226 = $4860; + } + $4861 = $tau8r223; + $4862 = $tau9i226; + $4863 = $4861 - $4862; + $4864 = $tkm3176; + $4865 = $0; + $4866 = (($4865) + ($4864<<4)|0); + HEAPF64[$4866>>3] = $4863; + $4867 = $tau8i224; + $4868 = $tau9r225; + $4869 = $4867 + $4868; + $4870 = $tkm3176; + $4871 = $0; + $4872 = (($4871) + ($4870<<4)|0); + $4873 = ((($4872)) + 8|0); + HEAPF64[$4873>>3] = $4869; + $4874 = $tau8r223; + $4875 = $tau9i226; + $4876 = $4874 + $4875; + $4877 = $tkm5178; + $4878 = $0; + $4879 = (($4878) + ($4877<<4)|0); + HEAPF64[$4879>>3] = $4876; + $4880 = $tau8i224; + $4881 = $tau9r225; + $4882 = $4880 - $4881; + $4883 = $tkm5178; + $4884 = $0; + $4885 = (($4884) + ($4883<<4)|0); + $4886 = ((($4885)) + 8|0); + HEAPF64[$4886>>3] = $4882; + $4887 = $k173; + $4888 = (($4887) + 1)|0; + $k173 = $4888; + } + STACKTOP = sp;return; + } + $4889 = $radix; + $4890 = (($4889) - 1)|0; + $4891 = $4890<<3; + $4892 = (_malloc($4891)|0); + $wlr239 = $4892; + $4893 = $radix; + $4894 = (($4893) - 1)|0; + $4895 = $4894<<3; + $4896 = (_malloc($4895)|0); + $wli240 = $4896; + $4897 = $radix; + $4898 = (($4897) - 1)|0; + $4899 = $4898<<3; + $4900 = (_malloc($4899)|0); + $taur = $4900; + $4901 = $radix; + $4902 = (($4901) - 1)|0; + $4903 = $4902<<3; + $4904 = (_malloc($4903)|0); + $taui = $4904; + $4905 = $radix; + $4906 = (($4905) - 1)|0; + $4907 = $4906<<3; + $4908 = (_malloc($4907)|0); + $c1241 = $4908; + $4909 = $radix; + $4910 = (($4909) - 1)|0; + $4911 = $4910<<3; + $4912 = (_malloc($4911)|0); + $s1242 = $4912; + $4913 = $radix; + $4914 = $4913<<3; + $4915 = (_malloc($4914)|0); + $yr = $4915; + $4916 = $radix; + $4917 = $4916<<3; + $4918 = (_malloc($4917)|0); + $yi = $4918; + $4919 = $4; + $4920 = $radix; + $4921 = (($4919|0) / ($4920|0))&-1; + $m = $4921; + $4922 = $radix; + $4923 = $5; + $4924 = Math_imul($4922, $4923)|0; + $ll = $4924; + $i = 0; + while(1) { + $4925 = $i; + $4926 = $radix; + $4927 = ($4925|0)<($4926|0); + if (!($4927)) { + break; + } + $4928 = $0; + $4929 = $i; + $4930 = $m; + $4931 = Math_imul($4929, $4930)|0; + $4932 = (($4928) + ($4931<<4)|0); + $4933 = $1; + $4934 = $i; + $4935 = $5; + $4936 = Math_imul($4934, $4935)|0; + $4937 = (($4933) + ($4936<<4)|0); + $4938 = $2; + $4939 = $3; + $4940 = $m; + $4941 = $ll; + $4942 = $6; + $4943 = (($4942) + 1)|0; + _mixed_radix_dit_rec($4932,$4937,$4938,$4939,$4940,$4941,$4943); + $4944 = $i; + $4945 = (($4944) + 1)|0; + $i = $4945; + } + $4946 = $radix; + $4947 = (($4946) - 1)|0; + $4948 = (($4947|0) / 2)&-1; + $M = $4948; + $i = 1; + while(1) { + $4949 = $i; + $4950 = $M; + $4951 = (($4950) + 1)|0; + $4952 = ($4949|0)<($4951|0); + if (!($4952)) { + break; + } + $4953 = $i; + $4954 = (+($4953|0)); + $4955 = $4954 * 6.2831853071795862; + $4956 = $radix; + $4957 = (+($4956|0)); + $4958 = $4955 / $4957; + $4959 = (+Math_cos((+$4958))); + $4960 = $i; + $4961 = (($4960) - 1)|0; + $4962 = $c1241; + $4963 = (($4962) + ($4961<<3)|0); + HEAPF64[$4963>>3] = $4959; + $4964 = $i; + $4965 = (+($4964|0)); + $4966 = $4965 * 6.2831853071795862; + $4967 = $radix; + $4968 = (+($4967|0)); + $4969 = $4966 / $4968; + $4970 = (+Math_sin((+$4969))); + $4971 = $i; + $4972 = (($4971) - 1)|0; + $4973 = $s1242; + $4974 = (($4973) + ($4972<<3)|0); + HEAPF64[$4974>>3] = $4970; + $4975 = $i; + $4976 = (($4975) + 1)|0; + $i = $4976; + } + $i = 0; + while(1) { + $4977 = $i; + $4978 = $M; + $4979 = ($4977|0)<($4978|0); + if (!($4979)) { + break; + } + $4980 = $M; + $4981 = (($4980) - 1)|0; + $4982 = $i; + $4983 = (($4981) - ($4982))|0; + $4984 = $s1242; + $4985 = (($4984) + ($4983<<3)|0); + $4986 = +HEAPF64[$4985>>3]; + $4987 = -$4986; + $4988 = $i; + $4989 = $M; + $4990 = (($4988) + ($4989))|0; + $4991 = $s1242; + $4992 = (($4991) + ($4990<<3)|0); + HEAPF64[$4992>>3] = $4987; + $4993 = $M; + $4994 = (($4993) - 1)|0; + $4995 = $i; + $4996 = (($4994) - ($4995))|0; + $4997 = $c1241; + $4998 = (($4997) + ($4996<<3)|0); + $4999 = +HEAPF64[$4998>>3]; + $5000 = $i; + $5001 = $M; + $5002 = (($5000) + ($5001))|0; + $5003 = $c1241; + $5004 = (($5003) + ($5002<<3)|0); + HEAPF64[$5004>>3] = $4999; + $5005 = $i; + $5006 = (($5005) + 1)|0; + $i = $5006; + } + $k233 = 0; + while(1) { + $5007 = $k233; + $5008 = $m; + $5009 = ($5007|0)<($5008|0); + if (!($5009)) { + break; + } + $5010 = $m; + $5011 = (($5010) - 1)|0; + $5012 = $radix; + $5013 = (($5012) - 1)|0; + $5014 = $k233; + $5015 = Math_imul($5013, $5014)|0; + $5016 = (($5011) + ($5015))|0; + $ind234 = $5016; + $5017 = $k233; + $5018 = $0; + $5019 = (($5018) + ($5017<<4)|0); + $5020 = +HEAPF64[$5019>>3]; + $5021 = $yr; + HEAPF64[$5021>>3] = $5020; + $5022 = $k233; + $5023 = $0; + $5024 = (($5023) + ($5022<<4)|0); + $5025 = ((($5024)) + 8|0); + $5026 = +HEAPF64[$5025>>3]; + $5027 = $yi; + HEAPF64[$5027>>3] = $5026; + $i = 0; + while(1) { + $5028 = $i; + $5029 = $radix; + $5030 = (($5029) - 1)|0; + $5031 = ($5028|0)<($5030|0); + if (!($5031)) { + break; + } + $5032 = $2; + $5033 = ((($5032)) + 272|0); + $5034 = $ind234; + $5035 = (($5033) + ($5034<<4)|0); + $5036 = +HEAPF64[$5035>>3]; + $5037 = $i; + $5038 = $wlr239; + $5039 = (($5038) + ($5037<<3)|0); + HEAPF64[$5039>>3] = $5036; + $5040 = $2; + $5041 = ((($5040)) + 272|0); + $5042 = $ind234; + $5043 = (($5041) + ($5042<<4)|0); + $5044 = ((($5043)) + 8|0); + $5045 = +HEAPF64[$5044>>3]; + $5046 = $i; + $5047 = $wli240; + $5048 = (($5047) + ($5046<<3)|0); + HEAPF64[$5048>>3] = $5045; + $5049 = $k233; + $5050 = $i; + $5051 = (($5050) + 1)|0; + $5052 = $m; + $5053 = Math_imul($5051, $5052)|0; + $5054 = (($5049) + ($5053))|0; + $tkm = $5054; + $5055 = $tkm; + $5056 = $0; + $5057 = (($5056) + ($5055<<4)|0); + $5058 = +HEAPF64[$5057>>3]; + $5059 = $i; + $5060 = $wlr239; + $5061 = (($5060) + ($5059<<3)|0); + $5062 = +HEAPF64[$5061>>3]; + $5063 = $5058 * $5062; + $5064 = $tkm; + $5065 = $0; + $5066 = (($5065) + ($5064<<4)|0); + $5067 = ((($5066)) + 8|0); + $5068 = +HEAPF64[$5067>>3]; + $5069 = $i; + $5070 = $wli240; + $5071 = (($5070) + ($5069<<3)|0); + $5072 = +HEAPF64[$5071>>3]; + $5073 = $5068 * $5072; + $5074 = $5063 - $5073; + $5075 = $i; + $5076 = (($5075) + 1)|0; + $5077 = $yr; + $5078 = (($5077) + ($5076<<3)|0); + HEAPF64[$5078>>3] = $5074; + $5079 = $tkm; + $5080 = $0; + $5081 = (($5080) + ($5079<<4)|0); + $5082 = ((($5081)) + 8|0); + $5083 = +HEAPF64[$5082>>3]; + $5084 = $i; + $5085 = $wlr239; + $5086 = (($5085) + ($5084<<3)|0); + $5087 = +HEAPF64[$5086>>3]; + $5088 = $5083 * $5087; + $5089 = $tkm; + $5090 = $0; + $5091 = (($5090) + ($5089<<4)|0); + $5092 = +HEAPF64[$5091>>3]; + $5093 = $i; + $5094 = $wli240; + $5095 = (($5094) + ($5093<<3)|0); + $5096 = +HEAPF64[$5095>>3]; + $5097 = $5092 * $5096; + $5098 = $5088 + $5097; + $5099 = $i; + $5100 = (($5099) + 1)|0; + $5101 = $yi; + $5102 = (($5101) + ($5100<<3)|0); + HEAPF64[$5102>>3] = $5098; + $5103 = $ind234; + $5104 = (($5103) + 1)|0; + $ind234 = $5104; + $5105 = $i; + $5106 = (($5105) + 1)|0; + $i = $5106; + } + $i = 0; + while(1) { + $5107 = $i; + $5108 = $M; + $5109 = ($5107|0)<($5108|0); + if (!($5109)) { + break; + } + $5110 = $i; + $5111 = (($5110) + 1)|0; + $5112 = $yr; + $5113 = (($5112) + ($5111<<3)|0); + $5114 = +HEAPF64[$5113>>3]; + $5115 = $radix; + $5116 = (($5115) - 1)|0; + $5117 = $i; + $5118 = (($5116) - ($5117))|0; + $5119 = $yr; + $5120 = (($5119) + ($5118<<3)|0); + $5121 = +HEAPF64[$5120>>3]; + $5122 = $5114 + $5121; + $5123 = $i; + $5124 = $taur; + $5125 = (($5124) + ($5123<<3)|0); + HEAPF64[$5125>>3] = $5122; + $5126 = $i; + $5127 = (($5126) + 1)|0; + $5128 = $yi; + $5129 = (($5128) + ($5127<<3)|0); + $5130 = +HEAPF64[$5129>>3]; + $5131 = $radix; + $5132 = (($5131) - 1)|0; + $5133 = $i; + $5134 = (($5132) - ($5133))|0; + $5135 = $yi; + $5136 = (($5135) + ($5134<<3)|0); + $5137 = +HEAPF64[$5136>>3]; + $5138 = $5130 - $5137; + $5139 = $i; + $5140 = $M; + $5141 = (($5139) + ($5140))|0; + $5142 = $taui; + $5143 = (($5142) + ($5141<<3)|0); + HEAPF64[$5143>>3] = $5138; + $5144 = $i; + $5145 = (($5144) + 1)|0; + $5146 = $yi; + $5147 = (($5146) + ($5145<<3)|0); + $5148 = +HEAPF64[$5147>>3]; + $5149 = $radix; + $5150 = (($5149) - 1)|0; + $5151 = $i; + $5152 = (($5150) - ($5151))|0; + $5153 = $yi; + $5154 = (($5153) + ($5152<<3)|0); + $5155 = +HEAPF64[$5154>>3]; + $5156 = $5148 + $5155; + $5157 = $i; + $5158 = $taui; + $5159 = (($5158) + ($5157<<3)|0); + HEAPF64[$5159>>3] = $5156; + $5160 = $i; + $5161 = (($5160) + 1)|0; + $5162 = $yr; + $5163 = (($5162) + ($5161<<3)|0); + $5164 = +HEAPF64[$5163>>3]; + $5165 = $radix; + $5166 = (($5165) - 1)|0; + $5167 = $i; + $5168 = (($5166) - ($5167))|0; + $5169 = $yr; + $5170 = (($5169) + ($5168<<3)|0); + $5171 = +HEAPF64[$5170>>3]; + $5172 = $5164 - $5171; + $5173 = $i; + $5174 = $M; + $5175 = (($5173) + ($5174))|0; + $5176 = $taur; + $5177 = (($5176) + ($5175<<3)|0); + HEAPF64[$5177>>3] = $5172; + $5178 = $i; + $5179 = (($5178) + 1)|0; + $i = $5179; + } + $5180 = $yr; + $5181 = +HEAPF64[$5180>>3]; + $temp1r235 = $5181; + $5182 = $yi; + $5183 = +HEAPF64[$5182>>3]; + $temp1i236 = $5183; + $i = 0; + while(1) { + $5184 = $i; + $5185 = $M; + $5186 = ($5184|0)<($5185|0); + if (!($5186)) { + break; + } + $5187 = $i; + $5188 = $taur; + $5189 = (($5188) + ($5187<<3)|0); + $5190 = +HEAPF64[$5189>>3]; + $5191 = $temp1r235; + $5192 = $5191 + $5190; + $temp1r235 = $5192; + $5193 = $i; + $5194 = $taui; + $5195 = (($5194) + ($5193<<3)|0); + $5196 = +HEAPF64[$5195>>3]; + $5197 = $temp1i236; + $5198 = $5197 + $5196; + $temp1i236 = $5198; + $5199 = $i; + $5200 = (($5199) + 1)|0; + $i = $5200; + } + $5201 = $temp1r235; + $5202 = $k233; + $5203 = $0; + $5204 = (($5203) + ($5202<<4)|0); + HEAPF64[$5204>>3] = $5201; + $5205 = $temp1i236; + $5206 = $k233; + $5207 = $0; + $5208 = (($5207) + ($5206<<4)|0); + $5209 = ((($5208)) + 8|0); + HEAPF64[$5209>>3] = $5205; + $u = 0; + while(1) { + $5210 = $u; + $5211 = $M; + $5212 = ($5210|0)<($5211|0); + if (!($5212)) { + break; + } + $5213 = $yr; + $5214 = +HEAPF64[$5213>>3]; + $temp1r235 = $5214; + $5215 = $yi; + $5216 = +HEAPF64[$5215>>3]; + $temp1i236 = $5216; + $temp2r237 = 0.0; + $temp2i238 = 0.0; + $v = 0; + while(1) { + $5217 = $v; + $5218 = $M; + $5219 = ($5217|0)<($5218|0); + if (!($5219)) { + break; + } + $5220 = $u; + $5221 = (($5220) + 1)|0; + $5222 = $v; + $5223 = (($5222) + 1)|0; + $5224 = Math_imul($5221, $5223)|0; + $t = $5224; + while(1) { + $5225 = $t; + $5226 = $radix; + $5227 = ($5225|0)>=($5226|0); + if (!($5227)) { + break; + } + $5228 = $radix; + $5229 = $t; + $5230 = (($5229) - ($5228))|0; + $t = $5230; + } + $5231 = $t; + $5232 = (($5231) - 1)|0; + $tt = $5232; + $5233 = $tt; + $5234 = $c1241; + $5235 = (($5234) + ($5233<<3)|0); + $5236 = +HEAPF64[$5235>>3]; + $5237 = $v; + $5238 = $taur; + $5239 = (($5238) + ($5237<<3)|0); + $5240 = +HEAPF64[$5239>>3]; + $5241 = $5236 * $5240; + $5242 = $temp1r235; + $5243 = $5242 + $5241; + $temp1r235 = $5243; + $5244 = $tt; + $5245 = $c1241; + $5246 = (($5245) + ($5244<<3)|0); + $5247 = +HEAPF64[$5246>>3]; + $5248 = $v; + $5249 = $taui; + $5250 = (($5249) + ($5248<<3)|0); + $5251 = +HEAPF64[$5250>>3]; + $5252 = $5247 * $5251; + $5253 = $temp1i236; + $5254 = $5253 + $5252; + $temp1i236 = $5254; + $5255 = $tt; + $5256 = $s1242; + $5257 = (($5256) + ($5255<<3)|0); + $5258 = +HEAPF64[$5257>>3]; + $5259 = $v; + $5260 = $M; + $5261 = (($5259) + ($5260))|0; + $5262 = $taur; + $5263 = (($5262) + ($5261<<3)|0); + $5264 = +HEAPF64[$5263>>3]; + $5265 = $5258 * $5264; + $5266 = $temp2r237; + $5267 = $5266 - $5265; + $temp2r237 = $5267; + $5268 = $tt; + $5269 = $s1242; + $5270 = (($5269) + ($5268<<3)|0); + $5271 = +HEAPF64[$5270>>3]; + $5272 = $v; + $5273 = $M; + $5274 = (($5272) + ($5273))|0; + $5275 = $taui; + $5276 = (($5275) + ($5274<<3)|0); + $5277 = +HEAPF64[$5276>>3]; + $5278 = $5271 * $5277; + $5279 = $temp2i238; + $5280 = $5279 - $5278; + $temp2i238 = $5280; + $5281 = $v; + $5282 = (($5281) + 1)|0; + $v = $5282; + } + $5283 = $3; + $5284 = (+($5283|0)); + $5285 = $temp2r237; + $5286 = $5284 * $5285; + $temp2r237 = $5286; + $5287 = $3; + $5288 = (+($5287|0)); + $5289 = $temp2i238; + $5290 = $5288 * $5289; + $temp2i238 = $5290; + $5291 = $temp1r235; + $5292 = $temp2i238; + $5293 = $5291 - $5292; + $5294 = $k233; + $5295 = $u; + $5296 = (($5295) + 1)|0; + $5297 = $m; + $5298 = Math_imul($5296, $5297)|0; + $5299 = (($5294) + ($5298))|0; + $5300 = $0; + $5301 = (($5300) + ($5299<<4)|0); + HEAPF64[$5301>>3] = $5293; + $5302 = $temp1i236; + $5303 = $temp2r237; + $5304 = $5302 + $5303; + $5305 = $k233; + $5306 = $u; + $5307 = (($5306) + 1)|0; + $5308 = $m; + $5309 = Math_imul($5307, $5308)|0; + $5310 = (($5305) + ($5309))|0; + $5311 = $0; + $5312 = (($5311) + ($5310<<4)|0); + $5313 = ((($5312)) + 8|0); + HEAPF64[$5313>>3] = $5304; + $5314 = $temp1r235; + $5315 = $temp2i238; + $5316 = $5314 + $5315; + $5317 = $k233; + $5318 = $radix; + $5319 = $u; + $5320 = (($5318) - ($5319))|0; + $5321 = (($5320) - 1)|0; + $5322 = $m; + $5323 = Math_imul($5321, $5322)|0; + $5324 = (($5317) + ($5323))|0; + $5325 = $0; + $5326 = (($5325) + ($5324<<4)|0); + HEAPF64[$5326>>3] = $5316; + $5327 = $temp1i236; + $5328 = $temp2r237; + $5329 = $5327 - $5328; + $5330 = $k233; + $5331 = $radix; + $5332 = $u; + $5333 = (($5331) - ($5332))|0; + $5334 = (($5333) - 1)|0; + $5335 = $m; + $5336 = Math_imul($5334, $5335)|0; + $5337 = (($5330) + ($5336))|0; + $5338 = $0; + $5339 = (($5338) + ($5337<<4)|0); + $5340 = ((($5339)) + 8|0); + HEAPF64[$5340>>3] = $5329; + $5341 = $u; + $5342 = (($5341) + 1)|0; + $u = $5342; + } + $5343 = $k233; + $5344 = (($5343) + 1)|0; + $k233 = $5344; + } + $5345 = $wlr239; + _free($5345); + $5346 = $wli240; + _free($5346); + $5347 = $taur; + _free($5347); + $5348 = $taui; + _free($5348); + $5349 = $c1241; + _free($5349); + $5350 = $s1242; + _free($5350); + $5351 = $yr; + _free($5351); + $5352 = $yi; + _free($5352); + STACKTOP = sp;return; +} +function _bluestein_fft($data,$oup,$obj,$sgn,$N) { + $data = $data|0; + $oup = $oup|0; + $obj = $obj|0; + $sgn = $sgn|0; + $N = $N|0; + var $0 = 0, $1 = 0, $10 = 0.0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0.0, $105 = 0.0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0.0, $110 = 0.0, $111 = 0.0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0.0, $117 = 0, $118 = 0, $119 = 0, $12 = 0.0, $120 = 0.0, $121 = 0.0, $122 = 0.0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0.0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0.0, $136 = 0, $137 = 0, $138 = 0, $139 = 0.0, $14 = 0, $140 = 0.0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0.0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0.0, $151 = 0.0; + var $152 = 0.0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0.0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0.0, $165 = 0.0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0.0, $171 = 0, $172 = 0, $173 = 0, $174 = 0.0, $175 = 0.0, $176 = 0.0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; + var $206 = 0, $207 = 0.0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0.0, $212 = 0.0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0.0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0.0, $223 = 0.0; + var $224 = 0.0, $225 = 0, $226 = 0, $227 = 0, $228 = 0.0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0.0, $234 = 0.0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0.0, $24 = 0, $240 = 0, $241 = 0; + var $242 = 0, $243 = 0.0, $244 = 0.0, $245 = 0.0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0.0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0; + var $260 = 0, $261 = 0, $262 = 0.0, $263 = 0, $264 = 0, $265 = 0, $266 = 0.0, $267 = 0.0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0.0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0.0, $278 = 0.0; + var $279 = 0.0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0.0, $284 = 0.0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0.0, $29 = 0, $290 = 0.0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0.0, $296 = 0; + var $297 = 0, $298 = 0, $299 = 0.0, $3 = 0, $30 = 0, $300 = 0.0, $301 = 0.0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0.0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0; + var $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0.0, $321 = 0.0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0; + var $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0.0, $345 = 0, $346 = 0, $347 = 0, $348 = 0.0, $349 = 0.0, $35 = 0; + var $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0.0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0.0, $36 = 0, $360 = 0.0, $361 = 0.0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0.0; + var $369 = 0.0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0.0, $375 = 0.0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0.0, $381 = 0, $382 = 0, $383 = 0, $384 = 0.0, $385 = 0.0, $386 = 0.0; + var $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0.0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0.0; + var $404 = 0.0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0.0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0.0, $415 = 0.0, $416 = 0.0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0; + var $422 = 0, $423 = 0.0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0.0, $429 = 0.0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0.0, $435 = 0, $436 = 0, $437 = 0, $438 = 0.0, $439 = 0.0, $44 = 0; + var $440 = 0.0, $441 = 0, $442 = 0, $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0; + var $459 = 0, $46 = 0, $460 = 0, $461 = 0, $462 = 0, $463 = 0.0, $464 = 0.0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0; + var $48 = 0, $49 = 0.0, $5 = 0, $50 = 0.0, $51 = 0, $52 = 0, $53 = 0, $54 = 0.0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0.0, $6 = 0, $60 = 0.0, $61 = 0.0, $62 = 0, $63 = 0, $64 = 0, $65 = 0.0; + var $66 = 0.0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0.0, $80 = 0.0, $81 = 0, $82 = 0, $83 = 0; + var $84 = 0.0, $85 = 0.0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0.0, $90 = 0.0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0.0, $96 = 0.0, $97 = 0.0, $98 = 0, $99 = 0, $K = 0, $M = 0, $def_N = 0; + var $def_lt = 0, $def_sgn = 0, $hk = 0, $hlt = 0, $i = 0, $ii = 0, $scale = 0.0, $temp = 0.0, $tempop = 0, $yn = 0, $yno = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $data; + $1 = $oup; + $2 = $obj; + $3 = $sgn; + $4 = $N; + $5 = $2; + $6 = ((($5)) + 268|0); + HEAP32[$6>>2] = 0; + $7 = $4; + $8 = (+($7|0)); + $9 = (+_log10($8)); + $10 = (+_log10(2.0)); + $11 = $9 / $10; + $12 = (+Math_ceil((+$11))); + $13 = (+Math_pow(2.0,(+$12))); + $14 = (~~(($13))); + $K = $14; + $def_lt = 1; + $15 = $2; + $16 = ((($15)) + 4|0); + $17 = HEAP32[$16>>2]|0; + $def_sgn = $17; + $18 = $2; + $19 = HEAP32[$18>>2]|0; + $def_N = $19; + $20 = $K; + $21 = $4; + $22 = $21<<1; + $23 = (($22) - 2)|0; + $24 = ($20|0)<($23|0); + $25 = $K; + if ($24) { + $26 = $25<<1; + $M = $26; + } else { + $M = $25; + } + $27 = $M; + $28 = $2; + HEAP32[$28>>2] = $27; + $29 = $M; + $30 = $29<<4; + $31 = (_malloc($30)|0); + $yn = $31; + $32 = $M; + $33 = $32<<4; + $34 = (_malloc($33)|0); + $hk = $34; + $35 = $M; + $36 = $35<<4; + $37 = (_malloc($36)|0); + $tempop = $37; + $38 = $M; + $39 = $38<<4; + $40 = (_malloc($39)|0); + $yno = $40; + $41 = $4; + $42 = $41<<4; + $43 = (_malloc($42)|0); + $hlt = $43; + $44 = $tempop; + $45 = $hlt; + $46 = $4; + $47 = $M; + _bluestein_exp($44,$45,$46,$47); + $48 = $M; + $49 = (+($48|0)); + $50 = 1.0 / $49; + $scale = $50; + $ii = 0; + while(1) { + $51 = $ii; + $52 = $M; + $53 = ($51|0)<($52|0); + if (!($53)) { + break; + } + $54 = $scale; + $55 = $ii; + $56 = $tempop; + $57 = (($56) + ($55<<4)|0); + $58 = ((($57)) + 8|0); + $59 = +HEAPF64[$58>>3]; + $60 = $59 * $54; + HEAPF64[$58>>3] = $60; + $61 = $scale; + $62 = $ii; + $63 = $tempop; + $64 = (($63) + ($62<<4)|0); + $65 = +HEAPF64[$64>>3]; + $66 = $65 * $61; + HEAPF64[$64>>3] = $66; + $67 = $ii; + $68 = (($67) + 1)|0; + $ii = $68; + } + $69 = $2; + $70 = $tempop; + $71 = $hk; + _fft_exec($69,$70,$71); + $72 = $3; + $73 = ($72|0)==(1); + $i = 0; + L9: do { + if ($73) { + while(1) { + $74 = $i; + $75 = $4; + $76 = ($74|0)<($75|0); + if (!($76)) { + break L9; + } + $77 = $i; + $78 = $0; + $79 = (($78) + ($77<<4)|0); + $80 = +HEAPF64[$79>>3]; + $81 = $i; + $82 = $hlt; + $83 = (($82) + ($81<<4)|0); + $84 = +HEAPF64[$83>>3]; + $85 = $80 * $84; + $86 = $i; + $87 = $0; + $88 = (($87) + ($86<<4)|0); + $89 = ((($88)) + 8|0); + $90 = +HEAPF64[$89>>3]; + $91 = $i; + $92 = $hlt; + $93 = (($92) + ($91<<4)|0); + $94 = ((($93)) + 8|0); + $95 = +HEAPF64[$94>>3]; + $96 = $90 * $95; + $97 = $85 + $96; + $98 = $i; + $99 = $tempop; + $100 = (($99) + ($98<<4)|0); + HEAPF64[$100>>3] = $97; + $101 = $i; + $102 = $0; + $103 = (($102) + ($101<<4)|0); + $104 = +HEAPF64[$103>>3]; + $105 = -$104; + $106 = $i; + $107 = $hlt; + $108 = (($107) + ($106<<4)|0); + $109 = ((($108)) + 8|0); + $110 = +HEAPF64[$109>>3]; + $111 = $105 * $110; + $112 = $i; + $113 = $0; + $114 = (($113) + ($112<<4)|0); + $115 = ((($114)) + 8|0); + $116 = +HEAPF64[$115>>3]; + $117 = $i; + $118 = $hlt; + $119 = (($118) + ($117<<4)|0); + $120 = +HEAPF64[$119>>3]; + $121 = $116 * $120; + $122 = $111 + $121; + $123 = $i; + $124 = $tempop; + $125 = (($124) + ($123<<4)|0); + $126 = ((($125)) + 8|0); + HEAPF64[$126>>3] = $122; + $127 = $i; + $128 = (($127) + 1)|0; + $i = $128; + } + } else { + while(1) { + $129 = $i; + $130 = $4; + $131 = ($129|0)<($130|0); + if (!($131)) { + break L9; + } + $132 = $i; + $133 = $0; + $134 = (($133) + ($132<<4)|0); + $135 = +HEAPF64[$134>>3]; + $136 = $i; + $137 = $hlt; + $138 = (($137) + ($136<<4)|0); + $139 = +HEAPF64[$138>>3]; + $140 = $135 * $139; + $141 = $i; + $142 = $0; + $143 = (($142) + ($141<<4)|0); + $144 = ((($143)) + 8|0); + $145 = +HEAPF64[$144>>3]; + $146 = $i; + $147 = $hlt; + $148 = (($147) + ($146<<4)|0); + $149 = ((($148)) + 8|0); + $150 = +HEAPF64[$149>>3]; + $151 = $145 * $150; + $152 = $140 - $151; + $153 = $i; + $154 = $tempop; + $155 = (($154) + ($153<<4)|0); + HEAPF64[$155>>3] = $152; + $156 = $i; + $157 = $0; + $158 = (($157) + ($156<<4)|0); + $159 = +HEAPF64[$158>>3]; + $160 = $i; + $161 = $hlt; + $162 = (($161) + ($160<<4)|0); + $163 = ((($162)) + 8|0); + $164 = +HEAPF64[$163>>3]; + $165 = $159 * $164; + $166 = $i; + $167 = $0; + $168 = (($167) + ($166<<4)|0); + $169 = ((($168)) + 8|0); + $170 = +HEAPF64[$169>>3]; + $171 = $i; + $172 = $hlt; + $173 = (($172) + ($171<<4)|0); + $174 = +HEAPF64[$173>>3]; + $175 = $170 * $174; + $176 = $165 + $175; + $177 = $i; + $178 = $tempop; + $179 = (($178) + ($177<<4)|0); + $180 = ((($179)) + 8|0); + HEAPF64[$180>>3] = $176; + $181 = $i; + $182 = (($181) + 1)|0; + $i = $182; + } + } + } while(0); + $183 = $4; + $i = $183; + while(1) { + $184 = $i; + $185 = $M; + $186 = ($184|0)<($185|0); + if (!($186)) { + break; + } + $187 = $i; + $188 = $tempop; + $189 = (($188) + ($187<<4)|0); + HEAPF64[$189>>3] = 0.0; + $190 = $i; + $191 = $tempop; + $192 = (($191) + ($190<<4)|0); + $193 = ((($192)) + 8|0); + HEAPF64[$193>>3] = 0.0; + $194 = $i; + $195 = (($194) + 1)|0; + $i = $195; + } + $196 = $2; + $197 = $tempop; + $198 = $yn; + _fft_exec($196,$197,$198); + $199 = $3; + $200 = ($199|0)==(1); + $i = 0; + L21: do { + if ($200) { + while(1) { + $201 = $i; + $202 = $M; + $203 = ($201|0)<($202|0); + if (!($203)) { + break L21; + } + $204 = $i; + $205 = $yn; + $206 = (($205) + ($204<<4)|0); + $207 = +HEAPF64[$206>>3]; + $208 = $i; + $209 = $hk; + $210 = (($209) + ($208<<4)|0); + $211 = +HEAPF64[$210>>3]; + $212 = $207 * $211; + $213 = $i; + $214 = $yn; + $215 = (($214) + ($213<<4)|0); + $216 = ((($215)) + 8|0); + $217 = +HEAPF64[$216>>3]; + $218 = $i; + $219 = $hk; + $220 = (($219) + ($218<<4)|0); + $221 = ((($220)) + 8|0); + $222 = +HEAPF64[$221>>3]; + $223 = $217 * $222; + $224 = $212 - $223; + $temp = $224; + $225 = $i; + $226 = $yn; + $227 = (($226) + ($225<<4)|0); + $228 = +HEAPF64[$227>>3]; + $229 = $i; + $230 = $hk; + $231 = (($230) + ($229<<4)|0); + $232 = ((($231)) + 8|0); + $233 = +HEAPF64[$232>>3]; + $234 = $228 * $233; + $235 = $i; + $236 = $yn; + $237 = (($236) + ($235<<4)|0); + $238 = ((($237)) + 8|0); + $239 = +HEAPF64[$238>>3]; + $240 = $i; + $241 = $hk; + $242 = (($241) + ($240<<4)|0); + $243 = +HEAPF64[$242>>3]; + $244 = $239 * $243; + $245 = $234 + $244; + $246 = $i; + $247 = $yn; + $248 = (($247) + ($246<<4)|0); + $249 = ((($248)) + 8|0); + HEAPF64[$249>>3] = $245; + $250 = $temp; + $251 = $i; + $252 = $yn; + $253 = (($252) + ($251<<4)|0); + HEAPF64[$253>>3] = $250; + $254 = $i; + $255 = (($254) + 1)|0; + $i = $255; + } + } else { + while(1) { + $256 = $i; + $257 = $M; + $258 = ($256|0)<($257|0); + if (!($258)) { + break L21; + } + $259 = $i; + $260 = $yn; + $261 = (($260) + ($259<<4)|0); + $262 = +HEAPF64[$261>>3]; + $263 = $i; + $264 = $hk; + $265 = (($264) + ($263<<4)|0); + $266 = +HEAPF64[$265>>3]; + $267 = $262 * $266; + $268 = $i; + $269 = $yn; + $270 = (($269) + ($268<<4)|0); + $271 = ((($270)) + 8|0); + $272 = +HEAPF64[$271>>3]; + $273 = $i; + $274 = $hk; + $275 = (($274) + ($273<<4)|0); + $276 = ((($275)) + 8|0); + $277 = +HEAPF64[$276>>3]; + $278 = $272 * $277; + $279 = $267 + $278; + $temp = $279; + $280 = $i; + $281 = $yn; + $282 = (($281) + ($280<<4)|0); + $283 = +HEAPF64[$282>>3]; + $284 = -$283; + $285 = $i; + $286 = $hk; + $287 = (($286) + ($285<<4)|0); + $288 = ((($287)) + 8|0); + $289 = +HEAPF64[$288>>3]; + $290 = $284 * $289; + $291 = $i; + $292 = $yn; + $293 = (($292) + ($291<<4)|0); + $294 = ((($293)) + 8|0); + $295 = +HEAPF64[$294>>3]; + $296 = $i; + $297 = $hk; + $298 = (($297) + ($296<<4)|0); + $299 = +HEAPF64[$298>>3]; + $300 = $295 * $299; + $301 = $290 + $300; + $302 = $i; + $303 = $yn; + $304 = (($303) + ($302<<4)|0); + $305 = ((($304)) + 8|0); + HEAPF64[$305>>3] = $301; + $306 = $temp; + $307 = $i; + $308 = $yn; + $309 = (($308) + ($307<<4)|0); + HEAPF64[$309>>3] = $306; + $310 = $i; + $311 = (($310) + 1)|0; + $i = $311; + } + } + } while(0); + $ii = 0; + while(1) { + $312 = $ii; + $313 = $M; + $314 = ($312|0)<($313|0); + if (!($314)) { + break; + } + $315 = $2; + $316 = ((($315)) + 272|0); + $317 = $ii; + $318 = (($316) + ($317<<4)|0); + $319 = ((($318)) + 8|0); + $320 = +HEAPF64[$319>>3]; + $321 = -$320; + $322 = $2; + $323 = ((($322)) + 272|0); + $324 = $ii; + $325 = (($323) + ($324<<4)|0); + $326 = ((($325)) + 8|0); + HEAPF64[$326>>3] = $321; + $327 = $ii; + $328 = (($327) + 1)|0; + $ii = $328; + } + $329 = $3; + $330 = Math_imul(-1, $329)|0; + $331 = $2; + $332 = ((($331)) + 4|0); + HEAP32[$332>>2] = $330; + $333 = $2; + $334 = $yn; + $335 = $yno; + _fft_exec($333,$334,$335); + $336 = $3; + $337 = ($336|0)==(1); + $i = 0; + L33: do { + if ($337) { + while(1) { + $338 = $i; + $339 = $4; + $340 = ($338|0)<($339|0); + if (!($340)) { + break L33; + } + $341 = $i; + $342 = $yno; + $343 = (($342) + ($341<<4)|0); + $344 = +HEAPF64[$343>>3]; + $345 = $i; + $346 = $hlt; + $347 = (($346) + ($345<<4)|0); + $348 = +HEAPF64[$347>>3]; + $349 = $344 * $348; + $350 = $i; + $351 = $yno; + $352 = (($351) + ($350<<4)|0); + $353 = ((($352)) + 8|0); + $354 = +HEAPF64[$353>>3]; + $355 = $i; + $356 = $hlt; + $357 = (($356) + ($355<<4)|0); + $358 = ((($357)) + 8|0); + $359 = +HEAPF64[$358>>3]; + $360 = $354 * $359; + $361 = $349 + $360; + $362 = $i; + $363 = $1; + $364 = (($363) + ($362<<4)|0); + HEAPF64[$364>>3] = $361; + $365 = $i; + $366 = $yno; + $367 = (($366) + ($365<<4)|0); + $368 = +HEAPF64[$367>>3]; + $369 = -$368; + $370 = $i; + $371 = $hlt; + $372 = (($371) + ($370<<4)|0); + $373 = ((($372)) + 8|0); + $374 = +HEAPF64[$373>>3]; + $375 = $369 * $374; + $376 = $i; + $377 = $yno; + $378 = (($377) + ($376<<4)|0); + $379 = ((($378)) + 8|0); + $380 = +HEAPF64[$379>>3]; + $381 = $i; + $382 = $hlt; + $383 = (($382) + ($381<<4)|0); + $384 = +HEAPF64[$383>>3]; + $385 = $380 * $384; + $386 = $375 + $385; + $387 = $i; + $388 = $1; + $389 = (($388) + ($387<<4)|0); + $390 = ((($389)) + 8|0); + HEAPF64[$390>>3] = $386; + $391 = $i; + $392 = (($391) + 1)|0; + $i = $392; + } + } else { + while(1) { + $393 = $i; + $394 = $4; + $395 = ($393|0)<($394|0); + if (!($395)) { + break L33; + } + $396 = $i; + $397 = $yno; + $398 = (($397) + ($396<<4)|0); + $399 = +HEAPF64[$398>>3]; + $400 = $i; + $401 = $hlt; + $402 = (($401) + ($400<<4)|0); + $403 = +HEAPF64[$402>>3]; + $404 = $399 * $403; + $405 = $i; + $406 = $yno; + $407 = (($406) + ($405<<4)|0); + $408 = ((($407)) + 8|0); + $409 = +HEAPF64[$408>>3]; + $410 = $i; + $411 = $hlt; + $412 = (($411) + ($410<<4)|0); + $413 = ((($412)) + 8|0); + $414 = +HEAPF64[$413>>3]; + $415 = $409 * $414; + $416 = $404 - $415; + $417 = $i; + $418 = $1; + $419 = (($418) + ($417<<4)|0); + HEAPF64[$419>>3] = $416; + $420 = $i; + $421 = $yno; + $422 = (($421) + ($420<<4)|0); + $423 = +HEAPF64[$422>>3]; + $424 = $i; + $425 = $hlt; + $426 = (($425) + ($424<<4)|0); + $427 = ((($426)) + 8|0); + $428 = +HEAPF64[$427>>3]; + $429 = $423 * $428; + $430 = $i; + $431 = $yno; + $432 = (($431) + ($430<<4)|0); + $433 = ((($432)) + 8|0); + $434 = +HEAPF64[$433>>3]; + $435 = $i; + $436 = $hlt; + $437 = (($436) + ($435<<4)|0); + $438 = +HEAPF64[$437>>3]; + $439 = $434 * $438; + $440 = $429 + $439; + $441 = $i; + $442 = $1; + $443 = (($442) + ($441<<4)|0); + $444 = ((($443)) + 8|0); + HEAPF64[$444>>3] = $440; + $445 = $i; + $446 = (($445) + 1)|0; + $i = $446; + } + } + } while(0); + $447 = $def_sgn; + $448 = $2; + $449 = ((($448)) + 4|0); + HEAP32[$449>>2] = $447; + $450 = $def_N; + $451 = $2; + HEAP32[$451>>2] = $450; + $452 = $def_lt; + $453 = $2; + $454 = ((($453)) + 268|0); + HEAP32[$454>>2] = $452; + $ii = 0; + while(1) { + $455 = $ii; + $456 = $M; + $457 = ($455|0)<($456|0); + if (!($457)) { + break; + } + $458 = $2; + $459 = ((($458)) + 272|0); + $460 = $ii; + $461 = (($459) + ($460<<4)|0); + $462 = ((($461)) + 8|0); + $463 = +HEAPF64[$462>>3]; + $464 = -$463; + $465 = $2; + $466 = ((($465)) + 272|0); + $467 = $ii; + $468 = (($466) + ($467<<4)|0); + $469 = ((($468)) + 8|0); + HEAPF64[$469>>3] = $464; + $470 = $ii; + $471 = (($470) + 1)|0; + $ii = $471; + } + $472 = $yn; + _free($472); + $473 = $yno; + _free($473); + $474 = $tempop; + _free($474); + $475 = $hk; + _free($475); + $476 = $hlt; + _free($476); + STACKTOP = sp;return; +} +function _bluestein_exp($hl,$hlt,$len,$M) { + $hl = $hl|0; + $hlt = $hlt|0; + $len = $len|0; + $M = $M|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $11 = 0, $12 = 0, $13 = 0.0, $14 = 0, $15 = 0.0, $16 = 0.0, $17 = 0.0, $18 = 0.0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0.0, $23 = 0.0, $24 = 0; + var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0.0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0.0, $4 = 0.0, $40 = 0, $41 = 0, $42 = 0; + var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0.0, $60 = 0; + var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0.0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0; + var $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0.0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0.0, $96 = 0, $97 = 0; + var $98 = 0, $99 = 0, $PI = 0.0, $angle = 0.0, $i = 0, $l2 = 0, $len2 = 0, $theta = 0.0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $hl; + $1 = $hlt; + $2 = $len; + $3 = $M; + $PI = 3.1415926535897931; + $4 = $PI; + $5 = $2; + $6 = (+($5|0)); + $7 = $4 / $6; + $theta = $7; + $l2 = 0; + $8 = $2; + $9 = $8<<1; + $len2 = $9; + $i = 0; + while(1) { + $10 = $i; + $11 = $2; + $12 = ($10|0)<($11|0); + if (!($12)) { + break; + } + $13 = $theta; + $14 = $l2; + $15 = (+($14|0)); + $16 = $13 * $15; + $angle = $16; + $17 = $angle; + $18 = (+Math_cos((+$17))); + $19 = $i; + $20 = $1; + $21 = (($20) + ($19<<4)|0); + HEAPF64[$21>>3] = $18; + $22 = $angle; + $23 = (+Math_sin((+$22))); + $24 = $i; + $25 = $1; + $26 = (($25) + ($24<<4)|0); + $27 = ((($26)) + 8|0); + HEAPF64[$27>>3] = $23; + $28 = $i; + $29 = $1; + $30 = (($29) + ($28<<4)|0); + $31 = +HEAPF64[$30>>3]; + $32 = $i; + $33 = $0; + $34 = (($33) + ($32<<4)|0); + HEAPF64[$34>>3] = $31; + $35 = $i; + $36 = $1; + $37 = (($36) + ($35<<4)|0); + $38 = ((($37)) + 8|0); + $39 = +HEAPF64[$38>>3]; + $40 = $i; + $41 = $0; + $42 = (($41) + ($40<<4)|0); + $43 = ((($42)) + 8|0); + HEAPF64[$43>>3] = $39; + $44 = $i; + $45 = $44<<1; + $46 = (($45) + 1)|0; + $47 = $l2; + $48 = (($47) + ($46))|0; + $l2 = $48; + while(1) { + $49 = $l2; + $50 = $len2; + $51 = ($49|0)>($50|0); + if (!($51)) { + break; + } + $52 = $len2; + $53 = $l2; + $54 = (($53) - ($52))|0; + $l2 = $54; + } + $55 = $i; + $56 = (($55) + 1)|0; + $i = $56; + } + $57 = $2; + $i = $57; + while(1) { + $58 = $i; + $59 = $3; + $60 = $2; + $61 = (($59) - ($60))|0; + $62 = (($61) + 1)|0; + $63 = ($58|0)<($62|0); + if (!($63)) { + break; + } + $64 = $i; + $65 = $0; + $66 = (($65) + ($64<<4)|0); + HEAPF64[$66>>3] = 0.0; + $67 = $i; + $68 = $0; + $69 = (($68) + ($67<<4)|0); + $70 = ((($69)) + 8|0); + HEAPF64[$70>>3] = 0.0; + $71 = $i; + $72 = (($71) + 1)|0; + $i = $72; + } + $73 = $3; + $74 = $2; + $75 = (($73) - ($74))|0; + $76 = (($75) + 1)|0; + $i = $76; + while(1) { + $77 = $i; + $78 = $3; + $79 = ($77|0)<($78|0); + if (!($79)) { + break; + } + $80 = $3; + $81 = $i; + $82 = (($80) - ($81))|0; + $83 = $1; + $84 = (($83) + ($82<<4)|0); + $85 = +HEAPF64[$84>>3]; + $86 = $i; + $87 = $0; + $88 = (($87) + ($86<<4)|0); + HEAPF64[$88>>3] = $85; + $89 = $3; + $90 = $i; + $91 = (($89) - ($90))|0; + $92 = $1; + $93 = (($92) + ($91<<4)|0); + $94 = ((($93)) + 8|0); + $95 = +HEAPF64[$94>>3]; + $96 = $i; + $97 = $0; + $98 = (($97) + ($96<<4)|0); + $99 = ((($98)) + 8|0); + HEAPF64[$99>>3] = $95; + $100 = $i; + $101 = (($100) + 1)|0; + $i = $101; + } + STACKTOP = sp;return; +} +function _fft_real_init($N,$sgn) { + $N = $N|0; + $sgn = $sgn|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0.0, $18 = 0.0, $19 = 0, $2 = 0, $20 = 0.0, $21 = 0.0, $22 = 0.0, $23 = 0.0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0.0, $29 = 0.0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $PI = 0.0, $k = 0; + var $obj = 0, $theta = 0.0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $N; + $1 = $sgn; + $obj = 0; + $PI = 3.1415926535897931; + $2 = $0; + $3 = (($2|0) / 2)&-1; + $4 = $3<<4; + $5 = (24 + ($4))|0; + $6 = (_malloc($5)|0); + $obj = $6; + $7 = $0; + $8 = (($7|0) / 2)&-1; + $9 = $1; + $10 = (_fft_init($8,$9)|0); + $11 = $obj; + HEAP32[$11>>2] = $10; + $k = 0; + while(1) { + $12 = $k; + $13 = $0; + $14 = (($13|0) / 2)&-1; + $15 = ($12|0)<($14|0); + if (!($15)) { + break; + } + $16 = $k; + $17 = (+($16|0)); + $18 = 6.2831853071795862 * $17; + $19 = $0; + $20 = (+($19|0)); + $21 = $18 / $20; + $theta = $21; + $22 = $theta; + $23 = (+Math_cos((+$22))); + $24 = $k; + $25 = $obj; + $26 = ((($25)) + 8|0); + $27 = (($26) + ($24<<4)|0); + HEAPF64[$27>>3] = $23; + $28 = $theta; + $29 = (+Math_sin((+$28))); + $30 = $k; + $31 = $obj; + $32 = ((($31)) + 8|0); + $33 = (($32) + ($30<<4)|0); + $34 = ((($33)) + 8|0); + HEAPF64[$34>>3] = $29; + $35 = $k; + $36 = (($35) + 1)|0; + $k = $36; + } + $37 = $obj; + STACKTOP = sp;return ($37|0); +} +function _fft_r2c_exec($obj,$inp,$oup) { + $obj = $obj|0; + $inp = $inp|0; + $oup = $oup|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0.0, $103 = 0.0, $104 = 0.0, $105 = 0.0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0.0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0.0, $121 = 0.0, $122 = 0.0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0.0, $128 = 0.0, $129 = 0.0, $13 = 0, $130 = 0.0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0.0, $137 = 0.0, $138 = 0.0, $139 = 0.0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0.0, $148 = 0, $149 = 0, $15 = 0, $150 = 0.0, $151 = 0.0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0.0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0.0, $176 = 0.0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $19 = 0, $2 = 0; + var $20 = 0, $21 = 0.0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0.0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0; + var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0.0, $43 = 0, $44 = 0, $45 = 0.0, $46 = 0.0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0; + var $57 = 0.0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0.0, $65 = 0.0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0.0, $72 = 0, $73 = 0, $74 = 0; + var $75 = 0.0, $76 = 0.0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0.0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0.0, $87 = 0.0, $88 = 0.0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0; + var $93 = 0.0, $94 = 0.0, $95 = 0.0, $96 = 0.0, $97 = 0, $98 = 0, $99 = 0, $N = 0, $N2 = 0, $cinp = 0, $coup = 0, $i = 0, $temp1 = 0.0, $temp2 = 0.0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $obj; + $1 = $inp; + $2 = $oup; + $3 = $0; + $4 = HEAP32[$3>>2]|0; + $5 = HEAP32[$4>>2]|0; + $N2 = $5; + $6 = $N2; + $7 = $6<<1; + $N = $7; + $8 = $N2; + $9 = $8<<4; + $10 = (_malloc($9)|0); + $cinp = $10; + $11 = $N2; + $12 = $11<<4; + $13 = (_malloc($12)|0); + $coup = $13; + $i = 0; + while(1) { + $14 = $i; + $15 = $N2; + $16 = ($14|0)<($15|0); + if (!($16)) { + break; + } + $17 = $i; + $18 = $17<<1; + $19 = $1; + $20 = (($19) + ($18<<3)|0); + $21 = +HEAPF64[$20>>3]; + $22 = $i; + $23 = $cinp; + $24 = (($23) + ($22<<4)|0); + HEAPF64[$24>>3] = $21; + $25 = $i; + $26 = $25<<1; + $27 = (($26) + 1)|0; + $28 = $1; + $29 = (($28) + ($27<<3)|0); + $30 = +HEAPF64[$29>>3]; + $31 = $i; + $32 = $cinp; + $33 = (($32) + ($31<<4)|0); + $34 = ((($33)) + 8|0); + HEAPF64[$34>>3] = $30; + $35 = $i; + $36 = (($35) + 1)|0; + $i = $36; + } + $37 = $0; + $38 = HEAP32[$37>>2]|0; + $39 = $cinp; + $40 = $coup; + _fft_exec($38,$39,$40); + $41 = $coup; + $42 = +HEAPF64[$41>>3]; + $43 = $coup; + $44 = ((($43)) + 8|0); + $45 = +HEAPF64[$44>>3]; + $46 = $42 + $45; + $47 = $2; + HEAPF64[$47>>3] = $46; + $48 = $2; + $49 = ((($48)) + 8|0); + HEAPF64[$49>>3] = 0.0; + $i = 1; + while(1) { + $50 = $i; + $51 = $N2; + $52 = ($50|0)<($51|0); + if (!($52)) { + break; + } + $53 = $i; + $54 = $coup; + $55 = (($54) + ($53<<4)|0); + $56 = ((($55)) + 8|0); + $57 = +HEAPF64[$56>>3]; + $58 = $N2; + $59 = $i; + $60 = (($58) - ($59))|0; + $61 = $coup; + $62 = (($61) + ($60<<4)|0); + $63 = ((($62)) + 8|0); + $64 = +HEAPF64[$63>>3]; + $65 = $57 + $64; + $temp1 = $65; + $66 = $N2; + $67 = $i; + $68 = (($66) - ($67))|0; + $69 = $coup; + $70 = (($69) + ($68<<4)|0); + $71 = +HEAPF64[$70>>3]; + $72 = $i; + $73 = $coup; + $74 = (($73) + ($72<<4)|0); + $75 = +HEAPF64[$74>>3]; + $76 = $71 - $75; + $temp2 = $76; + $77 = $i; + $78 = $coup; + $79 = (($78) + ($77<<4)|0); + $80 = +HEAPF64[$79>>3]; + $81 = $N2; + $82 = $i; + $83 = (($81) - ($82))|0; + $84 = $coup; + $85 = (($84) + ($83<<4)|0); + $86 = +HEAPF64[$85>>3]; + $87 = $80 + $86; + $88 = $temp1; + $89 = $i; + $90 = $0; + $91 = ((($90)) + 8|0); + $92 = (($91) + ($89<<4)|0); + $93 = +HEAPF64[$92>>3]; + $94 = $88 * $93; + $95 = $87 + $94; + $96 = $temp2; + $97 = $i; + $98 = $0; + $99 = ((($98)) + 8|0); + $100 = (($99) + ($97<<4)|0); + $101 = ((($100)) + 8|0); + $102 = +HEAPF64[$101>>3]; + $103 = $96 * $102; + $104 = $95 + $103; + $105 = $104 / 2.0; + $106 = $i; + $107 = $2; + $108 = (($107) + ($106<<4)|0); + HEAPF64[$108>>3] = $105; + $109 = $i; + $110 = $coup; + $111 = (($110) + ($109<<4)|0); + $112 = ((($111)) + 8|0); + $113 = +HEAPF64[$112>>3]; + $114 = $N2; + $115 = $i; + $116 = (($114) - ($115))|0; + $117 = $coup; + $118 = (($117) + ($116<<4)|0); + $119 = ((($118)) + 8|0); + $120 = +HEAPF64[$119>>3]; + $121 = $113 - $120; + $122 = $temp2; + $123 = $i; + $124 = $0; + $125 = ((($124)) + 8|0); + $126 = (($125) + ($123<<4)|0); + $127 = +HEAPF64[$126>>3]; + $128 = $122 * $127; + $129 = $121 + $128; + $130 = $temp1; + $131 = $i; + $132 = $0; + $133 = ((($132)) + 8|0); + $134 = (($133) + ($131<<4)|0); + $135 = ((($134)) + 8|0); + $136 = +HEAPF64[$135>>3]; + $137 = $130 * $136; + $138 = $129 - $137; + $139 = $138 / 2.0; + $140 = $i; + $141 = $2; + $142 = (($141) + ($140<<4)|0); + $143 = ((($142)) + 8|0); + HEAPF64[$143>>3] = $139; + $144 = $i; + $145 = (($144) + 1)|0; + $i = $145; + } + $146 = $coup; + $147 = +HEAPF64[$146>>3]; + $148 = $coup; + $149 = ((($148)) + 8|0); + $150 = +HEAPF64[$149>>3]; + $151 = $147 - $150; + $152 = $N2; + $153 = $2; + $154 = (($153) + ($152<<4)|0); + HEAPF64[$154>>3] = $151; + $155 = $N2; + $156 = $2; + $157 = (($156) + ($155<<4)|0); + $158 = ((($157)) + 8|0); + HEAPF64[$158>>3] = 0.0; + $i = 1; + while(1) { + $159 = $i; + $160 = $N2; + $161 = ($159|0)<($160|0); + if (!($161)) { + break; + } + $162 = $i; + $163 = $2; + $164 = (($163) + ($162<<4)|0); + $165 = +HEAPF64[$164>>3]; + $166 = $N; + $167 = $i; + $168 = (($166) - ($167))|0; + $169 = $2; + $170 = (($169) + ($168<<4)|0); + HEAPF64[$170>>3] = $165; + $171 = $i; + $172 = $2; + $173 = (($172) + ($171<<4)|0); + $174 = ((($173)) + 8|0); + $175 = +HEAPF64[$174>>3]; + $176 = -$175; + $177 = $N; + $178 = $i; + $179 = (($177) - ($178))|0; + $180 = $2; + $181 = (($180) + ($179<<4)|0); + $182 = ((($181)) + 8|0); + HEAPF64[$182>>3] = $176; + $183 = $i; + $184 = (($183) + 1)|0; + $i = $184; + } + $185 = $cinp; + _free($185); + $186 = $coup; + _free($186); + STACKTOP = sp;return; +} +function _fft_c2r_exec($obj,$inp,$oup) { + $obj = $obj|0; + $inp = $inp|0; + $oup = $oup|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0.0, $102 = 0.0, $103 = 0.0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0.0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0.0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0.0, $22 = 0.0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; + var $28 = 0, $29 = 0.0, $3 = 0, $30 = 0.0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0.0, $37 = 0.0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0.0, $42 = 0.0, $43 = 0, $44 = 0, $45 = 0; + var $46 = 0.0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0.0, $53 = 0.0, $54 = 0.0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0.0, $6 = 0, $60 = 0.0, $61 = 0.0, $62 = 0.0, $63 = 0; + var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0.0, $69 = 0.0, $7 = 0, $70 = 0.0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0.0, $79 = 0, $8 = 0, $80 = 0, $81 = 0; + var $82 = 0, $83 = 0, $84 = 0, $85 = 0.0, $86 = 0.0, $87 = 0.0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0.0, $93 = 0.0, $94 = 0.0, $95 = 0.0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $N = 0; + var $N2 = 0, $cinp = 0, $coup = 0, $i = 0, $temp1 = 0.0, $temp2 = 0.0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $obj; + $1 = $inp; + $2 = $oup; + $3 = $0; + $4 = HEAP32[$3>>2]|0; + $5 = HEAP32[$4>>2]|0; + $N2 = $5; + $6 = $N2; + $7 = $6<<1; + $N = $7; + $8 = $N2; + $9 = $8<<4; + $10 = (_malloc($9)|0); + $cinp = $10; + $11 = $N2; + $12 = $11<<4; + $13 = (_malloc($12)|0); + $coup = $13; + $i = 0; + while(1) { + $14 = $i; + $15 = $N2; + $16 = ($14|0)<($15|0); + if (!($16)) { + break; + } + $17 = $i; + $18 = $1; + $19 = (($18) + ($17<<4)|0); + $20 = ((($19)) + 8|0); + $21 = +HEAPF64[$20>>3]; + $22 = -$21; + $23 = $N2; + $24 = $i; + $25 = (($23) - ($24))|0; + $26 = $1; + $27 = (($26) + ($25<<4)|0); + $28 = ((($27)) + 8|0); + $29 = +HEAPF64[$28>>3]; + $30 = $22 - $29; + $temp1 = $30; + $31 = $N2; + $32 = $i; + $33 = (($31) - ($32))|0; + $34 = $1; + $35 = (($34) + ($33<<4)|0); + $36 = +HEAPF64[$35>>3]; + $37 = -$36; + $38 = $i; + $39 = $1; + $40 = (($39) + ($38<<4)|0); + $41 = +HEAPF64[$40>>3]; + $42 = $37 + $41; + $temp2 = $42; + $43 = $i; + $44 = $1; + $45 = (($44) + ($43<<4)|0); + $46 = +HEAPF64[$45>>3]; + $47 = $N2; + $48 = $i; + $49 = (($47) - ($48))|0; + $50 = $1; + $51 = (($50) + ($49<<4)|0); + $52 = +HEAPF64[$51>>3]; + $53 = $46 + $52; + $54 = $temp1; + $55 = $i; + $56 = $0; + $57 = ((($56)) + 8|0); + $58 = (($57) + ($55<<4)|0); + $59 = +HEAPF64[$58>>3]; + $60 = $54 * $59; + $61 = $53 + $60; + $62 = $temp2; + $63 = $i; + $64 = $0; + $65 = ((($64)) + 8|0); + $66 = (($65) + ($63<<4)|0); + $67 = ((($66)) + 8|0); + $68 = +HEAPF64[$67>>3]; + $69 = $62 * $68; + $70 = $61 - $69; + $71 = $i; + $72 = $cinp; + $73 = (($72) + ($71<<4)|0); + HEAPF64[$73>>3] = $70; + $74 = $i; + $75 = $1; + $76 = (($75) + ($74<<4)|0); + $77 = ((($76)) + 8|0); + $78 = +HEAPF64[$77>>3]; + $79 = $N2; + $80 = $i; + $81 = (($79) - ($80))|0; + $82 = $1; + $83 = (($82) + ($81<<4)|0); + $84 = ((($83)) + 8|0); + $85 = +HEAPF64[$84>>3]; + $86 = $78 - $85; + $87 = $temp2; + $88 = $i; + $89 = $0; + $90 = ((($89)) + 8|0); + $91 = (($90) + ($88<<4)|0); + $92 = +HEAPF64[$91>>3]; + $93 = $87 * $92; + $94 = $86 + $93; + $95 = $temp1; + $96 = $i; + $97 = $0; + $98 = ((($97)) + 8|0); + $99 = (($98) + ($96<<4)|0); + $100 = ((($99)) + 8|0); + $101 = +HEAPF64[$100>>3]; + $102 = $95 * $101; + $103 = $94 + $102; + $104 = $i; + $105 = $cinp; + $106 = (($105) + ($104<<4)|0); + $107 = ((($106)) + 8|0); + HEAPF64[$107>>3] = $103; + $108 = $i; + $109 = (($108) + 1)|0; + $i = $109; + } + $110 = $0; + $111 = HEAP32[$110>>2]|0; + $112 = $cinp; + $113 = $coup; + _fft_exec($111,$112,$113); + $i = 0; + while(1) { + $114 = $i; + $115 = $N2; + $116 = ($114|0)<($115|0); + if (!($116)) { + break; + } + $117 = $i; + $118 = $coup; + $119 = (($118) + ($117<<4)|0); + $120 = +HEAPF64[$119>>3]; + $121 = $i; + $122 = $121<<1; + $123 = $2; + $124 = (($123) + ($122<<3)|0); + HEAPF64[$124>>3] = $120; + $125 = $i; + $126 = $coup; + $127 = (($126) + ($125<<4)|0); + $128 = ((($127)) + 8|0); + $129 = +HEAPF64[$128>>3]; + $130 = $i; + $131 = $130<<1; + $132 = (($131) + 1)|0; + $133 = $2; + $134 = (($133) + ($132<<3)|0); + HEAPF64[$134>>3] = $129; + $135 = $i; + $136 = (($135) + 1)|0; + $i = $136; + } + $137 = $cinp; + _free($137); + $138 = $coup; + _free($138); + STACKTOP = sp;return; +} +function _factorf($M) { + $M = $M|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0; + var $8 = 0, $9 = 0, $N = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $M; + $1 = $0; + $N = $1; + while(1) { + $2 = $N; + $3 = (($2|0) % 7)&-1; + $4 = ($3|0)==(0); + if (!($4)) { + break; + } + $5 = $N; + $6 = (($5|0) / 7)&-1; + $N = $6; + } + while(1) { + $7 = $N; + $8 = (($7|0) % 3)&-1; + $9 = ($8|0)==(0); + if (!($9)) { + break; + } + $10 = $N; + $11 = (($10|0) / 3)&-1; + $N = $11; + } + while(1) { + $12 = $N; + $13 = (($12|0) % 5)&-1; + $14 = ($13|0)==(0); + if (!($14)) { + break; + } + $15 = $N; + $16 = (($15|0) / 5)&-1; + $N = $16; + } + while(1) { + $17 = $N; + $18 = (($17|0) % 2)&-1; + $19 = ($18|0)==(0); + $20 = $N; + if (!($19)) { + break; + } + $21 = (($20|0) / 2)&-1; + $N = $21; + } + STACKTOP = sp;return ($20|0); +} +function _findnexte($M) { + $M = $M|0; + var $0 = 0, $1 = 0, $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $N = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $M; + $1 = $0; + $N = $1; + while(1) { + $2 = $N; + $3 = (_factorf($2)|0); + $4 = ($3|0)!=(1); + if ($4) { + $10 = 1; + } else { + $5 = $N; + $6 = (($5|0) % 2)&-1; + $7 = ($6|0)!=(0); + $10 = $7; + } + $8 = $N; + if (!($10)) { + break; + } + $9 = (($8) + 1)|0; + $N = $9; + } + STACKTOP = sp;return ($8|0); +} +function _conv_init($N,$L) { + $N = $N|0; + $L = $L|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $conv_len = 0, $obj = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $N; + $1 = $L; + $obj = 0; + $2 = $0; + $3 = $1; + $4 = (($2) + ($3))|0; + $5 = (($4) - 1)|0; + $conv_len = $5; + $6 = (_malloc(20)|0); + $obj = $6; + $7 = $conv_len; + $8 = (_findnexte($7)|0); + $9 = $obj; + $10 = ((($9)) + 16|0); + HEAP32[$10>>2] = $8; + $11 = $0; + $12 = $obj; + $13 = ((($12)) + 8|0); + HEAP32[$13>>2] = $11; + $14 = $1; + $15 = $obj; + $16 = ((($15)) + 12|0); + HEAP32[$16>>2] = $14; + $17 = $obj; + $18 = ((($17)) + 16|0); + $19 = HEAP32[$18>>2]|0; + $20 = (_fft_real_init($19,1)|0); + $21 = $obj; + HEAP32[$21>>2] = $20; + $22 = $obj; + $23 = ((($22)) + 16|0); + $24 = HEAP32[$23>>2]|0; + $25 = (_fft_real_init($24,-1)|0); + $26 = $obj; + $27 = ((($26)) + 4|0); + HEAP32[$27>>2] = $25; + $28 = $obj; + STACKTOP = sp;return ($28|0); +} +function _conv_direct($inp1,$N,$inp2,$L,$oup) { + $inp1 = $inp1|0; + $N = $N|0; + $inp2 = $inp2|0; + $L = $L|0; + $oup = $oup|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0.0, $106 = 0.0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0.0, $111 = 0.0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0.0, $129 = 0.0, $13 = 0, $130 = 0, $131 = 0.0, $132 = 0, $133 = 0.0; + var $134 = 0, $135 = 0.0, $136 = 0.0, $137 = 0, $138 = 0, $139 = 0.0, $14 = 0, $140 = 0.0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0.0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0.0; + var $152 = 0.0, $153 = 0, $154 = 0, $155 = 0, $156 = 0.0, $157 = 0.0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0.0; + var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0.0, $31 = 0.0, $32 = 0, $33 = 0, $34 = 0, $35 = 0.0, $36 = 0.0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0; + var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0.0, $54 = 0.0, $55 = 0, $56 = 0.0, $57 = 0, $58 = 0.0, $59 = 0, $6 = 0, $60 = 0.0; + var $61 = 0.0, $62 = 0, $63 = 0, $64 = 0.0, $65 = 0.0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0.0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0.0, $77 = 0.0, $78 = 0, $79 = 0; + var $8 = 0, $80 = 0, $81 = 0.0, $82 = 0.0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0; + var $98 = 0, $99 = 0.0, $M = 0, $i = 0, $k = 0, $m = 0, $t1 = 0.0, $tmin = 0.0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $inp1; + $1 = $N; + $2 = $inp2; + $3 = $L; + $4 = $oup; + $5 = $1; + $6 = $3; + $7 = (($5) + ($6))|0; + $8 = (($7) - 1)|0; + $M = $8; + $i = 0; + $9 = $1; + $10 = $3; + $11 = ($9|0)>=($10|0); + $k = 0; + if ($11) { + while(1) { + $12 = $k; + $13 = $3; + $14 = ($12|0)<($13|0); + if (!($14)) { + break; + } + $15 = $k; + $16 = $4; + $17 = (($16) + ($15<<3)|0); + HEAPF64[$17>>3] = 0.0; + $m = 0; + while(1) { + $18 = $m; + $19 = $k; + $20 = ($18|0)<=($19|0); + if (!($20)) { + break; + } + $21 = $m; + $22 = $0; + $23 = (($22) + ($21<<3)|0); + $24 = +HEAPF64[$23>>3]; + $25 = $k; + $26 = $m; + $27 = (($25) - ($26))|0; + $28 = $2; + $29 = (($28) + ($27<<3)|0); + $30 = +HEAPF64[$29>>3]; + $31 = $24 * $30; + $32 = $k; + $33 = $4; + $34 = (($33) + ($32<<3)|0); + $35 = +HEAPF64[$34>>3]; + $36 = $35 + $31; + HEAPF64[$34>>3] = $36; + $37 = $m; + $38 = (($37) + 1)|0; + $m = $38; + } + $39 = $k; + $40 = (($39) + 1)|0; + $k = $40; + } + $41 = $3; + $k = $41; + while(1) { + $42 = $k; + $43 = $M; + $44 = ($42|0)<($43|0); + if (!($44)) { + break; + } + $45 = $k; + $46 = $4; + $47 = (($46) + ($45<<3)|0); + HEAPF64[$47>>3] = 0.0; + $48 = $i; + $49 = (($48) + 1)|0; + $i = $49; + $50 = $3; + $51 = $i; + $52 = (($50) + ($51))|0; + $53 = (+($52|0)); + $t1 = $53; + $54 = $t1; + $55 = $1; + $56 = (+($55|0)); + $57 = $54 < $56; + $58 = $t1; + $59 = $1; + $60 = (+($59|0)); + $61 = $57 ? $58 : $60; + $tmin = $61; + $62 = $i; + $m = $62; + while(1) { + $63 = $m; + $64 = (+($63|0)); + $65 = $tmin; + $66 = $64 < $65; + if (!($66)) { + break; + } + $67 = $m; + $68 = $0; + $69 = (($68) + ($67<<3)|0); + $70 = +HEAPF64[$69>>3]; + $71 = $k; + $72 = $m; + $73 = (($71) - ($72))|0; + $74 = $2; + $75 = (($74) + ($73<<3)|0); + $76 = +HEAPF64[$75>>3]; + $77 = $70 * $76; + $78 = $k; + $79 = $4; + $80 = (($79) + ($78<<3)|0); + $81 = +HEAPF64[$80>>3]; + $82 = $81 + $77; + HEAPF64[$80>>3] = $82; + $83 = $m; + $84 = (($83) + 1)|0; + $m = $84; + } + $85 = $k; + $86 = (($85) + 1)|0; + $k = $86; + } + STACKTOP = sp;return; + } else { + while(1) { + $87 = $k; + $88 = $1; + $89 = ($87|0)<($88|0); + if (!($89)) { + break; + } + $90 = $k; + $91 = $4; + $92 = (($91) + ($90<<3)|0); + HEAPF64[$92>>3] = 0.0; + $m = 0; + while(1) { + $93 = $m; + $94 = $k; + $95 = ($93|0)<=($94|0); + if (!($95)) { + break; + } + $96 = $m; + $97 = $2; + $98 = (($97) + ($96<<3)|0); + $99 = +HEAPF64[$98>>3]; + $100 = $k; + $101 = $m; + $102 = (($100) - ($101))|0; + $103 = $0; + $104 = (($103) + ($102<<3)|0); + $105 = +HEAPF64[$104>>3]; + $106 = $99 * $105; + $107 = $k; + $108 = $4; + $109 = (($108) + ($107<<3)|0); + $110 = +HEAPF64[$109>>3]; + $111 = $110 + $106; + HEAPF64[$109>>3] = $111; + $112 = $m; + $113 = (($112) + 1)|0; + $m = $113; + } + $114 = $k; + $115 = (($114) + 1)|0; + $k = $115; + } + $116 = $1; + $k = $116; + while(1) { + $117 = $k; + $118 = $M; + $119 = ($117|0)<($118|0); + if (!($119)) { + break; + } + $120 = $k; + $121 = $4; + $122 = (($121) + ($120<<3)|0); + HEAPF64[$122>>3] = 0.0; + $123 = $i; + $124 = (($123) + 1)|0; + $i = $124; + $125 = $1; + $126 = $i; + $127 = (($125) + ($126))|0; + $128 = (+($127|0)); + $t1 = $128; + $129 = $t1; + $130 = $3; + $131 = (+($130|0)); + $132 = $129 < $131; + $133 = $t1; + $134 = $3; + $135 = (+($134|0)); + $136 = $132 ? $133 : $135; + $tmin = $136; + $137 = $i; + $m = $137; + while(1) { + $138 = $m; + $139 = (+($138|0)); + $140 = $tmin; + $141 = $139 < $140; + if (!($141)) { + break; + } + $142 = $m; + $143 = $2; + $144 = (($143) + ($142<<3)|0); + $145 = +HEAPF64[$144>>3]; + $146 = $k; + $147 = $m; + $148 = (($146) - ($147))|0; + $149 = $0; + $150 = (($149) + ($148<<3)|0); + $151 = +HEAPF64[$150>>3]; + $152 = $145 * $151; + $153 = $k; + $154 = $4; + $155 = (($154) + ($153<<3)|0); + $156 = +HEAPF64[$155>>3]; + $157 = $156 + $152; + HEAPF64[$155>>3] = $157; + $158 = $m; + $159 = (($158) + 1)|0; + $m = $159; + } + $160 = $k; + $161 = (($160) + 1)|0; + $k = $161; + } + STACKTOP = sp;return; + } +} +function _conv_fft($obj,$inp1,$inp2,$oup) { + $obj = $obj|0; + $inp1 = $inp1|0; + $inp2 = $inp2|0; + $oup = $oup|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0.0, $104 = 0, $105 = 0, $106 = 0, $107 = 0.0, $108 = 0.0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0.0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0.0, $118 = 0.0, $119 = 0.0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0.0, $138 = 0, $139 = 0.0, $14 = 0, $140 = 0.0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0; + var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0.0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0; + var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0.0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0; + var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0.0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0.0, $83 = 0.0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0.0; + var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0.0, $94 = 0.0, $95 = 0.0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $L1 = 0, $L2 = 0, $N = 0, $a = 0, $ao = 0, $b = 0, $bo = 0, $c = 0; + var $co = 0, $i = 0, $ls = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $obj; + $1 = $inp1; + $2 = $inp2; + $3 = $oup; + $4 = $0; + $5 = ((($4)) + 16|0); + $6 = HEAP32[$5>>2]|0; + $N = $6; + $7 = $0; + $8 = ((($7)) + 8|0); + $9 = HEAP32[$8>>2]|0; + $L1 = $9; + $10 = $0; + $11 = ((($10)) + 12|0); + $12 = HEAP32[$11>>2]|0; + $L2 = $12; + $13 = $L1; + $14 = $L2; + $15 = (($13) + ($14))|0; + $16 = (($15) - 1)|0; + $ls = $16; + $17 = $N; + $18 = $17<<4; + $19 = (_malloc($18)|0); + $a = $19; + $20 = $N; + $21 = $20<<4; + $22 = (_malloc($21)|0); + $b = $22; + $23 = $N; + $24 = $23<<4; + $25 = (_malloc($24)|0); + $c = $25; + $26 = $N; + $27 = $26<<4; + $28 = (_malloc($27)|0); + $ao = $28; + $29 = $N; + $30 = $29<<4; + $31 = (_malloc($30)|0); + $bo = $31; + $32 = $N; + $33 = $32<<4; + $34 = (_malloc($33)|0); + $co = $34; + $i = 0; + while(1) { + $35 = $i; + $36 = $N; + $37 = ($35|0)<($36|0); + if (!($37)) { + break; + } + $38 = $i; + $39 = $L1; + $40 = ($38|0)<($39|0); + $41 = $i; + if ($40) { + $42 = $1; + $43 = (($42) + ($41<<3)|0); + $44 = +HEAPF64[$43>>3]; + $45 = $i; + $46 = $a; + $47 = (($46) + ($45<<3)|0); + HEAPF64[$47>>3] = $44; + } else { + $48 = $a; + $49 = (($48) + ($41<<3)|0); + HEAPF64[$49>>3] = 0.0; + } + $50 = $i; + $51 = $L2; + $52 = ($50|0)<($51|0); + $53 = $i; + if ($52) { + $54 = $2; + $55 = (($54) + ($53<<3)|0); + $56 = +HEAPF64[$55>>3]; + $57 = $i; + $58 = $b; + $59 = (($58) + ($57<<3)|0); + HEAPF64[$59>>3] = $56; + } else { + $60 = $b; + $61 = (($60) + ($53<<3)|0); + HEAPF64[$61>>3] = 0.0; + } + $62 = $i; + $63 = (($62) + 1)|0; + $i = $63; + } + $64 = $0; + $65 = HEAP32[$64>>2]|0; + $66 = $a; + $67 = $ao; + _fft_r2c_exec($65,$66,$67); + $68 = $0; + $69 = HEAP32[$68>>2]|0; + $70 = $b; + $71 = $bo; + _fft_r2c_exec($69,$70,$71); + $i = 0; + while(1) { + $72 = $i; + $73 = $N; + $74 = ($72|0)<($73|0); + if (!($74)) { + break; + } + $75 = $i; + $76 = $ao; + $77 = (($76) + ($75<<4)|0); + $78 = +HEAPF64[$77>>3]; + $79 = $i; + $80 = $bo; + $81 = (($80) + ($79<<4)|0); + $82 = +HEAPF64[$81>>3]; + $83 = $78 * $82; + $84 = $i; + $85 = $ao; + $86 = (($85) + ($84<<4)|0); + $87 = ((($86)) + 8|0); + $88 = +HEAPF64[$87>>3]; + $89 = $i; + $90 = $bo; + $91 = (($90) + ($89<<4)|0); + $92 = ((($91)) + 8|0); + $93 = +HEAPF64[$92>>3]; + $94 = $88 * $93; + $95 = $83 - $94; + $96 = $i; + $97 = $c; + $98 = (($97) + ($96<<4)|0); + HEAPF64[$98>>3] = $95; + $99 = $i; + $100 = $ao; + $101 = (($100) + ($99<<4)|0); + $102 = ((($101)) + 8|0); + $103 = +HEAPF64[$102>>3]; + $104 = $i; + $105 = $bo; + $106 = (($105) + ($104<<4)|0); + $107 = +HEAPF64[$106>>3]; + $108 = $103 * $107; + $109 = $i; + $110 = $ao; + $111 = (($110) + ($109<<4)|0); + $112 = +HEAPF64[$111>>3]; + $113 = $i; + $114 = $bo; + $115 = (($114) + ($113<<4)|0); + $116 = ((($115)) + 8|0); + $117 = +HEAPF64[$116>>3]; + $118 = $112 * $117; + $119 = $108 + $118; + $120 = $i; + $121 = $c; + $122 = (($121) + ($120<<4)|0); + $123 = ((($122)) + 8|0); + HEAPF64[$123>>3] = $119; + $124 = $i; + $125 = (($124) + 1)|0; + $i = $125; + } + $126 = $0; + $127 = ((($126)) + 4|0); + $128 = HEAP32[$127>>2]|0; + $129 = $c; + $130 = $co; + _fft_c2r_exec($128,$129,$130); + $i = 0; + while(1) { + $131 = $i; + $132 = $ls; + $133 = ($131|0)<($132|0); + if (!($133)) { + break; + } + $134 = $i; + $135 = $co; + $136 = (($135) + ($134<<3)|0); + $137 = +HEAPF64[$136>>3]; + $138 = $N; + $139 = (+($138|0)); + $140 = $137 / $139; + $141 = $i; + $142 = $3; + $143 = (($142) + ($141<<3)|0); + HEAPF64[$143>>3] = $140; + $144 = $i; + $145 = (($144) + 1)|0; + $i = $145; + } + $146 = $a; + _free($146); + $147 = $b; + _free($147); + $148 = $c; + _free($148); + $149 = $ao; + _free($149); + $150 = $bo; + _free($150); + $151 = $co; + _free($151); + STACKTOP = sp;return; +} +function _free_conv($object) { + $object = $object|0; + var $0 = 0, $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $object; + $1 = $0; + _free($1); + STACKTOP = sp;return; +} +function _filtlength($name) { + $name = $name|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; + var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0; + var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0; + var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0; + var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, label = 0; + var sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $1 = $name; + $2 = $1; + $3 = (_strcmp($2,8)|0); + $4 = ($3|0)!=(0); + do { + if ($4) { + $5 = $1; + $6 = (_strcmp($5,16)|0); + $7 = ($6|0)!=(0); + if ($7) { + $8 = $1; + $9 = (_strcmp($8,24)|0); + $10 = ($9|0)!=(0); + if (!($10)) { + $0 = 4; + break; + } + $11 = $1; + $12 = (_strcmp($11,32)|0); + $13 = ($12|0)!=(0); + if (!($13)) { + $0 = 6; + break; + } + $14 = $1; + $15 = (_strcmp($14,40)|0); + $16 = ($15|0)!=(0); + if (!($16)) { + $0 = 8; + break; + } + $17 = $1; + $18 = (_strcmp($17,48)|0); + $19 = ($18|0)!=(0); + if (!($19)) { + $0 = 10; + break; + } + $20 = $1; + $21 = (_strcmp($20,56)|0); + $22 = ($21|0)!=(0); + if (!($22)) { + $0 = 12; + break; + } + $23 = $1; + $24 = (_strcmp($23,64)|0); + $25 = ($24|0)!=(0); + if (!($25)) { + $0 = 14; + break; + } + $26 = $1; + $27 = (_strcmp($26,72)|0); + $28 = ($27|0)!=(0); + if (!($28)) { + $0 = 16; + break; + } + $29 = $1; + $30 = (_strcmp($29,80)|0); + $31 = ($30|0)!=(0); + if (!($31)) { + $0 = 18; + break; + } + $32 = $1; + $33 = (_strcmp($32,88)|0); + $34 = ($33|0)!=(0); + if (!($34)) { + $0 = 20; + break; + } + $35 = $1; + $36 = (_strcmp($35,96)|0); + $37 = ($36|0)!=(0); + if (!($37)) { + $0 = 24; + break; + } + $38 = $1; + $39 = (_strcmp($38,104)|0); + $40 = ($39|0)!=(0); + if (!($40)) { + $0 = 26; + break; + } + $41 = $1; + $42 = (_strcmp($41,112)|0); + $43 = ($42|0)!=(0); + if (!($43)) { + $0 = 22; + break; + } + $44 = $1; + $45 = (_strcmp($44,120)|0); + $46 = ($45|0)!=(0); + if (!($46)) { + $0 = 28; + break; + } + $47 = $1; + $48 = (_strcmp($47,128)|0); + $49 = ($48|0)!=(0); + if (!($49)) { + $0 = 30; + break; + } + $50 = $1; + $51 = (_strcmp($50,136)|0); + $52 = ($51|0)!=(0); + if (!($52)) { + $0 = 2; + break; + } + $53 = $1; + $54 = (_strcmp($53,144)|0); + $55 = ($54|0)!=(0); + if (!($55)) { + $0 = 6; + break; + } + $56 = $1; + $57 = (_strcmp($56,152)|0); + $58 = ($57|0)!=(0); + if (!($58)) { + $0 = 10; + break; + } + $59 = $1; + $60 = (_strcmp($59,160)|0); + $61 = ($60|0)!=(0); + if (!($61)) { + $0 = 6; + break; + } + $62 = $1; + $63 = (_strcmp($62,168)|0); + $64 = ($63|0)!=(0); + if (!($64)) { + $0 = 10; + break; + } + $65 = $1; + $66 = (_strcmp($65,176)|0); + $67 = ($66|0)!=(0); + if (!($67)) { + $0 = 14; + break; + } + $68 = $1; + $69 = (_strcmp($68,184)|0); + $70 = ($69|0)!=(0); + if (!($70)) { + $0 = 18; + break; + } + $71 = $1; + $72 = (_strcmp($71,192)|0); + $73 = ($72|0)!=(0); + if (!($73)) { + $0 = 4; + break; + } + $74 = $1; + $75 = (_strcmp($74,200)|0); + $76 = ($75|0)!=(0); + if (!($76)) { + $0 = 8; + break; + } + $77 = $1; + $78 = (_strcmp($77,208)|0); + $79 = ($78|0)!=(0); + if (!($79)) { + $0 = 12; + break; + } + $80 = $1; + $81 = (_strcmp($80,216)|0); + $82 = ($81|0)!=(0); + if (!($82)) { + $0 = 16; + break; + } + $83 = $1; + $84 = (_strcmp($83,224)|0); + $85 = ($84|0)!=(0); + if (!($85)) { + $0 = 20; + break; + } + $86 = $1; + $87 = (_strcmp($86,232)|0); + $88 = ($87|0)!=(0); + if (!($88)) { + $0 = 10; + break; + } + $89 = $1; + $90 = (_strcmp($89,240)|0); + $91 = ($90|0)!=(0); + if (!($91)) { + $0 = 12; + break; + } + $92 = $1; + $93 = (_strcmp($92,248)|0); + $94 = ($93|0)!=(0); + if (!($94)) { + $0 = 18; + break; + } + $95 = $1; + $96 = (_strcmp($95,256)|0); + $97 = ($96|0)!=(0); + if (!($97)) { + $0 = 6; + break; + } + $98 = $1; + $99 = (_strcmp($98,264)|0); + $100 = ($99|0)!=(0); + if (!($100)) { + $0 = 12; + break; + } + $101 = $1; + $102 = (_strcmp($101,272)|0); + $103 = ($102|0)!=(0); + if (!($103)) { + $0 = 18; + break; + } + $104 = $1; + $105 = (_strcmp($104,280)|0); + $106 = ($105|0)!=(0); + if (!($106)) { + $0 = 24; + break; + } + $107 = $1; + $108 = (_strcmp($107,288)|0); + $109 = ($108|0)!=(0); + if (!($109)) { + $0 = 30; + break; + } + $110 = $1; + $111 = (_strcmp($110,296)|0); + $112 = ($111|0)!=(0); + if (!($112)) { + $0 = 4; + break; + } + $113 = $1; + $114 = (_strcmp($113,304)|0); + $115 = ($114|0)!=(0); + if (!($115)) { + $0 = 6; + break; + } + $116 = $1; + $117 = (_strcmp($116,312)|0); + $118 = ($117|0)!=(0); + if (!($118)) { + $0 = 8; + break; + } + $119 = $1; + $120 = (_strcmp($119,320)|0); + $121 = ($120|0)!=(0); + if (!($121)) { + $0 = 10; + break; + } + $122 = $1; + $123 = (_strcmp($122,328)|0); + $124 = ($123|0)!=(0); + if (!($124)) { + $0 = 12; + break; + } + $125 = $1; + $126 = (_strcmp($125,336)|0); + $127 = ($126|0)!=(0); + if (!($127)) { + $0 = 14; + break; + } + $128 = $1; + $129 = (_strcmp($128,344)|0); + $130 = ($129|0)!=(0); + if (!($130)) { + $0 = 16; + break; + } + $131 = $1; + $132 = (_strcmp($131,352)|0); + $133 = ($132|0)!=(0); + if (!($133)) { + $0 = 18; + break; + } + $134 = $1; + $135 = (_strcmp($134,360)|0); + $136 = ($135|0)!=(0); + if ($136) { + (_printf((368|0),($vararg_buffer|0))|0); + $0 = -1; + break; + } else { + $0 = 20; + break; + } + } else { + label = 3; + } + } else { + label = 3; + } + } while(0); + if ((label|0) == 3) { + $0 = 2; + } + $137 = $0; + STACKTOP = sp;return ($137|0); +} +function _filtcoef($name,$lp1,$hp1,$lp2,$hp2) { + $name = $name|0; + $lp1 = $lp1|0; + $hp1 = $hp1|0; + $lp2 = $lp2|0; + $hp2 = $hp2|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $1000 = 0.0, $1001 = 0, $1002 = 0, $1003 = 0, $1004 = 0, $1005 = 0, $1006 = 0.0, $1007 = 0, $1008 = 0, $1009 = 0, $101 = 0, $1010 = 0, $1011 = 0, $1012 = 0, $1013 = 0, $1014 = 0; + var $1015 = 0, $1016 = 0, $1017 = 0, $1018 = 0, $1019 = 0.0, $102 = 0, $1020 = 0, $1021 = 0, $1022 = 0, $1023 = 0, $1024 = 0, $1025 = 0.0, $1026 = 0, $1027 = 0, $1028 = 0, $1029 = 0, $103 = 0, $1030 = 0, $1031 = 0.0, $1032 = 0; + var $1033 = 0, $1034 = 0, $1035 = 0, $1036 = 0, $1037 = 0.0, $1038 = 0, $1039 = 0, $104 = 0.0, $1040 = 0, $1041 = 0, $1042 = 0, $1043 = 0, $1044 = 0, $1045 = 0, $1046 = 0, $1047 = 0, $1048 = 0, $1049 = 0, $105 = 0, $1050 = 0; + var $1051 = 0, $1052 = 0, $1053 = 0, $1054 = 0, $1055 = 0, $1056 = 0, $1057 = 0, $1058 = 0, $1059 = 0, $106 = 0, $1060 = 0, $1061 = 0, $1062 = 0, $1063 = 0, $1064 = 0, $1065 = 0, $1066 = 0, $1067 = 0, $1068 = 0, $1069 = 0; + var $107 = 0, $1070 = 0.0, $1071 = 0, $1072 = 0, $1073 = 0, $1074 = 0, $1075 = 0, $1076 = 0.0, $1077 = 0, $1078 = 0, $1079 = 0, $108 = 0, $1080 = 0, $1081 = 0, $1082 = 0.0, $1083 = 0, $1084 = 0, $1085 = 0, $1086 = 0, $1087 = 0; + var $1088 = 0.0, $1089 = 0, $109 = 0, $1090 = 0, $1091 = 0, $1092 = 0, $1093 = 0, $1094 = 0, $1095 = 0, $1096 = 0, $1097 = 0, $1098 = 0, $1099 = 0, $11 = 0, $110 = 0.0, $1100 = 0, $1101 = 0.0, $1102 = 0, $1103 = 0, $1104 = 0; + var $1105 = 0, $1106 = 0, $1107 = 0.0, $1108 = 0, $1109 = 0, $111 = 0, $1110 = 0, $1111 = 0, $1112 = 0, $1113 = 0.0, $1114 = 0, $1115 = 0, $1116 = 0, $1117 = 0, $1118 = 0, $1119 = 0.0, $112 = 0, $1120 = 0, $1121 = 0, $1122 = 0; + var $1123 = 0, $1124 = 0, $1125 = 0, $1126 = 0, $1127 = 0, $1128 = 0, $1129 = 0, $113 = 0, $1130 = 0, $1131 = 0, $1132 = 0.0, $1133 = 0, $1134 = 0, $1135 = 0, $1136 = 0, $1137 = 0, $1138 = 0.0, $1139 = 0, $114 = 0, $1140 = 0; + var $1141 = 0, $1142 = 0, $1143 = 0, $1144 = 0.0, $1145 = 0, $1146 = 0, $1147 = 0, $1148 = 0, $1149 = 0, $115 = 0, $1150 = 0.0, $1151 = 0, $1152 = 0, $1153 = 0, $1154 = 0, $1155 = 0, $1156 = 0, $1157 = 0, $1158 = 0, $1159 = 0; + var $116 = 0.0, $1160 = 0, $1161 = 0, $1162 = 0, $1163 = 0.0, $1164 = 0, $1165 = 0, $1166 = 0, $1167 = 0, $1168 = 0, $1169 = 0.0, $117 = 0, $1170 = 0, $1171 = 0, $1172 = 0, $1173 = 0, $1174 = 0, $1175 = 0.0, $1176 = 0, $1177 = 0; + var $1178 = 0, $1179 = 0, $118 = 0, $1180 = 0, $1181 = 0.0, $1182 = 0, $1183 = 0, $1184 = 0, $1185 = 0, $1186 = 0, $1187 = 0, $1188 = 0, $1189 = 0, $119 = 0, $1190 = 0, $1191 = 0, $1192 = 0, $1193 = 0, $1194 = 0.0, $1195 = 0; + var $1196 = 0, $1197 = 0, $1198 = 0, $1199 = 0, $12 = 0, $120 = 0, $1200 = 0.0, $1201 = 0, $1202 = 0, $1203 = 0, $1204 = 0, $1205 = 0, $1206 = 0.0, $1207 = 0, $1208 = 0, $1209 = 0, $121 = 0, $1210 = 0, $1211 = 0, $1212 = 0.0; + var $1213 = 0, $1214 = 0, $1215 = 0, $1216 = 0, $1217 = 0, $1218 = 0, $1219 = 0, $122 = 0, $1220 = 0, $1221 = 0, $1222 = 0, $1223 = 0, $1224 = 0, $1225 = 0.0, $1226 = 0, $1227 = 0, $1228 = 0, $1229 = 0, $123 = 0, $1230 = 0; + var $1231 = 0.0, $1232 = 0, $1233 = 0, $1234 = 0, $1235 = 0, $1236 = 0, $1237 = 0.0, $1238 = 0, $1239 = 0, $124 = 0, $1240 = 0, $1241 = 0, $1242 = 0, $1243 = 0.0, $1244 = 0, $1245 = 0, $1246 = 0, $1247 = 0, $1248 = 0, $1249 = 0; + var $125 = 0, $1250 = 0, $1251 = 0, $1252 = 0, $1253 = 0, $1254 = 0, $1255 = 0, $1256 = 0, $1257 = 0, $1258 = 0, $1259 = 0, $126 = 0, $1260 = 0, $1261 = 0, $1262 = 0, $1263 = 0, $1264 = 0, $1265 = 0, $1266 = 0, $1267 = 0; + var $1268 = 0, $1269 = 0, $127 = 0, $1270 = 0, $1271 = 0, $1272 = 0, $1273 = 0, $1274 = 0, $1275 = 0, $1276 = 0.0, $1277 = 0, $1278 = 0, $1279 = 0, $128 = 0, $1280 = 0, $1281 = 0, $1282 = 0.0, $1283 = 0, $1284 = 0, $1285 = 0; + var $1286 = 0, $1287 = 0, $1288 = 0.0, $1289 = 0, $129 = 0.0, $1290 = 0, $1291 = 0, $1292 = 0, $1293 = 0, $1294 = 0.0, $1295 = 0, $1296 = 0, $1297 = 0, $1298 = 0, $1299 = 0, $13 = 0, $130 = 0, $1300 = 0, $1301 = 0, $1302 = 0; + var $1303 = 0, $1304 = 0, $1305 = 0, $1306 = 0, $1307 = 0.0, $1308 = 0, $1309 = 0, $131 = 0, $1310 = 0, $1311 = 0, $1312 = 0, $1313 = 0.0, $1314 = 0, $1315 = 0, $1316 = 0, $1317 = 0, $1318 = 0, $1319 = 0.0, $132 = 0, $1320 = 0; + var $1321 = 0, $1322 = 0, $1323 = 0, $1324 = 0, $1325 = 0.0, $1326 = 0, $1327 = 0, $1328 = 0, $1329 = 0, $133 = 0, $1330 = 0, $1331 = 0, $1332 = 0, $1333 = 0, $1334 = 0, $1335 = 0, $1336 = 0, $1337 = 0, $1338 = 0.0, $1339 = 0; + var $134 = 0, $1340 = 0, $1341 = 0, $1342 = 0, $1343 = 0, $1344 = 0.0, $1345 = 0, $1346 = 0, $1347 = 0, $1348 = 0, $1349 = 0, $135 = 0.0, $1350 = 0.0, $1351 = 0, $1352 = 0, $1353 = 0, $1354 = 0, $1355 = 0, $1356 = 0.0, $1357 = 0; + var $1358 = 0, $1359 = 0, $136 = 0, $1360 = 0, $1361 = 0, $1362 = 0, $1363 = 0, $1364 = 0, $1365 = 0, $1366 = 0, $1367 = 0, $1368 = 0, $1369 = 0.0, $137 = 0, $1370 = 0, $1371 = 0, $1372 = 0, $1373 = 0, $1374 = 0, $1375 = 0.0; + var $1376 = 0, $1377 = 0, $1378 = 0, $1379 = 0, $138 = 0, $1380 = 0, $1381 = 0.0, $1382 = 0, $1383 = 0, $1384 = 0, $1385 = 0, $1386 = 0, $1387 = 0.0, $1388 = 0, $1389 = 0, $139 = 0, $1390 = 0, $1391 = 0, $1392 = 0, $1393 = 0; + var $1394 = 0, $1395 = 0, $1396 = 0, $1397 = 0, $1398 = 0, $1399 = 0, $14 = 0, $140 = 0, $1400 = 0.0, $1401 = 0, $1402 = 0, $1403 = 0, $1404 = 0, $1405 = 0, $1406 = 0.0, $1407 = 0, $1408 = 0, $1409 = 0, $141 = 0.0, $1410 = 0; + var $1411 = 0, $1412 = 0.0, $1413 = 0, $1414 = 0, $1415 = 0, $1416 = 0, $1417 = 0, $1418 = 0.0, $1419 = 0, $142 = 0, $1420 = 0, $1421 = 0, $1422 = 0, $1423 = 0, $1424 = 0, $1425 = 0, $1426 = 0, $1427 = 0, $1428 = 0, $1429 = 0; + var $143 = 0, $1430 = 0, $1431 = 0.0, $1432 = 0, $1433 = 0, $1434 = 0, $1435 = 0, $1436 = 0, $1437 = 0.0, $1438 = 0, $1439 = 0, $144 = 0, $1440 = 0, $1441 = 0, $1442 = 0, $1443 = 0.0, $1444 = 0, $1445 = 0, $1446 = 0, $1447 = 0; + var $1448 = 0, $1449 = 0.0, $145 = 0, $1450 = 0, $1451 = 0, $1452 = 0, $1453 = 0, $1454 = 0, $1455 = 0, $1456 = 0, $1457 = 0, $1458 = 0, $1459 = 0, $146 = 0, $1460 = 0, $1461 = 0, $1462 = 0.0, $1463 = 0, $1464 = 0, $1465 = 0; + var $1466 = 0, $1467 = 0, $1468 = 0.0, $1469 = 0, $147 = 0.0, $1470 = 0, $1471 = 0, $1472 = 0, $1473 = 0, $1474 = 0.0, $1475 = 0, $1476 = 0, $1477 = 0, $1478 = 0, $1479 = 0, $148 = 0, $1480 = 0.0, $1481 = 0, $1482 = 0, $1483 = 0; + var $1484 = 0, $1485 = 0, $1486 = 0, $1487 = 0, $1488 = 0, $1489 = 0, $149 = 0, $1490 = 0, $1491 = 0, $1492 = 0, $1493 = 0.0, $1494 = 0, $1495 = 0, $1496 = 0, $1497 = 0, $1498 = 0, $1499 = 0.0, $15 = 0, $150 = 0, $1500 = 0; + var $1501 = 0, $1502 = 0, $1503 = 0, $1504 = 0, $1505 = 0.0, $1506 = 0, $1507 = 0, $1508 = 0, $1509 = 0, $151 = 0, $1510 = 0, $1511 = 0.0, $1512 = 0, $1513 = 0, $1514 = 0, $1515 = 0, $1516 = 0, $1517 = 0, $152 = 0, $153 = 0; + var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0.0, $160 = 0.0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0.0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0; + var $172 = 0.0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0.0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0; + var $190 = 0, $191 = 0.0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0.0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0.0, $204 = 0, $205 = 0, $206 = 0, $207 = 0; + var $208 = 0, $209 = 0.0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0.0, $220 = 0, $221 = 0, $222 = 0.0, $223 = 0, $224 = 0, $225 = 0; + var $226 = 0, $227 = 0, $228 = 0.0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0.0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0.0, $241 = 0, $242 = 0, $243 = 0; + var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0.0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0.0, $26 = 0, $260 = 0, $261 = 0; + var $262 = 0, $263 = 0, $264 = 0, $265 = 0.0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0.0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0.0; + var $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0.0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0.0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0.0, $297 = 0, $298 = 0; + var $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0.0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0.0; + var $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0.0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0.0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0.0; + var $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0.0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0.0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0; + var $352 = 0.0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0.0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0.0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0; + var $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0.0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0.0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0; + var $389 = 0.0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0.0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0; + var $406 = 0, $407 = 0, $408 = 0.0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0.0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0.0, $421 = 0, $422 = 0, $423 = 0; + var $424 = 0, $425 = 0, $426 = 0.0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0.0, $44 = 0, $440 = 0, $441 = 0; + var $442 = 0, $443 = 0, $444 = 0, $445 = 0.0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0.0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0.0, $458 = 0, $459 = 0, $46 = 0; + var $460 = 0, $461 = 0, $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0.0, $470 = 0.0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0.0, $477 = 0, $478 = 0; + var $479 = 0, $48 = 0, $480 = 0, $481 = 0, $482 = 0.0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0.0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0; + var $497 = 0, $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0.0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0.0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0.0; + var $514 = 0, $515 = 0, $516 = 0, $517 = 0, $518 = 0, $519 = 0.0, $52 = 0, $520 = 0, $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0, $528 = 0, $529 = 0, $53 = 0.0, $530 = 0, $531 = 0; + var $532 = 0, $533 = 0, $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0, $546 = 0.0, $547 = 0, $548 = 0, $549 = 0, $55 = 0; + var $550 = 0, $551 = 0, $552 = 0.0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0.0, $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0, $564 = 0.0, $565 = 0, $566 = 0, $567 = 0, $568 = 0; + var $569 = 0, $57 = 0, $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0.0, $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0; + var $587 = 0.0, $588 = 0, $589 = 0, $59 = 0.0, $590 = 0, $591 = 0, $592 = 0, $593 = 0.0, $594 = 0, $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0.0, $6 = 0, $60 = 0, $600 = 0, $601 = 0, $602 = 0, $603 = 0; + var $604 = 0, $605 = 0, $606 = 0, $607 = 0, $608 = 0, $609 = 0, $61 = 0, $610 = 0, $611 = 0, $612 = 0, $613 = 0, $614 = 0, $615 = 0, $616 = 0, $617 = 0, $618 = 0, $619 = 0, $62 = 0, $620 = 0, $621 = 0; + var $622 = 0, $623 = 0, $624 = 0, $625 = 0, $626 = 0, $627 = 0, $628 = 0.0, $629 = 0, $63 = 0, $630 = 0, $631 = 0, $632 = 0, $633 = 0, $634 = 0.0, $635 = 0, $636 = 0, $637 = 0, $638 = 0, $639 = 0, $64 = 0; + var $640 = 0.0, $641 = 0, $642 = 0, $643 = 0, $644 = 0, $645 = 0, $646 = 0.0, $647 = 0, $648 = 0, $649 = 0, $65 = 0.0, $650 = 0, $651 = 0, $652 = 0, $653 = 0, $654 = 0, $655 = 0, $656 = 0, $657 = 0, $658 = 0; + var $659 = 0, $66 = 0, $660 = 0, $661 = 0, $662 = 0, $663 = 0, $664 = 0, $665 = 0.0, $666 = 0, $667 = 0, $668 = 0, $669 = 0, $67 = 0, $670 = 0, $671 = 0.0, $672 = 0, $673 = 0, $674 = 0, $675 = 0, $676 = 0; + var $677 = 0.0, $678 = 0, $679 = 0, $68 = 0, $680 = 0, $681 = 0, $682 = 0, $683 = 0.0, $684 = 0, $685 = 0, $686 = 0, $687 = 0, $688 = 0, $689 = 0, $69 = 0, $690 = 0, $691 = 0, $692 = 0, $693 = 0, $694 = 0; + var $695 = 0, $696 = 0, $697 = 0, $698 = 0, $699 = 0, $7 = 0, $70 = 0, $700 = 0, $701 = 0, $702 = 0.0, $703 = 0, $704 = 0, $705 = 0, $706 = 0, $707 = 0, $708 = 0.0, $709 = 0, $71 = 0, $710 = 0, $711 = 0; + var $712 = 0, $713 = 0, $714 = 0.0, $715 = 0, $716 = 0, $717 = 0, $718 = 0, $719 = 0, $72 = 0, $720 = 0.0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0, $726 = 0, $727 = 0, $728 = 0, $729 = 0, $73 = 0; + var $730 = 0, $731 = 0, $732 = 0, $733 = 0, $734 = 0, $735 = 0, $736 = 0, $737 = 0, $738 = 0, $739 = 0.0, $74 = 0, $740 = 0, $741 = 0, $742 = 0, $743 = 0, $744 = 0, $745 = 0.0, $746 = 0, $747 = 0, $748 = 0; + var $749 = 0, $75 = 0, $750 = 0, $751 = 0.0, $752 = 0, $753 = 0, $754 = 0, $755 = 0, $756 = 0, $757 = 0.0, $758 = 0, $759 = 0, $76 = 0, $760 = 0, $761 = 0, $762 = 0, $763 = 0, $764 = 0, $765 = 0, $766 = 0; + var $767 = 0, $768 = 0, $769 = 0, $77 = 0, $770 = 0.0, $771 = 0, $772 = 0, $773 = 0, $774 = 0, $775 = 0, $776 = 0.0, $777 = 0, $778 = 0, $779 = 0, $78 = 0, $780 = 0, $781 = 0, $782 = 0.0, $783 = 0, $784 = 0; + var $785 = 0, $786 = 0, $787 = 0, $788 = 0.0, $789 = 0, $79 = 0, $790 = 0, $791 = 0, $792 = 0, $793 = 0, $794 = 0, $795 = 0, $796 = 0, $797 = 0, $798 = 0, $799 = 0, $8 = 0, $80 = 0, $800 = 0, $801 = 0; + var $802 = 0, $803 = 0, $804 = 0, $805 = 0, $806 = 0, $807 = 0, $808 = 0, $809 = 0.0, $81 = 0, $810 = 0, $811 = 0, $812 = 0, $813 = 0, $814 = 0, $815 = 0.0, $816 = 0, $817 = 0, $818 = 0, $819 = 0, $82 = 0; + var $820 = 0, $821 = 0.0, $822 = 0, $823 = 0, $824 = 0, $825 = 0, $826 = 0, $827 = 0.0, $828 = 0, $829 = 0, $83 = 0, $830 = 0, $831 = 0, $832 = 0, $833 = 0, $834 = 0, $835 = 0, $836 = 0, $837 = 0, $838 = 0; + var $839 = 0, $84 = 0, $840 = 0, $841 = 0, $842 = 0, $843 = 0, $844 = 0, $845 = 0, $846 = 0, $847 = 0, $848 = 0.0, $849 = 0, $85 = 0, $850 = 0, $851 = 0, $852 = 0, $853 = 0, $854 = 0.0, $855 = 0, $856 = 0; + var $857 = 0, $858 = 0, $859 = 0, $86 = 0, $860 = 0.0, $861 = 0, $862 = 0, $863 = 0, $864 = 0, $865 = 0, $866 = 0.0, $867 = 0, $868 = 0, $869 = 0, $87 = 0, $870 = 0, $871 = 0, $872 = 0, $873 = 0, $874 = 0; + var $875 = 0, $876 = 0, $877 = 0, $878 = 0, $879 = 0, $88 = 0, $880 = 0, $881 = 0, $882 = 0, $883 = 0, $884 = 0, $885 = 0, $886 = 0, $887 = 0.0, $888 = 0, $889 = 0, $89 = 0, $890 = 0, $891 = 0, $892 = 0; + var $893 = 0.0, $894 = 0, $895 = 0, $896 = 0, $897 = 0, $898 = 0, $899 = 0.0, $9 = 0, $90 = 0, $900 = 0, $901 = 0, $902 = 0, $903 = 0, $904 = 0, $905 = 0.0, $906 = 0, $907 = 0, $908 = 0, $909 = 0, $91 = 0; + var $910 = 0, $911 = 0, $912 = 0, $913 = 0, $914 = 0, $915 = 0, $916 = 0, $917 = 0, $918 = 0, $919 = 0, $92 = 0, $920 = 0, $921 = 0, $922 = 0, $923 = 0, $924 = 0, $925 = 0, $926 = 0.0, $927 = 0, $928 = 0; + var $929 = 0, $93 = 0, $930 = 0, $931 = 0, $932 = 0.0, $933 = 0, $934 = 0, $935 = 0, $936 = 0, $937 = 0, $938 = 0.0, $939 = 0, $94 = 0, $940 = 0, $941 = 0, $942 = 0, $943 = 0, $944 = 0.0, $945 = 0, $946 = 0; + var $947 = 0, $948 = 0, $949 = 0, $95 = 0, $950 = 0, $951 = 0, $952 = 0, $953 = 0, $954 = 0, $955 = 0, $956 = 0, $957 = 0.0, $958 = 0, $959 = 0, $96 = 0, $960 = 0, $961 = 0, $962 = 0, $963 = 0.0, $964 = 0; + var $965 = 0, $966 = 0, $967 = 0, $968 = 0, $969 = 0.0, $97 = 0, $970 = 0, $971 = 0, $972 = 0, $973 = 0, $974 = 0, $975 = 0.0, $976 = 0, $977 = 0, $978 = 0, $979 = 0, $98 = 0.0, $980 = 0, $981 = 0, $982 = 0; + var $983 = 0, $984 = 0, $985 = 0, $986 = 0, $987 = 0, $988 = 0.0, $989 = 0, $99 = 0, $990 = 0, $991 = 0, $992 = 0, $993 = 0, $994 = 0.0, $995 = 0, $996 = 0, $997 = 0, $998 = 0, $999 = 0, $hp1_a = 0, $hp1_a10 = 0; + var $hp1_a102 = 0, $hp1_a106 = 0, $hp1_a110 = 0, $hp1_a114 = 0, $hp1_a118 = 0, $hp1_a122 = 0, $hp1_a126 = 0, $hp1_a130 = 0, $hp1_a134 = 0, $hp1_a138 = 0, $hp1_a14 = 0, $hp1_a142 = 0, $hp1_a146 = 0, $hp1_a150 = 0, $hp1_a154 = 0, $hp1_a158 = 0, $hp1_a162 = 0, $hp1_a166 = 0, $hp1_a170 = 0, $hp1_a18 = 0; + var $hp1_a2 = 0, $hp1_a22 = 0, $hp1_a26 = 0, $hp1_a30 = 0, $hp1_a34 = 0, $hp1_a38 = 0, $hp1_a42 = 0, $hp1_a46 = 0, $hp1_a50 = 0, $hp1_a54 = 0, $hp1_a58 = 0, $hp1_a6 = 0, $hp1_a62 = 0, $hp1_a66 = 0, $hp1_a70 = 0, $hp1_a74 = 0, $hp1_a78 = 0, $hp1_a82 = 0, $hp1_a86 = 0, $hp1_a90 = 0; + var $hp1_a94 = 0, $hp1_a98 = 0, $hp2_a = 0, $hp2_a100 = 0, $hp2_a104 = 0, $hp2_a108 = 0, $hp2_a112 = 0, $hp2_a116 = 0, $hp2_a12 = 0, $hp2_a120 = 0, $hp2_a124 = 0, $hp2_a128 = 0, $hp2_a132 = 0, $hp2_a136 = 0, $hp2_a140 = 0, $hp2_a144 = 0, $hp2_a148 = 0, $hp2_a152 = 0, $hp2_a156 = 0, $hp2_a16 = 0; + var $hp2_a160 = 0, $hp2_a164 = 0, $hp2_a168 = 0, $hp2_a172 = 0, $hp2_a20 = 0, $hp2_a24 = 0, $hp2_a28 = 0, $hp2_a32 = 0, $hp2_a36 = 0, $hp2_a4 = 0, $hp2_a40 = 0, $hp2_a44 = 0, $hp2_a48 = 0, $hp2_a52 = 0, $hp2_a56 = 0, $hp2_a60 = 0, $hp2_a64 = 0, $hp2_a68 = 0, $hp2_a72 = 0, $hp2_a76 = 0; + var $hp2_a8 = 0, $hp2_a80 = 0, $hp2_a84 = 0, $hp2_a88 = 0, $hp2_a92 = 0, $hp2_a96 = 0, $i = 0, $lp1_a = 0, $lp1_a1 = 0, $lp1_a101 = 0, $lp1_a105 = 0, $lp1_a109 = 0, $lp1_a113 = 0, $lp1_a117 = 0, $lp1_a121 = 0, $lp1_a125 = 0, $lp1_a129 = 0, $lp1_a13 = 0, $lp1_a133 = 0, $lp1_a137 = 0; + var $lp1_a141 = 0, $lp1_a145 = 0, $lp1_a149 = 0, $lp1_a153 = 0, $lp1_a157 = 0, $lp1_a161 = 0, $lp1_a165 = 0, $lp1_a169 = 0, $lp1_a17 = 0, $lp1_a21 = 0, $lp1_a25 = 0, $lp1_a29 = 0, $lp1_a33 = 0, $lp1_a37 = 0, $lp1_a41 = 0, $lp1_a45 = 0, $lp1_a49 = 0, $lp1_a5 = 0, $lp1_a53 = 0, $lp1_a57 = 0; + var $lp1_a61 = 0, $lp1_a65 = 0, $lp1_a69 = 0, $lp1_a73 = 0, $lp1_a77 = 0, $lp1_a81 = 0, $lp1_a85 = 0, $lp1_a89 = 0, $lp1_a9 = 0, $lp1_a93 = 0, $lp1_a97 = 0, $lp2_a = 0, $lp2_a103 = 0, $lp2_a107 = 0, $lp2_a11 = 0, $lp2_a111 = 0, $lp2_a115 = 0, $lp2_a119 = 0, $lp2_a123 = 0, $lp2_a127 = 0; + var $lp2_a131 = 0, $lp2_a135 = 0, $lp2_a139 = 0, $lp2_a143 = 0, $lp2_a147 = 0, $lp2_a15 = 0, $lp2_a151 = 0, $lp2_a155 = 0, $lp2_a159 = 0, $lp2_a163 = 0, $lp2_a167 = 0, $lp2_a171 = 0, $lp2_a19 = 0, $lp2_a23 = 0, $lp2_a27 = 0, $lp2_a3 = 0, $lp2_a31 = 0, $lp2_a35 = 0, $lp2_a39 = 0, $lp2_a43 = 0; + var $lp2_a47 = 0, $lp2_a51 = 0, $lp2_a55 = 0, $lp2_a59 = 0, $lp2_a63 = 0, $lp2_a67 = 0, $lp2_a7 = 0, $lp2_a71 = 0, $lp2_a75 = 0, $lp2_a79 = 0, $lp2_a83 = 0, $lp2_a87 = 0, $lp2_a91 = 0, $lp2_a95 = 0, $lp2_a99 = 0, $vararg_buffer = 0, dest = 0, label = 0, sp = 0, src = 0; + var stop = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 19360|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp + 19328|0; + $lp1_a = sp + 19312|0; + $hp1_a = sp + 19296|0; + $lp2_a = sp + 19280|0; + $hp2_a = sp + 19264|0; + $lp1_a1 = sp + 19232|0; + $hp1_a2 = sp + 19200|0; + $lp2_a3 = sp + 19168|0; + $hp2_a4 = sp + 19136|0; + $lp1_a5 = sp + 19088|0; + $hp1_a6 = sp + 19040|0; + $lp2_a7 = sp + 18992|0; + $hp2_a8 = sp + 18944|0; + $lp1_a9 = sp + 18880|0; + $hp1_a10 = sp + 18816|0; + $lp2_a11 = sp + 18752|0; + $hp2_a12 = sp + 18688|0; + $lp1_a13 = sp + 18608|0; + $hp1_a14 = sp + 18528|0; + $lp2_a15 = sp + 18448|0; + $hp2_a16 = sp + 18368|0; + $lp1_a17 = sp + 18272|0; + $hp1_a18 = sp + 18176|0; + $lp2_a19 = sp + 18080|0; + $hp2_a20 = sp + 17984|0; + $lp1_a21 = sp + 17872|0; + $hp1_a22 = sp + 17760|0; + $lp2_a23 = sp + 17648|0; + $hp2_a24 = sp + 17536|0; + $lp1_a25 = sp + 17408|0; + $hp1_a26 = sp + 17280|0; + $lp2_a27 = sp + 17152|0; + $hp2_a28 = sp + 17024|0; + $lp1_a29 = sp + 16880|0; + $hp1_a30 = sp + 16736|0; + $lp2_a31 = sp + 16592|0; + $hp2_a32 = sp + 16448|0; + $lp1_a33 = sp + 16288|0; + $hp1_a34 = sp + 16128|0; + $lp2_a35 = sp + 15968|0; + $hp2_a36 = sp + 15808|0; + $lp1_a37 = sp + 15616|0; + $hp1_a38 = sp + 15424|0; + $lp2_a39 = sp + 15232|0; + $hp2_a40 = sp + 15040|0; + $lp1_a41 = sp + 14832|0; + $hp1_a42 = sp + 14624|0; + $lp2_a43 = sp + 14416|0; + $hp2_a44 = sp + 14208|0; + $lp1_a45 = sp + 14032|0; + $hp1_a46 = sp + 13856|0; + $lp2_a47 = sp + 13680|0; + $hp2_a48 = sp + 13504|0; + $lp1_a49 = sp + 13280|0; + $hp1_a50 = sp + 13056|0; + $lp2_a51 = sp + 12832|0; + $hp2_a52 = sp + 12608|0; + $lp1_a53 = sp + 12368|0; + $hp1_a54 = sp + 12128|0; + $lp2_a55 = sp + 11888|0; + $hp2_a56 = sp + 11648|0; + $lp1_a57 = sp + 11632|0; + $hp1_a58 = sp + 11616|0; + $lp2_a59 = sp + 11600|0; + $hp2_a60 = sp + 11584|0; + $lp1_a61 = sp + 11536|0; + $hp1_a62 = sp + 11488|0; + $lp2_a63 = sp + 11440|0; + $hp2_a64 = sp + 11392|0; + $lp1_a65 = sp + 11312|0; + $hp1_a66 = sp + 11232|0; + $lp2_a67 = sp + 11152|0; + $hp2_a68 = sp + 11072|0; + $lp1_a69 = sp + 11024|0; + $hp1_a70 = sp + 10976|0; + $lp2_a71 = sp + 10928|0; + $hp2_a72 = sp + 10880|0; + $lp1_a73 = sp + 10800|0; + $hp1_a74 = sp + 10720|0; + $lp2_a75 = sp + 10640|0; + $hp2_a76 = sp + 10560|0; + $lp1_a77 = sp + 10448|0; + $hp1_a78 = sp + 10336|0; + $lp2_a79 = sp + 10224|0; + $hp2_a80 = sp + 10112|0; + $lp1_a81 = sp + 9968|0; + $hp1_a82 = sp + 4352|0; + $lp2_a83 = sp + 4208|0; + $hp2_a84 = sp + 4064|0; + $lp1_a85 = sp + 4032|0; + $hp1_a86 = sp + 4000|0; + $lp2_a87 = sp + 3968|0; + $hp2_a88 = sp + 3936|0; + $lp1_a89 = sp + 3872|0; + $hp1_a90 = sp + 3808|0; + $lp2_a91 = sp + 3744|0; + $hp2_a92 = sp + 3680|0; + $lp1_a93 = sp + 3584|0; + $hp1_a94 = sp + 3488|0; + $lp2_a95 = sp + 3392|0; + $hp2_a96 = sp + 3296|0; + $lp1_a97 = sp + 3168|0; + $hp1_a98 = sp + 3040|0; + $lp2_a99 = sp + 2912|0; + $hp2_a100 = sp + 2784|0; + $lp1_a101 = sp + 2624|0; + $hp1_a102 = sp + 2464|0; + $lp2_a103 = sp + 2304|0; + $hp2_a104 = sp + 2144|0; + $lp1_a105 = sp + 912|0; + $hp1_a106 = sp + 832|0; + $lp2_a107 = sp + 752|0; + $hp2_a108 = sp + 672|0; + $lp1_a109 = sp + 576|0; + $hp1_a110 = sp + 480|0; + $lp2_a111 = sp + 240|0; + $hp2_a112 = sp + 144|0; + $lp1_a113 = sp; + $hp1_a114 = sp + 336|0; + $lp2_a115 = sp + 992|0; + $hp2_a116 = sp + 1136|0; + $lp1_a117 = sp + 1280|0; + $hp1_a118 = sp + 1328|0; + $lp2_a119 = sp + 1376|0; + $hp2_a120 = sp + 1424|0; + $lp1_a121 = sp + 1472|0; + $hp1_a122 = sp + 1568|0; + $lp2_a123 = sp + 1664|0; + $hp2_a124 = sp + 1760|0; + $lp1_a125 = sp + 1856|0; + $hp1_a126 = sp + 2000|0; + $lp2_a127 = sp + 4496|0; + $hp2_a128 = sp + 4640|0; + $lp1_a129 = sp + 4784|0; + $hp1_a130 = sp + 4976|0; + $lp2_a131 = sp + 5168|0; + $hp2_a132 = sp + 5360|0; + $lp1_a133 = sp + 5552|0; + $hp1_a134 = sp + 5792|0; + $lp2_a135 = sp + 6032|0; + $hp2_a136 = sp + 6272|0; + $lp1_a137 = sp + 6512|0; + $hp1_a138 = sp + 6544|0; + $lp2_a139 = sp + 6576|0; + $hp2_a140 = sp + 6608|0; + $lp1_a141 = sp + 6640|0; + $hp1_a142 = sp + 6688|0; + $lp2_a143 = sp + 6736|0; + $hp2_a144 = sp + 6784|0; + $lp1_a145 = sp + 6832|0; + $hp1_a146 = sp + 6896|0; + $lp2_a147 = sp + 6960|0; + $hp2_a148 = sp + 7024|0; + $lp1_a149 = sp + 7088|0; + $hp1_a150 = sp + 7168|0; + $lp2_a151 = sp + 7248|0; + $hp2_a152 = sp + 7328|0; + $lp1_a153 = sp + 7408|0; + $hp1_a154 = sp + 7504|0; + $lp2_a155 = sp + 7600|0; + $hp2_a156 = sp + 7696|0; + $lp1_a157 = sp + 7792|0; + $hp1_a158 = sp + 7904|0; + $lp2_a159 = sp + 8016|0; + $hp2_a160 = sp + 8128|0; + $lp1_a161 = sp + 8240|0; + $hp1_a162 = sp + 8368|0; + $lp2_a163 = sp + 8496|0; + $hp2_a164 = sp + 8624|0; + $lp1_a165 = sp + 8752|0; + $hp1_a166 = sp + 8896|0; + $lp2_a167 = sp + 9040|0; + $hp2_a168 = sp + 9184|0; + $lp1_a169 = sp + 9328|0; + $hp1_a170 = sp + 9488|0; + $lp2_a171 = sp + 9648|0; + $hp2_a172 = sp + 9808|0; + $1 = $name; + $2 = $lp1; + $3 = $hp1; + $4 = $lp2; + $5 = $hp2; + $6 = $1; + $7 = (_strcmp($6,8)|0); + $8 = ($7|0)!=(0); + if ($8) { + $9 = $1; + $10 = (_strcmp($9,16)|0); + $11 = ($10|0)!=(0); + if ($11) { + $40 = $1; + $41 = (_strcmp($40,24)|0); + $42 = ($41|0)!=(0); + if (!($42)) { + ;HEAP32[$lp1_a1>>2]=HEAP32[13616>>2]|0;HEAP32[$lp1_a1+4>>2]=HEAP32[13616+4>>2]|0;HEAP32[$lp1_a1+8>>2]=HEAP32[13616+8>>2]|0;HEAP32[$lp1_a1+12>>2]=HEAP32[13616+12>>2]|0;HEAP32[$lp1_a1+16>>2]=HEAP32[13616+16>>2]|0;HEAP32[$lp1_a1+20>>2]=HEAP32[13616+20>>2]|0;HEAP32[$lp1_a1+24>>2]=HEAP32[13616+24>>2]|0;HEAP32[$lp1_a1+28>>2]=HEAP32[13616+28>>2]|0; + ;HEAP32[$hp1_a2>>2]=HEAP32[13648>>2]|0;HEAP32[$hp1_a2+4>>2]=HEAP32[13648+4>>2]|0;HEAP32[$hp1_a2+8>>2]=HEAP32[13648+8>>2]|0;HEAP32[$hp1_a2+12>>2]=HEAP32[13648+12>>2]|0;HEAP32[$hp1_a2+16>>2]=HEAP32[13648+16>>2]|0;HEAP32[$hp1_a2+20>>2]=HEAP32[13648+20>>2]|0;HEAP32[$hp1_a2+24>>2]=HEAP32[13648+24>>2]|0;HEAP32[$hp1_a2+28>>2]=HEAP32[13648+28>>2]|0; + ;HEAP32[$lp2_a3>>2]=HEAP32[13680>>2]|0;HEAP32[$lp2_a3+4>>2]=HEAP32[13680+4>>2]|0;HEAP32[$lp2_a3+8>>2]=HEAP32[13680+8>>2]|0;HEAP32[$lp2_a3+12>>2]=HEAP32[13680+12>>2]|0;HEAP32[$lp2_a3+16>>2]=HEAP32[13680+16>>2]|0;HEAP32[$lp2_a3+20>>2]=HEAP32[13680+20>>2]|0;HEAP32[$lp2_a3+24>>2]=HEAP32[13680+24>>2]|0;HEAP32[$lp2_a3+28>>2]=HEAP32[13680+28>>2]|0; + ;HEAP32[$hp2_a4>>2]=HEAP32[13712>>2]|0;HEAP32[$hp2_a4+4>>2]=HEAP32[13712+4>>2]|0;HEAP32[$hp2_a4+8>>2]=HEAP32[13712+8>>2]|0;HEAP32[$hp2_a4+12>>2]=HEAP32[13712+12>>2]|0;HEAP32[$hp2_a4+16>>2]=HEAP32[13712+16>>2]|0;HEAP32[$hp2_a4+20>>2]=HEAP32[13712+20>>2]|0;HEAP32[$hp2_a4+24>>2]=HEAP32[13712+24>>2]|0;HEAP32[$hp2_a4+28>>2]=HEAP32[13712+28>>2]|0; + $i = 0; + while(1) { + $43 = $i; + $44 = ($43|0)<(4); + if (!($44)) { + break; + } + $45 = $i; + $46 = (($lp1_a1) + ($45<<3)|0); + $47 = +HEAPF64[$46>>3]; + $48 = $i; + $49 = $2; + $50 = (($49) + ($48<<3)|0); + HEAPF64[$50>>3] = $47; + $51 = $i; + $52 = (($hp1_a2) + ($51<<3)|0); + $53 = +HEAPF64[$52>>3]; + $54 = $i; + $55 = $3; + $56 = (($55) + ($54<<3)|0); + HEAPF64[$56>>3] = $53; + $57 = $i; + $58 = (($lp2_a3) + ($57<<3)|0); + $59 = +HEAPF64[$58>>3]; + $60 = $i; + $61 = $4; + $62 = (($61) + ($60<<3)|0); + HEAPF64[$62>>3] = $59; + $63 = $i; + $64 = (($hp2_a4) + ($63<<3)|0); + $65 = +HEAPF64[$64>>3]; + $66 = $i; + $67 = $5; + $68 = (($67) + ($66<<3)|0); + HEAPF64[$68>>3] = $65; + $69 = $i; + $70 = (($69) + 1)|0; + $i = $70; + } + $0 = 4; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $71 = $1; + $72 = (_strcmp($71,32)|0); + $73 = ($72|0)!=(0); + if (!($73)) { + dest=$lp1_a5; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$lp1_a5>>3] = 0.035226291882100656; + $74 = ((($lp1_a5)) + 8|0); + HEAPF64[$74>>3] = -0.085441273882241486; + $75 = ((($lp1_a5)) + 16|0); + HEAPF64[$75>>3] = -0.13501102001039084; + $76 = ((($lp1_a5)) + 24|0); + HEAPF64[$76>>3] = 0.45987750211933132; + $77 = ((($lp1_a5)) + 32|0); + HEAPF64[$77>>3] = 0.80689150931333875; + $78 = ((($lp1_a5)) + 40|0); + HEAPF64[$78>>3] = 0.33267055295095688; + dest=$hp1_a6; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$hp1_a6>>3] = -0.33267055295095688; + $79 = ((($hp1_a6)) + 8|0); + HEAPF64[$79>>3] = 0.80689150931333875; + $80 = ((($hp1_a6)) + 16|0); + HEAPF64[$80>>3] = -0.45987750211933132; + $81 = ((($hp1_a6)) + 24|0); + HEAPF64[$81>>3] = -0.13501102001039084; + $82 = ((($hp1_a6)) + 32|0); + HEAPF64[$82>>3] = 0.085441273882241486; + $83 = ((($hp1_a6)) + 40|0); + HEAPF64[$83>>3] = 0.035226291882100656; + dest=$lp2_a7; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$lp2_a7>>3] = 0.33267055295095688; + $84 = ((($lp2_a7)) + 8|0); + HEAPF64[$84>>3] = 0.80689150931333875; + $85 = ((($lp2_a7)) + 16|0); + HEAPF64[$85>>3] = 0.45987750211933132; + $86 = ((($lp2_a7)) + 24|0); + HEAPF64[$86>>3] = -0.13501102001039084; + $87 = ((($lp2_a7)) + 32|0); + HEAPF64[$87>>3] = -0.085441273882241486; + $88 = ((($lp2_a7)) + 40|0); + HEAPF64[$88>>3] = 0.035226291882100656; + dest=$hp2_a8; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$hp2_a8>>3] = 0.035226291882100656; + $89 = ((($hp2_a8)) + 8|0); + HEAPF64[$89>>3] = 0.085441273882241486; + $90 = ((($hp2_a8)) + 16|0); + HEAPF64[$90>>3] = -0.13501102001039084; + $91 = ((($hp2_a8)) + 24|0); + HEAPF64[$91>>3] = -0.45987750211933132; + $92 = ((($hp2_a8)) + 32|0); + HEAPF64[$92>>3] = 0.80689150931333875; + $93 = ((($hp2_a8)) + 40|0); + HEAPF64[$93>>3] = -0.33267055295095688; + $i = 0; + while(1) { + $94 = $i; + $95 = ($94|0)<(6); + if (!($95)) { + break; + } + $96 = $i; + $97 = (($lp1_a5) + ($96<<3)|0); + $98 = +HEAPF64[$97>>3]; + $99 = $i; + $100 = $2; + $101 = (($100) + ($99<<3)|0); + HEAPF64[$101>>3] = $98; + $102 = $i; + $103 = (($hp1_a6) + ($102<<3)|0); + $104 = +HEAPF64[$103>>3]; + $105 = $i; + $106 = $3; + $107 = (($106) + ($105<<3)|0); + HEAPF64[$107>>3] = $104; + $108 = $i; + $109 = (($lp2_a7) + ($108<<3)|0); + $110 = +HEAPF64[$109>>3]; + $111 = $i; + $112 = $4; + $113 = (($112) + ($111<<3)|0); + HEAPF64[$113>>3] = $110; + $114 = $i; + $115 = (($hp2_a8) + ($114<<3)|0); + $116 = +HEAPF64[$115>>3]; + $117 = $i; + $118 = $5; + $119 = (($118) + ($117<<3)|0); + HEAPF64[$119>>3] = $116; + $120 = $i; + $121 = (($120) + 1)|0; + $i = $121; + } + $0 = 6; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $122 = $1; + $123 = (_strcmp($122,40)|0); + $124 = ($123|0)!=(0); + if (!($124)) { + dest=$lp1_a9; src=448; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a10; src=512; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a11; src=576; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a12; src=640; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $125 = $i; + $126 = ($125|0)<(8); + if (!($126)) { + break; + } + $127 = $i; + $128 = (($lp1_a9) + ($127<<3)|0); + $129 = +HEAPF64[$128>>3]; + $130 = $i; + $131 = $2; + $132 = (($131) + ($130<<3)|0); + HEAPF64[$132>>3] = $129; + $133 = $i; + $134 = (($hp1_a10) + ($133<<3)|0); + $135 = +HEAPF64[$134>>3]; + $136 = $i; + $137 = $3; + $138 = (($137) + ($136<<3)|0); + HEAPF64[$138>>3] = $135; + $139 = $i; + $140 = (($lp2_a11) + ($139<<3)|0); + $141 = +HEAPF64[$140>>3]; + $142 = $i; + $143 = $4; + $144 = (($143) + ($142<<3)|0); + HEAPF64[$144>>3] = $141; + $145 = $i; + $146 = (($hp2_a12) + ($145<<3)|0); + $147 = +HEAPF64[$146>>3]; + $148 = $i; + $149 = $5; + $150 = (($149) + ($148<<3)|0); + HEAPF64[$150>>3] = $147; + $151 = $i; + $152 = (($151) + 1)|0; + $i = $152; + } + $0 = 8; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $153 = $1; + $154 = (_strcmp($153,48)|0); + $155 = ($154|0)!=(0); + if (!($155)) { + dest=$lp1_a13; src=704; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a14; src=784; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a15; src=864; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a16; src=944; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $156 = $i; + $157 = ($156|0)<(10); + if (!($157)) { + break; + } + $158 = $i; + $159 = (($lp1_a13) + ($158<<3)|0); + $160 = +HEAPF64[$159>>3]; + $161 = $i; + $162 = $2; + $163 = (($162) + ($161<<3)|0); + HEAPF64[$163>>3] = $160; + $164 = $i; + $165 = (($hp1_a14) + ($164<<3)|0); + $166 = +HEAPF64[$165>>3]; + $167 = $i; + $168 = $3; + $169 = (($168) + ($167<<3)|0); + HEAPF64[$169>>3] = $166; + $170 = $i; + $171 = (($lp2_a15) + ($170<<3)|0); + $172 = +HEAPF64[$171>>3]; + $173 = $i; + $174 = $4; + $175 = (($174) + ($173<<3)|0); + HEAPF64[$175>>3] = $172; + $176 = $i; + $177 = (($hp2_a16) + ($176<<3)|0); + $178 = +HEAPF64[$177>>3]; + $179 = $i; + $180 = $5; + $181 = (($180) + ($179<<3)|0); + HEAPF64[$181>>3] = $178; + $182 = $i; + $183 = (($182) + 1)|0; + $i = $183; + } + $0 = 10; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $184 = $1; + $185 = (_strcmp($184,56)|0); + $186 = ($185|0)!=(0); + if (!($186)) { + dest=$lp1_a17; src=1024; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a18; src=1120; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a19; src=1216; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a20; src=1312; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $187 = $i; + $188 = ($187|0)<(12); + if (!($188)) { + break; + } + $189 = $i; + $190 = (($lp1_a17) + ($189<<3)|0); + $191 = +HEAPF64[$190>>3]; + $192 = $i; + $193 = $2; + $194 = (($193) + ($192<<3)|0); + HEAPF64[$194>>3] = $191; + $195 = $i; + $196 = (($hp1_a18) + ($195<<3)|0); + $197 = +HEAPF64[$196>>3]; + $198 = $i; + $199 = $3; + $200 = (($199) + ($198<<3)|0); + HEAPF64[$200>>3] = $197; + $201 = $i; + $202 = (($lp2_a19) + ($201<<3)|0); + $203 = +HEAPF64[$202>>3]; + $204 = $i; + $205 = $4; + $206 = (($205) + ($204<<3)|0); + HEAPF64[$206>>3] = $203; + $207 = $i; + $208 = (($hp2_a20) + ($207<<3)|0); + $209 = +HEAPF64[$208>>3]; + $210 = $i; + $211 = $5; + $212 = (($211) + ($210<<3)|0); + HEAPF64[$212>>3] = $209; + $213 = $i; + $214 = (($213) + 1)|0; + $i = $214; + } + $0 = 12; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $215 = $1; + $216 = (_strcmp($215,64)|0); + $217 = ($216|0)!=(0); + if (!($217)) { + dest=$lp1_a21; src=1408; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a22; src=1520; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a23; src=1632; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a24; src=1744; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $218 = $i; + $219 = ($218|0)<(14); + if (!($219)) { + break; + } + $220 = $i; + $221 = (($lp1_a21) + ($220<<3)|0); + $222 = +HEAPF64[$221>>3]; + $223 = $i; + $224 = $2; + $225 = (($224) + ($223<<3)|0); + HEAPF64[$225>>3] = $222; + $226 = $i; + $227 = (($hp1_a22) + ($226<<3)|0); + $228 = +HEAPF64[$227>>3]; + $229 = $i; + $230 = $3; + $231 = (($230) + ($229<<3)|0); + HEAPF64[$231>>3] = $228; + $232 = $i; + $233 = (($lp2_a23) + ($232<<3)|0); + $234 = +HEAPF64[$233>>3]; + $235 = $i; + $236 = $4; + $237 = (($236) + ($235<<3)|0); + HEAPF64[$237>>3] = $234; + $238 = $i; + $239 = (($hp2_a24) + ($238<<3)|0); + $240 = +HEAPF64[$239>>3]; + $241 = $i; + $242 = $5; + $243 = (($242) + ($241<<3)|0); + HEAPF64[$243>>3] = $240; + $244 = $i; + $245 = (($244) + 1)|0; + $i = $245; + } + $0 = 14; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $246 = $1; + $247 = (_strcmp($246,72)|0); + $248 = ($247|0)!=(0); + if (!($248)) { + dest=$lp1_a25; src=1856; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a26; src=1984; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a27; src=2112; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a28; src=2240; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $249 = $i; + $250 = ($249|0)<(16); + if (!($250)) { + break; + } + $251 = $i; + $252 = (($lp1_a25) + ($251<<3)|0); + $253 = +HEAPF64[$252>>3]; + $254 = $i; + $255 = $2; + $256 = (($255) + ($254<<3)|0); + HEAPF64[$256>>3] = $253; + $257 = $i; + $258 = (($hp1_a26) + ($257<<3)|0); + $259 = +HEAPF64[$258>>3]; + $260 = $i; + $261 = $3; + $262 = (($261) + ($260<<3)|0); + HEAPF64[$262>>3] = $259; + $263 = $i; + $264 = (($lp2_a27) + ($263<<3)|0); + $265 = +HEAPF64[$264>>3]; + $266 = $i; + $267 = $4; + $268 = (($267) + ($266<<3)|0); + HEAPF64[$268>>3] = $265; + $269 = $i; + $270 = (($hp2_a28) + ($269<<3)|0); + $271 = +HEAPF64[$270>>3]; + $272 = $i; + $273 = $5; + $274 = (($273) + ($272<<3)|0); + HEAPF64[$274>>3] = $271; + $275 = $i; + $276 = (($275) + 1)|0; + $i = $276; + } + $0 = 16; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $277 = $1; + $278 = (_strcmp($277,80)|0); + $279 = ($278|0)!=(0); + if (!($279)) { + _memcpy(($lp1_a29|0),(2368|0),144)|0; + _memcpy(($hp1_a30|0),(2512|0),144)|0; + _memcpy(($lp2_a31|0),(2656|0),144)|0; + _memcpy(($hp2_a32|0),(2800|0),144)|0; + $i = 0; + while(1) { + $280 = $i; + $281 = ($280|0)<(18); + if (!($281)) { + break; + } + $282 = $i; + $283 = (($lp1_a29) + ($282<<3)|0); + $284 = +HEAPF64[$283>>3]; + $285 = $i; + $286 = $2; + $287 = (($286) + ($285<<3)|0); + HEAPF64[$287>>3] = $284; + $288 = $i; + $289 = (($hp1_a30) + ($288<<3)|0); + $290 = +HEAPF64[$289>>3]; + $291 = $i; + $292 = $3; + $293 = (($292) + ($291<<3)|0); + HEAPF64[$293>>3] = $290; + $294 = $i; + $295 = (($lp2_a31) + ($294<<3)|0); + $296 = +HEAPF64[$295>>3]; + $297 = $i; + $298 = $4; + $299 = (($298) + ($297<<3)|0); + HEAPF64[$299>>3] = $296; + $300 = $i; + $301 = (($hp2_a32) + ($300<<3)|0); + $302 = +HEAPF64[$301>>3]; + $303 = $i; + $304 = $5; + $305 = (($304) + ($303<<3)|0); + HEAPF64[$305>>3] = $302; + $306 = $i; + $307 = (($306) + 1)|0; + $i = $307; + } + $0 = 18; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $308 = $1; + $309 = (_strcmp($308,88)|0); + $310 = ($309|0)!=(0); + if (!($310)) { + _memcpy(($lp1_a33|0),(2944|0),160)|0; + _memcpy(($hp1_a34|0),(3104|0),160)|0; + _memcpy(($lp2_a35|0),(3264|0),160)|0; + _memcpy(($hp2_a36|0),(3424|0),160)|0; + $i = 0; + while(1) { + $311 = $i; + $312 = ($311|0)<(20); + if (!($312)) { + break; + } + $313 = $i; + $314 = (($lp1_a33) + ($313<<3)|0); + $315 = +HEAPF64[$314>>3]; + $316 = $i; + $317 = $2; + $318 = (($317) + ($316<<3)|0); + HEAPF64[$318>>3] = $315; + $319 = $i; + $320 = (($hp1_a34) + ($319<<3)|0); + $321 = +HEAPF64[$320>>3]; + $322 = $i; + $323 = $3; + $324 = (($323) + ($322<<3)|0); + HEAPF64[$324>>3] = $321; + $325 = $i; + $326 = (($lp2_a35) + ($325<<3)|0); + $327 = +HEAPF64[$326>>3]; + $328 = $i; + $329 = $4; + $330 = (($329) + ($328<<3)|0); + HEAPF64[$330>>3] = $327; + $331 = $i; + $332 = (($hp2_a36) + ($331<<3)|0); + $333 = +HEAPF64[$332>>3]; + $334 = $i; + $335 = $5; + $336 = (($335) + ($334<<3)|0); + HEAPF64[$336>>3] = $333; + $337 = $i; + $338 = (($337) + 1)|0; + $i = $338; + } + $0 = 20; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $339 = $1; + $340 = (_strcmp($339,96)|0); + $341 = ($340|0)!=(0); + if (!($341)) { + _memcpy(($lp1_a37|0),(3584|0),192)|0; + _memcpy(($hp1_a38|0),(3776|0),192)|0; + _memcpy(($lp2_a39|0),(3968|0),192)|0; + _memcpy(($hp2_a40|0),(4160|0),192)|0; + $i = 0; + while(1) { + $342 = $i; + $343 = ($342|0)<(24); + if (!($343)) { + break; + } + $344 = $i; + $345 = (($lp1_a37) + ($344<<3)|0); + $346 = +HEAPF64[$345>>3]; + $347 = $i; + $348 = $2; + $349 = (($348) + ($347<<3)|0); + HEAPF64[$349>>3] = $346; + $350 = $i; + $351 = (($hp1_a38) + ($350<<3)|0); + $352 = +HEAPF64[$351>>3]; + $353 = $i; + $354 = $3; + $355 = (($354) + ($353<<3)|0); + HEAPF64[$355>>3] = $352; + $356 = $i; + $357 = (($lp2_a39) + ($356<<3)|0); + $358 = +HEAPF64[$357>>3]; + $359 = $i; + $360 = $4; + $361 = (($360) + ($359<<3)|0); + HEAPF64[$361>>3] = $358; + $362 = $i; + $363 = (($hp2_a40) + ($362<<3)|0); + $364 = +HEAPF64[$363>>3]; + $365 = $i; + $366 = $5; + $367 = (($366) + ($365<<3)|0); + HEAPF64[$367>>3] = $364; + $368 = $i; + $369 = (($368) + 1)|0; + $i = $369; + } + $0 = 24; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $370 = $1; + $371 = (_strcmp($370,104)|0); + $372 = ($371|0)!=(0); + if (!($372)) { + _memcpy(($lp1_a41|0),(4352|0),208)|0; + _memcpy(($hp1_a42|0),(4560|0),208)|0; + _memcpy(($lp2_a43|0),(4768|0),208)|0; + _memcpy(($hp2_a44|0),(4976|0),208)|0; + $i = 0; + while(1) { + $373 = $i; + $374 = ($373|0)<(26); + if (!($374)) { + break; + } + $375 = $i; + $376 = (($lp1_a41) + ($375<<3)|0); + $377 = +HEAPF64[$376>>3]; + $378 = $i; + $379 = $2; + $380 = (($379) + ($378<<3)|0); + HEAPF64[$380>>3] = $377; + $381 = $i; + $382 = (($hp1_a42) + ($381<<3)|0); + $383 = +HEAPF64[$382>>3]; + $384 = $i; + $385 = $3; + $386 = (($385) + ($384<<3)|0); + HEAPF64[$386>>3] = $383; + $387 = $i; + $388 = (($lp2_a43) + ($387<<3)|0); + $389 = +HEAPF64[$388>>3]; + $390 = $i; + $391 = $4; + $392 = (($391) + ($390<<3)|0); + HEAPF64[$392>>3] = $389; + $393 = $i; + $394 = (($hp2_a44) + ($393<<3)|0); + $395 = +HEAPF64[$394>>3]; + $396 = $i; + $397 = $5; + $398 = (($397) + ($396<<3)|0); + HEAPF64[$398>>3] = $395; + $399 = $i; + $400 = (($399) + 1)|0; + $i = $400; + } + $0 = 26; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $401 = $1; + $402 = (_strcmp($401,112)|0); + $403 = ($402|0)!=(0); + if (!($403)) { + _memcpy(($lp1_a45|0),(5184|0),176)|0; + _memcpy(($hp1_a46|0),(5360|0),176)|0; + _memcpy(($lp2_a47|0),(5536|0),176)|0; + _memcpy(($hp2_a48|0),(5712|0),176)|0; + $i = 0; + while(1) { + $404 = $i; + $405 = ($404|0)<(22); + if (!($405)) { + break; + } + $406 = $i; + $407 = (($lp1_a45) + ($406<<3)|0); + $408 = +HEAPF64[$407>>3]; + $409 = $i; + $410 = $2; + $411 = (($410) + ($409<<3)|0); + HEAPF64[$411>>3] = $408; + $412 = $i; + $413 = (($hp1_a46) + ($412<<3)|0); + $414 = +HEAPF64[$413>>3]; + $415 = $i; + $416 = $3; + $417 = (($416) + ($415<<3)|0); + HEAPF64[$417>>3] = $414; + $418 = $i; + $419 = (($lp2_a47) + ($418<<3)|0); + $420 = +HEAPF64[$419>>3]; + $421 = $i; + $422 = $4; + $423 = (($422) + ($421<<3)|0); + HEAPF64[$423>>3] = $420; + $424 = $i; + $425 = (($hp2_a48) + ($424<<3)|0); + $426 = +HEAPF64[$425>>3]; + $427 = $i; + $428 = $5; + $429 = (($428) + ($427<<3)|0); + HEAPF64[$429>>3] = $426; + $430 = $i; + $431 = (($430) + 1)|0; + $i = $431; + } + $0 = 22; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $432 = $1; + $433 = (_strcmp($432,120)|0); + $434 = ($433|0)!=(0); + if (!($434)) { + _memcpy(($lp1_a49|0),(5888|0),224)|0; + _memcpy(($hp1_a50|0),(6112|0),224)|0; + _memcpy(($lp2_a51|0),(6336|0),224)|0; + _memcpy(($hp2_a52|0),(6560|0),224)|0; + $i = 0; + while(1) { + $435 = $i; + $436 = ($435|0)<(28); + if (!($436)) { + break; + } + $437 = $i; + $438 = (($lp1_a49) + ($437<<3)|0); + $439 = +HEAPF64[$438>>3]; + $440 = $i; + $441 = $2; + $442 = (($441) + ($440<<3)|0); + HEAPF64[$442>>3] = $439; + $443 = $i; + $444 = (($hp1_a50) + ($443<<3)|0); + $445 = +HEAPF64[$444>>3]; + $446 = $i; + $447 = $3; + $448 = (($447) + ($446<<3)|0); + HEAPF64[$448>>3] = $445; + $449 = $i; + $450 = (($lp2_a51) + ($449<<3)|0); + $451 = +HEAPF64[$450>>3]; + $452 = $i; + $453 = $4; + $454 = (($453) + ($452<<3)|0); + HEAPF64[$454>>3] = $451; + $455 = $i; + $456 = (($hp2_a52) + ($455<<3)|0); + $457 = +HEAPF64[$456>>3]; + $458 = $i; + $459 = $5; + $460 = (($459) + ($458<<3)|0); + HEAPF64[$460>>3] = $457; + $461 = $i; + $462 = (($461) + 1)|0; + $i = $462; + } + $0 = 28; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $463 = $1; + $464 = (_strcmp($463,128)|0); + $465 = ($464|0)!=(0); + if (!($465)) { + _memcpy(($lp1_a53|0),(6784|0),240)|0; + _memcpy(($hp1_a54|0),(7024|0),240)|0; + _memcpy(($lp2_a55|0),(7264|0),240)|0; + _memcpy(($hp2_a56|0),(7504|0),240)|0; + $i = 0; + while(1) { + $466 = $i; + $467 = ($466|0)<(30); + if (!($467)) { + break; + } + $468 = $i; + $469 = (($lp1_a53) + ($468<<3)|0); + $470 = +HEAPF64[$469>>3]; + $471 = $i; + $472 = $2; + $473 = (($472) + ($471<<3)|0); + HEAPF64[$473>>3] = $470; + $474 = $i; + $475 = (($hp1_a54) + ($474<<3)|0); + $476 = +HEAPF64[$475>>3]; + $477 = $i; + $478 = $3; + $479 = (($478) + ($477<<3)|0); + HEAPF64[$479>>3] = $476; + $480 = $i; + $481 = (($lp2_a55) + ($480<<3)|0); + $482 = +HEAPF64[$481>>3]; + $483 = $i; + $484 = $4; + $485 = (($484) + ($483<<3)|0); + HEAPF64[$485>>3] = $482; + $486 = $i; + $487 = (($hp2_a56) + ($486<<3)|0); + $488 = +HEAPF64[$487>>3]; + $489 = $i; + $490 = $5; + $491 = (($490) + ($489<<3)|0); + HEAPF64[$491>>3] = $488; + $492 = $i; + $493 = (($492) + 1)|0; + $i = $493; + } + $0 = 30; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $494 = $1; + $495 = (_strcmp($494,136)|0); + $496 = ($495|0)!=(0); + if (!($496)) { + ;HEAP32[$lp1_a57>>2]=HEAP32[7760>>2]|0;HEAP32[$lp1_a57+4>>2]=HEAP32[7760+4>>2]|0;HEAP32[$lp1_a57+8>>2]=HEAP32[7760+8>>2]|0;HEAP32[$lp1_a57+12>>2]=HEAP32[7760+12>>2]|0; + ;HEAP32[$hp1_a58>>2]=HEAP32[7744>>2]|0;HEAP32[$hp1_a58+4>>2]=HEAP32[7744+4>>2]|0;HEAP32[$hp1_a58+8>>2]=HEAP32[7744+8>>2]|0;HEAP32[$hp1_a58+12>>2]=HEAP32[7744+12>>2]|0; + ;HEAP32[$lp2_a59>>2]=HEAP32[7760>>2]|0;HEAP32[$lp2_a59+4>>2]=HEAP32[7760+4>>2]|0;HEAP32[$lp2_a59+8>>2]=HEAP32[7760+8>>2]|0;HEAP32[$lp2_a59+12>>2]=HEAP32[7760+12>>2]|0; + ;HEAP32[$hp2_a60>>2]=HEAP32[7776>>2]|0;HEAP32[$hp2_a60+4>>2]=HEAP32[7776+4>>2]|0;HEAP32[$hp2_a60+8>>2]=HEAP32[7776+8>>2]|0;HEAP32[$hp2_a60+12>>2]=HEAP32[7776+12>>2]|0; + $i = 0; + while(1) { + $497 = $i; + $498 = ($497|0)<(2); + if (!($498)) { + break; + } + $499 = $i; + $500 = (($lp1_a57) + ($499<<3)|0); + $501 = +HEAPF64[$500>>3]; + $502 = $i; + $503 = $2; + $504 = (($503) + ($502<<3)|0); + HEAPF64[$504>>3] = $501; + $505 = $i; + $506 = (($hp1_a58) + ($505<<3)|0); + $507 = +HEAPF64[$506>>3]; + $508 = $i; + $509 = $3; + $510 = (($509) + ($508<<3)|0); + HEAPF64[$510>>3] = $507; + $511 = $i; + $512 = (($lp2_a59) + ($511<<3)|0); + $513 = +HEAPF64[$512>>3]; + $514 = $i; + $515 = $4; + $516 = (($515) + ($514<<3)|0); + HEAPF64[$516>>3] = $513; + $517 = $i; + $518 = (($hp2_a60) + ($517<<3)|0); + $519 = +HEAPF64[$518>>3]; + $520 = $i; + $521 = $5; + $522 = (($521) + ($520<<3)|0); + HEAPF64[$522>>3] = $519; + $523 = $i; + $524 = (($523) + 1)|0; + $i = $524; + } + $0 = 2; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $525 = $1; + $526 = (_strcmp($525,144)|0); + $527 = ($526|0)!=(0); + if (!($527)) { + dest=$lp1_a61; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$lp1_a61>>3] = -0.088388347648318447; + $528 = ((($lp1_a61)) + 8|0); + HEAPF64[$528>>3] = 0.088388347648318447; + $529 = ((($lp1_a61)) + 16|0); + HEAPF64[$529>>3] = 0.70710678118654757; + $530 = ((($lp1_a61)) + 24|0); + HEAPF64[$530>>3] = 0.70710678118654757; + $531 = ((($lp1_a61)) + 32|0); + HEAPF64[$531>>3] = 0.088388347648318447; + $532 = ((($lp1_a61)) + 40|0); + HEAPF64[$532>>3] = -0.088388347648318447; + dest=$hp1_a62; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $533 = ((($hp1_a62)) + 16|0); + HEAPF64[$533>>3] = -0.70710678118654757; + $534 = ((($hp1_a62)) + 24|0); + HEAPF64[$534>>3] = 0.70710678118654757; + dest=$lp2_a63; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $535 = ((($lp2_a63)) + 16|0); + HEAPF64[$535>>3] = 0.70710678118654757; + $536 = ((($lp2_a63)) + 24|0); + HEAPF64[$536>>3] = 0.70710678118654757; + dest=$hp2_a64; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$hp2_a64>>3] = -0.088388347648318447; + $537 = ((($hp2_a64)) + 8|0); + HEAPF64[$537>>3] = -0.088388347648318447; + $538 = ((($hp2_a64)) + 16|0); + HEAPF64[$538>>3] = 0.70710678118654757; + $539 = ((($hp2_a64)) + 24|0); + HEAPF64[$539>>3] = -0.70710678118654757; + $540 = ((($hp2_a64)) + 32|0); + HEAPF64[$540>>3] = 0.088388347648318447; + $541 = ((($hp2_a64)) + 40|0); + HEAPF64[$541>>3] = 0.088388347648318447; + $i = 0; + while(1) { + $542 = $i; + $543 = ($542|0)<(6); + if (!($543)) { + break; + } + $544 = $i; + $545 = (($lp1_a61) + ($544<<3)|0); + $546 = +HEAPF64[$545>>3]; + $547 = $i; + $548 = $2; + $549 = (($548) + ($547<<3)|0); + HEAPF64[$549>>3] = $546; + $550 = $i; + $551 = (($hp1_a62) + ($550<<3)|0); + $552 = +HEAPF64[$551>>3]; + $553 = $i; + $554 = $3; + $555 = (($554) + ($553<<3)|0); + HEAPF64[$555>>3] = $552; + $556 = $i; + $557 = (($lp2_a63) + ($556<<3)|0); + $558 = +HEAPF64[$557>>3]; + $559 = $i; + $560 = $4; + $561 = (($560) + ($559<<3)|0); + HEAPF64[$561>>3] = $558; + $562 = $i; + $563 = (($hp2_a64) + ($562<<3)|0); + $564 = +HEAPF64[$563>>3]; + $565 = $i; + $566 = $5; + $567 = (($566) + ($565<<3)|0); + HEAPF64[$567>>3] = $564; + $568 = $i; + $569 = (($568) + 1)|0; + $i = $569; + } + $0 = 6; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $570 = $1; + $571 = (_strcmp($570,152)|0); + $572 = ($571|0)!=(0); + if (!($572)) { + dest=$lp1_a65; src=7792; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a66; stop=dest+80|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $573 = ((($hp1_a66)) + 32|0); + HEAPF64[$573>>3] = -0.70710678118654757; + $574 = ((($hp1_a66)) + 40|0); + HEAPF64[$574>>3] = 0.70710678118654757; + dest=$lp2_a67; stop=dest+80|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $575 = ((($lp2_a67)) + 32|0); + HEAPF64[$575>>3] = 0.70710678118654757; + $576 = ((($lp2_a67)) + 40|0); + HEAPF64[$576>>3] = 0.70710678118654757; + dest=$hp2_a68; src=7872; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $577 = $i; + $578 = ($577|0)<(10); + if (!($578)) { + break; + } + $579 = $i; + $580 = (($lp1_a65) + ($579<<3)|0); + $581 = +HEAPF64[$580>>3]; + $582 = $i; + $583 = $2; + $584 = (($583) + ($582<<3)|0); + HEAPF64[$584>>3] = $581; + $585 = $i; + $586 = (($hp1_a66) + ($585<<3)|0); + $587 = +HEAPF64[$586>>3]; + $588 = $i; + $589 = $3; + $590 = (($589) + ($588<<3)|0); + HEAPF64[$590>>3] = $587; + $591 = $i; + $592 = (($lp2_a67) + ($591<<3)|0); + $593 = +HEAPF64[$592>>3]; + $594 = $i; + $595 = $4; + $596 = (($595) + ($594<<3)|0); + HEAPF64[$596>>3] = $593; + $597 = $i; + $598 = (($hp2_a68) + ($597<<3)|0); + $599 = +HEAPF64[$598>>3]; + $600 = $i; + $601 = $5; + $602 = (($601) + ($600<<3)|0); + HEAPF64[$602>>3] = $599; + $603 = $i; + $604 = (($603) + 1)|0; + $i = $604; + } + $0 = 10; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $605 = $1; + $606 = (_strcmp($605,160)|0); + $607 = ($606|0)!=(0); + if (!($607)) { + dest=$lp1_a69; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $608 = ((($lp1_a69)) + 8|0); + HEAPF64[$608>>3] = -0.17677669529663689; + $609 = ((($lp1_a69)) + 16|0); + HEAPF64[$609>>3] = 0.35355339059327379; + $610 = ((($lp1_a69)) + 24|0); + HEAPF64[$610>>3] = 1.0606601717798214; + $611 = ((($lp1_a69)) + 32|0); + HEAPF64[$611>>3] = 0.35355339059327379; + $612 = ((($lp1_a69)) + 40|0); + HEAPF64[$612>>3] = -0.17677669529663689; + dest=$hp1_a70; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $613 = ((($hp1_a70)) + 8|0); + HEAPF64[$613>>3] = 0.35355339059327379; + $614 = ((($hp1_a70)) + 16|0); + HEAPF64[$614>>3] = -0.70710678118654757; + $615 = ((($hp1_a70)) + 24|0); + HEAPF64[$615>>3] = 0.35355339059327379; + dest=$lp2_a71; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $616 = ((($lp2_a71)) + 8|0); + HEAPF64[$616>>3] = 0.35355339059327379; + $617 = ((($lp2_a71)) + 16|0); + HEAPF64[$617>>3] = 0.70710678118654757; + $618 = ((($lp2_a71)) + 24|0); + HEAPF64[$618>>3] = 0.35355339059327379; + dest=$hp2_a72; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $619 = ((($hp2_a72)) + 8|0); + HEAPF64[$619>>3] = 0.17677669529663689; + $620 = ((($hp2_a72)) + 16|0); + HEAPF64[$620>>3] = 0.35355339059327379; + $621 = ((($hp2_a72)) + 24|0); + HEAPF64[$621>>3] = -1.0606601717798214; + $622 = ((($hp2_a72)) + 32|0); + HEAPF64[$622>>3] = 0.35355339059327379; + $623 = ((($hp2_a72)) + 40|0); + HEAPF64[$623>>3] = 0.17677669529663689; + $i = 0; + while(1) { + $624 = $i; + $625 = ($624|0)<(6); + if (!($625)) { + break; + } + $626 = $i; + $627 = (($lp1_a69) + ($626<<3)|0); + $628 = +HEAPF64[$627>>3]; + $629 = $i; + $630 = $2; + $631 = (($630) + ($629<<3)|0); + HEAPF64[$631>>3] = $628; + $632 = $i; + $633 = (($hp1_a70) + ($632<<3)|0); + $634 = +HEAPF64[$633>>3]; + $635 = $i; + $636 = $3; + $637 = (($636) + ($635<<3)|0); + HEAPF64[$637>>3] = $634; + $638 = $i; + $639 = (($lp2_a71) + ($638<<3)|0); + $640 = +HEAPF64[$639>>3]; + $641 = $i; + $642 = $4; + $643 = (($642) + ($641<<3)|0); + HEAPF64[$643>>3] = $640; + $644 = $i; + $645 = (($hp2_a72) + ($644<<3)|0); + $646 = +HEAPF64[$645>>3]; + $647 = $i; + $648 = $5; + $649 = (($648) + ($647<<3)|0); + HEAPF64[$649>>3] = $646; + $650 = $i; + $651 = (($650) + 1)|0; + $i = $651; + } + $0 = 6; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $652 = $1; + $653 = (_strcmp($652,168)|0); + $654 = ($653|0)!=(0); + if (!($654)) { + dest=$lp1_a73; src=7952; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a74; stop=dest+80|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $655 = ((($hp1_a74)) + 24|0); + HEAPF64[$655>>3] = 0.35355339059327379; + $656 = ((($hp1_a74)) + 32|0); + HEAPF64[$656>>3] = -0.70710678118654757; + $657 = ((($hp1_a74)) + 40|0); + HEAPF64[$657>>3] = 0.35355339059327379; + dest=$lp2_a75; stop=dest+80|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $658 = ((($lp2_a75)) + 24|0); + HEAPF64[$658>>3] = 0.35355339059327379; + $659 = ((($lp2_a75)) + 32|0); + HEAPF64[$659>>3] = 0.70710678118654757; + $660 = ((($lp2_a75)) + 40|0); + HEAPF64[$660>>3] = 0.35355339059327379; + dest=$hp2_a76; src=8032; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $661 = $i; + $662 = ($661|0)<(10); + if (!($662)) { + break; + } + $663 = $i; + $664 = (($lp1_a73) + ($663<<3)|0); + $665 = +HEAPF64[$664>>3]; + $666 = $i; + $667 = $2; + $668 = (($667) + ($666<<3)|0); + HEAPF64[$668>>3] = $665; + $669 = $i; + $670 = (($hp1_a74) + ($669<<3)|0); + $671 = +HEAPF64[$670>>3]; + $672 = $i; + $673 = $3; + $674 = (($673) + ($672<<3)|0); + HEAPF64[$674>>3] = $671; + $675 = $i; + $676 = (($lp2_a75) + ($675<<3)|0); + $677 = +HEAPF64[$676>>3]; + $678 = $i; + $679 = $4; + $680 = (($679) + ($678<<3)|0); + HEAPF64[$680>>3] = $677; + $681 = $i; + $682 = (($hp2_a76) + ($681<<3)|0); + $683 = +HEAPF64[$682>>3]; + $684 = $i; + $685 = $5; + $686 = (($685) + ($684<<3)|0); + HEAPF64[$686>>3] = $683; + $687 = $i; + $688 = (($687) + 1)|0; + $i = $688; + } + $0 = 10; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $689 = $1; + $690 = (_strcmp($689,176)|0); + $691 = ($690|0)!=(0); + if (!($691)) { + dest=$lp1_a77; src=8112; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a78; stop=dest+112|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $692 = ((($hp1_a78)) + 40|0); + HEAPF64[$692>>3] = 0.35355339059327379; + $693 = ((($hp1_a78)) + 48|0); + HEAPF64[$693>>3] = -0.70710678118654757; + $694 = ((($hp1_a78)) + 56|0); + HEAPF64[$694>>3] = 0.35355339059327379; + dest=$lp2_a79; stop=dest+112|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $695 = ((($lp2_a79)) + 40|0); + HEAPF64[$695>>3] = 0.35355339059327379; + $696 = ((($lp2_a79)) + 48|0); + HEAPF64[$696>>3] = 0.70710678118654757; + $697 = ((($lp2_a79)) + 56|0); + HEAPF64[$697>>3] = 0.35355339059327379; + dest=$hp2_a80; src=8224; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $698 = $i; + $699 = ($698|0)<(14); + if (!($699)) { + break; + } + $700 = $i; + $701 = (($lp1_a77) + ($700<<3)|0); + $702 = +HEAPF64[$701>>3]; + $703 = $i; + $704 = $2; + $705 = (($704) + ($703<<3)|0); + HEAPF64[$705>>3] = $702; + $706 = $i; + $707 = (($hp1_a78) + ($706<<3)|0); + $708 = +HEAPF64[$707>>3]; + $709 = $i; + $710 = $3; + $711 = (($710) + ($709<<3)|0); + HEAPF64[$711>>3] = $708; + $712 = $i; + $713 = (($lp2_a79) + ($712<<3)|0); + $714 = +HEAPF64[$713>>3]; + $715 = $i; + $716 = $4; + $717 = (($716) + ($715<<3)|0); + HEAPF64[$717>>3] = $714; + $718 = $i; + $719 = (($hp2_a80) + ($718<<3)|0); + $720 = +HEAPF64[$719>>3]; + $721 = $i; + $722 = $5; + $723 = (($722) + ($721<<3)|0); + HEAPF64[$723>>3] = $720; + $724 = $i; + $725 = (($724) + 1)|0; + $i = $725; + } + $0 = 14; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $726 = $1; + $727 = (_strcmp($726,184)|0); + $728 = ($727|0)!=(0); + if (!($728)) { + _memcpy(($lp1_a81|0),(8336|0),144)|0; + _memset(($hp1_a82|0),0,144)|0; + $729 = ((($hp1_a82)) + 56|0); + HEAPF64[$729>>3] = 0.35355339059327379; + $730 = ((($hp1_a82)) + 64|0); + HEAPF64[$730>>3] = -0.70710678118654757; + $731 = ((($hp1_a82)) + 72|0); + HEAPF64[$731>>3] = 0.35355339059327379; + _memset(($lp2_a83|0),0,144)|0; + $732 = ((($lp2_a83)) + 56|0); + HEAPF64[$732>>3] = 0.35355339059327379; + $733 = ((($lp2_a83)) + 64|0); + HEAPF64[$733>>3] = 0.70710678118654757; + $734 = ((($lp2_a83)) + 72|0); + HEAPF64[$734>>3] = 0.35355339059327379; + _memcpy(($hp2_a84|0),(8480|0),144)|0; + $i = 0; + while(1) { + $735 = $i; + $736 = ($735|0)<(18); + if (!($736)) { + break; + } + $737 = $i; + $738 = (($lp1_a81) + ($737<<3)|0); + $739 = +HEAPF64[$738>>3]; + $740 = $i; + $741 = $2; + $742 = (($741) + ($740<<3)|0); + HEAPF64[$742>>3] = $739; + $743 = $i; + $744 = (($hp1_a82) + ($743<<3)|0); + $745 = +HEAPF64[$744>>3]; + $746 = $i; + $747 = $3; + $748 = (($747) + ($746<<3)|0); + HEAPF64[$748>>3] = $745; + $749 = $i; + $750 = (($lp2_a83) + ($749<<3)|0); + $751 = +HEAPF64[$750>>3]; + $752 = $i; + $753 = $4; + $754 = (($753) + ($752<<3)|0); + HEAPF64[$754>>3] = $751; + $755 = $i; + $756 = (($hp2_a84) + ($755<<3)|0); + $757 = +HEAPF64[$756>>3]; + $758 = $i; + $759 = $5; + $760 = (($759) + ($758<<3)|0); + HEAPF64[$760>>3] = $757; + $761 = $i; + $762 = (($761) + 1)|0; + $i = $762; + } + $0 = 18; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $763 = $1; + $764 = (_strcmp($763,192)|0); + $765 = ($764|0)!=(0); + if (!($765)) { + ;HEAP32[$lp1_a85>>2]=HEAP32[8624>>2]|0;HEAP32[$lp1_a85+4>>2]=HEAP32[8624+4>>2]|0;HEAP32[$lp1_a85+8>>2]=HEAP32[8624+8>>2]|0;HEAP32[$lp1_a85+12>>2]=HEAP32[8624+12>>2]|0;HEAP32[$lp1_a85+16>>2]=HEAP32[8624+16>>2]|0;HEAP32[$lp1_a85+20>>2]=HEAP32[8624+20>>2]|0;HEAP32[$lp1_a85+24>>2]=HEAP32[8624+24>>2]|0;HEAP32[$lp1_a85+28>>2]=HEAP32[8624+28>>2]|0; + ;HEAP32[$hp1_a86>>2]=HEAP32[8656>>2]|0;HEAP32[$hp1_a86+4>>2]=HEAP32[8656+4>>2]|0;HEAP32[$hp1_a86+8>>2]=HEAP32[8656+8>>2]|0;HEAP32[$hp1_a86+12>>2]=HEAP32[8656+12>>2]|0;HEAP32[$hp1_a86+16>>2]=HEAP32[8656+16>>2]|0;HEAP32[$hp1_a86+20>>2]=HEAP32[8656+20>>2]|0;HEAP32[$hp1_a86+24>>2]=HEAP32[8656+24>>2]|0;HEAP32[$hp1_a86+28>>2]=HEAP32[8656+28>>2]|0; + ;HEAP32[$lp2_a87>>2]=HEAP32[8688>>2]|0;HEAP32[$lp2_a87+4>>2]=HEAP32[8688+4>>2]|0;HEAP32[$lp2_a87+8>>2]=HEAP32[8688+8>>2]|0;HEAP32[$lp2_a87+12>>2]=HEAP32[8688+12>>2]|0;HEAP32[$lp2_a87+16>>2]=HEAP32[8688+16>>2]|0;HEAP32[$lp2_a87+20>>2]=HEAP32[8688+20>>2]|0;HEAP32[$lp2_a87+24>>2]=HEAP32[8688+24>>2]|0;HEAP32[$lp2_a87+28>>2]=HEAP32[8688+28>>2]|0; + ;HEAP32[$hp2_a88>>2]=HEAP32[8720>>2]|0;HEAP32[$hp2_a88+4>>2]=HEAP32[8720+4>>2]|0;HEAP32[$hp2_a88+8>>2]=HEAP32[8720+8>>2]|0;HEAP32[$hp2_a88+12>>2]=HEAP32[8720+12>>2]|0;HEAP32[$hp2_a88+16>>2]=HEAP32[8720+16>>2]|0;HEAP32[$hp2_a88+20>>2]=HEAP32[8720+20>>2]|0;HEAP32[$hp2_a88+24>>2]=HEAP32[8720+24>>2]|0;HEAP32[$hp2_a88+28>>2]=HEAP32[8720+28>>2]|0; + $i = 0; + while(1) { + $766 = $i; + $767 = ($766|0)<(4); + if (!($767)) { + break; + } + $768 = $i; + $769 = (($lp1_a85) + ($768<<3)|0); + $770 = +HEAPF64[$769>>3]; + $771 = $i; + $772 = $2; + $773 = (($772) + ($771<<3)|0); + HEAPF64[$773>>3] = $770; + $774 = $i; + $775 = (($hp1_a86) + ($774<<3)|0); + $776 = +HEAPF64[$775>>3]; + $777 = $i; + $778 = $3; + $779 = (($778) + ($777<<3)|0); + HEAPF64[$779>>3] = $776; + $780 = $i; + $781 = (($lp2_a87) + ($780<<3)|0); + $782 = +HEAPF64[$781>>3]; + $783 = $i; + $784 = $4; + $785 = (($784) + ($783<<3)|0); + HEAPF64[$785>>3] = $782; + $786 = $i; + $787 = (($hp2_a88) + ($786<<3)|0); + $788 = +HEAPF64[$787>>3]; + $789 = $i; + $790 = $5; + $791 = (($790) + ($789<<3)|0); + HEAPF64[$791>>3] = $788; + $792 = $i; + $793 = (($792) + 1)|0; + $i = $793; + } + $0 = 4; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $794 = $1; + $795 = (_strcmp($794,200)|0); + $796 = ($795|0)!=(0); + if (!($796)) { + dest=$lp1_a89; src=8752; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a90; stop=dest+64|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $797 = ((($hp1_a90)) + 16|0); + HEAPF64[$797>>3] = -0.17677669529663689; + $798 = ((($hp1_a90)) + 24|0); + HEAPF64[$798>>3] = 0.53033008588991071; + $799 = ((($hp1_a90)) + 32|0); + HEAPF64[$799>>3] = -0.53033008588991071; + $800 = ((($hp1_a90)) + 40|0); + HEAPF64[$800>>3] = 0.17677669529663689; + dest=$lp2_a91; stop=dest+64|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $801 = ((($lp2_a91)) + 16|0); + HEAPF64[$801>>3] = 0.17677669529663689; + $802 = ((($lp2_a91)) + 24|0); + HEAPF64[$802>>3] = 0.53033008588991071; + $803 = ((($lp2_a91)) + 32|0); + HEAPF64[$803>>3] = 0.53033008588991071; + $804 = ((($lp2_a91)) + 40|0); + HEAPF64[$804>>3] = 0.17677669529663689; + dest=$hp2_a92; src=8816; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $805 = $i; + $806 = ($805|0)<(8); + if (!($806)) { + break; + } + $807 = $i; + $808 = (($lp1_a89) + ($807<<3)|0); + $809 = +HEAPF64[$808>>3]; + $810 = $i; + $811 = $2; + $812 = (($811) + ($810<<3)|0); + HEAPF64[$812>>3] = $809; + $813 = $i; + $814 = (($hp1_a90) + ($813<<3)|0); + $815 = +HEAPF64[$814>>3]; + $816 = $i; + $817 = $3; + $818 = (($817) + ($816<<3)|0); + HEAPF64[$818>>3] = $815; + $819 = $i; + $820 = (($lp2_a91) + ($819<<3)|0); + $821 = +HEAPF64[$820>>3]; + $822 = $i; + $823 = $4; + $824 = (($823) + ($822<<3)|0); + HEAPF64[$824>>3] = $821; + $825 = $i; + $826 = (($hp2_a92) + ($825<<3)|0); + $827 = +HEAPF64[$826>>3]; + $828 = $i; + $829 = $5; + $830 = (($829) + ($828<<3)|0); + HEAPF64[$830>>3] = $827; + $831 = $i; + $832 = (($831) + 1)|0; + $i = $832; + } + $0 = 8; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $833 = $1; + $834 = (_strcmp($833,208)|0); + $835 = ($834|0)!=(0); + if (!($835)) { + dest=$lp1_a93; src=8880; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a94; stop=dest+96|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $836 = ((($hp1_a94)) + 32|0); + HEAPF64[$836>>3] = -0.17677669529663689; + $837 = ((($hp1_a94)) + 40|0); + HEAPF64[$837>>3] = 0.53033008588991071; + $838 = ((($hp1_a94)) + 48|0); + HEAPF64[$838>>3] = -0.53033008588991071; + $839 = ((($hp1_a94)) + 56|0); + HEAPF64[$839>>3] = 0.17677669529663689; + dest=$lp2_a95; stop=dest+96|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $840 = ((($lp2_a95)) + 32|0); + HEAPF64[$840>>3] = 0.17677669529663689; + $841 = ((($lp2_a95)) + 40|0); + HEAPF64[$841>>3] = 0.53033008588991071; + $842 = ((($lp2_a95)) + 48|0); + HEAPF64[$842>>3] = 0.53033008588991071; + $843 = ((($lp2_a95)) + 56|0); + HEAPF64[$843>>3] = 0.17677669529663689; + dest=$hp2_a96; src=8976; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $844 = $i; + $845 = ($844|0)<(12); + if (!($845)) { + break; + } + $846 = $i; + $847 = (($lp1_a93) + ($846<<3)|0); + $848 = +HEAPF64[$847>>3]; + $849 = $i; + $850 = $2; + $851 = (($850) + ($849<<3)|0); + HEAPF64[$851>>3] = $848; + $852 = $i; + $853 = (($hp1_a94) + ($852<<3)|0); + $854 = +HEAPF64[$853>>3]; + $855 = $i; + $856 = $3; + $857 = (($856) + ($855<<3)|0); + HEAPF64[$857>>3] = $854; + $858 = $i; + $859 = (($lp2_a95) + ($858<<3)|0); + $860 = +HEAPF64[$859>>3]; + $861 = $i; + $862 = $4; + $863 = (($862) + ($861<<3)|0); + HEAPF64[$863>>3] = $860; + $864 = $i; + $865 = (($hp2_a96) + ($864<<3)|0); + $866 = +HEAPF64[$865>>3]; + $867 = $i; + $868 = $5; + $869 = (($868) + ($867<<3)|0); + HEAPF64[$869>>3] = $866; + $870 = $i; + $871 = (($870) + 1)|0; + $i = $871; + } + $0 = 12; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $872 = $1; + $873 = (_strcmp($872,216)|0); + $874 = ($873|0)!=(0); + if (!($874)) { + dest=$lp1_a97; src=9072; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a98; stop=dest+128|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $875 = ((($hp1_a98)) + 48|0); + HEAPF64[$875>>3] = -0.17677669529663689; + $876 = ((($hp1_a98)) + 56|0); + HEAPF64[$876>>3] = 0.53033008588991071; + $877 = ((($hp1_a98)) + 64|0); + HEAPF64[$877>>3] = -0.53033008588991071; + $878 = ((($hp1_a98)) + 72|0); + HEAPF64[$878>>3] = 0.17677669529663689; + dest=$lp2_a99; stop=dest+128|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $879 = ((($lp2_a99)) + 48|0); + HEAPF64[$879>>3] = 0.17677669529663689; + $880 = ((($lp2_a99)) + 56|0); + HEAPF64[$880>>3] = 0.53033008588991071; + $881 = ((($lp2_a99)) + 64|0); + HEAPF64[$881>>3] = 0.53033008588991071; + $882 = ((($lp2_a99)) + 72|0); + HEAPF64[$882>>3] = 0.17677669529663689; + dest=$hp2_a100; src=9200; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $883 = $i; + $884 = ($883|0)<(16); + if (!($884)) { + break; + } + $885 = $i; + $886 = (($lp1_a97) + ($885<<3)|0); + $887 = +HEAPF64[$886>>3]; + $888 = $i; + $889 = $2; + $890 = (($889) + ($888<<3)|0); + HEAPF64[$890>>3] = $887; + $891 = $i; + $892 = (($hp1_a98) + ($891<<3)|0); + $893 = +HEAPF64[$892>>3]; + $894 = $i; + $895 = $3; + $896 = (($895) + ($894<<3)|0); + HEAPF64[$896>>3] = $893; + $897 = $i; + $898 = (($lp2_a99) + ($897<<3)|0); + $899 = +HEAPF64[$898>>3]; + $900 = $i; + $901 = $4; + $902 = (($901) + ($900<<3)|0); + HEAPF64[$902>>3] = $899; + $903 = $i; + $904 = (($hp2_a100) + ($903<<3)|0); + $905 = +HEAPF64[$904>>3]; + $906 = $i; + $907 = $5; + $908 = (($907) + ($906<<3)|0); + HEAPF64[$908>>3] = $905; + $909 = $i; + $910 = (($909) + 1)|0; + $i = $910; + } + $0 = 16; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $911 = $1; + $912 = (_strcmp($911,224)|0); + $913 = ($912|0)!=(0); + if (!($913)) { + _memcpy(($lp1_a101|0),(9328|0),160)|0; + _memset(($hp1_a102|0),0,160)|0; + $914 = ((($hp1_a102)) + 64|0); + HEAPF64[$914>>3] = -0.17677669529663689; + $915 = ((($hp1_a102)) + 72|0); + HEAPF64[$915>>3] = 0.53033008588991071; + $916 = ((($hp1_a102)) + 80|0); + HEAPF64[$916>>3] = -0.53033008588991071; + $917 = ((($hp1_a102)) + 88|0); + HEAPF64[$917>>3] = 0.17677669529663689; + _memset(($lp2_a103|0),0,160)|0; + $918 = ((($lp2_a103)) + 64|0); + HEAPF64[$918>>3] = 0.17677669529663689; + $919 = ((($lp2_a103)) + 72|0); + HEAPF64[$919>>3] = 0.53033008588991071; + $920 = ((($lp2_a103)) + 80|0); + HEAPF64[$920>>3] = 0.53033008588991071; + $921 = ((($lp2_a103)) + 88|0); + HEAPF64[$921>>3] = 0.17677669529663689; + _memcpy(($hp2_a104|0),(9488|0),160)|0; + $i = 0; + while(1) { + $922 = $i; + $923 = ($922|0)<(20); + if (!($923)) { + break; + } + $924 = $i; + $925 = (($lp1_a101) + ($924<<3)|0); + $926 = +HEAPF64[$925>>3]; + $927 = $i; + $928 = $2; + $929 = (($928) + ($927<<3)|0); + HEAPF64[$929>>3] = $926; + $930 = $i; + $931 = (($hp1_a102) + ($930<<3)|0); + $932 = +HEAPF64[$931>>3]; + $933 = $i; + $934 = $3; + $935 = (($934) + ($933<<3)|0); + HEAPF64[$935>>3] = $932; + $936 = $i; + $937 = (($lp2_a103) + ($936<<3)|0); + $938 = +HEAPF64[$937>>3]; + $939 = $i; + $940 = $4; + $941 = (($940) + ($939<<3)|0); + HEAPF64[$941>>3] = $938; + $942 = $i; + $943 = (($hp2_a104) + ($942<<3)|0); + $944 = +HEAPF64[$943>>3]; + $945 = $i; + $946 = $5; + $947 = (($946) + ($945<<3)|0); + HEAPF64[$947>>3] = $944; + $948 = $i; + $949 = (($948) + 1)|0; + $i = $949; + } + $0 = 20; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $950 = $1; + $951 = (_strcmp($950,232)|0); + $952 = ($951|0)!=(0); + if (!($952)) { + dest=$lp1_a105; src=9648; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a106; src=9728; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a107; src=9808; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a108; src=9888; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $953 = $i; + $954 = ($953|0)<(10); + if (!($954)) { + break; + } + $955 = $i; + $956 = (($lp1_a105) + ($955<<3)|0); + $957 = +HEAPF64[$956>>3]; + $958 = $i; + $959 = $2; + $960 = (($959) + ($958<<3)|0); + HEAPF64[$960>>3] = $957; + $961 = $i; + $962 = (($hp1_a106) + ($961<<3)|0); + $963 = +HEAPF64[$962>>3]; + $964 = $i; + $965 = $3; + $966 = (($965) + ($964<<3)|0); + HEAPF64[$966>>3] = $963; + $967 = $i; + $968 = (($lp2_a107) + ($967<<3)|0); + $969 = +HEAPF64[$968>>3]; + $970 = $i; + $971 = $4; + $972 = (($971) + ($970<<3)|0); + HEAPF64[$972>>3] = $969; + $973 = $i; + $974 = (($hp2_a108) + ($973<<3)|0); + $975 = +HEAPF64[$974>>3]; + $976 = $i; + $977 = $5; + $978 = (($977) + ($976<<3)|0); + HEAPF64[$978>>3] = $975; + $979 = $i; + $980 = (($979) + 1)|0; + $i = $980; + } + $0 = 10; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $981 = $1; + $982 = (_strcmp($981,240)|0); + $983 = ($982|0)!=(0); + if (!($983)) { + dest=$lp1_a109; src=9968; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a110; src=10064; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a111; src=10160; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a112; src=10256; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $984 = $i; + $985 = ($984|0)<(12); + if (!($985)) { + break; + } + $986 = $i; + $987 = (($lp1_a109) + ($986<<3)|0); + $988 = +HEAPF64[$987>>3]; + $989 = $i; + $990 = $2; + $991 = (($990) + ($989<<3)|0); + HEAPF64[$991>>3] = $988; + $992 = $i; + $993 = (($hp1_a110) + ($992<<3)|0); + $994 = +HEAPF64[$993>>3]; + $995 = $i; + $996 = $3; + $997 = (($996) + ($995<<3)|0); + HEAPF64[$997>>3] = $994; + $998 = $i; + $999 = (($lp2_a111) + ($998<<3)|0); + $1000 = +HEAPF64[$999>>3]; + $1001 = $i; + $1002 = $4; + $1003 = (($1002) + ($1001<<3)|0); + HEAPF64[$1003>>3] = $1000; + $1004 = $i; + $1005 = (($hp2_a112) + ($1004<<3)|0); + $1006 = +HEAPF64[$1005>>3]; + $1007 = $i; + $1008 = $5; + $1009 = (($1008) + ($1007<<3)|0); + HEAPF64[$1009>>3] = $1006; + $1010 = $i; + $1011 = (($1010) + 1)|0; + $i = $1011; + } + $0 = 12; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1012 = $1; + $1013 = (_strcmp($1012,248)|0); + $1014 = ($1013|0)!=(0); + if (!($1014)) { + _memcpy(($lp1_a113|0),(10352|0),144)|0; + _memcpy(($hp1_a114|0),(10496|0),144)|0; + _memcpy(($lp2_a115|0),(10640|0),144)|0; + _memcpy(($hp2_a116|0),(10784|0),144)|0; + $i = 0; + while(1) { + $1015 = $i; + $1016 = ($1015|0)<(18); + if (!($1016)) { + break; + } + $1017 = $i; + $1018 = (($lp1_a113) + ($1017<<3)|0); + $1019 = +HEAPF64[$1018>>3]; + $1020 = $i; + $1021 = $2; + $1022 = (($1021) + ($1020<<3)|0); + HEAPF64[$1022>>3] = $1019; + $1023 = $i; + $1024 = (($hp1_a114) + ($1023<<3)|0); + $1025 = +HEAPF64[$1024>>3]; + $1026 = $i; + $1027 = $3; + $1028 = (($1027) + ($1026<<3)|0); + HEAPF64[$1028>>3] = $1025; + $1029 = $i; + $1030 = (($lp2_a115) + ($1029<<3)|0); + $1031 = +HEAPF64[$1030>>3]; + $1032 = $i; + $1033 = $4; + $1034 = (($1033) + ($1032<<3)|0); + HEAPF64[$1034>>3] = $1031; + $1035 = $i; + $1036 = (($hp2_a116) + ($1035<<3)|0); + $1037 = +HEAPF64[$1036>>3]; + $1038 = $i; + $1039 = $5; + $1040 = (($1039) + ($1038<<3)|0); + HEAPF64[$1040>>3] = $1037; + $1041 = $i; + $1042 = (($1041) + 1)|0; + $i = $1042; + } + $0 = 18; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1043 = $1; + $1044 = (_strcmp($1043,256)|0); + $1045 = ($1044|0)!=(0); + if (!($1045)) { + dest=$lp1_a117; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$lp1_a117>>3] = -0.01565572813546454; + $1046 = ((($lp1_a117)) + 8|0); + HEAPF64[$1046>>3] = -0.072732619512853897; + $1047 = ((($lp1_a117)) + 16|0); + HEAPF64[$1047>>3] = 0.38486484686420286; + $1048 = ((($lp1_a117)) + 24|0); + HEAPF64[$1048>>3] = 0.85257202021225542; + $1049 = ((($lp1_a117)) + 32|0); + HEAPF64[$1049>>3] = 0.33789766245780922; + $1050 = ((($lp1_a117)) + 40|0); + HEAPF64[$1050>>3] = -0.072732619512853897; + dest=$hp1_a118; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$hp1_a118>>3] = 0.072732619512853897; + $1051 = ((($hp1_a118)) + 8|0); + HEAPF64[$1051>>3] = 0.33789766245780922; + $1052 = ((($hp1_a118)) + 16|0); + HEAPF64[$1052>>3] = -0.85257202021225542; + $1053 = ((($hp1_a118)) + 24|0); + HEAPF64[$1053>>3] = 0.38486484686420286; + $1054 = ((($hp1_a118)) + 32|0); + HEAPF64[$1054>>3] = 0.072732619512853897; + $1055 = ((($hp1_a118)) + 40|0); + HEAPF64[$1055>>3] = -0.01565572813546454; + dest=$lp2_a119; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$lp2_a119>>3] = -0.072732619512853897; + $1056 = ((($lp2_a119)) + 8|0); + HEAPF64[$1056>>3] = 0.33789766245780922; + $1057 = ((($lp2_a119)) + 16|0); + HEAPF64[$1057>>3] = 0.85257202021225542; + $1058 = ((($lp2_a119)) + 24|0); + HEAPF64[$1058>>3] = 0.38486484686420286; + $1059 = ((($lp2_a119)) + 32|0); + HEAPF64[$1059>>3] = -0.072732619512853897; + $1060 = ((($lp2_a119)) + 40|0); + HEAPF64[$1060>>3] = -0.01565572813546454; + dest=$hp2_a120; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$hp2_a120>>3] = -0.01565572813546454; + $1061 = ((($hp2_a120)) + 8|0); + HEAPF64[$1061>>3] = 0.072732619512853897; + $1062 = ((($hp2_a120)) + 16|0); + HEAPF64[$1062>>3] = 0.38486484686420286; + $1063 = ((($hp2_a120)) + 24|0); + HEAPF64[$1063>>3] = -0.85257202021225542; + $1064 = ((($hp2_a120)) + 32|0); + HEAPF64[$1064>>3] = 0.33789766245780922; + $1065 = ((($hp2_a120)) + 40|0); + HEAPF64[$1065>>3] = 0.072732619512853897; + $i = 0; + while(1) { + $1066 = $i; + $1067 = ($1066|0)<(6); + if (!($1067)) { + break; + } + $1068 = $i; + $1069 = (($lp1_a117) + ($1068<<3)|0); + $1070 = +HEAPF64[$1069>>3]; + $1071 = $i; + $1072 = $2; + $1073 = (($1072) + ($1071<<3)|0); + HEAPF64[$1073>>3] = $1070; + $1074 = $i; + $1075 = (($hp1_a118) + ($1074<<3)|0); + $1076 = +HEAPF64[$1075>>3]; + $1077 = $i; + $1078 = $3; + $1079 = (($1078) + ($1077<<3)|0); + HEAPF64[$1079>>3] = $1076; + $1080 = $i; + $1081 = (($lp2_a119) + ($1080<<3)|0); + $1082 = +HEAPF64[$1081>>3]; + $1083 = $i; + $1084 = $4; + $1085 = (($1084) + ($1083<<3)|0); + HEAPF64[$1085>>3] = $1082; + $1086 = $i; + $1087 = (($hp2_a120) + ($1086<<3)|0); + $1088 = +HEAPF64[$1087>>3]; + $1089 = $i; + $1090 = $5; + $1091 = (($1090) + ($1089<<3)|0); + HEAPF64[$1091>>3] = $1088; + $1092 = $i; + $1093 = (($1092) + 1)|0; + $i = $1093; + } + $0 = 6; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1094 = $1; + $1095 = (_strcmp($1094,264)|0); + $1096 = ($1095|0)!=(0); + if (!($1096)) { + dest=$lp1_a121; src=10928; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a122; src=11024; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a123; src=11120; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a124; src=11216; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $1097 = $i; + $1098 = ($1097|0)<(12); + if (!($1098)) { + break; + } + $1099 = $i; + $1100 = (($lp1_a121) + ($1099<<3)|0); + $1101 = +HEAPF64[$1100>>3]; + $1102 = $i; + $1103 = $2; + $1104 = (($1103) + ($1102<<3)|0); + HEAPF64[$1104>>3] = $1101; + $1105 = $i; + $1106 = (($hp1_a122) + ($1105<<3)|0); + $1107 = +HEAPF64[$1106>>3]; + $1108 = $i; + $1109 = $3; + $1110 = (($1109) + ($1108<<3)|0); + HEAPF64[$1110>>3] = $1107; + $1111 = $i; + $1112 = (($lp2_a123) + ($1111<<3)|0); + $1113 = +HEAPF64[$1112>>3]; + $1114 = $i; + $1115 = $4; + $1116 = (($1115) + ($1114<<3)|0); + HEAPF64[$1116>>3] = $1113; + $1117 = $i; + $1118 = (($hp2_a124) + ($1117<<3)|0); + $1119 = +HEAPF64[$1118>>3]; + $1120 = $i; + $1121 = $5; + $1122 = (($1121) + ($1120<<3)|0); + HEAPF64[$1122>>3] = $1119; + $1123 = $i; + $1124 = (($1123) + 1)|0; + $i = $1124; + } + $0 = 12; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1125 = $1; + $1126 = (_strcmp($1125,272)|0); + $1127 = ($1126|0)!=(0); + if (!($1127)) { + _memcpy(($lp1_a125|0),(11312|0),144)|0; + _memcpy(($hp1_a126|0),(11456|0),144)|0; + _memcpy(($lp2_a127|0),(11600|0),144)|0; + _memcpy(($hp2_a128|0),(11744|0),144)|0; + $i = 0; + while(1) { + $1128 = $i; + $1129 = ($1128|0)<(18); + if (!($1129)) { + break; + } + $1130 = $i; + $1131 = (($lp1_a125) + ($1130<<3)|0); + $1132 = +HEAPF64[$1131>>3]; + $1133 = $i; + $1134 = $2; + $1135 = (($1134) + ($1133<<3)|0); + HEAPF64[$1135>>3] = $1132; + $1136 = $i; + $1137 = (($hp1_a126) + ($1136<<3)|0); + $1138 = +HEAPF64[$1137>>3]; + $1139 = $i; + $1140 = $3; + $1141 = (($1140) + ($1139<<3)|0); + HEAPF64[$1141>>3] = $1138; + $1142 = $i; + $1143 = (($lp2_a127) + ($1142<<3)|0); + $1144 = +HEAPF64[$1143>>3]; + $1145 = $i; + $1146 = $4; + $1147 = (($1146) + ($1145<<3)|0); + HEAPF64[$1147>>3] = $1144; + $1148 = $i; + $1149 = (($hp2_a128) + ($1148<<3)|0); + $1150 = +HEAPF64[$1149>>3]; + $1151 = $i; + $1152 = $5; + $1153 = (($1152) + ($1151<<3)|0); + HEAPF64[$1153>>3] = $1150; + $1154 = $i; + $1155 = (($1154) + 1)|0; + $i = $1155; + } + $0 = 18; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1156 = $1; + $1157 = (_strcmp($1156,280)|0); + $1158 = ($1157|0)!=(0); + if (!($1158)) { + _memcpy(($lp1_a129|0),(11888|0),192)|0; + _memcpy(($hp1_a130|0),(12080|0),192)|0; + _memcpy(($lp2_a131|0),(12272|0),192)|0; + _memcpy(($hp2_a132|0),(12464|0),192)|0; + $i = 0; + while(1) { + $1159 = $i; + $1160 = ($1159|0)<(24); + if (!($1160)) { + break; + } + $1161 = $i; + $1162 = (($lp1_a129) + ($1161<<3)|0); + $1163 = +HEAPF64[$1162>>3]; + $1164 = $i; + $1165 = $2; + $1166 = (($1165) + ($1164<<3)|0); + HEAPF64[$1166>>3] = $1163; + $1167 = $i; + $1168 = (($hp1_a130) + ($1167<<3)|0); + $1169 = +HEAPF64[$1168>>3]; + $1170 = $i; + $1171 = $3; + $1172 = (($1171) + ($1170<<3)|0); + HEAPF64[$1172>>3] = $1169; + $1173 = $i; + $1174 = (($lp2_a131) + ($1173<<3)|0); + $1175 = +HEAPF64[$1174>>3]; + $1176 = $i; + $1177 = $4; + $1178 = (($1177) + ($1176<<3)|0); + HEAPF64[$1178>>3] = $1175; + $1179 = $i; + $1180 = (($hp2_a132) + ($1179<<3)|0); + $1181 = +HEAPF64[$1180>>3]; + $1182 = $i; + $1183 = $5; + $1184 = (($1183) + ($1182<<3)|0); + HEAPF64[$1184>>3] = $1181; + $1185 = $i; + $1186 = (($1185) + 1)|0; + $i = $1186; + } + $0 = 24; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1187 = $1; + $1188 = (_strcmp($1187,288)|0); + $1189 = ($1188|0)!=(0); + if (!($1189)) { + _memcpy(($lp1_a133|0),(12656|0),240)|0; + _memcpy(($hp1_a134|0),(12896|0),240)|0; + _memcpy(($lp2_a135|0),(13136|0),240)|0; + _memcpy(($hp2_a136|0),(13376|0),240)|0; + $i = 0; + while(1) { + $1190 = $i; + $1191 = ($1190|0)<(30); + if (!($1191)) { + break; + } + $1192 = $i; + $1193 = (($lp1_a133) + ($1192<<3)|0); + $1194 = +HEAPF64[$1193>>3]; + $1195 = $i; + $1196 = $2; + $1197 = (($1196) + ($1195<<3)|0); + HEAPF64[$1197>>3] = $1194; + $1198 = $i; + $1199 = (($hp1_a134) + ($1198<<3)|0); + $1200 = +HEAPF64[$1199>>3]; + $1201 = $i; + $1202 = $3; + $1203 = (($1202) + ($1201<<3)|0); + HEAPF64[$1203>>3] = $1200; + $1204 = $i; + $1205 = (($lp2_a135) + ($1204<<3)|0); + $1206 = +HEAPF64[$1205>>3]; + $1207 = $i; + $1208 = $4; + $1209 = (($1208) + ($1207<<3)|0); + HEAPF64[$1209>>3] = $1206; + $1210 = $i; + $1211 = (($hp2_a136) + ($1210<<3)|0); + $1212 = +HEAPF64[$1211>>3]; + $1213 = $i; + $1214 = $5; + $1215 = (($1214) + ($1213<<3)|0); + HEAPF64[$1215>>3] = $1212; + $1216 = $i; + $1217 = (($1216) + 1)|0; + $i = $1217; + } + $0 = 30; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1218 = $1; + $1219 = (_strcmp($1218,296)|0); + $1220 = ($1219|0)!=(0); + if (!($1220)) { + ;HEAP32[$lp1_a137>>2]=HEAP32[13616>>2]|0;HEAP32[$lp1_a137+4>>2]=HEAP32[13616+4>>2]|0;HEAP32[$lp1_a137+8>>2]=HEAP32[13616+8>>2]|0;HEAP32[$lp1_a137+12>>2]=HEAP32[13616+12>>2]|0;HEAP32[$lp1_a137+16>>2]=HEAP32[13616+16>>2]|0;HEAP32[$lp1_a137+20>>2]=HEAP32[13616+20>>2]|0;HEAP32[$lp1_a137+24>>2]=HEAP32[13616+24>>2]|0;HEAP32[$lp1_a137+28>>2]=HEAP32[13616+28>>2]|0; + ;HEAP32[$hp1_a138>>2]=HEAP32[13648>>2]|0;HEAP32[$hp1_a138+4>>2]=HEAP32[13648+4>>2]|0;HEAP32[$hp1_a138+8>>2]=HEAP32[13648+8>>2]|0;HEAP32[$hp1_a138+12>>2]=HEAP32[13648+12>>2]|0;HEAP32[$hp1_a138+16>>2]=HEAP32[13648+16>>2]|0;HEAP32[$hp1_a138+20>>2]=HEAP32[13648+20>>2]|0;HEAP32[$hp1_a138+24>>2]=HEAP32[13648+24>>2]|0;HEAP32[$hp1_a138+28>>2]=HEAP32[13648+28>>2]|0; + ;HEAP32[$lp2_a139>>2]=HEAP32[13680>>2]|0;HEAP32[$lp2_a139+4>>2]=HEAP32[13680+4>>2]|0;HEAP32[$lp2_a139+8>>2]=HEAP32[13680+8>>2]|0;HEAP32[$lp2_a139+12>>2]=HEAP32[13680+12>>2]|0;HEAP32[$lp2_a139+16>>2]=HEAP32[13680+16>>2]|0;HEAP32[$lp2_a139+20>>2]=HEAP32[13680+20>>2]|0;HEAP32[$lp2_a139+24>>2]=HEAP32[13680+24>>2]|0;HEAP32[$lp2_a139+28>>2]=HEAP32[13680+28>>2]|0; + ;HEAP32[$hp2_a140>>2]=HEAP32[13712>>2]|0;HEAP32[$hp2_a140+4>>2]=HEAP32[13712+4>>2]|0;HEAP32[$hp2_a140+8>>2]=HEAP32[13712+8>>2]|0;HEAP32[$hp2_a140+12>>2]=HEAP32[13712+12>>2]|0;HEAP32[$hp2_a140+16>>2]=HEAP32[13712+16>>2]|0;HEAP32[$hp2_a140+20>>2]=HEAP32[13712+20>>2]|0;HEAP32[$hp2_a140+24>>2]=HEAP32[13712+24>>2]|0;HEAP32[$hp2_a140+28>>2]=HEAP32[13712+28>>2]|0; + $i = 0; + while(1) { + $1221 = $i; + $1222 = ($1221|0)<(4); + if (!($1222)) { + break; + } + $1223 = $i; + $1224 = (($lp1_a137) + ($1223<<3)|0); + $1225 = +HEAPF64[$1224>>3]; + $1226 = $i; + $1227 = $2; + $1228 = (($1227) + ($1226<<3)|0); + HEAPF64[$1228>>3] = $1225; + $1229 = $i; + $1230 = (($hp1_a138) + ($1229<<3)|0); + $1231 = +HEAPF64[$1230>>3]; + $1232 = $i; + $1233 = $3; + $1234 = (($1233) + ($1232<<3)|0); + HEAPF64[$1234>>3] = $1231; + $1235 = $i; + $1236 = (($lp2_a139) + ($1235<<3)|0); + $1237 = +HEAPF64[$1236>>3]; + $1238 = $i; + $1239 = $4; + $1240 = (($1239) + ($1238<<3)|0); + HEAPF64[$1240>>3] = $1237; + $1241 = $i; + $1242 = (($hp2_a140) + ($1241<<3)|0); + $1243 = +HEAPF64[$1242>>3]; + $1244 = $i; + $1245 = $5; + $1246 = (($1245) + ($1244<<3)|0); + HEAPF64[$1246>>3] = $1243; + $1247 = $i; + $1248 = (($1247) + 1)|0; + $i = $1248; + } + $0 = 4; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1249 = $1; + $1250 = (_strcmp($1249,304)|0); + $1251 = ($1250|0)!=(0); + if (!($1251)) { + dest=$lp1_a141; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$lp1_a141>>3] = 0.035226291882100656; + $1252 = ((($lp1_a141)) + 8|0); + HEAPF64[$1252>>3] = -0.085441273882241486; + $1253 = ((($lp1_a141)) + 16|0); + HEAPF64[$1253>>3] = -0.13501102001039084; + $1254 = ((($lp1_a141)) + 24|0); + HEAPF64[$1254>>3] = 0.45987750211933132; + $1255 = ((($lp1_a141)) + 32|0); + HEAPF64[$1255>>3] = 0.80689150931333875; + $1256 = ((($lp1_a141)) + 40|0); + HEAPF64[$1256>>3] = 0.33267055295095688; + dest=$hp1_a142; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$hp1_a142>>3] = -0.33267055295095688; + $1257 = ((($hp1_a142)) + 8|0); + HEAPF64[$1257>>3] = 0.80689150931333875; + $1258 = ((($hp1_a142)) + 16|0); + HEAPF64[$1258>>3] = -0.45987750211933132; + $1259 = ((($hp1_a142)) + 24|0); + HEAPF64[$1259>>3] = -0.13501102001039084; + $1260 = ((($hp1_a142)) + 32|0); + HEAPF64[$1260>>3] = 0.085441273882241486; + $1261 = ((($hp1_a142)) + 40|0); + HEAPF64[$1261>>3] = 0.035226291882100656; + dest=$lp2_a143; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$lp2_a143>>3] = 0.33267055295095688; + $1262 = ((($lp2_a143)) + 8|0); + HEAPF64[$1262>>3] = 0.80689150931333875; + $1263 = ((($lp2_a143)) + 16|0); + HEAPF64[$1263>>3] = 0.45987750211933132; + $1264 = ((($lp2_a143)) + 24|0); + HEAPF64[$1264>>3] = -0.13501102001039084; + $1265 = ((($lp2_a143)) + 32|0); + HEAPF64[$1265>>3] = -0.085441273882241486; + $1266 = ((($lp2_a143)) + 40|0); + HEAPF64[$1266>>3] = 0.035226291882100656; + dest=$hp2_a144; stop=dest+48|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAPF64[$hp2_a144>>3] = 0.035226291882100656; + $1267 = ((($hp2_a144)) + 8|0); + HEAPF64[$1267>>3] = 0.085441273882241486; + $1268 = ((($hp2_a144)) + 16|0); + HEAPF64[$1268>>3] = -0.13501102001039084; + $1269 = ((($hp2_a144)) + 24|0); + HEAPF64[$1269>>3] = -0.45987750211933132; + $1270 = ((($hp2_a144)) + 32|0); + HEAPF64[$1270>>3] = 0.80689150931333875; + $1271 = ((($hp2_a144)) + 40|0); + HEAPF64[$1271>>3] = -0.33267055295095688; + $i = 0; + while(1) { + $1272 = $i; + $1273 = ($1272|0)<(6); + if (!($1273)) { + break; + } + $1274 = $i; + $1275 = (($lp1_a141) + ($1274<<3)|0); + $1276 = +HEAPF64[$1275>>3]; + $1277 = $i; + $1278 = $2; + $1279 = (($1278) + ($1277<<3)|0); + HEAPF64[$1279>>3] = $1276; + $1280 = $i; + $1281 = (($hp1_a142) + ($1280<<3)|0); + $1282 = +HEAPF64[$1281>>3]; + $1283 = $i; + $1284 = $3; + $1285 = (($1284) + ($1283<<3)|0); + HEAPF64[$1285>>3] = $1282; + $1286 = $i; + $1287 = (($lp2_a143) + ($1286<<3)|0); + $1288 = +HEAPF64[$1287>>3]; + $1289 = $i; + $1290 = $4; + $1291 = (($1290) + ($1289<<3)|0); + HEAPF64[$1291>>3] = $1288; + $1292 = $i; + $1293 = (($hp2_a144) + ($1292<<3)|0); + $1294 = +HEAPF64[$1293>>3]; + $1295 = $i; + $1296 = $5; + $1297 = (($1296) + ($1295<<3)|0); + HEAPF64[$1297>>3] = $1294; + $1298 = $i; + $1299 = (($1298) + 1)|0; + $i = $1299; + } + $0 = 6; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1300 = $1; + $1301 = (_strcmp($1300,312)|0); + $1302 = ($1301|0)!=(0); + if (!($1302)) { + dest=$lp1_a145; src=13744; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a146; src=13808; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a147; src=13872; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a148; src=13936; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $1303 = $i; + $1304 = ($1303|0)<(8); + if (!($1304)) { + break; + } + $1305 = $i; + $1306 = (($lp1_a145) + ($1305<<3)|0); + $1307 = +HEAPF64[$1306>>3]; + $1308 = $i; + $1309 = $2; + $1310 = (($1309) + ($1308<<3)|0); + HEAPF64[$1310>>3] = $1307; + $1311 = $i; + $1312 = (($hp1_a146) + ($1311<<3)|0); + $1313 = +HEAPF64[$1312>>3]; + $1314 = $i; + $1315 = $3; + $1316 = (($1315) + ($1314<<3)|0); + HEAPF64[$1316>>3] = $1313; + $1317 = $i; + $1318 = (($lp2_a147) + ($1317<<3)|0); + $1319 = +HEAPF64[$1318>>3]; + $1320 = $i; + $1321 = $4; + $1322 = (($1321) + ($1320<<3)|0); + HEAPF64[$1322>>3] = $1319; + $1323 = $i; + $1324 = (($hp2_a148) + ($1323<<3)|0); + $1325 = +HEAPF64[$1324>>3]; + $1326 = $i; + $1327 = $5; + $1328 = (($1327) + ($1326<<3)|0); + HEAPF64[$1328>>3] = $1325; + $1329 = $i; + $1330 = (($1329) + 1)|0; + $i = $1330; + } + $0 = 8; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1331 = $1; + $1332 = (_strcmp($1331,320)|0); + $1333 = ($1332|0)!=(0); + if (!($1333)) { + dest=$lp1_a149; src=14000; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a150; src=14080; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a151; src=14160; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a152; src=14240; stop=dest+80|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $1334 = $i; + $1335 = ($1334|0)<(10); + if (!($1335)) { + break; + } + $1336 = $i; + $1337 = (($lp1_a149) + ($1336<<3)|0); + $1338 = +HEAPF64[$1337>>3]; + $1339 = $i; + $1340 = $2; + $1341 = (($1340) + ($1339<<3)|0); + HEAPF64[$1341>>3] = $1338; + $1342 = $i; + $1343 = (($hp1_a150) + ($1342<<3)|0); + $1344 = +HEAPF64[$1343>>3]; + $1345 = $i; + $1346 = $3; + $1347 = (($1346) + ($1345<<3)|0); + HEAPF64[$1347>>3] = $1344; + $1348 = $i; + $1349 = (($lp2_a151) + ($1348<<3)|0); + $1350 = +HEAPF64[$1349>>3]; + $1351 = $i; + $1352 = $4; + $1353 = (($1352) + ($1351<<3)|0); + HEAPF64[$1353>>3] = $1350; + $1354 = $i; + $1355 = (($hp2_a152) + ($1354<<3)|0); + $1356 = +HEAPF64[$1355>>3]; + $1357 = $i; + $1358 = $5; + $1359 = (($1358) + ($1357<<3)|0); + HEAPF64[$1359>>3] = $1356; + $1360 = $i; + $1361 = (($1360) + 1)|0; + $i = $1361; + } + $0 = 10; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1362 = $1; + $1363 = (_strcmp($1362,328)|0); + $1364 = ($1363|0)!=(0); + if (!($1364)) { + dest=$lp1_a153; src=14320; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a154; src=14416; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a155; src=14512; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a156; src=14608; stop=dest+96|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $1365 = $i; + $1366 = ($1365|0)<(12); + if (!($1366)) { + break; + } + $1367 = $i; + $1368 = (($lp1_a153) + ($1367<<3)|0); + $1369 = +HEAPF64[$1368>>3]; + $1370 = $i; + $1371 = $2; + $1372 = (($1371) + ($1370<<3)|0); + HEAPF64[$1372>>3] = $1369; + $1373 = $i; + $1374 = (($hp1_a154) + ($1373<<3)|0); + $1375 = +HEAPF64[$1374>>3]; + $1376 = $i; + $1377 = $3; + $1378 = (($1377) + ($1376<<3)|0); + HEAPF64[$1378>>3] = $1375; + $1379 = $i; + $1380 = (($lp2_a155) + ($1379<<3)|0); + $1381 = +HEAPF64[$1380>>3]; + $1382 = $i; + $1383 = $4; + $1384 = (($1383) + ($1382<<3)|0); + HEAPF64[$1384>>3] = $1381; + $1385 = $i; + $1386 = (($hp2_a156) + ($1385<<3)|0); + $1387 = +HEAPF64[$1386>>3]; + $1388 = $i; + $1389 = $5; + $1390 = (($1389) + ($1388<<3)|0); + HEAPF64[$1390>>3] = $1387; + $1391 = $i; + $1392 = (($1391) + 1)|0; + $i = $1392; + } + $0 = 12; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1393 = $1; + $1394 = (_strcmp($1393,336)|0); + $1395 = ($1394|0)!=(0); + if (!($1395)) { + dest=$lp1_a157; src=14704; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a158; src=14816; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a159; src=14928; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a160; src=15040; stop=dest+112|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $1396 = $i; + $1397 = ($1396|0)<(14); + if (!($1397)) { + break; + } + $1398 = $i; + $1399 = (($lp1_a157) + ($1398<<3)|0); + $1400 = +HEAPF64[$1399>>3]; + $1401 = $i; + $1402 = $2; + $1403 = (($1402) + ($1401<<3)|0); + HEAPF64[$1403>>3] = $1400; + $1404 = $i; + $1405 = (($hp1_a158) + ($1404<<3)|0); + $1406 = +HEAPF64[$1405>>3]; + $1407 = $i; + $1408 = $3; + $1409 = (($1408) + ($1407<<3)|0); + HEAPF64[$1409>>3] = $1406; + $1410 = $i; + $1411 = (($lp2_a159) + ($1410<<3)|0); + $1412 = +HEAPF64[$1411>>3]; + $1413 = $i; + $1414 = $4; + $1415 = (($1414) + ($1413<<3)|0); + HEAPF64[$1415>>3] = $1412; + $1416 = $i; + $1417 = (($hp2_a160) + ($1416<<3)|0); + $1418 = +HEAPF64[$1417>>3]; + $1419 = $i; + $1420 = $5; + $1421 = (($1420) + ($1419<<3)|0); + HEAPF64[$1421>>3] = $1418; + $1422 = $i; + $1423 = (($1422) + 1)|0; + $i = $1423; + } + $0 = 14; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1424 = $1; + $1425 = (_strcmp($1424,344)|0); + $1426 = ($1425|0)!=(0); + if (!($1426)) { + dest=$lp1_a161; src=15152; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp1_a162; src=15280; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$lp2_a163; src=15408; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + dest=$hp2_a164; src=15536; stop=dest+128|0; do { HEAP32[dest>>2]=HEAP32[src>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)); + $i = 0; + while(1) { + $1427 = $i; + $1428 = ($1427|0)<(16); + if (!($1428)) { + break; + } + $1429 = $i; + $1430 = (($lp1_a161) + ($1429<<3)|0); + $1431 = +HEAPF64[$1430>>3]; + $1432 = $i; + $1433 = $2; + $1434 = (($1433) + ($1432<<3)|0); + HEAPF64[$1434>>3] = $1431; + $1435 = $i; + $1436 = (($hp1_a162) + ($1435<<3)|0); + $1437 = +HEAPF64[$1436>>3]; + $1438 = $i; + $1439 = $3; + $1440 = (($1439) + ($1438<<3)|0); + HEAPF64[$1440>>3] = $1437; + $1441 = $i; + $1442 = (($lp2_a163) + ($1441<<3)|0); + $1443 = +HEAPF64[$1442>>3]; + $1444 = $i; + $1445 = $4; + $1446 = (($1445) + ($1444<<3)|0); + HEAPF64[$1446>>3] = $1443; + $1447 = $i; + $1448 = (($hp2_a164) + ($1447<<3)|0); + $1449 = +HEAPF64[$1448>>3]; + $1450 = $i; + $1451 = $5; + $1452 = (($1451) + ($1450<<3)|0); + HEAPF64[$1452>>3] = $1449; + $1453 = $i; + $1454 = (($1453) + 1)|0; + $i = $1454; + } + $0 = 16; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1455 = $1; + $1456 = (_strcmp($1455,352)|0); + $1457 = ($1456|0)!=(0); + if (!($1457)) { + _memcpy(($lp1_a165|0),(15664|0),144)|0; + _memcpy(($hp1_a166|0),(15808|0),144)|0; + _memcpy(($lp2_a167|0),(15952|0),144)|0; + _memcpy(($hp2_a168|0),(16096|0),144)|0; + $i = 0; + while(1) { + $1458 = $i; + $1459 = ($1458|0)<(18); + if (!($1459)) { + break; + } + $1460 = $i; + $1461 = (($lp1_a165) + ($1460<<3)|0); + $1462 = +HEAPF64[$1461>>3]; + $1463 = $i; + $1464 = $2; + $1465 = (($1464) + ($1463<<3)|0); + HEAPF64[$1465>>3] = $1462; + $1466 = $i; + $1467 = (($hp1_a166) + ($1466<<3)|0); + $1468 = +HEAPF64[$1467>>3]; + $1469 = $i; + $1470 = $3; + $1471 = (($1470) + ($1469<<3)|0); + HEAPF64[$1471>>3] = $1468; + $1472 = $i; + $1473 = (($lp2_a167) + ($1472<<3)|0); + $1474 = +HEAPF64[$1473>>3]; + $1475 = $i; + $1476 = $4; + $1477 = (($1476) + ($1475<<3)|0); + HEAPF64[$1477>>3] = $1474; + $1478 = $i; + $1479 = (($hp2_a168) + ($1478<<3)|0); + $1480 = +HEAPF64[$1479>>3]; + $1481 = $i; + $1482 = $5; + $1483 = (($1482) + ($1481<<3)|0); + HEAPF64[$1483>>3] = $1480; + $1484 = $i; + $1485 = (($1484) + 1)|0; + $i = $1485; + } + $0 = 18; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + $1486 = $1; + $1487 = (_strcmp($1486,360)|0); + $1488 = ($1487|0)!=(0); + if ($1488) { + (_printf((368|0),($vararg_buffer|0))|0); + $0 = -1; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + _memcpy(($lp1_a169|0),(16240|0),160)|0; + _memcpy(($hp1_a170|0),(16400|0),160)|0; + _memcpy(($lp2_a171|0),(16560|0),160)|0; + _memcpy(($hp2_a172|0),(16720|0),160)|0; + $i = 0; + while(1) { + $1489 = $i; + $1490 = ($1489|0)<(20); + if (!($1490)) { + break; + } + $1491 = $i; + $1492 = (($lp1_a169) + ($1491<<3)|0); + $1493 = +HEAPF64[$1492>>3]; + $1494 = $i; + $1495 = $2; + $1496 = (($1495) + ($1494<<3)|0); + HEAPF64[$1496>>3] = $1493; + $1497 = $i; + $1498 = (($hp1_a170) + ($1497<<3)|0); + $1499 = +HEAPF64[$1498>>3]; + $1500 = $i; + $1501 = $3; + $1502 = (($1501) + ($1500<<3)|0); + HEAPF64[$1502>>3] = $1499; + $1503 = $i; + $1504 = (($lp2_a171) + ($1503<<3)|0); + $1505 = +HEAPF64[$1504>>3]; + $1506 = $i; + $1507 = $4; + $1508 = (($1507) + ($1506<<3)|0); + HEAPF64[$1508>>3] = $1505; + $1509 = $i; + $1510 = (($hp2_a172) + ($1509<<3)|0); + $1511 = +HEAPF64[$1510>>3]; + $1512 = $i; + $1513 = $5; + $1514 = (($1513) + ($1512<<3)|0); + HEAPF64[$1514>>3] = $1511; + $1515 = $i; + $1516 = (($1515) + 1)|0; + $i = $1516; + } + $0 = 20; + $1517 = $0; + STACKTOP = sp;return ($1517|0); + } + } + ;HEAP32[$lp1_a>>2]=HEAP32[416>>2]|0;HEAP32[$lp1_a+4>>2]=HEAP32[416+4>>2]|0;HEAP32[$lp1_a+8>>2]=HEAP32[416+8>>2]|0;HEAP32[$lp1_a+12>>2]=HEAP32[416+12>>2]|0; + ;HEAP32[$hp1_a>>2]=HEAP32[400>>2]|0;HEAP32[$hp1_a+4>>2]=HEAP32[400+4>>2]|0;HEAP32[$hp1_a+8>>2]=HEAP32[400+8>>2]|0;HEAP32[$hp1_a+12>>2]=HEAP32[400+12>>2]|0; + ;HEAP32[$lp2_a>>2]=HEAP32[416>>2]|0;HEAP32[$lp2_a+4>>2]=HEAP32[416+4>>2]|0;HEAP32[$lp2_a+8>>2]=HEAP32[416+8>>2]|0;HEAP32[$lp2_a+12>>2]=HEAP32[416+12>>2]|0; + ;HEAP32[$hp2_a>>2]=HEAP32[432>>2]|0;HEAP32[$hp2_a+4>>2]=HEAP32[432+4>>2]|0;HEAP32[$hp2_a+8>>2]=HEAP32[432+8>>2]|0;HEAP32[$hp2_a+12>>2]=HEAP32[432+12>>2]|0; + $i = 0; + while(1) { + $12 = $i; + $13 = ($12|0)<(2); + if (!($13)) { + break; + } + $14 = $i; + $15 = (($lp1_a) + ($14<<3)|0); + $16 = +HEAPF64[$15>>3]; + $17 = $i; + $18 = $2; + $19 = (($18) + ($17<<3)|0); + HEAPF64[$19>>3] = $16; + $20 = $i; + $21 = (($hp1_a) + ($20<<3)|0); + $22 = +HEAPF64[$21>>3]; + $23 = $i; + $24 = $3; + $25 = (($24) + ($23<<3)|0); + HEAPF64[$25>>3] = $22; + $26 = $i; + $27 = (($lp2_a) + ($26<<3)|0); + $28 = +HEAPF64[$27>>3]; + $29 = $i; + $30 = $4; + $31 = (($30) + ($29<<3)|0); + HEAPF64[$31>>3] = $28; + $32 = $i; + $33 = (($hp2_a) + ($32<<3)|0); + $34 = +HEAPF64[$33>>3]; + $35 = $i; + $36 = $5; + $37 = (($36) + ($35<<3)|0); + HEAPF64[$37>>3] = $34; + $38 = $i; + $39 = (($38) + 1)|0; + $i = $39; + } + $0 = 2; + $1517 = $0; + STACKTOP = sp;return ($1517|0); +} +function _upsamp($x,$lenx,$M,$y) { + $x = $x|0; + $lenx = $lenx|0; + $M = $M|0; + $y = $y|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0.0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0.0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $N = 0, $i = 0, $j = 0, $k = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $1 = $x; + $2 = $lenx; + $3 = $M; + $4 = $y; + $5 = $3; + $6 = ($5|0)<(0); + if ($6) { + $0 = -1; + $50 = $0; + STACKTOP = sp;return ($50|0); + } + $7 = $3; + $8 = ($7|0)==(0); + if ($8) { + $i = 0; + while(1) { + $9 = $i; + $10 = $2; + $11 = ($9|0)<($10|0); + if (!($11)) { + break; + } + $12 = $i; + $13 = $1; + $14 = (($13) + ($12<<3)|0); + $15 = +HEAPF64[$14>>3]; + $16 = $i; + $17 = $4; + $18 = (($17) + ($16<<3)|0); + HEAPF64[$18>>3] = $15; + $19 = $i; + $20 = (($19) + 1)|0; + $i = $20; + } + $21 = $2; + $0 = $21; + $50 = $0; + STACKTOP = sp;return ($50|0); + } + $22 = $3; + $23 = $2; + $24 = (($23) - 1)|0; + $25 = Math_imul($22, $24)|0; + $26 = (($25) + 1)|0; + $N = $26; + $j = 1; + $k = 0; + $i = 0; + while(1) { + $27 = $i; + $28 = $N; + $29 = ($27|0)<($28|0); + if (!($29)) { + break; + } + $30 = $j; + $31 = (($30) + -1)|0; + $j = $31; + $32 = $i; + $33 = $4; + $34 = (($33) + ($32<<3)|0); + HEAPF64[$34>>3] = 0.0; + $35 = $j; + $36 = ($35|0)==(0); + if ($36) { + $37 = $k; + $38 = $1; + $39 = (($38) + ($37<<3)|0); + $40 = +HEAPF64[$39>>3]; + $41 = $i; + $42 = $4; + $43 = (($42) + ($41<<3)|0); + HEAPF64[$43>>3] = $40; + $44 = $k; + $45 = (($44) + 1)|0; + $k = $45; + $46 = $3; + $j = $46; + } + $47 = $i; + $48 = (($47) + 1)|0; + $i = $48; + } + $49 = $N; + $0 = $49; + $50 = $0; + STACKTOP = sp;return ($50|0); +} +function _upsamp2($x,$lenx,$M,$y) { + $x = $x|0; + $lenx = $lenx|0; + $M = $M|0; + $y = $y|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0.0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0.0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $N = 0, $i = 0, $j = 0, $k = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $1 = $x; + $2 = $lenx; + $3 = $M; + $4 = $y; + $5 = $3; + $6 = ($5|0)<(0); + if ($6) { + $0 = -1; + $48 = $0; + STACKTOP = sp;return ($48|0); + } + $7 = $3; + $8 = ($7|0)==(0); + if ($8) { + $i = 0; + while(1) { + $9 = $i; + $10 = $2; + $11 = ($9|0)<($10|0); + if (!($11)) { + break; + } + $12 = $i; + $13 = $1; + $14 = (($13) + ($12<<3)|0); + $15 = +HEAPF64[$14>>3]; + $16 = $i; + $17 = $4; + $18 = (($17) + ($16<<3)|0); + HEAPF64[$18>>3] = $15; + $19 = $i; + $20 = (($19) + 1)|0; + $i = $20; + } + $21 = $2; + $0 = $21; + $48 = $0; + STACKTOP = sp;return ($48|0); + } + $22 = $3; + $23 = $2; + $24 = Math_imul($22, $23)|0; + $N = $24; + $j = 1; + $k = 0; + $i = 0; + while(1) { + $25 = $i; + $26 = $N; + $27 = ($25|0)<($26|0); + if (!($27)) { + break; + } + $28 = $j; + $29 = (($28) + -1)|0; + $j = $29; + $30 = $i; + $31 = $4; + $32 = (($31) + ($30<<3)|0); + HEAPF64[$32>>3] = 0.0; + $33 = $j; + $34 = ($33|0)==(0); + if ($34) { + $35 = $k; + $36 = $1; + $37 = (($36) + ($35<<3)|0); + $38 = +HEAPF64[$37>>3]; + $39 = $i; + $40 = $4; + $41 = (($40) + ($39<<3)|0); + HEAPF64[$41>>3] = $38; + $42 = $k; + $43 = (($42) + 1)|0; + $k = $43; + $44 = $3; + $j = $44; + } + $45 = $i; + $46 = (($45) + 1)|0; + $i = $46; + } + $47 = $N; + $0 = $47; + $48 = $0; + STACKTOP = sp;return ($48|0); +} +function _downsamp($x,$lenx,$M,$y) { + $x = $x|0; + $lenx = $lenx|0; + $M = $M|0; + $y = $y|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0.0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0.0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $5 = 0, $6 = 0; + var $7 = 0, $8 = 0, $9 = 0, $N = 0, $i = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $1 = $x; + $2 = $lenx; + $3 = $M; + $4 = $y; + $5 = $3; + $6 = ($5|0)<(0); + if ($6) { + $0 = -1; + $42 = $0; + STACKTOP = sp;return ($42|0); + } + $7 = $3; + $8 = ($7|0)==(0); + if ($8) { + $i = 0; + while(1) { + $9 = $i; + $10 = $2; + $11 = ($9|0)<($10|0); + if (!($11)) { + break; + } + $12 = $i; + $13 = $1; + $14 = (($13) + ($12<<3)|0); + $15 = +HEAPF64[$14>>3]; + $16 = $i; + $17 = $4; + $18 = (($17) + ($16<<3)|0); + HEAPF64[$18>>3] = $15; + $19 = $i; + $20 = (($19) + 1)|0; + $i = $20; + } + $21 = $2; + $0 = $21; + $42 = $0; + STACKTOP = sp;return ($42|0); + } else { + $22 = $2; + $23 = (($22) - 1)|0; + $24 = $3; + $25 = (($23|0) / ($24|0))&-1; + $26 = (($25) + 1)|0; + $N = $26; + $i = 0; + while(1) { + $27 = $i; + $28 = $N; + $29 = ($27|0)<($28|0); + if (!($29)) { + break; + } + $30 = $i; + $31 = $3; + $32 = Math_imul($30, $31)|0; + $33 = $1; + $34 = (($33) + ($32<<3)|0); + $35 = +HEAPF64[$34>>3]; + $36 = $i; + $37 = $4; + $38 = (($37) + ($36<<3)|0); + HEAPF64[$38>>3] = $35; + $39 = $i; + $40 = (($39) + 1)|0; + $i = $40; + } + $41 = $N; + $0 = $41; + $42 = $0; + STACKTOP = sp;return ($42|0); + } + return (0)|0; +} +function _per_ext($sig,$len,$a,$oup) { + $sig = $sig|0; + $len = $len|0; + $a = $a|0; + $oup = $oup|0; + var $0 = 0, $1 = 0, $10 = 0.0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0.0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0.0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0.0, $52 = 0.0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0.0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $8 = 0, $9 = 0, $i = 0, $len2 = 0, $temp1 = 0.0, $temp2 = 0.0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $sig; + $1 = $len; + $2 = $a; + $3 = $oup; + $i = 0; + while(1) { + $4 = $i; + $5 = $1; + $6 = ($4|0)<($5|0); + if (!($6)) { + break; + } + $7 = $i; + $8 = $0; + $9 = (($8) + ($7<<3)|0); + $10 = +HEAPF64[$9>>3]; + $11 = $2; + $12 = $i; + $13 = (($11) + ($12))|0; + $14 = $3; + $15 = (($14) + ($13<<3)|0); + HEAPF64[$15>>3] = $10; + $16 = $i; + $17 = (($16) + 1)|0; + $i = $17; + } + $18 = $1; + $len2 = $18; + $19 = $1; + $20 = (($19|0) % 2)&-1; + $21 = ($20|0)!=(0); + if ($21) { + $22 = $1; + $23 = (($22) + 1)|0; + $len2 = $23; + $24 = $1; + $25 = (($24) - 1)|0; + $26 = $0; + $27 = (($26) + ($25<<3)|0); + $28 = +HEAPF64[$27>>3]; + $29 = $2; + $30 = $1; + $31 = (($29) + ($30))|0; + $32 = $3; + $33 = (($32) + ($31<<3)|0); + HEAPF64[$33>>3] = $28; + } + $i = 0; + while(1) { + $34 = $i; + $35 = $2; + $36 = ($34|0)<($35|0); + if (!($36)) { + break; + } + $37 = $2; + $38 = $i; + $39 = (($37) + ($38))|0; + $40 = $3; + $41 = (($40) + ($39<<3)|0); + $42 = +HEAPF64[$41>>3]; + $temp1 = $42; + $43 = $2; + $44 = $len2; + $45 = (($43) + ($44))|0; + $46 = (($45) - 1)|0; + $47 = $i; + $48 = (($46) - ($47))|0; + $49 = $3; + $50 = (($49) + ($48<<3)|0); + $51 = +HEAPF64[$50>>3]; + $temp2 = $51; + $52 = $temp2; + $53 = $2; + $54 = (($53) - 1)|0; + $55 = $i; + $56 = (($54) - ($55))|0; + $57 = $3; + $58 = (($57) + ($56<<3)|0); + HEAPF64[$58>>3] = $52; + $59 = $temp1; + $60 = $len2; + $61 = $2; + $62 = (($60) + ($61))|0; + $63 = $i; + $64 = (($62) + ($63))|0; + $65 = $3; + $66 = (($65) + ($64<<3)|0); + HEAPF64[$66>>3] = $59; + $67 = $i; + $68 = (($67) + 1)|0; + $i = $68; + } + $69 = $len2; + STACKTOP = sp;return ($69|0); +} +function _symm_ext($sig,$len,$a,$oup) { + $sig = $sig|0; + $len = $len|0; + $a = $a|0; + $oup = $oup|0; + var $0 = 0, $1 = 0, $10 = 0.0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0.0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0.0, $37 = 0.0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0.0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $i = 0, $len2 = 0, $temp1 = 0.0, $temp2 = 0.0, label = 0; + var sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $sig; + $1 = $len; + $2 = $a; + $3 = $oup; + $i = 0; + while(1) { + $4 = $i; + $5 = $1; + $6 = ($4|0)<($5|0); + if (!($6)) { + break; + } + $7 = $i; + $8 = $0; + $9 = (($8) + ($7<<3)|0); + $10 = +HEAPF64[$9>>3]; + $11 = $2; + $12 = $i; + $13 = (($11) + ($12))|0; + $14 = $3; + $15 = (($14) + ($13<<3)|0); + HEAPF64[$15>>3] = $10; + $16 = $i; + $17 = (($16) + 1)|0; + $i = $17; + } + $18 = $1; + $len2 = $18; + $i = 0; + while(1) { + $19 = $i; + $20 = $2; + $21 = ($19|0)<($20|0); + if (!($21)) { + break; + } + $22 = $2; + $23 = $i; + $24 = (($22) + ($23))|0; + $25 = $3; + $26 = (($25) + ($24<<3)|0); + $27 = +HEAPF64[$26>>3]; + $temp1 = $27; + $28 = $2; + $29 = $len2; + $30 = (($28) + ($29))|0; + $31 = (($30) - 1)|0; + $32 = $i; + $33 = (($31) - ($32))|0; + $34 = $3; + $35 = (($34) + ($33<<3)|0); + $36 = +HEAPF64[$35>>3]; + $temp2 = $36; + $37 = $temp1; + $38 = $2; + $39 = (($38) - 1)|0; + $40 = $i; + $41 = (($39) - ($40))|0; + $42 = $3; + $43 = (($42) + ($41<<3)|0); + HEAPF64[$43>>3] = $37; + $44 = $temp2; + $45 = $len2; + $46 = $2; + $47 = (($45) + ($46))|0; + $48 = $i; + $49 = (($47) + ($48))|0; + $50 = $3; + $51 = (($50) + ($49<<3)|0); + HEAPF64[$51>>3] = $44; + $52 = $i; + $53 = (($52) + 1)|0; + $i = $53; + } + $54 = $len2; + STACKTOP = sp;return ($54|0); +} +function _circshift($array,$N,$L) { + $array = $array|0; + $N = $N|0; + $L = $L|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0.0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0.0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0.0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $7 = 0, $8 = 0, $9 = 0, $i = 0, $temp = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $array; + $1 = $N; + $2 = $L; + $3 = $2; + $4 = (_iabs($3)|0); + $5 = $1; + $6 = ($4|0)>($5|0); + if ($6) { + $7 = $2; + $8 = (_isign($7)|0); + $9 = $2; + $10 = (_iabs($9)|0); + $11 = $1; + $12 = (($10|0) % ($11|0))&-1; + $13 = Math_imul($8, $12)|0; + $2 = $13; + } + $14 = $2; + $15 = ($14|0)<(0); + if ($15) { + $16 = $1; + $17 = $2; + $18 = (($16) + ($17))|0; + $19 = $1; + $20 = (($18|0) % ($19|0))&-1; + $2 = $20; + } + $21 = $2; + $22 = $21<<3; + $23 = (_malloc($22)|0); + $temp = $23; + $i = 0; + while(1) { + $24 = $i; + $25 = $2; + $26 = ($24|0)<($25|0); + if (!($26)) { + break; + } + $27 = $i; + $28 = $0; + $29 = (($28) + ($27<<3)|0); + $30 = +HEAPF64[$29>>3]; + $31 = $i; + $32 = $temp; + $33 = (($32) + ($31<<3)|0); + HEAPF64[$33>>3] = $30; + $34 = $i; + $35 = (($34) + 1)|0; + $i = $35; + } + $i = 0; + while(1) { + $36 = $i; + $37 = $1; + $38 = $2; + $39 = (($37) - ($38))|0; + $40 = ($36|0)<($39|0); + if (!($40)) { + break; + } + $41 = $i; + $42 = $2; + $43 = (($41) + ($42))|0; + $44 = $0; + $45 = (($44) + ($43<<3)|0); + $46 = +HEAPF64[$45>>3]; + $47 = $i; + $48 = $0; + $49 = (($48) + ($47<<3)|0); + HEAPF64[$49>>3] = $46; + $50 = $i; + $51 = (($50) + 1)|0; + $i = $51; + } + $i = 0; + while(1) { + $52 = $i; + $53 = $2; + $54 = ($52|0)<($53|0); + if (!($54)) { + break; + } + $55 = $i; + $56 = $temp; + $57 = (($56) + ($55<<3)|0); + $58 = +HEAPF64[$57>>3]; + $59 = $1; + $60 = $2; + $61 = (($59) - ($60))|0; + $62 = $i; + $63 = (($61) + ($62))|0; + $64 = $0; + $65 = (($64) + ($63<<3)|0); + HEAPF64[$65>>3] = $58; + $66 = $i; + $67 = (($66) + 1)|0; + $i = $67; + } + $68 = $temp; + _free($68); + STACKTOP = sp;return; +} +function _testSWTlength($N,$J) { + $N = $N|0; + $J = $J|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $div = 0, $i = 0, $ret = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $N; + $1 = $J; + $ret = 1; + $div = 1; + $i = 0; + while(1) { + $2 = $i; + $3 = $1; + $4 = ($2|0)<($3|0); + if (!($4)) { + break; + } + $5 = $div; + $6 = $5<<1; + $div = $6; + $7 = $i; + $8 = (($7) + 1)|0; + $i = $8; + } + $9 = $0; + $10 = $div; + $11 = (($9|0) % ($10|0))&-1; + $12 = ($11|0)!=(0); + if (!($12)) { + $13 = $ret; + STACKTOP = sp;return ($13|0); + } + $ret = 0; + $13 = $ret; + STACKTOP = sp;return ($13|0); +} +function _wmaxiter($sig_len,$filt_len) { + $sig_len = $sig_len|0; + $filt_len = $filt_len|0; + var $0 = 0, $1 = 0, $10 = 0.0, $11 = 0.0, $12 = 0, $13 = 0, $2 = 0, $3 = 0.0, $4 = 0, $5 = 0.0, $6 = 0.0, $7 = 0.0, $8 = 0.0, $9 = 0.0, $lev = 0, $temp = 0.0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $sig_len; + $1 = $filt_len; + $2 = $0; + $3 = (+($2|0)); + $4 = $1; + $5 = (+($4|0)); + $6 = $5 - 1.0; + $7 = $3 / $6; + $8 = (+Math_log((+$7))); + $9 = (+Math_log(2.0)); + $10 = $8 / $9; + $temp = $10; + $11 = $temp; + $12 = (~~(($11))); + $lev = $12; + $13 = $lev; + STACKTOP = sp;return ($13|0); +} +function _iabs($N) { + $N = $N|0; + var $0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $1 = $N; + $2 = $1; + $3 = ($2|0)>=(0); + $4 = $1; + if ($3) { + $0 = $4; + } else { + $5 = (0 - ($4))|0; + $0 = $5; + } + $6 = $0; + STACKTOP = sp;return ($6|0); +} +function _isign($N) { + $N = $N|0; + var $0 = 0, $1 = 0, $2 = 0, $3 = 0, $M = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $N; + $1 = $0; + $2 = ($1|0)>=(0); + if ($2) { + $M = 1; + } else { + $M = -1; + } + $3 = $M; + STACKTOP = sp;return ($3|0); +} +function _wave_init($wname) { + $wname = $wname|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $7 = 0, $8 = 0, $9 = 0, $obj = 0, $retval = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wname; + $obj = 0; + $retval = 0; + $1 = $0; + $2 = ($1|0)!=(0|0); + if ($2) { + $3 = $0; + $4 = (_filtlength($3)|0); + $retval = $4; + } + $5 = $retval; + $6 = $5<<5; + $7 = (88 + ($6))|0; + $8 = (_malloc($7)|0); + $obj = $8; + $9 = $retval; + $10 = $obj; + $11 = ((($10)) + 52|0); + HEAP32[$11>>2] = $9; + $12 = $obj; + $13 = ((($12)) + 52|0); + $14 = HEAP32[$13>>2]|0; + $15 = $obj; + $16 = ((($15)) + 68|0); + HEAP32[$16>>2] = $14; + $17 = $obj; + $18 = ((($17)) + 64|0); + HEAP32[$18>>2] = $14; + $19 = $obj; + $20 = ((($19)) + 60|0); + HEAP32[$20>>2] = $14; + $21 = $obj; + $22 = ((($21)) + 56|0); + HEAP32[$22>>2] = $14; + $23 = $obj; + $24 = $0; + (_strcpy(($23|0),($24|0))|0); + $25 = $0; + $26 = ($25|0)!=(0|0); + if ($26) { + $27 = $0; + $28 = $obj; + $29 = ((($28)) + 88|0); + $30 = $obj; + $31 = ((($30)) + 88|0); + $32 = $retval; + $33 = (($31) + ($32<<3)|0); + $34 = $obj; + $35 = ((($34)) + 88|0); + $36 = $retval; + $37 = $36<<1; + $38 = (($35) + ($37<<3)|0); + $39 = $obj; + $40 = ((($39)) + 88|0); + $41 = $retval; + $42 = ($41*3)|0; + $43 = (($40) + ($42<<3)|0); + (_filtcoef($27,$29,$33,$38,$43)|0); + } + $44 = $obj; + $45 = ((($44)) + 88|0); + $46 = $obj; + $47 = ((($46)) + 72|0); + HEAP32[$47>>2] = $45; + $48 = $retval; + $49 = $obj; + $50 = ((($49)) + 88|0); + $51 = (($50) + ($48<<3)|0); + $52 = $obj; + $53 = ((($52)) + 76|0); + HEAP32[$53>>2] = $51; + $54 = $retval; + $55 = $54<<1; + $56 = $obj; + $57 = ((($56)) + 88|0); + $58 = (($57) + ($55<<3)|0); + $59 = $obj; + $60 = ((($59)) + 80|0); + HEAP32[$60>>2] = $58; + $61 = $retval; + $62 = ($61*3)|0; + $63 = $obj; + $64 = ((($63)) + 88|0); + $65 = (($64) + ($62<<3)|0); + $66 = $obj; + $67 = ((($66)) + 84|0); + HEAP32[$67>>2] = $65; + $68 = $obj; + STACKTOP = sp;return ($68|0); +} +function _wt_init($wave,$method,$siglength,$J) { + $wave = $wave|0; + $method = $method|0; + $siglength = $siglength|0; + $J = $J|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0; + var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0; + var $MaxIter = 0, $i = 0, $obj = 0, $size = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, $vararg_buffer3 = 0, $vararg_buffer5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer5 = sp + 24|0; + $vararg_buffer3 = sp; + $vararg_buffer1 = sp + 8|0; + $vararg_buffer = sp + 16|0; + $0 = $wave; + $1 = $method; + $2 = $siglength; + $3 = $J; + $obj = 0; + $4 = $0; + $5 = ((($4)) + 52|0); + $6 = HEAP32[$5>>2]|0; + $size = $6; + $7 = $3; + $8 = ($7|0)>(100); + if ($8) { + (_printf((16880|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + $9 = $2; + $10 = $size; + $11 = (_wmaxiter($9,$10)|0); + $MaxIter = $11; + $12 = $3; + $13 = $MaxIter; + $14 = ($12|0)>($13|0); + if ($14) { + $15 = $MaxIter; + HEAP32[$vararg_buffer1>>2] = $15; + (_printf((16944|0),($vararg_buffer1|0))|0); + _exit(-1); + // unreachable; + } + $16 = $1; + $17 = ($16|0)==(0|0); + do { + if ($17) { + $18 = $2; + $19 = $3; + $20 = $19<<1; + $21 = $size; + $22 = (($21) + 1)|0; + $23 = Math_imul($20, $22)|0; + $24 = (($18) + ($23))|0; + $25 = $24<<3; + $26 = (488 + ($25))|0; + $27 = (_malloc($26)|0); + $obj = $27; + $28 = $2; + $29 = $3; + $30 = $29<<1; + $31 = $size; + $32 = (($31) + 1)|0; + $33 = Math_imul($30, $32)|0; + $34 = (($28) + ($33))|0; + $35 = $obj; + $36 = ((($35)) + 24|0); + HEAP32[$36>>2] = $34; + $37 = $obj; + $38 = ((($37)) + 44|0); + (_strcpy(($38|0),(17448|0))|0); + } else { + $39 = $1; + $40 = (_strcmp($39,17424)|0); + $41 = ($40|0)!=(0); + if ($41) { + $42 = $1; + $43 = (_strcmp($42,17432)|0); + $44 = ($43|0)!=(0); + if ($44) { + $66 = $1; + $67 = (_strcmp($66,17456)|0); + $68 = ($67|0)!=(0); + if ($68) { + $69 = $1; + $70 = (_strcmp($69,17464)|0); + $71 = ($70|0)!=(0); + if ($71) { + $91 = $1; + $92 = (_strcmp($91,17472)|0); + $93 = ($92|0)!=(0); + if ($93) { + $94 = $1; + $95 = (_strcmp($94,17480)|0); + $96 = ($95|0)!=(0); + if ($96) { + break; + } + } + $97 = $0; + $98 = (_strstr($97,17088)|0); + $99 = ($98|0)!=(0|0); + if (!($99)) { + $100 = $0; + $101 = (_strstr($100,17448)|0); + $102 = ($101|0)!=(0|0); + if (!($102)) { + $103 = $0; + $104 = (_strstr($103,17096)|0); + $105 = ($104|0)!=(0|0); + if (!($105)) { + (_printf((17104|0),($vararg_buffer5|0))|0); + _exit(-1); + // unreachable; + } + } + } + $106 = $2; + $107 = $3; + $108 = (($107) + 1)|0; + $109 = Math_imul($106, $108)|0; + $110 = $109<<3; + $111 = (488 + ($110))|0; + $112 = (_malloc($111)|0); + $obj = $112; + $113 = $2; + $114 = $3; + $115 = (($114) + 1)|0; + $116 = Math_imul($113, $115)|0; + $117 = $obj; + $118 = ((($117)) + 24|0); + HEAP32[$118>>2] = $116; + $119 = $obj; + $120 = ((($119)) + 44|0); + (_strcpy(($120|0),(17440|0))|0); + break; + } + } + $72 = $2; + $73 = $3; + $74 = (_testSWTlength($72,$73)|0); + $75 = ($74|0)!=(0); + if ($75) { + $76 = $2; + $77 = $3; + $78 = (($77) + 1)|0; + $79 = Math_imul($76, $78)|0; + $80 = $79<<3; + $81 = (488 + ($80))|0; + $82 = (_malloc($81)|0); + $obj = $82; + $83 = $2; + $84 = $3; + $85 = (($84) + 1)|0; + $86 = Math_imul($83, $85)|0; + $87 = $obj; + $88 = ((($87)) + 24|0); + HEAP32[$88>>2] = $86; + $89 = $obj; + $90 = ((($89)) + 44|0); + (_strcpy(($90|0),(17440|0))|0); + break; + } else { + (_printf((17024|0),($vararg_buffer3|0))|0); + _exit(-1); + // unreachable; + } + } + } + $45 = $2; + $46 = $3; + $47 = $46<<1; + $48 = $size; + $49 = (($48) + 1)|0; + $50 = Math_imul($47, $49)|0; + $51 = (($45) + ($50))|0; + $52 = $51<<3; + $53 = (488 + ($52))|0; + $54 = (_malloc($53)|0); + $obj = $54; + $55 = $2; + $56 = $3; + $57 = $56<<1; + $58 = $size; + $59 = (($58) + 1)|0; + $60 = Math_imul($57, $59)|0; + $61 = (($55) + ($60))|0; + $62 = $obj; + $63 = ((($62)) + 24|0); + HEAP32[$63>>2] = $61; + $64 = $obj; + $65 = ((($64)) + 44|0); + (_strcpy(($65|0),(17448|0))|0); + } + } while(0); + $121 = $0; + $122 = $obj; + HEAP32[$122>>2] = $121; + $123 = $2; + $124 = $obj; + $125 = ((($124)) + 20|0); + HEAP32[$125>>2] = $123; + $126 = $3; + $127 = $obj; + $128 = ((($127)) + 32|0); + HEAP32[$128>>2] = $126; + $129 = $MaxIter; + $130 = $obj; + $131 = ((($130)) + 36|0); + HEAP32[$131>>2] = $129; + $132 = $obj; + $133 = ((($132)) + 8|0); + $134 = $1; + (_strcpy(($133|0),($134|0))|0); + $135 = $2; + $136 = (($135|0) % 2)&-1; + $137 = ($136|0)==(0); + $138 = $obj; + $139 = ((($138)) + 40|0); + if ($137) { + HEAP32[$139>>2] = 1; + } else { + HEAP32[$139>>2] = 0; + } + $140 = $obj; + $141 = ((($140)) + 4|0); + HEAP32[$141>>2] = 0; + $142 = $obj; + $143 = ((($142)) + 54|0); + (_strcpy(($143|0),(17192|0))|0); + $144 = $obj; + $145 = ((($144)) + 68|0); + HEAP32[$145>>2] = 0; + $146 = $3; + $147 = (($146) + 2)|0; + $148 = $obj; + $149 = ((($148)) + 28|0); + HEAP32[$149>>2] = $147; + $150 = $obj; + $151 = ((($150)) + 488|0); + $152 = $obj; + $153 = ((($152)) + 484|0); + HEAP32[$153>>2] = $151; + $154 = $1; + $155 = (_strcmp($154,17424)|0); + $156 = ($155|0)!=(0); + if ($156) { + $157 = $1; + $158 = (_strcmp($157,17432)|0); + $159 = ($158|0)!=(0); + if ($159) { + $175 = $1; + $176 = (_strcmp($175,17456)|0); + $177 = ($176|0)!=(0); + if ($177) { + $178 = $1; + $179 = (_strcmp($178,17464)|0); + $180 = ($179|0)!=(0); + if ($180) { + $181 = $1; + $182 = (_strcmp($181,17472)|0); + $183 = ($182|0)!=(0); + if ($183) { + $184 = $1; + $185 = (_strcmp($184,17480)|0); + $186 = ($185|0)!=(0); + if ($186) { + $199 = $obj; + STACKTOP = sp;return ($199|0); + } + } + } + } + $i = 0; + while(1) { + $187 = $i; + $188 = $2; + $189 = $3; + $190 = (($189) + 1)|0; + $191 = Math_imul($188, $190)|0; + $192 = ($187|0)<($191|0); + if (!($192)) { + break; + } + $193 = $i; + $194 = $obj; + $195 = ((($194)) + 488|0); + $196 = (($195) + ($193<<3)|0); + HEAPF64[$196>>3] = 0.0; + $197 = $i; + $198 = (($197) + 1)|0; + $i = $198; + } + $199 = $obj; + STACKTOP = sp;return ($199|0); + } + } + $i = 0; + while(1) { + $160 = $i; + $161 = $2; + $162 = $3; + $163 = $162<<1; + $164 = $size; + $165 = (($164) + 1)|0; + $166 = Math_imul($163, $165)|0; + $167 = (($161) + ($166))|0; + $168 = ($160|0)<($167|0); + if (!($168)) { + break; + } + $169 = $i; + $170 = $obj; + $171 = ((($170)) + 488|0); + $172 = (($171) + ($169<<3)|0); + HEAPF64[$172>>3] = 0.0; + $173 = $i; + $174 = (($173) + 1)|0; + $i = $174; + } + $199 = $obj; + STACKTOP = sp;return ($199|0); +} +function _dwt($wt,$inp) { + $wt = $wt|0; + $inp = $inp|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0.0, $17 = 0; + var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0.0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0.0, $203 = 0.0, $204 = 0.0, $205 = 0; + var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; + var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; + var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0; + var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0; + var $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0.0; + var $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0.0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0; + var $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0.0, $44 = 0, $45 = 0; + var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0.0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; + var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0.0, $76 = 0.0, $77 = 0.0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0; + var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $J = 0; + var $N = 0, $i = 0, $iter = 0, $len_cA = 0, $lp = 0, $orig = 0, $orig2 = 0, $temp_len = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $0 = $wt; + $1 = $inp; + $2 = $0; + $3 = ((($2)) + 20|0); + $4 = HEAP32[$3>>2]|0; + $temp_len = $4; + $5 = $0; + $6 = ((($5)) + 32|0); + $7 = HEAP32[$6>>2]|0; + $J = $7; + $8 = $temp_len; + $9 = $J; + $10 = (($9) + 1)|0; + $11 = $0; + $12 = ((($11)) + 76|0); + $13 = (($12) + ($10<<2)|0); + HEAP32[$13>>2] = $8; + $14 = $0; + $15 = ((($14)) + 24|0); + HEAP32[$15>>2] = 0; + $16 = $temp_len; + $17 = (($16|0) % 2)&-1; + $18 = ($17|0)==(0); + $19 = $0; + $20 = ((($19)) + 72|0); + if ($18) { + HEAP32[$20>>2] = 0; + $21 = $temp_len; + $22 = $21<<3; + $23 = (_malloc($22)|0); + $orig = $23; + $24 = $temp_len; + $25 = $24<<3; + $26 = (_malloc($25)|0); + $orig2 = $26; + } else { + HEAP32[$20>>2] = 1; + $27 = $temp_len; + $28 = (($27) + 1)|0; + $temp_len = $28; + $29 = $temp_len; + $30 = $29<<3; + $31 = (_malloc($30)|0); + $orig = $31; + $32 = $temp_len; + $33 = $32<<3; + $34 = (_malloc($33)|0); + $orig2 = $34; + } + $i = 0; + while(1) { + $35 = $i; + $36 = $0; + $37 = ((($36)) + 20|0); + $38 = HEAP32[$37>>2]|0; + $39 = ($35|0)<($38|0); + if (!($39)) { + break; + } + $40 = $i; + $41 = $1; + $42 = (($41) + ($40<<3)|0); + $43 = +HEAPF64[$42>>3]; + $44 = $i; + $45 = $orig; + $46 = (($45) + ($44<<3)|0); + HEAPF64[$46>>3] = $43; + $47 = $i; + $48 = (($47) + 1)|0; + $i = $48; + } + $49 = $0; + $50 = ((($49)) + 72|0); + $51 = HEAP32[$50>>2]|0; + $52 = ($51|0)==(1); + if ($52) { + $53 = $temp_len; + $54 = (($53) - 2)|0; + $55 = $orig; + $56 = (($55) + ($54<<3)|0); + $57 = +HEAPF64[$56>>3]; + $58 = $temp_len; + $59 = (($58) - 1)|0; + $60 = $orig; + $61 = (($60) + ($59<<3)|0); + HEAPF64[$61>>3] = $57; + } + $62 = $temp_len; + $N = $62; + $63 = $0; + $64 = HEAP32[$63>>2]|0; + $65 = ((($64)) + 56|0); + $66 = HEAP32[$65>>2]|0; + $lp = $66; + $67 = $0; + $68 = ((($67)) + 44|0); + $69 = (_strcmp($68,17440)|0); + $70 = ($69|0)!=(0); + if (!($70)) { + $71 = $J; + $i = $71; + while(1) { + $72 = $i; + $73 = ($72|0)>(0); + if (!($73)) { + break; + } + $74 = $N; + $75 = (+($74|0)); + $76 = $75 / 2.0; + $77 = (+Math_ceil((+$76))); + $78 = (~~(($77))); + $N = $78; + $79 = $N; + $80 = $i; + $81 = $0; + $82 = ((($81)) + 76|0); + $83 = (($82) + ($80<<2)|0); + HEAP32[$83>>2] = $79; + $84 = $i; + $85 = $0; + $86 = ((($85)) + 76|0); + $87 = (($86) + ($84<<2)|0); + $88 = HEAP32[$87>>2]|0; + $89 = $0; + $90 = ((($89)) + 24|0); + $91 = HEAP32[$90>>2]|0; + $92 = (($91) + ($88))|0; + HEAP32[$90>>2] = $92; + $93 = $i; + $94 = (($93) + -1)|0; + $i = $94; + } + $95 = $0; + $96 = ((($95)) + 76|0); + $97 = ((($96)) + 4|0); + $98 = HEAP32[$97>>2]|0; + $99 = $0; + $100 = ((($99)) + 76|0); + HEAP32[$100>>2] = $98; + $101 = $0; + $102 = ((($101)) + 76|0); + $103 = HEAP32[$102>>2]|0; + $104 = $0; + $105 = ((($104)) + 24|0); + $106 = HEAP32[$105>>2]|0; + $107 = (($106) + ($103))|0; + HEAP32[$105>>2] = $107; + $108 = $0; + $109 = ((($108)) + 24|0); + $110 = HEAP32[$109>>2]|0; + $N = $110; + $iter = 0; + while(1) { + $111 = $iter; + $112 = $J; + $113 = ($111|0)<($112|0); + if (!($113)) { + break; + } + $114 = $J; + $115 = $iter; + $116 = (($114) - ($115))|0; + $117 = $0; + $118 = ((($117)) + 76|0); + $119 = (($118) + ($116<<2)|0); + $120 = HEAP32[$119>>2]|0; + $len_cA = $120; + $121 = $len_cA; + $122 = $N; + $123 = (($122) - ($121))|0; + $N = $123; + $124 = $0; + $125 = ((($124)) + 54|0); + $126 = (_strcmp($125,17200)|0); + $127 = ($126|0)!=(0); + if ($127) { + $128 = $0; + $129 = ((($128)) + 54|0); + $130 = (_strcmp($129,17208)|0); + $131 = ($130|0)!=(0); + if ($131) { + $142 = $0; + $143 = $orig; + $144 = $temp_len; + $145 = $orig2; + $146 = $len_cA; + $147 = $0; + $148 = ((($147)) + 488|0); + $149 = $N; + $150 = (($148) + ($149<<3)|0); + $151 = $len_cA; + _dwt_per($142,$143,$144,$145,$146,$150,$151); + } else { + label = 17; + } + } else { + label = 17; + } + if ((label|0) == 17) { + label = 0; + $132 = $0; + $133 = $orig; + $134 = $temp_len; + $135 = $orig2; + $136 = $len_cA; + $137 = $0; + $138 = ((($137)) + 488|0); + $139 = $N; + $140 = (($138) + ($139<<3)|0); + $141 = $len_cA; + _dwt1($132,$133,$134,$135,$136,$140,$141); + } + $152 = $J; + $153 = $iter; + $154 = (($152) - ($153))|0; + $155 = $0; + $156 = ((($155)) + 76|0); + $157 = (($156) + ($154<<2)|0); + $158 = HEAP32[$157>>2]|0; + $temp_len = $158; + $159 = $iter; + $160 = $J; + $161 = (($160) - 1)|0; + $162 = ($159|0)==($161|0); + $i = 0; + L27: do { + if ($162) { + while(1) { + $163 = $i; + $164 = $len_cA; + $165 = ($163|0)<($164|0); + if (!($165)) { + break L27; + } + $166 = $i; + $167 = $orig2; + $168 = (($167) + ($166<<3)|0); + $169 = +HEAPF64[$168>>3]; + $170 = $i; + $171 = $0; + $172 = ((($171)) + 488|0); + $173 = (($172) + ($170<<3)|0); + HEAPF64[$173>>3] = $169; + $174 = $i; + $175 = (($174) + 1)|0; + $i = $175; + } + } else { + while(1) { + $176 = $i; + $177 = $len_cA; + $178 = ($176|0)<($177|0); + if (!($178)) { + break L27; + } + $179 = $i; + $180 = $orig2; + $181 = (($180) + ($179<<3)|0); + $182 = +HEAPF64[$181>>3]; + $183 = $i; + $184 = $orig; + $185 = (($184) + ($183<<3)|0); + HEAPF64[$185>>3] = $182; + $186 = $i; + $187 = (($186) + 1)|0; + $i = $187; + } + } + } while(0); + $188 = $iter; + $189 = (($188) + 1)|0; + $iter = $189; + } + $317 = $orig; + _free($317); + $318 = $orig2; + _free($318); + STACKTOP = sp;return; + } + $190 = $0; + $191 = ((($190)) + 44|0); + $192 = (_strcmp($191,17448)|0); + $193 = ($192|0)!=(0); + if ($193) { + (_printf((17216|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + $194 = $J; + $i = $194; + while(1) { + $195 = $i; + $196 = ($195|0)>(0); + if (!($196)) { + break; + } + $197 = $N; + $198 = $lp; + $199 = (($197) + ($198))|0; + $200 = (($199) - 2)|0; + $N = $200; + $201 = $N; + $202 = (+($201|0)); + $203 = $202 / 2.0; + $204 = (+Math_ceil((+$203))); + $205 = (~~(($204))); + $N = $205; + $206 = $N; + $207 = $i; + $208 = $0; + $209 = ((($208)) + 76|0); + $210 = (($209) + ($207<<2)|0); + HEAP32[$210>>2] = $206; + $211 = $i; + $212 = $0; + $213 = ((($212)) + 76|0); + $214 = (($213) + ($211<<2)|0); + $215 = HEAP32[$214>>2]|0; + $216 = $0; + $217 = ((($216)) + 24|0); + $218 = HEAP32[$217>>2]|0; + $219 = (($218) + ($215))|0; + HEAP32[$217>>2] = $219; + $220 = $i; + $221 = (($220) + -1)|0; + $i = $221; + } + $222 = $0; + $223 = ((($222)) + 76|0); + $224 = ((($223)) + 4|0); + $225 = HEAP32[$224>>2]|0; + $226 = $0; + $227 = ((($226)) + 76|0); + HEAP32[$227>>2] = $225; + $228 = $0; + $229 = ((($228)) + 76|0); + $230 = HEAP32[$229>>2]|0; + $231 = $0; + $232 = ((($231)) + 24|0); + $233 = HEAP32[$232>>2]|0; + $234 = (($233) + ($230))|0; + HEAP32[$232>>2] = $234; + $235 = $0; + $236 = ((($235)) + 24|0); + $237 = HEAP32[$236>>2]|0; + $N = $237; + $iter = 0; + while(1) { + $238 = $iter; + $239 = $J; + $240 = ($238|0)<($239|0); + if (!($240)) { + break; + } + $241 = $J; + $242 = $iter; + $243 = (($241) - ($242))|0; + $244 = $0; + $245 = ((($244)) + 76|0); + $246 = (($245) + ($243<<2)|0); + $247 = HEAP32[$246>>2]|0; + $len_cA = $247; + $248 = $len_cA; + $249 = $N; + $250 = (($249) - ($248))|0; + $N = $250; + $251 = $0; + $252 = ((($251)) + 54|0); + $253 = (_strcmp($252,17200)|0); + $254 = ($253|0)!=(0); + if ($254) { + $255 = $0; + $256 = ((($255)) + 54|0); + $257 = (_strcmp($256,17208)|0); + $258 = ($257|0)!=(0); + if ($258) { + $269 = $0; + $270 = $orig; + $271 = $temp_len; + $272 = $orig2; + $273 = $len_cA; + $274 = $0; + $275 = ((($274)) + 488|0); + $276 = $N; + $277 = (($275) + ($276<<3)|0); + $278 = $len_cA; + _dwt_sym($269,$270,$271,$272,$273,$277,$278); + } else { + label = 33; + } + } else { + label = 33; + } + if ((label|0) == 33) { + label = 0; + $259 = $0; + $260 = $orig; + $261 = $temp_len; + $262 = $orig2; + $263 = $len_cA; + $264 = $0; + $265 = ((($264)) + 488|0); + $266 = $N; + $267 = (($265) + ($266<<3)|0); + $268 = $len_cA; + _dwt1($259,$260,$261,$262,$263,$267,$268); + } + $279 = $J; + $280 = $iter; + $281 = (($279) - ($280))|0; + $282 = $0; + $283 = ((($282)) + 76|0); + $284 = (($283) + ($281<<2)|0); + $285 = HEAP32[$284>>2]|0; + $temp_len = $285; + $286 = $iter; + $287 = $J; + $288 = (($287) - 1)|0; + $289 = ($286|0)==($288|0); + $i = 0; + L53: do { + if ($289) { + while(1) { + $290 = $i; + $291 = $len_cA; + $292 = ($290|0)<($291|0); + if (!($292)) { + break L53; + } + $293 = $i; + $294 = $orig2; + $295 = (($294) + ($293<<3)|0); + $296 = +HEAPF64[$295>>3]; + $297 = $i; + $298 = $0; + $299 = ((($298)) + 488|0); + $300 = (($299) + ($297<<3)|0); + HEAPF64[$300>>3] = $296; + $301 = $i; + $302 = (($301) + 1)|0; + $i = $302; + } + } else { + while(1) { + $303 = $i; + $304 = $len_cA; + $305 = ($303|0)<($304|0); + if (!($305)) { + break L53; + } + $306 = $i; + $307 = $orig2; + $308 = (($307) + ($306<<3)|0); + $309 = +HEAPF64[$308>>3]; + $310 = $i; + $311 = $orig; + $312 = (($311) + ($310<<3)|0); + HEAPF64[$312>>3] = $309; + $313 = $i; + $314 = (($313) + 1)|0; + $i = $314; + } + } + } while(0); + $315 = $iter; + $316 = (($315) + 1)|0; + $iter = $316; + } + $317 = $orig; + _free($317); + $318 = $orig2; + _free($318); + STACKTOP = sp;return; +} +function _idwt($wt,$dwtop) { + $wt = $wt|0; + $dwtop = $dwtop|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0.0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0.0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; + var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; + var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; + var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0; + var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0.0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0; + var $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0.0; + var $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0; + var $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0; + var $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0; + var $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0.0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0; + var $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0; + var $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0; + var $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0; + var $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0; + var $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0; + var $459 = 0.0, $46 = 0, $460 = 0, $461 = 0, $462 = 0, $463 = 0.0, $464 = 0.0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0; + var $477 = 0, $478 = 0, $479 = 0, $48 = 0, $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0; + var $495 = 0, $496 = 0, $497 = 0, $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0.0; + var $512 = 0, $513 = 0, $514 = 0, $515 = 0, $516 = 0, $517 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0; + var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0.0, $81 = 0, $82 = 0; + var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $J = 0, $N = 0; + var $N2 = 0, $U = 0, $X_hp = 0, $X_lp = 0, $app_len = 0, $cA_up = 0, $det_len = 0, $i = 0, $iter = 0, $k = 0, $lf = 0, $out = 0, $temp = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer1 = sp + 8|0; + $vararg_buffer = sp; + $0 = $wt; + $1 = $dwtop; + $2 = $0; + $3 = ((($2)) + 32|0); + $4 = HEAP32[$3>>2]|0; + $J = $4; + $U = 2; + $5 = $0; + $6 = ((($5)) + 76|0); + $7 = HEAP32[$6>>2]|0; + $app_len = $7; + $8 = $0; + $9 = ((($8)) + 20|0); + $10 = HEAP32[$9>>2]|0; + $11 = (($10) + 1)|0; + $12 = $11<<3; + $13 = (_malloc($12)|0); + $out = $13; + $14 = $0; + $15 = ((($14)) + 44|0); + $16 = (_strcmp($15,17440)|0); + $17 = ($16|0)!=(0); + do { + if ($17) { + label = 11; + } else { + $18 = $0; + $19 = ((($18)) + 54|0); + $20 = (_strcmp($19,17200)|0); + $21 = ($20|0)!=(0); + if ($21) { + $22 = $0; + $23 = ((($22)) + 54|0); + $24 = (_strcmp($23,17208)|0); + $25 = ($24|0)!=(0); + if ($25) { + label = 11; + break; + } + } + $26 = $0; + $27 = ((($26)) + 76|0); + $28 = HEAP32[$27>>2]|0; + $app_len = $28; + $29 = $0; + $30 = ((($29)) + 76|0); + $31 = ((($30)) + 4|0); + $32 = HEAP32[$31>>2]|0; + $det_len = $32; + $33 = $J; + $34 = $0; + $35 = ((($34)) + 76|0); + $36 = (($35) + ($33<<2)|0); + $37 = HEAP32[$36>>2]|0; + $38 = $37<<1; + $N = $38; + $39 = $0; + $40 = HEAP32[$39>>2]|0; + $41 = ((($40)) + 64|0); + $42 = HEAP32[$41>>2]|0; + $43 = $0; + $44 = HEAP32[$43>>2]|0; + $45 = ((($44)) + 68|0); + $46 = HEAP32[$45>>2]|0; + $47 = (($42) + ($46))|0; + $48 = (($47|0) / 2)&-1; + $lf = $48; + $49 = $N; + $50 = $49<<3; + $51 = (_malloc($50)|0); + $cA_up = $51; + $52 = $N; + $53 = $lf; + $54 = (($52) + ($53))|0; + $55 = $54<<3; + $56 = (_malloc($55)|0); + $temp = $56; + $57 = $N; + $58 = $lf; + $59 = $58<<1; + $60 = (($57) + ($59))|0; + $61 = (($60) - 1)|0; + $62 = $61<<3; + $63 = (_malloc($62)|0); + $X_lp = $63; + $64 = $N; + $65 = $lf; + $66 = $65<<1; + $67 = (($64) + ($66))|0; + $68 = (($67) - 1)|0; + $69 = $68<<3; + $70 = (_malloc($69)|0); + $X_hp = $70; + $71 = $app_len; + $iter = $71; + $i = 0; + while(1) { + $72 = $i; + $73 = $app_len; + $74 = ($72|0)<($73|0); + if (!($74)) { + break; + } + $75 = $i; + $76 = $0; + $77 = ((($76)) + 484|0); + $78 = HEAP32[$77>>2]|0; + $79 = (($78) + ($75<<3)|0); + $80 = +HEAPF64[$79>>3]; + $81 = $i; + $82 = $out; + $83 = (($82) + ($81<<3)|0); + HEAPF64[$83>>3] = $80; + $84 = $i; + $85 = (($84) + 1)|0; + $i = $85; + } + $i = 0; + while(1) { + $86 = $i; + $87 = $J; + $88 = ($86|0)<($87|0); + if (!($88)) { + break; + } + $89 = $0; + $90 = $temp; + $91 = $cA_up; + $92 = $out; + $93 = $det_len; + $94 = $0; + $95 = ((($94)) + 484|0); + $96 = HEAP32[$95>>2]|0; + $97 = $iter; + $98 = (($96) + ($97<<3)|0); + $99 = $det_len; + $100 = $X_lp; + $101 = $X_hp; + $102 = $out; + _idwt1($89,$90,$91,$92,$93,$98,$99,$100,$101,$102); + $103 = $det_len; + $104 = $iter; + $105 = (($104) + ($103))|0; + $iter = $105; + $106 = $i; + $107 = (($106) + 2)|0; + $108 = $0; + $109 = ((($108)) + 76|0); + $110 = (($109) + ($107<<2)|0); + $111 = HEAP32[$110>>2]|0; + $det_len = $111; + $112 = $i; + $113 = (($112) + 1)|0; + $i = $113; + } + $114 = $cA_up; + _free($114); + $115 = $X_lp; + _free($115); + $116 = $X_hp; + _free($116); + $117 = $temp; + _free($117); + } + } while(0); + do { + if ((label|0) == 11) { + $118 = $0; + $119 = ((($118)) + 44|0); + $120 = (_strcmp($119,17440)|0); + $121 = ($120|0)!=(0); + if (!($121)) { + $122 = $0; + $123 = ((($122)) + 54|0); + $124 = (_strcmp($123,17192)|0); + $125 = ($124|0)!=(0); + if (!($125)) { + $126 = $0; + $127 = ((($126)) + 76|0); + $128 = HEAP32[$127>>2]|0; + $app_len = $128; + $129 = $0; + $130 = ((($129)) + 76|0); + $131 = ((($130)) + 4|0); + $132 = HEAP32[$131>>2]|0; + $det_len = $132; + $133 = $J; + $134 = $0; + $135 = ((($134)) + 76|0); + $136 = (($135) + ($133<<2)|0); + $137 = HEAP32[$136>>2]|0; + $138 = $137<<1; + $N = $138; + $139 = $0; + $140 = HEAP32[$139>>2]|0; + $141 = ((($140)) + 64|0); + $142 = HEAP32[$141>>2]|0; + $143 = $0; + $144 = HEAP32[$143>>2]|0; + $145 = ((($144)) + 68|0); + $146 = HEAP32[$145>>2]|0; + $147 = (($142) + ($146))|0; + $148 = (($147|0) / 2)&-1; + $lf = $148; + $149 = $N; + $150 = $lf; + $151 = $150<<1; + $152 = (($149) + ($151))|0; + $153 = (($152) - 1)|0; + $154 = $153<<3; + $155 = (_malloc($154)|0); + $X_lp = $155; + $156 = $app_len; + $iter = $156; + $i = 0; + while(1) { + $157 = $i; + $158 = $app_len; + $159 = ($157|0)<($158|0); + if (!($159)) { + break; + } + $160 = $i; + $161 = $0; + $162 = ((($161)) + 484|0); + $163 = HEAP32[$162>>2]|0; + $164 = (($163) + ($160<<3)|0); + $165 = +HEAPF64[$164>>3]; + $166 = $i; + $167 = $out; + $168 = (($167) + ($166<<3)|0); + HEAPF64[$168>>3] = $165; + $169 = $i; + $170 = (($169) + 1)|0; + $i = $170; + } + $i = 0; + while(1) { + $171 = $i; + $172 = $J; + $173 = ($171|0)<($172|0); + if (!($173)) { + break; + } + $174 = $0; + $175 = $out; + $176 = $det_len; + $177 = $0; + $178 = ((($177)) + 484|0); + $179 = HEAP32[$178>>2]|0; + $180 = $iter; + $181 = (($179) + ($180<<3)|0); + $182 = $det_len; + $183 = $X_lp; + _idwt_per($174,$175,$176,$181,$182,$183); + $184 = $lf; + $185 = (($184|0) / 2)&-1; + $186 = (($185) - 1)|0; + $k = $186; + while(1) { + $187 = $k; + $188 = $det_len; + $189 = $188<<1; + $190 = $lf; + $191 = (($190|0) / 2)&-1; + $192 = (($189) + ($191))|0; + $193 = (($192) - 1)|0; + $194 = ($187|0)<($193|0); + if (!($194)) { + break; + } + $195 = $k; + $196 = $X_lp; + $197 = (($196) + ($195<<3)|0); + $198 = +HEAPF64[$197>>3]; + $199 = $k; + $200 = $lf; + $201 = (($200|0) / 2)&-1; + $202 = (($199) - ($201))|0; + $203 = (($202) + 1)|0; + $204 = $out; + $205 = (($204) + ($203<<3)|0); + HEAPF64[$205>>3] = $198; + $206 = $k; + $207 = (($206) + 1)|0; + $k = $207; + } + $208 = $det_len; + $209 = $iter; + $210 = (($209) + ($208))|0; + $iter = $210; + $211 = $i; + $212 = (($211) + 2)|0; + $213 = $0; + $214 = ((($213)) + 76|0); + $215 = (($214) + ($212<<2)|0); + $216 = HEAP32[$215>>2]|0; + $det_len = $216; + $217 = $i; + $218 = (($217) + 1)|0; + $i = $218; + } + $219 = $X_lp; + _free($219); + break; + } + } + $220 = $0; + $221 = ((($220)) + 44|0); + $222 = (_strcmp($221,17448)|0); + $223 = ($222|0)!=(0); + if (!($223)) { + $224 = $0; + $225 = ((($224)) + 54|0); + $226 = (_strcmp($225,17192)|0); + $227 = ($226|0)!=(0); + if (!($227)) { + $228 = $0; + $229 = ((($228)) + 76|0); + $230 = HEAP32[$229>>2]|0; + $app_len = $230; + $231 = $0; + $232 = ((($231)) + 76|0); + $233 = ((($232)) + 4|0); + $234 = HEAP32[$233>>2]|0; + $det_len = $234; + $235 = $J; + $236 = $0; + $237 = ((($236)) + 76|0); + $238 = (($237) + ($235<<2)|0); + $239 = HEAP32[$238>>2]|0; + $240 = $239<<1; + $241 = (($240) - 1)|0; + $N = $241; + $242 = $0; + $243 = HEAP32[$242>>2]|0; + $244 = ((($243)) + 64|0); + $245 = HEAP32[$244>>2]|0; + $246 = $0; + $247 = HEAP32[$246>>2]|0; + $248 = ((($247)) + 68|0); + $249 = HEAP32[$248>>2]|0; + $250 = (($245) + ($249))|0; + $251 = (($250|0) / 2)&-1; + $lf = $251; + $252 = $N; + $253 = $lf; + $254 = $253<<1; + $255 = (($252) + ($254))|0; + $256 = (($255) - 1)|0; + $257 = $256<<3; + $258 = (_malloc($257)|0); + $X_lp = $258; + $259 = $app_len; + $iter = $259; + $i = 0; + while(1) { + $260 = $i; + $261 = $app_len; + $262 = ($260|0)<($261|0); + if (!($262)) { + break; + } + $263 = $i; + $264 = $0; + $265 = ((($264)) + 484|0); + $266 = HEAP32[$265>>2]|0; + $267 = (($266) + ($263<<3)|0); + $268 = +HEAPF64[$267>>3]; + $269 = $i; + $270 = $out; + $271 = (($270) + ($269<<3)|0); + HEAPF64[$271>>3] = $268; + $272 = $i; + $273 = (($272) + 1)|0; + $i = $273; + } + $i = 0; + while(1) { + $274 = $i; + $275 = $J; + $276 = ($274|0)<($275|0); + if (!($276)) { + break; + } + $277 = $0; + $278 = $out; + $279 = $det_len; + $280 = $0; + $281 = ((($280)) + 484|0); + $282 = HEAP32[$281>>2]|0; + $283 = $iter; + $284 = (($282) + ($283<<3)|0); + $285 = $det_len; + $286 = $X_lp; + _idwt_sym($277,$278,$279,$284,$285,$286); + $287 = $lf; + $288 = (($287) - 2)|0; + $k = $288; + while(1) { + $289 = $k; + $290 = $det_len; + $291 = $290<<1; + $292 = ($289|0)<($291|0); + if (!($292)) { + break; + } + $293 = $k; + $294 = $X_lp; + $295 = (($294) + ($293<<3)|0); + $296 = +HEAPF64[$295>>3]; + $297 = $k; + $298 = $lf; + $299 = (($297) - ($298))|0; + $300 = (($299) + 2)|0; + $301 = $out; + $302 = (($301) + ($300<<3)|0); + HEAPF64[$302>>3] = $296; + $303 = $k; + $304 = (($303) + 1)|0; + $k = $304; + } + $305 = $det_len; + $306 = $iter; + $307 = (($306) + ($305))|0; + $iter = $307; + $308 = $i; + $309 = (($308) + 2)|0; + $310 = $0; + $311 = ((($310)) + 76|0); + $312 = (($311) + ($309<<2)|0); + $313 = HEAP32[$312>>2]|0; + $det_len = $313; + $314 = $i; + $315 = (($314) + 1)|0; + $i = $315; + } + $316 = $X_lp; + _free($316); + break; + } + } + $317 = $0; + $318 = ((($317)) + 44|0); + $319 = (_strcmp($318,17448)|0); + $320 = ($319|0)!=(0); + if ($320) { + (_printf((17216|0),($vararg_buffer1|0))|0); + _exit(-1); + // unreachable; + } + $321 = $0; + $322 = ((($321)) + 54|0); + $323 = (_strcmp($322,17200)|0); + $324 = ($323|0)!=(0); + if ($324) { + $325 = $0; + $326 = ((($325)) + 54|0); + $327 = (_strcmp($326,17208)|0); + $328 = ($327|0)!=(0); + if ($328) { + (_printf((17216|0),($vararg_buffer1|0))|0); + _exit(-1); + // unreachable; + } + } + $329 = $0; + $330 = HEAP32[$329>>2]|0; + $331 = ((($330)) + 56|0); + $332 = HEAP32[$331>>2]|0; + $lf = $332; + $333 = $J; + $334 = $0; + $335 = ((($334)) + 76|0); + $336 = (($335) + ($333<<2)|0); + $337 = HEAP32[$336>>2]|0; + $338 = $337<<1; + $339 = (($338) - 1)|0; + $N = $339; + $340 = $N; + $341 = $340<<3; + $342 = (_malloc($341)|0); + $cA_up = $342; + $343 = $N; + $344 = $lf; + $345 = (($343) + ($344))|0; + $346 = (($345) - 1)|0; + $347 = $346<<3; + $348 = (_malloc($347)|0); + $X_lp = $348; + $349 = $N; + $350 = $lf; + $351 = (($349) + ($350))|0; + $352 = (($351) - 1)|0; + $353 = $352<<3; + $354 = (_malloc($353)|0); + $X_hp = $354; + $i = 0; + while(1) { + $355 = $i; + $356 = $app_len; + $357 = ($355|0)<($356|0); + if (!($357)) { + break; + } + $358 = $i; + $359 = $0; + $360 = ((($359)) + 484|0); + $361 = HEAP32[$360>>2]|0; + $362 = (($361) + ($358<<3)|0); + $363 = +HEAPF64[$362>>3]; + $364 = $i; + $365 = $out; + $366 = (($365) + ($364<<3)|0); + HEAPF64[$366>>3] = $363; + $367 = $i; + $368 = (($367) + 1)|0; + $i = $368; + } + $369 = $app_len; + $iter = $369; + $i = 0; + while(1) { + $370 = $i; + $371 = $J; + $372 = ($370|0)<($371|0); + if (!($372)) { + label = 57; + break; + } + $373 = $i; + $374 = (($373) + 1)|0; + $375 = $0; + $376 = ((($375)) + 76|0); + $377 = (($376) + ($374<<2)|0); + $378 = HEAP32[$377>>2]|0; + $det_len = $378; + $379 = $out; + $380 = $det_len; + $381 = $U; + $382 = $cA_up; + (_upsamp($379,$380,$381,$382)|0); + $383 = $i; + $384 = (($383) + 1)|0; + $385 = $0; + $386 = ((($385)) + 76|0); + $387 = (($386) + ($384<<2)|0); + $388 = HEAP32[$387>>2]|0; + $389 = $388<<1; + $390 = (($389) - 1)|0; + $N2 = $390; + $391 = $0; + $392 = HEAP32[$391>>2]|0; + $393 = ((($392)) + 64|0); + $394 = HEAP32[$393>>2]|0; + $395 = $0; + $396 = HEAP32[$395>>2]|0; + $397 = ((($396)) + 68|0); + $398 = HEAP32[$397>>2]|0; + $399 = ($394|0)==($398|0); + do { + if ($399) { + $400 = $0; + $401 = ((($400)) + 54|0); + $402 = (_strcmp($401,17200)|0); + $403 = ($402|0)!=(0); + if ($403) { + $404 = $0; + $405 = ((($404)) + 54|0); + $406 = (_strcmp($405,17208)|0); + $407 = ($406|0)!=(0); + if ($407) { + label = 47; + break; + } + } + $408 = $N2; + $409 = $lf; + $410 = (_conv_init($408,$409)|0); + $411 = $0; + $412 = ((($411)) + 4|0); + HEAP32[$412>>2] = $410; + $413 = $0; + $414 = ((($413)) + 68|0); + HEAP32[$414>>2] = 1; + } else { + label = 47; + } + } while(0); + if ((label|0) == 47) { + label = 0; + $415 = $0; + $416 = HEAP32[$415>>2]|0; + $417 = ((($416)) + 64|0); + $418 = HEAP32[$417>>2]|0; + $419 = $0; + $420 = HEAP32[$419>>2]|0; + $421 = ((($420)) + 68|0); + $422 = HEAP32[$421>>2]|0; + $423 = ($418|0)==($422|0); + if (!($423)) { + label = 48; + break; + } + } + $424 = $0; + $425 = $cA_up; + $426 = $N2; + $427 = $0; + $428 = HEAP32[$427>>2]|0; + $429 = ((($428)) + 80|0); + $430 = HEAP32[$429>>2]|0; + $431 = $lf; + $432 = $X_lp; + _wconv($424,$425,$426,$430,$431,$432); + $433 = $0; + $434 = ((($433)) + 484|0); + $435 = HEAP32[$434>>2]|0; + $436 = $iter; + $437 = (($435) + ($436<<3)|0); + $438 = $det_len; + $439 = $U; + $440 = $cA_up; + (_upsamp($437,$438,$439,$440)|0); + $441 = $0; + $442 = $cA_up; + $443 = $N2; + $444 = $0; + $445 = HEAP32[$444>>2]|0; + $446 = ((($445)) + 84|0); + $447 = HEAP32[$446>>2]|0; + $448 = $lf; + $449 = $X_hp; + _wconv($441,$442,$443,$447,$448,$449); + $450 = $lf; + $451 = (($450) - 2)|0; + $k = $451; + while(1) { + $452 = $k; + $453 = $N2; + $454 = (($453) + 1)|0; + $455 = ($452|0)<($454|0); + if (!($455)) { + break; + } + $456 = $k; + $457 = $X_lp; + $458 = (($457) + ($456<<3)|0); + $459 = +HEAPF64[$458>>3]; + $460 = $k; + $461 = $X_hp; + $462 = (($461) + ($460<<3)|0); + $463 = +HEAPF64[$462>>3]; + $464 = $459 + $463; + $465 = $k; + $466 = $lf; + $467 = (($465) - ($466))|0; + $468 = (($467) + 2)|0; + $469 = $out; + $470 = (($469) + ($468<<3)|0); + HEAPF64[$470>>3] = $464; + $471 = $k; + $472 = (($471) + 1)|0; + $k = $472; + } + $473 = $det_len; + $474 = $iter; + $475 = (($474) + ($473))|0; + $iter = $475; + $476 = $0; + $477 = HEAP32[$476>>2]|0; + $478 = ((($477)) + 64|0); + $479 = HEAP32[$478>>2]|0; + $480 = $0; + $481 = HEAP32[$480>>2]|0; + $482 = ((($481)) + 68|0); + $483 = HEAP32[$482>>2]|0; + $484 = ($479|0)==($483|0); + do { + if ($484) { + $485 = $0; + $486 = ((($485)) + 54|0); + $487 = (_strcmp($486,17200)|0); + $488 = ($487|0)!=(0); + if ($488) { + $489 = $0; + $490 = ((($489)) + 54|0); + $491 = (_strcmp($490,17208)|0); + $492 = ($491|0)!=(0); + if ($492) { + break; + } + } + $493 = $0; + $494 = ((($493)) + 4|0); + $495 = HEAP32[$494>>2]|0; + _free_conv($495); + $496 = $0; + $497 = ((($496)) + 68|0); + HEAP32[$497>>2] = 0; + } + } while(0); + $498 = $i; + $499 = (($498) + 1)|0; + $i = $499; + } + if ((label|0) == 48) { + (_printf((17264|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + else if ((label|0) == 57) { + $500 = $cA_up; + _free($500); + $501 = $X_lp; + _free($501); + $502 = $X_hp; + _free($502); + break; + } + } + } while(0); + $i = 0; + while(1) { + $503 = $i; + $504 = $0; + $505 = ((($504)) + 20|0); + $506 = HEAP32[$505>>2]|0; + $507 = ($503|0)<($506|0); + if (!($507)) { + break; + } + $508 = $i; + $509 = $out; + $510 = (($509) + ($508<<3)|0); + $511 = +HEAPF64[$510>>3]; + $512 = $i; + $513 = $1; + $514 = (($513) + ($512<<3)|0); + HEAPF64[$514>>3] = $511; + $515 = $i; + $516 = (($515) + 1)|0; + $i = $516; + } + $517 = $out; + _free($517); + STACKTOP = sp;return; +} +function _swt($wt,$inp) { + $wt = $wt|0; + $inp = $inp|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $3 = 0; + var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $0 = $wt; + $1 = $inp; + $2 = $0; + $3 = ((($2)) + 8|0); + $4 = (_strcmp($3,17456)|0); + $5 = ($4|0)!=(0); + if (!($5)) { + $6 = $0; + $7 = ((($6)) + 54|0); + $8 = (_strcmp($7,17192)|0); + $9 = ($8|0)!=(0); + if (!($9)) { + $10 = $0; + $11 = $1; + _swt_direct($10,$11); + STACKTOP = sp;return; + } + } + $12 = $0; + $13 = ((($12)) + 8|0); + $14 = (_strcmp($13,17456)|0); + $15 = ($14|0)!=(0); + if ($15) { + (_printf((17320|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + $16 = $0; + $17 = ((($16)) + 54|0); + $18 = (_strcmp($17,17200)|0); + $19 = ($18|0)!=(0); + if ($19) { + $20 = $0; + $21 = ((($20)) + 54|0); + $22 = (_strcmp($21,17208)|0); + $23 = ($22|0)!=(0); + if ($23) { + (_printf((17320|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + } + $24 = $0; + $25 = $1; + _swt_fft($24,$25); + STACKTOP = sp;return; +} +function _iswt($wt,$swtop) { + $wt = $wt|0; + $swtop = $swtop|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0.0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0.0, $129 = 0.0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0.0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0.0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0.0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0.0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; + var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; + var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; + var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0; + var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0.0, $266 = 0, $267 = 0, $268 = 0, $269 = 0.0, $27 = 0, $270 = 0.0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0; + var $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0.0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0.0, $293 = 0, $294 = 0, $295 = 0, $296 = 0; + var $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0; + var $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0; + var $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0; + var $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0.0, $355 = 0, $356 = 0, $357 = 0, $358 = 0.0, $359 = 0.0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0; + var $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0.0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0.0, $383 = 0.0, $384 = 0.0, $385 = 0, $386 = 0; + var $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0.0, $402 = 0, $403 = 0; + var $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0; + var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0; + var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0; + var $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0.0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0; + var $98 = 0, $99 = 0.0, $J = 0, $N = 0, $N1 = 0, $U = 0, $appx1 = 0, $appx2 = 0, $appx_sig = 0, $cH0 = 0, $cL0 = 0, $count = 0, $det1 = 0, $det2 = 0, $det_sig = 0, $i = 0, $index = 0, $index2 = 0, $index_shift = 0, $iter = 0; + var $len = 0, $len0 = 0, $lf = 0, $oup00 = 0, $oup00H = 0, $oup00L = 0, $oup01 = 0, $tempx = 0, $value = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $0 = $wt; + $1 = $swtop; + $2 = $0; + $3 = ((($2)) + 20|0); + $4 = HEAP32[$3>>2]|0; + $N = $4; + $5 = $0; + $6 = ((($5)) + 32|0); + $7 = HEAP32[$6>>2]|0; + $J = $7; + $U = 2; + $8 = $0; + $9 = HEAP32[$8>>2]|0; + $10 = ((($9)) + 64|0); + $11 = HEAP32[$10>>2]|0; + $lf = $11; + $12 = $N; + $13 = $12<<3; + $14 = (_malloc($13)|0); + $appx_sig = $14; + $15 = $N; + $16 = $15<<3; + $17 = (_malloc($16)|0); + $det_sig = $17; + $18 = $N; + $19 = $18<<3; + $20 = (_malloc($19)|0); + $appx1 = $20; + $21 = $N; + $22 = $21<<3; + $23 = (_malloc($22)|0); + $det1 = $23; + $24 = $N; + $25 = $24<<3; + $26 = (_malloc($25)|0); + $appx2 = $26; + $27 = $N; + $28 = $27<<3; + $29 = (_malloc($28)|0); + $det2 = $29; + $30 = $N; + $31 = $30<<3; + $32 = (_malloc($31)|0); + $tempx = $32; + $33 = $N; + $34 = $N; + $35 = (($34|0) % 2)&-1; + $36 = (($33) + ($35))|0; + $37 = $lf; + $38 = (($36) + ($37))|0; + $39 = $38<<3; + $40 = (_malloc($39)|0); + $cL0 = $40; + $41 = $N; + $42 = $N; + $43 = (($42|0) % 2)&-1; + $44 = (($41) + ($43))|0; + $45 = $lf; + $46 = (($44) + ($45))|0; + $47 = $46<<3; + $48 = (_malloc($47)|0); + $cH0 = $48; + $49 = $N; + $50 = $lf; + $51 = $50<<1; + $52 = (($49) + ($51))|0; + $53 = $52<<3; + $54 = (_malloc($53)|0); + $oup00L = $54; + $55 = $N; + $56 = $lf; + $57 = $56<<1; + $58 = (($55) + ($57))|0; + $59 = $58<<3; + $60 = (_malloc($59)|0); + $oup00H = $60; + $61 = $N; + $62 = $61<<3; + $63 = (_malloc($62)|0); + $oup00 = $63; + $64 = $N; + $65 = $64<<3; + $66 = (_malloc($65)|0); + $oup01 = $66; + $iter = 0; + L1: while(1) { + $67 = $iter; + $68 = $J; + $69 = ($67|0)<($68|0); + if (!($69)) { + label = 42; + break; + } + $i = 0; + while(1) { + $70 = $i; + $71 = $N; + $72 = ($70|0)<($71|0); + if (!($72)) { + break; + } + $73 = $i; + $74 = $1; + $75 = (($74) + ($73<<3)|0); + HEAPF64[$75>>3] = 0.0; + $76 = $i; + $77 = (($76) + 1)|0; + $i = $77; + } + $78 = $iter; + $79 = ($78|0)==(0); + $i = 0; + L8: do { + if ($79) { + while(1) { + $80 = $i; + $81 = $N; + $82 = ($80|0)<($81|0); + if (!($82)) { + break L8; + } + $83 = $i; + $84 = $0; + $85 = ((($84)) + 484|0); + $86 = HEAP32[$85>>2]|0; + $87 = (($86) + ($83<<3)|0); + $88 = +HEAPF64[$87>>3]; + $89 = $i; + $90 = $appx_sig; + $91 = (($90) + ($89<<3)|0); + HEAPF64[$91>>3] = $88; + $92 = $N; + $93 = $i; + $94 = (($92) + ($93))|0; + $95 = $0; + $96 = ((($95)) + 484|0); + $97 = HEAP32[$96>>2]|0; + $98 = (($97) + ($94<<3)|0); + $99 = +HEAPF64[$98>>3]; + $100 = $i; + $101 = $det_sig; + $102 = (($101) + ($100<<3)|0); + HEAPF64[$102>>3] = $99; + $103 = $i; + $104 = (($103) + 1)|0; + $i = $104; + } + } else { + while(1) { + $105 = $i; + $106 = $N; + $107 = ($105|0)<($106|0); + if (!($107)) { + break L8; + } + $108 = $iter; + $109 = (($108) + 1)|0; + $110 = $N; + $111 = Math_imul($109, $110)|0; + $112 = $i; + $113 = (($111) + ($112))|0; + $114 = $0; + $115 = ((($114)) + 484|0); + $116 = HEAP32[$115>>2]|0; + $117 = (($116) + ($113<<3)|0); + $118 = +HEAPF64[$117>>3]; + $119 = $i; + $120 = $det_sig; + $121 = (($120) + ($119<<3)|0); + HEAPF64[$121>>3] = $118; + $122 = $i; + $123 = (($122) + 1)|0; + $i = $123; + } + } + } while(0); + $124 = $J; + $125 = (($124) - 1)|0; + $126 = $iter; + $127 = (($125) - ($126))|0; + $128 = (+($127|0)); + $129 = (+Math_pow(2.0,(+$128))); + $130 = (~~(($129))); + $value = $130; + $count = 0; + while(1) { + $131 = $count; + $132 = $value; + $133 = ($131|0)<($132|0); + if (!($133)) { + break; + } + $len = 0; + $134 = $count; + $index = $134; + while(1) { + $135 = $index; + $136 = $N; + $137 = ($135|0)<($136|0); + if (!($137)) { + break; + } + $138 = $index; + $139 = $appx_sig; + $140 = (($139) + ($138<<3)|0); + $141 = +HEAPF64[$140>>3]; + $142 = $len; + $143 = $appx1; + $144 = (($143) + ($142<<3)|0); + HEAPF64[$144>>3] = $141; + $145 = $index; + $146 = $det_sig; + $147 = (($146) + ($145<<3)|0); + $148 = +HEAPF64[$147>>3]; + $149 = $len; + $150 = $det1; + $151 = (($150) + ($149<<3)|0); + HEAPF64[$151>>3] = $148; + $152 = $len; + $153 = (($152) + 1)|0; + $len = $153; + $154 = $value; + $155 = $index; + $156 = (($155) + ($154))|0; + $index = $156; + } + $len0 = 0; + $index_shift = 0; + while(1) { + $157 = $index_shift; + $158 = $len; + $159 = ($157|0)<($158|0); + if (!($159)) { + break; + } + $160 = $index_shift; + $161 = $appx1; + $162 = (($161) + ($160<<3)|0); + $163 = +HEAPF64[$162>>3]; + $164 = $len0; + $165 = $appx2; + $166 = (($165) + ($164<<3)|0); + HEAPF64[$166>>3] = $163; + $167 = $index_shift; + $168 = $det1; + $169 = (($168) + ($167<<3)|0); + $170 = +HEAPF64[$169>>3]; + $171 = $len0; + $172 = $det2; + $173 = (($172) + ($171<<3)|0); + HEAPF64[$173>>3] = $170; + $174 = $len0; + $175 = (($174) + 1)|0; + $len0 = $175; + $176 = $index_shift; + $177 = (($176) + 2)|0; + $index_shift = $177; + } + $178 = $appx2; + $179 = $len0; + $180 = $U; + $181 = $tempx; + (_upsamp2($178,$179,$180,$181)|0); + $182 = $tempx; + $183 = $len0; + $184 = $183<<1; + $185 = $lf; + $186 = (($185|0) / 2)&-1; + $187 = $cL0; + (_per_ext($182,$184,$186,$187)|0); + $188 = $det2; + $189 = $len0; + $190 = $U; + $191 = $tempx; + (_upsamp2($188,$189,$190,$191)|0); + $192 = $tempx; + $193 = $len0; + $194 = $193<<1; + $195 = $lf; + $196 = (($195|0) / 2)&-1; + $197 = $cH0; + (_per_ext($192,$194,$196,$197)|0); + $198 = $len0; + $199 = $198<<1; + $200 = $lf; + $201 = (($199) + ($200))|0; + $N1 = $201; + $202 = $0; + $203 = HEAP32[$202>>2]|0; + $204 = ((($203)) + 64|0); + $205 = HEAP32[$204>>2]|0; + $206 = $0; + $207 = HEAP32[$206>>2]|0; + $208 = ((($207)) + 68|0); + $209 = HEAP32[$208>>2]|0; + $210 = ($205|0)==($209|0); + do { + if ($210) { + $211 = $0; + $212 = ((($211)) + 54|0); + $213 = (_strcmp($212,17200)|0); + $214 = ($213|0)!=(0); + if ($214) { + $215 = $0; + $216 = ((($215)) + 54|0); + $217 = (_strcmp($216,17208)|0); + $218 = ($217|0)!=(0); + if ($218) { + label = 23; + break; + } + } + $219 = $N1; + $220 = $lf; + $221 = (_conv_init($219,$220)|0); + $222 = $0; + $223 = ((($222)) + 4|0); + HEAP32[$223>>2] = $221; + $224 = $0; + $225 = ((($224)) + 68|0); + HEAP32[$225>>2] = 1; + } else { + label = 23; + } + } while(0); + if ((label|0) == 23) { + label = 0; + $226 = $0; + $227 = HEAP32[$226>>2]|0; + $228 = ((($227)) + 56|0); + $229 = HEAP32[$228>>2]|0; + $230 = $0; + $231 = HEAP32[$230>>2]|0; + $232 = ((($231)) + 60|0); + $233 = HEAP32[$232>>2]|0; + $234 = ($229|0)==($233|0); + if (!($234)) { + label = 24; + break L1; + } + } + $235 = $0; + $236 = $cL0; + $237 = $N1; + $238 = $0; + $239 = HEAP32[$238>>2]|0; + $240 = ((($239)) + 80|0); + $241 = HEAP32[$240>>2]|0; + $242 = $lf; + $243 = $oup00L; + _wconv($235,$236,$237,$241,$242,$243); + $244 = $0; + $245 = $cH0; + $246 = $N1; + $247 = $0; + $248 = HEAP32[$247>>2]|0; + $249 = ((($248)) + 84|0); + $250 = HEAP32[$249>>2]|0; + $251 = $lf; + $252 = $oup00H; + _wconv($244,$245,$246,$250,$251,$252); + $253 = $lf; + $254 = (($253) - 1)|0; + $i = $254; + while(1) { + $255 = $i; + $256 = $len0; + $257 = $256<<1; + $258 = $lf; + $259 = (($257) + ($258))|0; + $260 = (($259) - 1)|0; + $261 = ($255|0)<($260|0); + if (!($261)) { + break; + } + $262 = $i; + $263 = $oup00L; + $264 = (($263) + ($262<<3)|0); + $265 = +HEAPF64[$264>>3]; + $266 = $i; + $267 = $oup00H; + $268 = (($267) + ($266<<3)|0); + $269 = +HEAPF64[$268>>3]; + $270 = $265 + $269; + $271 = $i; + $272 = $lf; + $273 = (($271) - ($272))|0; + $274 = (($273) + 1)|0; + $275 = $oup00; + $276 = (($275) + ($274<<3)|0); + HEAPF64[$276>>3] = $270; + $277 = $i; + $278 = (($277) + 1)|0; + $i = $278; + } + $len0 = 0; + $index_shift = 1; + while(1) { + $279 = $index_shift; + $280 = $len; + $281 = ($279|0)<($280|0); + if (!($281)) { + break; + } + $282 = $index_shift; + $283 = $appx1; + $284 = (($283) + ($282<<3)|0); + $285 = +HEAPF64[$284>>3]; + $286 = $len0; + $287 = $appx2; + $288 = (($287) + ($286<<3)|0); + HEAPF64[$288>>3] = $285; + $289 = $index_shift; + $290 = $det1; + $291 = (($290) + ($289<<3)|0); + $292 = +HEAPF64[$291>>3]; + $293 = $len0; + $294 = $det2; + $295 = (($294) + ($293<<3)|0); + HEAPF64[$295>>3] = $292; + $296 = $len0; + $297 = (($296) + 1)|0; + $len0 = $297; + $298 = $index_shift; + $299 = (($298) + 2)|0; + $index_shift = $299; + } + $300 = $appx2; + $301 = $len0; + $302 = $U; + $303 = $tempx; + (_upsamp2($300,$301,$302,$303)|0); + $304 = $tempx; + $305 = $len0; + $306 = $305<<1; + $307 = $lf; + $308 = (($307|0) / 2)&-1; + $309 = $cL0; + (_per_ext($304,$306,$308,$309)|0); + $310 = $det2; + $311 = $len0; + $312 = $U; + $313 = $tempx; + (_upsamp2($310,$311,$312,$313)|0); + $314 = $tempx; + $315 = $len0; + $316 = $315<<1; + $317 = $lf; + $318 = (($317|0) / 2)&-1; + $319 = $cH0; + (_per_ext($314,$316,$318,$319)|0); + $320 = $len0; + $321 = $320<<1; + $322 = $lf; + $323 = (($321) + ($322))|0; + $N1 = $323; + $324 = $0; + $325 = $cL0; + $326 = $N1; + $327 = $0; + $328 = HEAP32[$327>>2]|0; + $329 = ((($328)) + 80|0); + $330 = HEAP32[$329>>2]|0; + $331 = $lf; + $332 = $oup00L; + _wconv($324,$325,$326,$330,$331,$332); + $333 = $0; + $334 = $cH0; + $335 = $N1; + $336 = $0; + $337 = HEAP32[$336>>2]|0; + $338 = ((($337)) + 84|0); + $339 = HEAP32[$338>>2]|0; + $340 = $lf; + $341 = $oup00H; + _wconv($333,$334,$335,$339,$340,$341); + $342 = $lf; + $343 = (($342) - 1)|0; + $i = $343; + while(1) { + $344 = $i; + $345 = $len0; + $346 = $345<<1; + $347 = $lf; + $348 = (($346) + ($347))|0; + $349 = (($348) - 1)|0; + $350 = ($344|0)<($349|0); + if (!($350)) { + break; + } + $351 = $i; + $352 = $oup00L; + $353 = (($352) + ($351<<3)|0); + $354 = +HEAPF64[$353>>3]; + $355 = $i; + $356 = $oup00H; + $357 = (($356) + ($355<<3)|0); + $358 = +HEAPF64[$357>>3]; + $359 = $354 + $358; + $360 = $i; + $361 = $lf; + $362 = (($360) - ($361))|0; + $363 = (($362) + 1)|0; + $364 = $oup01; + $365 = (($364) + ($363<<3)|0); + HEAPF64[$365>>3] = $359; + $366 = $i; + $367 = (($366) + 1)|0; + $i = $367; + } + $368 = $oup01; + $369 = $len0; + $370 = $369<<1; + _circshift($368,$370,-1); + $index2 = 0; + $371 = $count; + $index = $371; + while(1) { + $372 = $index; + $373 = $N; + $374 = ($372|0)<($373|0); + if (!($374)) { + break; + } + $375 = $index2; + $376 = $oup00; + $377 = (($376) + ($375<<3)|0); + $378 = +HEAPF64[$377>>3]; + $379 = $index2; + $380 = $oup01; + $381 = (($380) + ($379<<3)|0); + $382 = +HEAPF64[$381>>3]; + $383 = $378 + $382; + $384 = $383 / 2.0; + $385 = $index; + $386 = $1; + $387 = (($386) + ($385<<3)|0); + HEAPF64[$387>>3] = $384; + $388 = $index2; + $389 = (($388) + 1)|0; + $index2 = $389; + $390 = $value; + $391 = $index; + $392 = (($391) + ($390))|0; + $index = $392; + } + $393 = $count; + $394 = (($393) + 1)|0; + $count = $394; + } + $i = 0; + while(1) { + $395 = $i; + $396 = $N; + $397 = ($395|0)<($396|0); + if (!($397)) { + break; + } + $398 = $i; + $399 = $1; + $400 = (($399) + ($398<<3)|0); + $401 = +HEAPF64[$400>>3]; + $402 = $i; + $403 = $appx_sig; + $404 = (($403) + ($402<<3)|0); + HEAPF64[$404>>3] = $401; + $405 = $i; + $406 = (($405) + 1)|0; + $i = $406; + } + $407 = $iter; + $408 = (($407) + 1)|0; + $iter = $408; + } + if ((label|0) == 24) { + (_printf((17264|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + else if ((label|0) == 42) { + $409 = $appx_sig; + _free($409); + $410 = $det_sig; + _free($410); + $411 = $appx1; + _free($411); + $412 = $det1; + _free($412); + $413 = $tempx; + _free($413); + $414 = $cL0; + _free($414); + $415 = $cH0; + _free($415); + $416 = $oup00L; + _free($416); + $417 = $oup00H; + _free($417); + $418 = $oup00; + _free($418); + $419 = $oup01; + _free($419); + $420 = $appx2; + _free($420); + $421 = $det2; + _free($421); + STACKTOP = sp;return; + } +} +function _modwt($wt,$inp) { + $wt = $wt|0; + $inp = $inp|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0.0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $12 = 0, $13 = 0; + var $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0; + var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0; + var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0.0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0; + var $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0; + var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0.0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $J = 0, $M = 0, $N = 0, $cA = 0, $cD = 0, $i = 0; + var $iter = 0, $len_filt = 0, $lenacc = 0, $temp_len = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $inp; + $2 = $0; + $3 = ((($2)) + 20|0); + $4 = HEAP32[$3>>2]|0; + $temp_len = $4; + $5 = $0; + $6 = ((($5)) + 32|0); + $7 = HEAP32[$6>>2]|0; + $J = $7; + $8 = $temp_len; + $9 = $J; + $10 = $0; + $11 = ((($10)) + 76|0); + $12 = (($11) + ($9<<2)|0); + HEAP32[$12>>2] = $8; + $13 = $0; + $14 = ((($13)) + 76|0); + HEAP32[$14>>2] = $8; + $15 = $J; + $16 = (($15) + 1)|0; + $17 = $temp_len; + $18 = Math_imul($16, $17)|0; + $19 = $J; + $20 = (($19) + 1)|0; + $21 = $0; + $22 = ((($21)) + 76|0); + $23 = (($22) + ($20<<2)|0); + HEAP32[$23>>2] = $18; + $24 = $0; + $25 = ((($24)) + 24|0); + HEAP32[$25>>2] = $18; + $26 = $0; + $27 = HEAP32[$26>>2]|0; + $28 = ((($27)) + 52|0); + $29 = HEAP32[$28>>2]|0; + $len_filt = $29; + $M = 1; + $iter = 1; + while(1) { + $30 = $iter; + $31 = $J; + $32 = ($30|0)<($31|0); + if (!($32)) { + break; + } + $33 = $M; + $34 = $33<<1; + $M = $34; + $35 = $temp_len; + $36 = $iter; + $37 = $0; + $38 = ((($37)) + 76|0); + $39 = (($38) + ($36<<2)|0); + HEAP32[$39>>2] = $35; + $40 = $iter; + $41 = (($40) + 1)|0; + $iter = $41; + } + $42 = $temp_len; + $43 = $42<<3; + $44 = (_malloc($43)|0); + $cA = $44; + $45 = $temp_len; + $46 = $45<<3; + $47 = (_malloc($46)|0); + $cD = $47; + $M = 1; + $i = 0; + while(1) { + $48 = $i; + $49 = $temp_len; + $50 = ($48|0)<($49|0); + if (!($50)) { + break; + } + $51 = $i; + $52 = $1; + $53 = (($52) + ($51<<3)|0); + $54 = +HEAPF64[$53>>3]; + $55 = $i; + $56 = $0; + $57 = ((($56)) + 488|0); + $58 = (($57) + ($55<<3)|0); + HEAPF64[$58>>3] = $54; + $59 = $i; + $60 = (($59) + 1)|0; + $i = $60; + } + $61 = $0; + $62 = ((($61)) + 24|0); + $63 = HEAP32[$62>>2]|0; + $lenacc = $63; + $iter = 0; + while(1) { + $64 = $iter; + $65 = $J; + $66 = ($64|0)<($65|0); + if (!($66)) { + break; + } + $67 = $temp_len; + $68 = $lenacc; + $69 = (($68) - ($67))|0; + $lenacc = $69; + $70 = $iter; + $71 = ($70|0)>(0); + if ($71) { + $72 = $M; + $73 = $72<<1; + $M = $73; + $74 = $M; + $75 = $len_filt; + $76 = Math_imul($74, $75)|0; + $N = $76; + } else { + $77 = $len_filt; + $N = $77; + } + $78 = $0; + $79 = $M; + $80 = $0; + $81 = ((($80)) + 488|0); + $82 = $temp_len; + $83 = $cA; + $84 = $temp_len; + $85 = $cD; + $86 = $temp_len; + _modwt_per($78,$79,$81,$82,$83,$84,$85,$86); + $i = 0; + while(1) { + $87 = $i; + $88 = $temp_len; + $89 = ($87|0)<($88|0); + if (!($89)) { + break; + } + $90 = $i; + $91 = $cA; + $92 = (($91) + ($90<<3)|0); + $93 = +HEAPF64[$92>>3]; + $94 = $i; + $95 = $0; + $96 = ((($95)) + 488|0); + $97 = (($96) + ($94<<3)|0); + HEAPF64[$97>>3] = $93; + $98 = $i; + $99 = $cD; + $100 = (($99) + ($98<<3)|0); + $101 = +HEAPF64[$100>>3]; + $102 = $lenacc; + $103 = $i; + $104 = (($102) + ($103))|0; + $105 = $0; + $106 = ((($105)) + 488|0); + $107 = (($106) + ($104<<3)|0); + HEAPF64[$107>>3] = $101; + $108 = $i; + $109 = (($108) + 1)|0; + $i = $109; + } + $110 = $iter; + $111 = (($110) + 1)|0; + $iter = $111; + } + $112 = $cA; + _free($112); + $113 = $cD; + _free($113); + STACKTOP = sp;return; +} +function _imodwt($wt,$dwtop) { + $wt = $wt|0; + $dwtop = $dwtop|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0.0, $15 = 0.0, $16 = 0.0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0.0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0.0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $8 = 0, $9 = 0, $J = 0, $M = 0, $N = 0, $U = 0, $X = 0, $i = 0, $iter = 0, $j = 0, $lenacc = 0, $lf = 0; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $dwtop; + $2 = $0; + $3 = ((($2)) + 20|0); + $4 = HEAP32[$3>>2]|0; + $N = $4; + $5 = $0; + $6 = ((($5)) + 32|0); + $7 = HEAP32[$6>>2]|0; + $J = $7; + $U = 2; + $8 = $0; + $9 = HEAP32[$8>>2]|0; + $10 = ((($9)) + 64|0); + $11 = HEAP32[$10>>2]|0; + $lf = $11; + $12 = $N; + $lenacc = $12; + $13 = $J; + $14 = (+($13|0)); + $15 = $14 - 1.0; + $16 = (+Math_pow(2.0,(+$15))); + $17 = (~~(($16))); + $M = $17; + $18 = $N; + $19 = $18<<3; + $20 = (_malloc($19)|0); + $X = $20; + $i = 0; + while(1) { + $21 = $i; + $22 = $N; + $23 = ($21|0)<($22|0); + if (!($23)) { + break; + } + $24 = $i; + $25 = $0; + $26 = ((($25)) + 484|0); + $27 = HEAP32[$26>>2]|0; + $28 = (($27) + ($24<<3)|0); + $29 = +HEAPF64[$28>>3]; + $30 = $i; + $31 = $1; + $32 = (($31) + ($30<<3)|0); + HEAPF64[$32>>3] = $29; + $33 = $i; + $34 = (($33) + 1)|0; + $i = $34; + } + $iter = 0; + while(1) { + $35 = $iter; + $36 = $J; + $37 = ($35|0)<($36|0); + if (!($37)) { + break; + } + $38 = $iter; + $39 = ($38|0)>(0); + if ($39) { + $40 = $M; + $41 = (($40|0) / 2)&-1; + $M = $41; + } + $42 = $0; + $43 = $M; + $44 = $1; + $45 = $N; + $46 = $0; + $47 = ((($46)) + 488|0); + $48 = $lenacc; + $49 = (($47) + ($48<<3)|0); + $50 = $N; + $51 = $X; + _imodwt_per($42,$43,$44,$45,$49,$50,$51); + $j = 0; + while(1) { + $52 = $j; + $53 = $N; + $54 = ($52|0)<($53|0); + if (!($54)) { + break; + } + $55 = $j; + $56 = $X; + $57 = (($56) + ($55<<3)|0); + $58 = +HEAPF64[$57>>3]; + $59 = $j; + $60 = $1; + $61 = (($60) + ($59<<3)|0); + HEAPF64[$61>>3] = $58; + $62 = $j; + $63 = (($62) + 1)|0; + $j = $63; + } + $64 = $N; + $65 = $lenacc; + $66 = (($65) + ($64))|0; + $lenacc = $66; + $67 = $iter; + $68 = (($67) + 1)|0; + $iter = $68; + } + $69 = $X; + _free($69); + STACKTOP = sp;return; +} +function _setDWTExtension($wt,$extension) { + $wt = $wt|0; + $extension = $extension|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $0 = $wt; + $1 = $extension; + $2 = $1; + $3 = (_strcmp($2,17448)|0); + $4 = ($3|0)!=(0); + if (!($4)) { + $5 = $0; + $6 = ((($5)) + 44|0); + (_strcpy(($6|0),(17448|0))|0); + STACKTOP = sp;return; + } + $7 = $1; + $8 = (_strcmp($7,17440)|0); + $9 = ($8|0)!=(0); + if ($9) { + (_printf((17216|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + $10 = $0; + $11 = ((($10)) + 44|0); + (_strcpy(($11|0),(17440|0))|0); + STACKTOP = sp;return; +} +function _wave_free($object) { + $object = $object|0; + var $0 = 0, $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $object; + $1 = $0; + _free($1); + STACKTOP = sp;return; +} +function _wt_free($object) { + $object = $object|0; + var $0 = 0, $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $object; + $1 = $0; + _free($1); + STACKTOP = sp;return; +} +function _dwt1($wt,$sig,$len_sig,$cA,$len_cA,$cD,$len_cD) { + $wt = $wt|0; + $sig = $sig|0; + $len_sig = $len_sig|0; + $cA = $cA|0; + $len_cA = $len_cA|0; + $cD = $cD|0; + $len_cD = $len_cD|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; + var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; + var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; + var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0; + var $260 = 0, $261 = 0, $262 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0; + var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0; + var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0; + var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0; + var $97 = 0, $98 = 0, $99 = 0, $D = 0, $cA_undec = 0, $len_avg = 0, $lf = 0, $signal = 0, $vararg_buffer = 0, $vararg_buffer1 = 0, $vararg_buffer3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer3 = sp + 16|0; + $vararg_buffer1 = sp; + $vararg_buffer = sp + 8|0; + $0 = $wt; + $1 = $sig; + $2 = $len_sig; + $3 = $cA; + $4 = $len_cA; + $5 = $cD; + $6 = $len_cD; + $7 = $0; + $8 = HEAP32[$7>>2]|0; + $9 = ((($8)) + 56|0); + $10 = HEAP32[$9>>2]|0; + $11 = $0; + $12 = HEAP32[$11>>2]|0; + $13 = ((($12)) + 60|0); + $14 = HEAP32[$13>>2]|0; + $15 = (($10) + ($14))|0; + $16 = (($15|0) / 2)&-1; + $len_avg = $16; + $D = 2; + $17 = $0; + $18 = ((($17)) + 44|0); + $19 = (_strcmp($18,17440)|0); + $20 = ($19|0)!=(0); + if ($20) { + $124 = $0; + $125 = ((($124)) + 44|0); + $126 = (_strcmp($125,17448)|0); + $127 = ($126|0)!=(0); + if ($127) { + (_printf((17216|0),($vararg_buffer3|0))|0); + _exit(-1); + // unreachable; + } + $128 = $0; + $129 = HEAP32[$128>>2]|0; + $130 = ((($129)) + 56|0); + $131 = HEAP32[$130>>2]|0; + $lf = $131; + $132 = $2; + $133 = $lf; + $134 = (($133) - 1)|0; + $135 = $134<<1; + $136 = (($132) + ($135))|0; + $137 = $136<<3; + $138 = (_malloc($137)|0); + $signal = $138; + $139 = $1; + $140 = $2; + $141 = $lf; + $142 = (($141) - 1)|0; + $143 = $signal; + $144 = (_symm_ext($139,$140,$142,$143)|0); + $2 = $144; + $145 = $2; + $146 = $lf; + $147 = (($146) - 1)|0; + $148 = ($147*3)|0; + $149 = (($145) + ($148))|0; + $150 = $149<<3; + $151 = (_malloc($150)|0); + $cA_undec = $151; + $152 = $0; + $153 = HEAP32[$152>>2]|0; + $154 = ((($153)) + 56|0); + $155 = HEAP32[$154>>2]|0; + $156 = $0; + $157 = HEAP32[$156>>2]|0; + $158 = ((($157)) + 60|0); + $159 = HEAP32[$158>>2]|0; + $160 = ($155|0)==($159|0); + do { + if ($160) { + $161 = $0; + $162 = ((($161)) + 54|0); + $163 = (_strcmp($162,17200)|0); + $164 = ($163|0)!=(0); + if ($164) { + $165 = $0; + $166 = ((($165)) + 54|0); + $167 = (_strcmp($166,17208)|0); + $168 = ($167|0)!=(0); + if ($168) { + label = 14; + break; + } + } + $169 = $2; + $170 = $lf; + $171 = (($170) - 1)|0; + $172 = $171<<1; + $173 = (($169) + ($172))|0; + $174 = $lf; + $175 = (_conv_init($173,$174)|0); + $176 = $0; + $177 = ((($176)) + 4|0); + HEAP32[$177>>2] = $175; + $178 = $0; + $179 = ((($178)) + 68|0); + HEAP32[$179>>2] = 1; + } else { + label = 14; + } + } while(0); + if ((label|0) == 14) { + $180 = $0; + $181 = HEAP32[$180>>2]|0; + $182 = ((($181)) + 56|0); + $183 = HEAP32[$182>>2]|0; + $184 = $0; + $185 = HEAP32[$184>>2]|0; + $186 = ((($185)) + 60|0); + $187 = HEAP32[$186>>2]|0; + $188 = ($183|0)==($187|0); + if (!($188)) { + (_printf((17264|0),($vararg_buffer1|0))|0); + _exit(-1); + // unreachable; + } + } + $189 = $0; + $190 = $signal; + $191 = $2; + $192 = $lf; + $193 = (($192) - 1)|0; + $194 = $193<<1; + $195 = (($191) + ($194))|0; + $196 = $0; + $197 = HEAP32[$196>>2]|0; + $198 = ((($197)) + 72|0); + $199 = HEAP32[$198>>2]|0; + $200 = $0; + $201 = HEAP32[$200>>2]|0; + $202 = ((($201)) + 56|0); + $203 = HEAP32[$202>>2]|0; + $204 = $cA_undec; + _wconv($189,$190,$195,$199,$203,$204); + $205 = $cA_undec; + $206 = $lf; + $207 = (($205) + ($206<<3)|0); + $208 = $2; + $209 = $lf; + $210 = (($208) + ($209))|0; + $211 = (($210) - 2)|0; + $212 = $D; + $213 = $3; + (_downsamp($207,$211,$212,$213)|0); + $214 = $0; + $215 = $signal; + $216 = $2; + $217 = $lf; + $218 = (($217) - 1)|0; + $219 = $218<<1; + $220 = (($216) + ($219))|0; + $221 = $0; + $222 = HEAP32[$221>>2]|0; + $223 = ((($222)) + 76|0); + $224 = HEAP32[$223>>2]|0; + $225 = $0; + $226 = HEAP32[$225>>2]|0; + $227 = ((($226)) + 60|0); + $228 = HEAP32[$227>>2]|0; + $229 = $cA_undec; + _wconv($214,$215,$220,$224,$228,$229); + $230 = $cA_undec; + $231 = $lf; + $232 = (($230) + ($231<<3)|0); + $233 = $2; + $234 = $lf; + $235 = (($233) + ($234))|0; + $236 = (($235) - 2)|0; + $237 = $D; + $238 = $5; + (_downsamp($232,$236,$237,$238)|0); + } else { + $21 = $2; + $22 = $len_avg; + $23 = (($21) + ($22))|0; + $24 = $2; + $25 = (($24|0) % 2)&-1; + $26 = (($23) + ($25))|0; + $27 = $26<<3; + $28 = (_malloc($27)|0); + $signal = $28; + $29 = $1; + $30 = $2; + $31 = $len_avg; + $32 = (($31|0) / 2)&-1; + $33 = $signal; + $34 = (_per_ext($29,$30,$32,$33)|0); + $2 = $34; + $35 = $2; + $36 = $len_avg; + $37 = (($35) + ($36))|0; + $38 = $0; + $39 = HEAP32[$38>>2]|0; + $40 = ((($39)) + 56|0); + $41 = HEAP32[$40>>2]|0; + $42 = (($37) + ($41))|0; + $43 = (($42) - 1)|0; + $44 = $43<<3; + $45 = (_malloc($44)|0); + $cA_undec = $45; + $46 = $0; + $47 = HEAP32[$46>>2]|0; + $48 = ((($47)) + 56|0); + $49 = HEAP32[$48>>2]|0; + $50 = $0; + $51 = HEAP32[$50>>2]|0; + $52 = ((($51)) + 60|0); + $53 = HEAP32[$52>>2]|0; + $54 = ($49|0)==($53|0); + do { + if ($54) { + $55 = $0; + $56 = ((($55)) + 54|0); + $57 = (_strcmp($56,17200)|0); + $58 = ($57|0)!=(0); + if ($58) { + $59 = $0; + $60 = ((($59)) + 54|0); + $61 = (_strcmp($60,17208)|0); + $62 = ($61|0)!=(0); + if ($62) { + label = 6; + break; + } + } + $63 = $2; + $64 = $len_avg; + $65 = (($63) + ($64))|0; + $66 = $0; + $67 = HEAP32[$66>>2]|0; + $68 = ((($67)) + 56|0); + $69 = HEAP32[$68>>2]|0; + $70 = (_conv_init($65,$69)|0); + $71 = $0; + $72 = ((($71)) + 4|0); + HEAP32[$72>>2] = $70; + $73 = $0; + $74 = ((($73)) + 68|0); + HEAP32[$74>>2] = 1; + } else { + label = 6; + } + } while(0); + if ((label|0) == 6) { + $75 = $0; + $76 = HEAP32[$75>>2]|0; + $77 = ((($76)) + 56|0); + $78 = HEAP32[$77>>2]|0; + $79 = $0; + $80 = HEAP32[$79>>2]|0; + $81 = ((($80)) + 60|0); + $82 = HEAP32[$81>>2]|0; + $83 = ($78|0)==($82|0); + if (!($83)) { + (_printf((17264|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + } + $84 = $0; + $85 = $signal; + $86 = $2; + $87 = $len_avg; + $88 = (($86) + ($87))|0; + $89 = $0; + $90 = HEAP32[$89>>2]|0; + $91 = ((($90)) + 72|0); + $92 = HEAP32[$91>>2]|0; + $93 = $0; + $94 = HEAP32[$93>>2]|0; + $95 = ((($94)) + 56|0); + $96 = HEAP32[$95>>2]|0; + $97 = $cA_undec; + _wconv($84,$85,$88,$92,$96,$97); + $98 = $cA_undec; + $99 = $len_avg; + $100 = (($98) + ($99<<3)|0); + $101 = $2; + $102 = $D; + $103 = $3; + (_downsamp($100,$101,$102,$103)|0); + $104 = $0; + $105 = $signal; + $106 = $2; + $107 = $len_avg; + $108 = (($106) + ($107))|0; + $109 = $0; + $110 = HEAP32[$109>>2]|0; + $111 = ((($110)) + 76|0); + $112 = HEAP32[$111>>2]|0; + $113 = $0; + $114 = HEAP32[$113>>2]|0; + $115 = ((($114)) + 60|0); + $116 = HEAP32[$115>>2]|0; + $117 = $cA_undec; + _wconv($104,$105,$108,$112,$116,$117); + $118 = $cA_undec; + $119 = $len_avg; + $120 = (($118) + ($119<<3)|0); + $121 = $2; + $122 = $D; + $123 = $5; + (_downsamp($120,$121,$122,$123)|0); + } + $239 = $0; + $240 = HEAP32[$239>>2]|0; + $241 = ((($240)) + 56|0); + $242 = HEAP32[$241>>2]|0; + $243 = $0; + $244 = HEAP32[$243>>2]|0; + $245 = ((($244)) + 60|0); + $246 = HEAP32[$245>>2]|0; + $247 = ($242|0)==($246|0); + if (!($247)) { + $261 = $signal; + _free($261); + $262 = $cA_undec; + _free($262); + STACKTOP = sp;return; + } + $248 = $0; + $249 = ((($248)) + 54|0); + $250 = (_strcmp($249,17200)|0); + $251 = ($250|0)!=(0); + if ($251) { + $252 = $0; + $253 = ((($252)) + 54|0); + $254 = (_strcmp($253,17208)|0); + $255 = ($254|0)!=(0); + if ($255) { + $261 = $signal; + _free($261); + $262 = $cA_undec; + _free($262); + STACKTOP = sp;return; + } + } + $256 = $0; + $257 = ((($256)) + 4|0); + $258 = HEAP32[$257>>2]|0; + _free_conv($258); + $259 = $0; + $260 = ((($259)) + 68|0); + HEAP32[$260>>2] = 0; + $261 = $signal; + _free($261); + $262 = $cA_undec; + _free($262); + STACKTOP = sp;return; +} +function _dwt_per($wt,$inp,$N,$cA,$len_cA,$cD,$len_cD) { + $wt = $wt|0; + $inp = $inp|0; + $N = $N|0; + $cA = $cA|0; + $len_cA = $len_cA|0; + $cD = $cD|0; + $len_cD = $len_cD|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0.0, $101 = 0.0, $102 = 0, $103 = 0, $104 = 0, $105 = 0.0, $106 = 0.0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0.0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0.0, $12 = 0, $120 = 0.0, $121 = 0, $122 = 0, $123 = 0, $124 = 0.0, $125 = 0.0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0.0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0.0, $145 = 0.0, $146 = 0, $147 = 0, $148 = 0, $149 = 0.0, $15 = 0, $150 = 0.0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0.0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0.0, $166 = 0.0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0.0, $171 = 0.0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0.0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0.0, $194 = 0.0, $195 = 0, $196 = 0, $197 = 0, $198 = 0.0, $199 = 0.0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; + var $206 = 0.0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0.0, $215 = 0.0, $216 = 0, $217 = 0, $218 = 0, $219 = 0.0, $22 = 0, $220 = 0.0, $221 = 0, $222 = 0, $223 = 0; + var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0.0, $24 = 0, $240 = 0, $241 = 0; + var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0.0, $249 = 0.0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0.0, $254 = 0.0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0; + var $260 = 0, $261 = 0.0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0.0, $271 = 0.0, $272 = 0, $273 = 0, $274 = 0, $275 = 0.0, $276 = 0.0, $277 = 0, $278 = 0; + var $279 = 0, $28 = 0, $280 = 0, $281 = 0.0, $282 = 0.0, $283 = 0, $284 = 0, $285 = 0, $286 = 0.0, $287 = 0.0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0.0, $295 = 0, $296 = 0; + var $297 = 0, $298 = 0, $299 = 0.0, $3 = 0, $30 = 0, $300 = 0.0, $301 = 0, $302 = 0, $303 = 0, $304 = 0.0, $305 = 0.0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0; + var $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0.0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0.0; + var $54 = 0.0, $55 = 0, $56 = 0, $57 = 0, $58 = 0.0, $59 = 0.0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0.0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0; + var $72 = 0.0, $73 = 0.0, $74 = 0, $75 = 0, $76 = 0, $77 = 0.0, $78 = 0.0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0; + var $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0.0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $i = 0, $isodd = 0, $l = 0, $l2 = 0, $len_avg = 0, $or$cond = 0, $or$cond3 = 0, $t = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $inp; + $2 = $N; + $3 = $cA; + $4 = $len_cA; + $5 = $cD; + $6 = $len_cD; + $7 = $0; + $8 = HEAP32[$7>>2]|0; + $9 = ((($8)) + 56|0); + $10 = HEAP32[$9>>2]|0; + $len_avg = $10; + $11 = $len_avg; + $12 = (($11|0) / 2)&-1; + $l2 = $12; + $13 = $2; + $14 = (($13|0) % 2)&-1; + $isodd = $14; + $i = 0; + while(1) { + $15 = $i; + $16 = $4; + $17 = ($15|0)<($16|0); + if (!($17)) { + break; + } + $18 = $i; + $19 = $18<<1; + $20 = $l2; + $21 = (($19) + ($20))|0; + $t = $21; + $22 = $i; + $23 = $3; + $24 = (($23) + ($22<<3)|0); + HEAPF64[$24>>3] = 0.0; + $25 = $i; + $26 = $5; + $27 = (($26) + ($25<<3)|0); + HEAPF64[$27>>3] = 0.0; + $l = 0; + while(1) { + $28 = $l; + $29 = $len_avg; + $30 = ($28|0)<($29|0); + if (!($30)) { + break; + } + $31 = $t; + $32 = $l; + $33 = (($31) - ($32))|0; + $34 = $l2; + $35 = ($33|0)>=($34|0); + if ($35) { + $36 = $t; + $37 = $l; + $38 = (($36) - ($37))|0; + $39 = $2; + $40 = ($38|0)<($39|0); + if ($40) { + $41 = $l; + $42 = $0; + $43 = HEAP32[$42>>2]|0; + $44 = ((($43)) + 72|0); + $45 = HEAP32[$44>>2]|0; + $46 = (($45) + ($41<<3)|0); + $47 = +HEAPF64[$46>>3]; + $48 = $t; + $49 = $l; + $50 = (($48) - ($49))|0; + $51 = $1; + $52 = (($51) + ($50<<3)|0); + $53 = +HEAPF64[$52>>3]; + $54 = $47 * $53; + $55 = $i; + $56 = $3; + $57 = (($56) + ($55<<3)|0); + $58 = +HEAPF64[$57>>3]; + $59 = $58 + $54; + HEAPF64[$57>>3] = $59; + $60 = $l; + $61 = $0; + $62 = HEAP32[$61>>2]|0; + $63 = ((($62)) + 76|0); + $64 = HEAP32[$63>>2]|0; + $65 = (($64) + ($60<<3)|0); + $66 = +HEAPF64[$65>>3]; + $67 = $t; + $68 = $l; + $69 = (($67) - ($68))|0; + $70 = $1; + $71 = (($70) + ($69<<3)|0); + $72 = +HEAPF64[$71>>3]; + $73 = $66 * $72; + $74 = $i; + $75 = $5; + $76 = (($75) + ($74<<3)|0); + $77 = +HEAPF64[$76>>3]; + $78 = $77 + $73; + HEAPF64[$76>>3] = $78; + } else { + label = 8; + } + } else { + label = 8; + } + do { + if ((label|0) == 8) { + label = 0; + $79 = $t; + $80 = $l; + $81 = (($79) - ($80))|0; + $82 = $l2; + $83 = ($81|0)<($82|0); + if ($83) { + $84 = $t; + $85 = $l; + $86 = (($84) - ($85))|0; + $87 = ($86|0)>=(0); + if ($87) { + $88 = $l; + $89 = $0; + $90 = HEAP32[$89>>2]|0; + $91 = ((($90)) + 72|0); + $92 = HEAP32[$91>>2]|0; + $93 = (($92) + ($88<<3)|0); + $94 = +HEAPF64[$93>>3]; + $95 = $t; + $96 = $l; + $97 = (($95) - ($96))|0; + $98 = $1; + $99 = (($98) + ($97<<3)|0); + $100 = +HEAPF64[$99>>3]; + $101 = $94 * $100; + $102 = $i; + $103 = $3; + $104 = (($103) + ($102<<3)|0); + $105 = +HEAPF64[$104>>3]; + $106 = $105 + $101; + HEAPF64[$104>>3] = $106; + $107 = $l; + $108 = $0; + $109 = HEAP32[$108>>2]|0; + $110 = ((($109)) + 76|0); + $111 = HEAP32[$110>>2]|0; + $112 = (($111) + ($107<<3)|0); + $113 = +HEAPF64[$112>>3]; + $114 = $t; + $115 = $l; + $116 = (($114) - ($115))|0; + $117 = $1; + $118 = (($117) + ($116<<3)|0); + $119 = +HEAPF64[$118>>3]; + $120 = $113 * $119; + $121 = $i; + $122 = $5; + $123 = (($122) + ($121<<3)|0); + $124 = +HEAPF64[$123>>3]; + $125 = $124 + $120; + HEAPF64[$123>>3] = $125; + break; + } + } + $126 = $t; + $127 = $l; + $128 = (($126) - ($127))|0; + $129 = ($128|0)<(0); + if ($129) { + $130 = $l; + $131 = $0; + $132 = HEAP32[$131>>2]|0; + $133 = ((($132)) + 72|0); + $134 = HEAP32[$133>>2]|0; + $135 = (($134) + ($130<<3)|0); + $136 = +HEAPF64[$135>>3]; + $137 = $t; + $138 = $l; + $139 = (($137) - ($138))|0; + $140 = $2; + $141 = (($139) + ($140))|0; + $142 = $1; + $143 = (($142) + ($141<<3)|0); + $144 = +HEAPF64[$143>>3]; + $145 = $136 * $144; + $146 = $i; + $147 = $3; + $148 = (($147) + ($146<<3)|0); + $149 = +HEAPF64[$148>>3]; + $150 = $149 + $145; + HEAPF64[$148>>3] = $150; + $151 = $l; + $152 = $0; + $153 = HEAP32[$152>>2]|0; + $154 = ((($153)) + 76|0); + $155 = HEAP32[$154>>2]|0; + $156 = (($155) + ($151<<3)|0); + $157 = +HEAPF64[$156>>3]; + $158 = $t; + $159 = $l; + $160 = (($158) - ($159))|0; + $161 = $2; + $162 = (($160) + ($161))|0; + $163 = $1; + $164 = (($163) + ($162<<3)|0); + $165 = +HEAPF64[$164>>3]; + $166 = $157 * $165; + $167 = $i; + $168 = $5; + $169 = (($168) + ($167<<3)|0); + $170 = +HEAPF64[$169>>3]; + $171 = $170 + $166; + HEAPF64[$169>>3] = $171; + break; + } + $172 = $t; + $173 = $l; + $174 = (($172) - ($173))|0; + $175 = $2; + $176 = ($174|0)>=($175|0); + $177 = $isodd; + $178 = ($177|0)==(0); + $or$cond = $176 & $178; + if ($or$cond) { + $179 = $l; + $180 = $0; + $181 = HEAP32[$180>>2]|0; + $182 = ((($181)) + 72|0); + $183 = HEAP32[$182>>2]|0; + $184 = (($183) + ($179<<3)|0); + $185 = +HEAPF64[$184>>3]; + $186 = $t; + $187 = $l; + $188 = (($186) - ($187))|0; + $189 = $2; + $190 = (($188) - ($189))|0; + $191 = $1; + $192 = (($191) + ($190<<3)|0); + $193 = +HEAPF64[$192>>3]; + $194 = $185 * $193; + $195 = $i; + $196 = $3; + $197 = (($196) + ($195<<3)|0); + $198 = +HEAPF64[$197>>3]; + $199 = $198 + $194; + HEAPF64[$197>>3] = $199; + $200 = $l; + $201 = $0; + $202 = HEAP32[$201>>2]|0; + $203 = ((($202)) + 76|0); + $204 = HEAP32[$203>>2]|0; + $205 = (($204) + ($200<<3)|0); + $206 = +HEAPF64[$205>>3]; + $207 = $t; + $208 = $l; + $209 = (($207) - ($208))|0; + $210 = $2; + $211 = (($209) - ($210))|0; + $212 = $1; + $213 = (($212) + ($211<<3)|0); + $214 = +HEAPF64[$213>>3]; + $215 = $206 * $214; + $216 = $i; + $217 = $5; + $218 = (($217) + ($216<<3)|0); + $219 = +HEAPF64[$218>>3]; + $220 = $219 + $215; + HEAPF64[$218>>3] = $220; + break; + } + $221 = $t; + $222 = $l; + $223 = (($221) - ($222))|0; + $224 = $2; + $225 = ($223|0)>=($224|0); + $226 = $isodd; + $227 = ($226|0)==(1); + $or$cond3 = $225 & $227; + if ($or$cond3) { + $228 = $t; + $229 = $l; + $230 = (($228) - ($229))|0; + $231 = $2; + $232 = ($230|0)!=($231|0); + $233 = $l; + $234 = $0; + $235 = HEAP32[$234>>2]|0; + $236 = ((($235)) + 72|0); + $237 = HEAP32[$236>>2]|0; + $238 = (($237) + ($233<<3)|0); + $239 = +HEAPF64[$238>>3]; + if ($232) { + $240 = $t; + $241 = $l; + $242 = (($240) - ($241))|0; + $243 = $2; + $244 = (($243) + 1)|0; + $245 = (($242) - ($244))|0; + $246 = $1; + $247 = (($246) + ($245<<3)|0); + $248 = +HEAPF64[$247>>3]; + $249 = $239 * $248; + $250 = $i; + $251 = $3; + $252 = (($251) + ($250<<3)|0); + $253 = +HEAPF64[$252>>3]; + $254 = $253 + $249; + HEAPF64[$252>>3] = $254; + $255 = $l; + $256 = $0; + $257 = HEAP32[$256>>2]|0; + $258 = ((($257)) + 76|0); + $259 = HEAP32[$258>>2]|0; + $260 = (($259) + ($255<<3)|0); + $261 = +HEAPF64[$260>>3]; + $262 = $t; + $263 = $l; + $264 = (($262) - ($263))|0; + $265 = $2; + $266 = (($265) + 1)|0; + $267 = (($264) - ($266))|0; + $268 = $1; + $269 = (($268) + ($267<<3)|0); + $270 = +HEAPF64[$269>>3]; + $271 = $261 * $270; + $272 = $i; + $273 = $5; + $274 = (($273) + ($272<<3)|0); + $275 = +HEAPF64[$274>>3]; + $276 = $275 + $271; + HEAPF64[$274>>3] = $276; + break; + } else { + $277 = $2; + $278 = (($277) - 1)|0; + $279 = $1; + $280 = (($279) + ($278<<3)|0); + $281 = +HEAPF64[$280>>3]; + $282 = $239 * $281; + $283 = $i; + $284 = $3; + $285 = (($284) + ($283<<3)|0); + $286 = +HEAPF64[$285>>3]; + $287 = $286 + $282; + HEAPF64[$285>>3] = $287; + $288 = $l; + $289 = $0; + $290 = HEAP32[$289>>2]|0; + $291 = ((($290)) + 76|0); + $292 = HEAP32[$291>>2]|0; + $293 = (($292) + ($288<<3)|0); + $294 = +HEAPF64[$293>>3]; + $295 = $2; + $296 = (($295) - 1)|0; + $297 = $1; + $298 = (($297) + ($296<<3)|0); + $299 = +HEAPF64[$298>>3]; + $300 = $294 * $299; + $301 = $i; + $302 = $5; + $303 = (($302) + ($301<<3)|0); + $304 = +HEAPF64[$303>>3]; + $305 = $304 + $300; + HEAPF64[$303>>3] = $305; + break; + } + } + } + } while(0); + $306 = $l; + $307 = (($306) + 1)|0; + $l = $307; + } + $308 = $i; + $309 = (($308) + 1)|0; + $i = $309; + } + STACKTOP = sp;return; +} +function _dwt_sym($wt,$inp,$N,$cA,$len_cA,$cD,$len_cD) { + $wt = $wt|0; + $inp = $inp|0; + $N = $N|0; + $cA = $cA|0; + $len_cA = $len_cA|0; + $cD = $cD|0; + $len_cD = $len_cD|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0.0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0.0, $113 = 0.0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0.0, $118 = 0.0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0.0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0.0, $141 = 0.0, $142 = 0, $143 = 0, $144 = 0, $145 = 0.0, $146 = 0.0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0.0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0.0, $164 = 0.0, $165 = 0, $166 = 0, $167 = 0, $168 = 0.0, $169 = 0.0, $17 = 0; + var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0; + var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0.0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0.0, $48 = 0.0, $49 = 0, $5 = 0; + var $50 = 0, $51 = 0, $52 = 0.0, $53 = 0.0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0.0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0.0, $67 = 0.0, $68 = 0; + var $69 = 0, $7 = 0, $70 = 0, $71 = 0.0, $72 = 0.0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0.0, $84 = 0, $85 = 0, $86 = 0; + var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0.0, $92 = 0.0, $93 = 0, $94 = 0, $95 = 0, $96 = 0.0, $97 = 0.0, $98 = 0, $99 = 0, $i = 0, $l = 0, $len_avg = 0, $t = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $inp; + $2 = $N; + $3 = $cA; + $4 = $len_cA; + $5 = $cD; + $6 = $len_cD; + $7 = $0; + $8 = HEAP32[$7>>2]|0; + $9 = ((($8)) + 56|0); + $10 = HEAP32[$9>>2]|0; + $len_avg = $10; + $i = 0; + while(1) { + $11 = $i; + $12 = $4; + $13 = ($11|0)<($12|0); + if (!($13)) { + break; + } + $14 = $i; + $15 = $14<<1; + $16 = (($15) + 1)|0; + $t = $16; + $17 = $i; + $18 = $3; + $19 = (($18) + ($17<<3)|0); + HEAPF64[$19>>3] = 0.0; + $20 = $i; + $21 = $5; + $22 = (($21) + ($20<<3)|0); + HEAPF64[$22>>3] = 0.0; + $l = 0; + while(1) { + $23 = $l; + $24 = $len_avg; + $25 = ($23|0)<($24|0); + if (!($25)) { + break; + } + $26 = $t; + $27 = $l; + $28 = (($26) - ($27))|0; + $29 = ($28|0)>=(0); + if ($29) { + $30 = $t; + $31 = $l; + $32 = (($30) - ($31))|0; + $33 = $2; + $34 = ($32|0)<($33|0); + if ($34) { + $35 = $l; + $36 = $0; + $37 = HEAP32[$36>>2]|0; + $38 = ((($37)) + 72|0); + $39 = HEAP32[$38>>2]|0; + $40 = (($39) + ($35<<3)|0); + $41 = +HEAPF64[$40>>3]; + $42 = $t; + $43 = $l; + $44 = (($42) - ($43))|0; + $45 = $1; + $46 = (($45) + ($44<<3)|0); + $47 = +HEAPF64[$46>>3]; + $48 = $41 * $47; + $49 = $i; + $50 = $3; + $51 = (($50) + ($49<<3)|0); + $52 = +HEAPF64[$51>>3]; + $53 = $52 + $48; + HEAPF64[$51>>3] = $53; + $54 = $l; + $55 = $0; + $56 = HEAP32[$55>>2]|0; + $57 = ((($56)) + 76|0); + $58 = HEAP32[$57>>2]|0; + $59 = (($58) + ($54<<3)|0); + $60 = +HEAPF64[$59>>3]; + $61 = $t; + $62 = $l; + $63 = (($61) - ($62))|0; + $64 = $1; + $65 = (($64) + ($63<<3)|0); + $66 = +HEAPF64[$65>>3]; + $67 = $60 * $66; + $68 = $i; + $69 = $5; + $70 = (($69) + ($68<<3)|0); + $71 = +HEAPF64[$70>>3]; + $72 = $71 + $67; + HEAPF64[$70>>3] = $72; + } else { + label = 8; + } + } else { + label = 8; + } + do { + if ((label|0) == 8) { + label = 0; + $73 = $t; + $74 = $l; + $75 = (($73) - ($74))|0; + $76 = ($75|0)<(0); + if ($76) { + $77 = $l; + $78 = $0; + $79 = HEAP32[$78>>2]|0; + $80 = ((($79)) + 72|0); + $81 = HEAP32[$80>>2]|0; + $82 = (($81) + ($77<<3)|0); + $83 = +HEAPF64[$82>>3]; + $84 = $t; + $85 = (0 - ($84))|0; + $86 = $l; + $87 = (($85) + ($86))|0; + $88 = (($87) - 1)|0; + $89 = $1; + $90 = (($89) + ($88<<3)|0); + $91 = +HEAPF64[$90>>3]; + $92 = $83 * $91; + $93 = $i; + $94 = $3; + $95 = (($94) + ($93<<3)|0); + $96 = +HEAPF64[$95>>3]; + $97 = $96 + $92; + HEAPF64[$95>>3] = $97; + $98 = $l; + $99 = $0; + $100 = HEAP32[$99>>2]|0; + $101 = ((($100)) + 76|0); + $102 = HEAP32[$101>>2]|0; + $103 = (($102) + ($98<<3)|0); + $104 = +HEAPF64[$103>>3]; + $105 = $t; + $106 = (0 - ($105))|0; + $107 = $l; + $108 = (($106) + ($107))|0; + $109 = (($108) - 1)|0; + $110 = $1; + $111 = (($110) + ($109<<3)|0); + $112 = +HEAPF64[$111>>3]; + $113 = $104 * $112; + $114 = $i; + $115 = $5; + $116 = (($115) + ($114<<3)|0); + $117 = +HEAPF64[$116>>3]; + $118 = $117 + $113; + HEAPF64[$116>>3] = $118; + break; + } + $119 = $t; + $120 = $l; + $121 = (($119) - ($120))|0; + $122 = $2; + $123 = ($121|0)>=($122|0); + if ($123) { + $124 = $l; + $125 = $0; + $126 = HEAP32[$125>>2]|0; + $127 = ((($126)) + 72|0); + $128 = HEAP32[$127>>2]|0; + $129 = (($128) + ($124<<3)|0); + $130 = +HEAPF64[$129>>3]; + $131 = $2; + $132 = $131<<1; + $133 = $t; + $134 = (($132) - ($133))|0; + $135 = $l; + $136 = (($134) + ($135))|0; + $137 = (($136) - 1)|0; + $138 = $1; + $139 = (($138) + ($137<<3)|0); + $140 = +HEAPF64[$139>>3]; + $141 = $130 * $140; + $142 = $i; + $143 = $3; + $144 = (($143) + ($142<<3)|0); + $145 = +HEAPF64[$144>>3]; + $146 = $145 + $141; + HEAPF64[$144>>3] = $146; + $147 = $l; + $148 = $0; + $149 = HEAP32[$148>>2]|0; + $150 = ((($149)) + 76|0); + $151 = HEAP32[$150>>2]|0; + $152 = (($151) + ($147<<3)|0); + $153 = +HEAPF64[$152>>3]; + $154 = $2; + $155 = $154<<1; + $156 = $t; + $157 = (($155) - ($156))|0; + $158 = $l; + $159 = (($157) + ($158))|0; + $160 = (($159) - 1)|0; + $161 = $1; + $162 = (($161) + ($160<<3)|0); + $163 = +HEAPF64[$162>>3]; + $164 = $153 * $163; + $165 = $i; + $166 = $5; + $167 = (($166) + ($165<<3)|0); + $168 = +HEAPF64[$167>>3]; + $169 = $168 + $164; + HEAPF64[$167>>3] = $169; + } + } + } while(0); + $170 = $l; + $171 = (($170) + 1)|0; + $l = $171; + } + $172 = $i; + $173 = (($172) + 1)|0; + $i = $173; + } + STACKTOP = sp;return; +} +function _idwt1($wt,$temp,$cA_up,$cA,$len_cA,$cD,$len_cD,$X_lp,$X_hp,$X) { + $wt = $wt|0; + $temp = $temp|0; + $cA_up = $cA_up|0; + $cA = $cA|0; + $len_cA = $len_cA|0; + $cD = $cD|0; + $len_cD = $len_cD|0; + $X_lp = $X_lp|0; + $X_hp = $X_hp|0; + $X = $X|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0.0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0.0, $117 = 0.0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0; + var $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0; + var $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0; + var $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0; + var $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0; + var $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $N = 0, $N2 = 0, $U = 0, $i = 0, $len_avg = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $0 = $wt; + $1 = $temp; + $2 = $cA_up; + $3 = $cA; + $4 = $len_cA; + $5 = $cD; + $6 = $len_cD; + $7 = $X_lp; + $8 = $X_hp; + $9 = $X; + $10 = $0; + $11 = HEAP32[$10>>2]|0; + $12 = ((($11)) + 64|0); + $13 = HEAP32[$12>>2]|0; + $14 = $0; + $15 = HEAP32[$14>>2]|0; + $16 = ((($15)) + 68|0); + $17 = HEAP32[$16>>2]|0; + $18 = (($13) + ($17))|0; + $19 = (($18|0) / 2)&-1; + $len_avg = $19; + $20 = $6; + $21 = $20<<1; + $N = $21; + $U = 2; + $22 = $3; + $23 = $4; + $24 = $U; + $25 = $2; + (_upsamp2($22,$23,$24,$25)|0); + $26 = $2; + $27 = $4; + $28 = $27<<1; + $29 = $len_avg; + $30 = (($29|0) / 2)&-1; + $31 = $1; + (_per_ext($26,$28,$30,$31)|0); + $32 = $4; + $33 = $32<<1; + $34 = $len_avg; + $35 = (($33) + ($34))|0; + $N2 = $35; + $36 = $0; + $37 = HEAP32[$36>>2]|0; + $38 = ((($37)) + 64|0); + $39 = HEAP32[$38>>2]|0; + $40 = $0; + $41 = HEAP32[$40>>2]|0; + $42 = ((($41)) + 68|0); + $43 = HEAP32[$42>>2]|0; + $44 = ($39|0)==($43|0); + do { + if ($44) { + $45 = $0; + $46 = ((($45)) + 54|0); + $47 = (_strcmp($46,17200)|0); + $48 = ($47|0)!=(0); + if ($48) { + $49 = $0; + $50 = ((($49)) + 54|0); + $51 = (_strcmp($50,17208)|0); + $52 = ($51|0)!=(0); + if ($52) { + label = 5; + break; + } + } + $53 = $N2; + $54 = $len_avg; + $55 = (_conv_init($53,$54)|0); + $56 = $0; + $57 = ((($56)) + 4|0); + HEAP32[$57>>2] = $55; + $58 = $0; + $59 = ((($58)) + 68|0); + HEAP32[$59>>2] = 1; + } else { + label = 5; + } + } while(0); + if ((label|0) == 5) { + $60 = $0; + $61 = HEAP32[$60>>2]|0; + $62 = ((($61)) + 64|0); + $63 = HEAP32[$62>>2]|0; + $64 = $0; + $65 = HEAP32[$64>>2]|0; + $66 = ((($65)) + 68|0); + $67 = HEAP32[$66>>2]|0; + $68 = ($63|0)==($67|0); + if (!($68)) { + (_printf((17264|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + } + $69 = $0; + $70 = $1; + $71 = $N2; + $72 = $0; + $73 = HEAP32[$72>>2]|0; + $74 = ((($73)) + 80|0); + $75 = HEAP32[$74>>2]|0; + $76 = $len_avg; + $77 = $7; + _wconv($69,$70,$71,$75,$76,$77); + $78 = $5; + $79 = $6; + $80 = $U; + $81 = $2; + (_upsamp2($78,$79,$80,$81)|0); + $82 = $2; + $83 = $6; + $84 = $83<<1; + $85 = $len_avg; + $86 = (($85|0) / 2)&-1; + $87 = $1; + (_per_ext($82,$84,$86,$87)|0); + $88 = $6; + $89 = $88<<1; + $90 = $len_avg; + $91 = (($89) + ($90))|0; + $N2 = $91; + $92 = $0; + $93 = $1; + $94 = $N2; + $95 = $0; + $96 = HEAP32[$95>>2]|0; + $97 = ((($96)) + 84|0); + $98 = HEAP32[$97>>2]|0; + $99 = $len_avg; + $100 = $8; + _wconv($92,$93,$94,$98,$99,$100); + $101 = $len_avg; + $102 = (($101) - 1)|0; + $i = $102; + while(1) { + $103 = $i; + $104 = $N; + $105 = $len_avg; + $106 = (($104) + ($105))|0; + $107 = (($106) - 1)|0; + $108 = ($103|0)<($107|0); + if (!($108)) { + break; + } + $109 = $i; + $110 = $7; + $111 = (($110) + ($109<<3)|0); + $112 = +HEAPF64[$111>>3]; + $113 = $i; + $114 = $8; + $115 = (($114) + ($113<<3)|0); + $116 = +HEAPF64[$115>>3]; + $117 = $112 + $116; + $118 = $i; + $119 = $len_avg; + $120 = (($118) - ($119))|0; + $121 = (($120) + 1)|0; + $122 = $9; + $123 = (($122) + ($121<<3)|0); + HEAPF64[$123>>3] = $117; + $124 = $i; + $125 = (($124) + 1)|0; + $i = $125; + } + $126 = $0; + $127 = HEAP32[$126>>2]|0; + $128 = ((($127)) + 64|0); + $129 = HEAP32[$128>>2]|0; + $130 = $0; + $131 = HEAP32[$130>>2]|0; + $132 = ((($131)) + 68|0); + $133 = HEAP32[$132>>2]|0; + $134 = ($129|0)==($133|0); + if (!($134)) { + STACKTOP = sp;return; + } + $135 = $0; + $136 = ((($135)) + 54|0); + $137 = (_strcmp($136,17200)|0); + $138 = ($137|0)!=(0); + if ($138) { + $139 = $0; + $140 = ((($139)) + 54|0); + $141 = (_strcmp($140,17208)|0); + $142 = ($141|0)!=(0); + if ($142) { + STACKTOP = sp;return; + } + } + $143 = $0; + $144 = ((($143)) + 4|0); + $145 = HEAP32[$144>>2]|0; + _free_conv($145); + $146 = $0; + $147 = ((($146)) + 68|0); + HEAP32[$147>>2] = 0; + STACKTOP = sp;return; +} +function _idwt_per($wt,$cA,$len_cA,$cD,$len_cD,$X) { + $wt = $wt|0; + $cA = $cA|0; + $len_cA = $len_cA|0; + $cD = $cD|0; + $len_cD = $len_cD|0; + $X = $X|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0.0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0.0, $113 = 0.0, $114 = 0.0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0.0, $119 = 0.0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0.0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0.0, $148 = 0.0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0.0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0.0, $164 = 0.0, $165 = 0.0, $166 = 0, $167 = 0, $168 = 0, $169 = 0.0, $17 = 0; + var $170 = 0.0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0.0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0.0, $187 = 0.0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0.0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0.0, $204 = 0.0, $205 = 0.0; + var $206 = 0, $207 = 0, $208 = 0, $209 = 0.0, $21 = 0, $210 = 0.0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; + var $224 = 0, $225 = 0, $226 = 0, $227 = 0.0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0.0, $236 = 0.0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; + var $242 = 0, $243 = 0.0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0.0, $252 = 0.0, $253 = 0.0, $254 = 0, $255 = 0, $256 = 0, $257 = 0.0, $258 = 0.0, $259 = 0, $26 = 0; + var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0.0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0.0, $275 = 0.0, $276 = 0, $277 = 0, $278 = 0; + var $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0.0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0.0, $292 = 0.0, $293 = 0.0, $294 = 0, $295 = 0, $296 = 0; + var $297 = 0.0, $298 = 0.0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0; + var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0.0, $57 = 0, $58 = 0, $59 = 0, $6 = 0; + var $60 = 0, $61 = 0, $62 = 0.0, $63 = 0.0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0.0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0.0, $77 = 0.0, $78 = 0.0; + var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0.0, $83 = 0.0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0.0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0; + var $97 = 0.0, $98 = 0.0, $99 = 0, $N = 0, $i = 0, $l = 0, $l2 = 0, $len_avg = 0, $m = 0, $n = 0, $t = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $cA; + $2 = $len_cA; + $3 = $cD; + $4 = $len_cD; + $5 = $X; + $6 = $0; + $7 = HEAP32[$6>>2]|0; + $8 = ((($7)) + 64|0); + $9 = HEAP32[$8>>2]|0; + $10 = $0; + $11 = HEAP32[$10>>2]|0; + $12 = ((($11)) + 68|0); + $13 = HEAP32[$12>>2]|0; + $14 = (($9) + ($13))|0; + $15 = (($14|0) / 2)&-1; + $len_avg = $15; + $16 = $2; + $17 = $16<<1; + $N = $17; + $18 = $len_avg; + $19 = (($18|0) / 2)&-1; + $l2 = $19; + $m = -2; + $n = -1; + $i = 0; + while(1) { + $20 = $i; + $21 = $2; + $22 = $l2; + $23 = (($21) + ($22))|0; + $24 = (($23) - 1)|0; + $25 = ($20|0)<($24|0); + if (!($25)) { + break; + } + $26 = $m; + $27 = (($26) + 2)|0; + $m = $27; + $28 = $n; + $29 = (($28) + 2)|0; + $n = $29; + $30 = $m; + $31 = $5; + $32 = (($31) + ($30<<3)|0); + HEAPF64[$32>>3] = 0.0; + $33 = $n; + $34 = $5; + $35 = (($34) + ($33<<3)|0); + HEAPF64[$35>>3] = 0.0; + $l = 0; + while(1) { + $36 = $l; + $37 = $l2; + $38 = ($36|0)<($37|0); + if (!($38)) { + break; + } + $39 = $l; + $40 = $39<<1; + $t = $40; + $41 = $i; + $42 = $l; + $43 = (($41) - ($42))|0; + $44 = ($43|0)>=(0); + if ($44) { + $45 = $i; + $46 = $l; + $47 = (($45) - ($46))|0; + $48 = $2; + $49 = ($47|0)<($48|0); + if ($49) { + $50 = $t; + $51 = $0; + $52 = HEAP32[$51>>2]|0; + $53 = ((($52)) + 80|0); + $54 = HEAP32[$53>>2]|0; + $55 = (($54) + ($50<<3)|0); + $56 = +HEAPF64[$55>>3]; + $57 = $i; + $58 = $l; + $59 = (($57) - ($58))|0; + $60 = $1; + $61 = (($60) + ($59<<3)|0); + $62 = +HEAPF64[$61>>3]; + $63 = $56 * $62; + $64 = $t; + $65 = $0; + $66 = HEAP32[$65>>2]|0; + $67 = ((($66)) + 84|0); + $68 = HEAP32[$67>>2]|0; + $69 = (($68) + ($64<<3)|0); + $70 = +HEAPF64[$69>>3]; + $71 = $i; + $72 = $l; + $73 = (($71) - ($72))|0; + $74 = $3; + $75 = (($74) + ($73<<3)|0); + $76 = +HEAPF64[$75>>3]; + $77 = $70 * $76; + $78 = $63 + $77; + $79 = $m; + $80 = $5; + $81 = (($80) + ($79<<3)|0); + $82 = +HEAPF64[$81>>3]; + $83 = $82 + $78; + HEAPF64[$81>>3] = $83; + $84 = $t; + $85 = (($84) + 1)|0; + $86 = $0; + $87 = HEAP32[$86>>2]|0; + $88 = ((($87)) + 80|0); + $89 = HEAP32[$88>>2]|0; + $90 = (($89) + ($85<<3)|0); + $91 = +HEAPF64[$90>>3]; + $92 = $i; + $93 = $l; + $94 = (($92) - ($93))|0; + $95 = $1; + $96 = (($95) + ($94<<3)|0); + $97 = +HEAPF64[$96>>3]; + $98 = $91 * $97; + $99 = $t; + $100 = (($99) + 1)|0; + $101 = $0; + $102 = HEAP32[$101>>2]|0; + $103 = ((($102)) + 84|0); + $104 = HEAP32[$103>>2]|0; + $105 = (($104) + ($100<<3)|0); + $106 = +HEAPF64[$105>>3]; + $107 = $i; + $108 = $l; + $109 = (($107) - ($108))|0; + $110 = $3; + $111 = (($110) + ($109<<3)|0); + $112 = +HEAPF64[$111>>3]; + $113 = $106 * $112; + $114 = $98 + $113; + $115 = $n; + $116 = $5; + $117 = (($116) + ($115<<3)|0); + $118 = +HEAPF64[$117>>3]; + $119 = $118 + $114; + HEAPF64[$117>>3] = $119; + } else { + label = 8; + } + } else { + label = 8; + } + do { + if ((label|0) == 8) { + label = 0; + $120 = $i; + $121 = $l; + $122 = (($120) - ($121))|0; + $123 = $2; + $124 = ($122|0)>=($123|0); + if ($124) { + $125 = $i; + $126 = $l; + $127 = (($125) - ($126))|0; + $128 = $2; + $129 = $len_avg; + $130 = (($128) + ($129))|0; + $131 = (($130) - 1)|0; + $132 = ($127|0)<($131|0); + if ($132) { + $133 = $t; + $134 = $0; + $135 = HEAP32[$134>>2]|0; + $136 = ((($135)) + 80|0); + $137 = HEAP32[$136>>2]|0; + $138 = (($137) + ($133<<3)|0); + $139 = +HEAPF64[$138>>3]; + $140 = $i; + $141 = $l; + $142 = (($140) - ($141))|0; + $143 = $2; + $144 = (($142) - ($143))|0; + $145 = $1; + $146 = (($145) + ($144<<3)|0); + $147 = +HEAPF64[$146>>3]; + $148 = $139 * $147; + $149 = $t; + $150 = $0; + $151 = HEAP32[$150>>2]|0; + $152 = ((($151)) + 84|0); + $153 = HEAP32[$152>>2]|0; + $154 = (($153) + ($149<<3)|0); + $155 = +HEAPF64[$154>>3]; + $156 = $i; + $157 = $l; + $158 = (($156) - ($157))|0; + $159 = $2; + $160 = (($158) - ($159))|0; + $161 = $3; + $162 = (($161) + ($160<<3)|0); + $163 = +HEAPF64[$162>>3]; + $164 = $155 * $163; + $165 = $148 + $164; + $166 = $m; + $167 = $5; + $168 = (($167) + ($166<<3)|0); + $169 = +HEAPF64[$168>>3]; + $170 = $169 + $165; + HEAPF64[$168>>3] = $170; + $171 = $t; + $172 = (($171) + 1)|0; + $173 = $0; + $174 = HEAP32[$173>>2]|0; + $175 = ((($174)) + 80|0); + $176 = HEAP32[$175>>2]|0; + $177 = (($176) + ($172<<3)|0); + $178 = +HEAPF64[$177>>3]; + $179 = $i; + $180 = $l; + $181 = (($179) - ($180))|0; + $182 = $2; + $183 = (($181) - ($182))|0; + $184 = $1; + $185 = (($184) + ($183<<3)|0); + $186 = +HEAPF64[$185>>3]; + $187 = $178 * $186; + $188 = $t; + $189 = (($188) + 1)|0; + $190 = $0; + $191 = HEAP32[$190>>2]|0; + $192 = ((($191)) + 84|0); + $193 = HEAP32[$192>>2]|0; + $194 = (($193) + ($189<<3)|0); + $195 = +HEAPF64[$194>>3]; + $196 = $i; + $197 = $l; + $198 = (($196) - ($197))|0; + $199 = $2; + $200 = (($198) - ($199))|0; + $201 = $3; + $202 = (($201) + ($200<<3)|0); + $203 = +HEAPF64[$202>>3]; + $204 = $195 * $203; + $205 = $187 + $204; + $206 = $n; + $207 = $5; + $208 = (($207) + ($206<<3)|0); + $209 = +HEAPF64[$208>>3]; + $210 = $209 + $205; + HEAPF64[$208>>3] = $210; + break; + } + } + $211 = $i; + $212 = $l; + $213 = (($211) - ($212))|0; + $214 = ($213|0)<(0); + if ($214) { + $215 = $i; + $216 = $l; + $217 = (($215) - ($216))|0; + $218 = $l2; + $219 = (0 - ($218))|0; + $220 = ($217|0)>($219|0); + if ($220) { + $221 = $t; + $222 = $0; + $223 = HEAP32[$222>>2]|0; + $224 = ((($223)) + 80|0); + $225 = HEAP32[$224>>2]|0; + $226 = (($225) + ($221<<3)|0); + $227 = +HEAPF64[$226>>3]; + $228 = $2; + $229 = $i; + $230 = (($228) + ($229))|0; + $231 = $l; + $232 = (($230) - ($231))|0; + $233 = $1; + $234 = (($233) + ($232<<3)|0); + $235 = +HEAPF64[$234>>3]; + $236 = $227 * $235; + $237 = $t; + $238 = $0; + $239 = HEAP32[$238>>2]|0; + $240 = ((($239)) + 84|0); + $241 = HEAP32[$240>>2]|0; + $242 = (($241) + ($237<<3)|0); + $243 = +HEAPF64[$242>>3]; + $244 = $2; + $245 = $i; + $246 = (($244) + ($245))|0; + $247 = $l; + $248 = (($246) - ($247))|0; + $249 = $3; + $250 = (($249) + ($248<<3)|0); + $251 = +HEAPF64[$250>>3]; + $252 = $243 * $251; + $253 = $236 + $252; + $254 = $m; + $255 = $5; + $256 = (($255) + ($254<<3)|0); + $257 = +HEAPF64[$256>>3]; + $258 = $257 + $253; + HEAPF64[$256>>3] = $258; + $259 = $t; + $260 = (($259) + 1)|0; + $261 = $0; + $262 = HEAP32[$261>>2]|0; + $263 = ((($262)) + 80|0); + $264 = HEAP32[$263>>2]|0; + $265 = (($264) + ($260<<3)|0); + $266 = +HEAPF64[$265>>3]; + $267 = $2; + $268 = $i; + $269 = (($267) + ($268))|0; + $270 = $l; + $271 = (($269) - ($270))|0; + $272 = $1; + $273 = (($272) + ($271<<3)|0); + $274 = +HEAPF64[$273>>3]; + $275 = $266 * $274; + $276 = $t; + $277 = (($276) + 1)|0; + $278 = $0; + $279 = HEAP32[$278>>2]|0; + $280 = ((($279)) + 84|0); + $281 = HEAP32[$280>>2]|0; + $282 = (($281) + ($277<<3)|0); + $283 = +HEAPF64[$282>>3]; + $284 = $2; + $285 = $i; + $286 = (($284) + ($285))|0; + $287 = $l; + $288 = (($286) - ($287))|0; + $289 = $3; + $290 = (($289) + ($288<<3)|0); + $291 = +HEAPF64[$290>>3]; + $292 = $283 * $291; + $293 = $275 + $292; + $294 = $n; + $295 = $5; + $296 = (($295) + ($294<<3)|0); + $297 = +HEAPF64[$296>>3]; + $298 = $297 + $293; + HEAPF64[$296>>3] = $298; + } + } + } + } while(0); + $299 = $l; + $300 = (($299) + 1)|0; + $l = $300; + } + $301 = $i; + $302 = (($301) + 1)|0; + $i = $302; + } + STACKTOP = sp;return; +} +function _idwt_sym($wt,$cA,$len_cA,$cD,$len_cD,$X) { + $wt = $wt|0; + $cA = $cA|0; + $len_cA = $len_cA|0; + $cD = $cD|0; + $len_cD = $len_cD|0; + $X = $X|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0.0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0.0, $114 = 0.0, $115 = 0.0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0.0, $12 = 0, $120 = 0.0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0; + var $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0; + var $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0.0, $58 = 0; + var $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0.0, $64 = 0.0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0.0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0; + var $77 = 0.0, $78 = 0.0, $79 = 0.0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0.0, $84 = 0.0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0.0, $93 = 0, $94 = 0; + var $95 = 0, $96 = 0, $97 = 0, $98 = 0.0, $99 = 0.0, $N = 0, $i = 0, $l = 0, $l2 = 0, $len_avg = 0, $m = 0, $n = 0, $t = 0, $v = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $cA; + $2 = $len_cA; + $3 = $cD; + $4 = $len_cD; + $5 = $X; + $6 = $0; + $7 = HEAP32[$6>>2]|0; + $8 = ((($7)) + 64|0); + $9 = HEAP32[$8>>2]|0; + $10 = $0; + $11 = HEAP32[$10>>2]|0; + $12 = ((($11)) + 68|0); + $13 = HEAP32[$12>>2]|0; + $14 = (($9) + ($13))|0; + $15 = (($14|0) / 2)&-1; + $len_avg = $15; + $16 = $2; + $17 = $16<<1; + $18 = (($17) - 1)|0; + $N = $18; + $m = -2; + $n = -1; + $19 = $len_avg; + $20 = (($19) - 2)|0; + $21 = (($20|0) / 2)&-1; + $l2 = $21; + $v = 0; + while(1) { + $22 = $v; + $23 = $2; + $24 = ($22|0)<($23|0); + if (!($24)) { + break; + } + $25 = $v; + $i = $25; + $26 = $m; + $27 = (($26) + 2)|0; + $m = $27; + $28 = $n; + $29 = (($28) + 2)|0; + $n = $29; + $30 = $m; + $31 = $5; + $32 = (($31) + ($30<<3)|0); + HEAPF64[$32>>3] = 0.0; + $33 = $n; + $34 = $5; + $35 = (($34) + ($33<<3)|0); + HEAPF64[$35>>3] = 0.0; + $l = 0; + while(1) { + $36 = $l; + $37 = $len_avg; + $38 = (($37|0) / 2)&-1; + $39 = ($36|0)<($38|0); + if (!($39)) { + break; + } + $40 = $l; + $41 = $40<<1; + $t = $41; + $42 = $i; + $43 = $l; + $44 = (($42) - ($43))|0; + $45 = ($44|0)>=(0); + if ($45) { + $46 = $i; + $47 = $l; + $48 = (($46) - ($47))|0; + $49 = $2; + $50 = ($48|0)<($49|0); + if ($50) { + $51 = $t; + $52 = $0; + $53 = HEAP32[$52>>2]|0; + $54 = ((($53)) + 80|0); + $55 = HEAP32[$54>>2]|0; + $56 = (($55) + ($51<<3)|0); + $57 = +HEAPF64[$56>>3]; + $58 = $i; + $59 = $l; + $60 = (($58) - ($59))|0; + $61 = $1; + $62 = (($61) + ($60<<3)|0); + $63 = +HEAPF64[$62>>3]; + $64 = $57 * $63; + $65 = $t; + $66 = $0; + $67 = HEAP32[$66>>2]|0; + $68 = ((($67)) + 84|0); + $69 = HEAP32[$68>>2]|0; + $70 = (($69) + ($65<<3)|0); + $71 = +HEAPF64[$70>>3]; + $72 = $i; + $73 = $l; + $74 = (($72) - ($73))|0; + $75 = $3; + $76 = (($75) + ($74<<3)|0); + $77 = +HEAPF64[$76>>3]; + $78 = $71 * $77; + $79 = $64 + $78; + $80 = $m; + $81 = $5; + $82 = (($81) + ($80<<3)|0); + $83 = +HEAPF64[$82>>3]; + $84 = $83 + $79; + HEAPF64[$82>>3] = $84; + $85 = $t; + $86 = (($85) + 1)|0; + $87 = $0; + $88 = HEAP32[$87>>2]|0; + $89 = ((($88)) + 80|0); + $90 = HEAP32[$89>>2]|0; + $91 = (($90) + ($86<<3)|0); + $92 = +HEAPF64[$91>>3]; + $93 = $i; + $94 = $l; + $95 = (($93) - ($94))|0; + $96 = $1; + $97 = (($96) + ($95<<3)|0); + $98 = +HEAPF64[$97>>3]; + $99 = $92 * $98; + $100 = $t; + $101 = (($100) + 1)|0; + $102 = $0; + $103 = HEAP32[$102>>2]|0; + $104 = ((($103)) + 84|0); + $105 = HEAP32[$104>>2]|0; + $106 = (($105) + ($101<<3)|0); + $107 = +HEAPF64[$106>>3]; + $108 = $i; + $109 = $l; + $110 = (($108) - ($109))|0; + $111 = $3; + $112 = (($111) + ($110<<3)|0); + $113 = +HEAPF64[$112>>3]; + $114 = $107 * $113; + $115 = $99 + $114; + $116 = $n; + $117 = $5; + $118 = (($117) + ($116<<3)|0); + $119 = +HEAPF64[$118>>3]; + $120 = $119 + $115; + HEAPF64[$118>>3] = $120; + } + } + $121 = $l; + $122 = (($121) + 1)|0; + $l = $122; + } + $123 = $v; + $124 = (($123) + 1)|0; + $v = $124; + } + STACKTOP = sp;return; +} +function _wconv($wt,$sig,$N,$filt,$L,$oup) { + $wt = $wt|0; + $sig = $sig|0; + $N = $N|0; + $filt = $filt|0; + $L = $L|0; + $oup = $oup|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $0 = $wt; + $1 = $sig; + $2 = $N; + $3 = $filt; + $4 = $L; + $5 = $oup; + $6 = $0; + $7 = ((($6)) + 54|0); + $8 = (_strcmp($7,17192)|0); + $9 = ($8|0)!=(0); + if (!($9)) { + $10 = $1; + $11 = $2; + $12 = $3; + $13 = $4; + $14 = $5; + _conv_direct($10,$11,$12,$13,$14); + STACKTOP = sp;return; + } + $15 = $0; + $16 = ((($15)) + 54|0); + $17 = (_strcmp($16,17200)|0); + $18 = ($17|0)!=(0); + if ($18) { + $19 = $0; + $20 = ((($19)) + 54|0); + $21 = (_strcmp($20,17208)|0); + $22 = ($21|0)!=(0); + if ($22) { + (_printf((17368|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + } + $23 = $0; + $24 = ((($23)) + 68|0); + $25 = HEAP32[$24>>2]|0; + $26 = ($25|0)==(0); + if ($26) { + $27 = $2; + $28 = $4; + $29 = (_conv_init($27,$28)|0); + $30 = $0; + $31 = ((($30)) + 4|0); + HEAP32[$31>>2] = $29; + $32 = $0; + $33 = ((($32)) + 4|0); + $34 = HEAP32[$33>>2]|0; + $35 = $1; + $36 = $3; + $37 = $5; + _conv_fft($34,$35,$36,$37); + $38 = $0; + $39 = ((($38)) + 4|0); + $40 = HEAP32[$39>>2]|0; + _free_conv($40); + STACKTOP = sp;return; + } else { + $41 = $0; + $42 = ((($41)) + 4|0); + $43 = HEAP32[$42>>2]|0; + $44 = $1; + $45 = $3; + $46 = $5; + _conv_fft($43,$44,$45,$46); + STACKTOP = sp;return; + } +} +function _swt_direct($wt,$inp) { + $wt = $wt|0; + $inp = $inp|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0.0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $12 = 0, $13 = 0; + var $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0; + var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0; + var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0.0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0; + var $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0; + var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0.0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $J = 0, $M = 0, $N = 0, $cA = 0, $cD = 0, $i = 0; + var $iter = 0, $len_filt = 0, $lenacc = 0, $temp_len = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $inp; + $2 = $0; + $3 = ((($2)) + 20|0); + $4 = HEAP32[$3>>2]|0; + $temp_len = $4; + $5 = $0; + $6 = ((($5)) + 32|0); + $7 = HEAP32[$6>>2]|0; + $J = $7; + $8 = $temp_len; + $9 = $J; + $10 = $0; + $11 = ((($10)) + 76|0); + $12 = (($11) + ($9<<2)|0); + HEAP32[$12>>2] = $8; + $13 = $0; + $14 = ((($13)) + 76|0); + HEAP32[$14>>2] = $8; + $15 = $J; + $16 = (($15) + 1)|0; + $17 = $temp_len; + $18 = Math_imul($16, $17)|0; + $19 = $J; + $20 = (($19) + 1)|0; + $21 = $0; + $22 = ((($21)) + 76|0); + $23 = (($22) + ($20<<2)|0); + HEAP32[$23>>2] = $18; + $24 = $0; + $25 = ((($24)) + 24|0); + HEAP32[$25>>2] = $18; + $26 = $0; + $27 = HEAP32[$26>>2]|0; + $28 = ((($27)) + 52|0); + $29 = HEAP32[$28>>2]|0; + $len_filt = $29; + $M = 1; + $iter = 1; + while(1) { + $30 = $iter; + $31 = $J; + $32 = ($30|0)<($31|0); + if (!($32)) { + break; + } + $33 = $M; + $34 = $33<<1; + $M = $34; + $35 = $temp_len; + $36 = $iter; + $37 = $0; + $38 = ((($37)) + 76|0); + $39 = (($38) + ($36<<2)|0); + HEAP32[$39>>2] = $35; + $40 = $iter; + $41 = (($40) + 1)|0; + $iter = $41; + } + $42 = $temp_len; + $43 = $42<<3; + $44 = (_malloc($43)|0); + $cA = $44; + $45 = $temp_len; + $46 = $45<<3; + $47 = (_malloc($46)|0); + $cD = $47; + $M = 1; + $i = 0; + while(1) { + $48 = $i; + $49 = $temp_len; + $50 = ($48|0)<($49|0); + if (!($50)) { + break; + } + $51 = $i; + $52 = $1; + $53 = (($52) + ($51<<3)|0); + $54 = +HEAPF64[$53>>3]; + $55 = $i; + $56 = $0; + $57 = ((($56)) + 488|0); + $58 = (($57) + ($55<<3)|0); + HEAPF64[$58>>3] = $54; + $59 = $i; + $60 = (($59) + 1)|0; + $i = $60; + } + $61 = $0; + $62 = ((($61)) + 24|0); + $63 = HEAP32[$62>>2]|0; + $lenacc = $63; + $iter = 0; + while(1) { + $64 = $iter; + $65 = $J; + $66 = ($64|0)<($65|0); + if (!($66)) { + break; + } + $67 = $temp_len; + $68 = $lenacc; + $69 = (($68) - ($67))|0; + $lenacc = $69; + $70 = $iter; + $71 = ($70|0)>(0); + if ($71) { + $72 = $M; + $73 = $72<<1; + $M = $73; + $74 = $M; + $75 = $len_filt; + $76 = Math_imul($74, $75)|0; + $N = $76; + } else { + $77 = $len_filt; + $N = $77; + } + $78 = $0; + $79 = $M; + $80 = $0; + $81 = ((($80)) + 488|0); + $82 = $temp_len; + $83 = $cA; + $84 = $temp_len; + $85 = $cD; + $86 = $temp_len; + _swt_per($78,$79,$81,$82,$83,$84,$85,$86); + $i = 0; + while(1) { + $87 = $i; + $88 = $temp_len; + $89 = ($87|0)<($88|0); + if (!($89)) { + break; + } + $90 = $i; + $91 = $cA; + $92 = (($91) + ($90<<3)|0); + $93 = +HEAPF64[$92>>3]; + $94 = $i; + $95 = $0; + $96 = ((($95)) + 488|0); + $97 = (($96) + ($94<<3)|0); + HEAPF64[$97>>3] = $93; + $98 = $i; + $99 = $cD; + $100 = (($99) + ($98<<3)|0); + $101 = +HEAPF64[$100>>3]; + $102 = $lenacc; + $103 = $i; + $104 = (($102) + ($103))|0; + $105 = $0; + $106 = ((($105)) + 488|0); + $107 = (($106) + ($104<<3)|0); + HEAPF64[$107>>3] = $101; + $108 = $i; + $109 = (($108) + 1)|0; + $i = $109; + } + $110 = $iter; + $111 = (($110) + 1)|0; + $iter = $111; + } + $112 = $cA; + _free($112); + $113 = $cD; + _free($113); + STACKTOP = sp;return; +} +function _swt_fft($wt,$inp) { + $wt = $wt|0; + $inp = $inp|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0.0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0, $155 = 0.0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; + var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; + var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; + var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0.0, $258 = 0, $259 = 0, $26 = 0; + var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0.0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0; + var $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0; + var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0; + var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0; + var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0.0, $93 = 0, $94 = 0, $95 = 0, $96 = 0; + var $97 = 0, $98 = 0, $99 = 0, $J = 0, $M = 0, $N = 0, $cA = 0, $cD = 0, $high_pass = 0, $i = 0, $iter = 0, $len_filt = 0, $lenacc = 0, $low_pass = 0, $sig = 0, $temp_len = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $vararg_buffer = sp; + $0 = $wt; + $1 = $inp; + $2 = $0; + $3 = ((($2)) + 20|0); + $4 = HEAP32[$3>>2]|0; + $temp_len = $4; + $5 = $0; + $6 = ((($5)) + 32|0); + $7 = HEAP32[$6>>2]|0; + $J = $7; + $8 = $temp_len; + $9 = $J; + $10 = $0; + $11 = ((($10)) + 76|0); + $12 = (($11) + ($9<<2)|0); + HEAP32[$12>>2] = $8; + $13 = $0; + $14 = ((($13)) + 76|0); + HEAP32[$14>>2] = $8; + $15 = $J; + $16 = (($15) + 1)|0; + $17 = $temp_len; + $18 = Math_imul($16, $17)|0; + $19 = $J; + $20 = (($19) + 1)|0; + $21 = $0; + $22 = ((($21)) + 76|0); + $23 = (($22) + ($20<<2)|0); + HEAP32[$23>>2] = $18; + $24 = $0; + $25 = ((($24)) + 24|0); + HEAP32[$25>>2] = $18; + $M = 1; + $iter = 1; + while(1) { + $26 = $iter; + $27 = $J; + $28 = ($26|0)<($27|0); + if (!($28)) { + break; + } + $29 = $M; + $30 = $29<<1; + $M = $30; + $31 = $temp_len; + $32 = $iter; + $33 = $0; + $34 = ((($33)) + 76|0); + $35 = (($34) + ($32<<2)|0); + HEAP32[$35>>2] = $31; + $36 = $iter; + $37 = (($36) + 1)|0; + $iter = $37; + } + $38 = $0; + $39 = HEAP32[$38>>2]|0; + $40 = ((($39)) + 52|0); + $41 = HEAP32[$40>>2]|0; + $len_filt = $41; + $42 = $M; + $43 = $42<<3; + $44 = $len_filt; + $45 = Math_imul($43, $44)|0; + $46 = (_malloc($45)|0); + $low_pass = $46; + $47 = $M; + $48 = $47<<3; + $49 = $len_filt; + $50 = Math_imul($48, $49)|0; + $51 = (_malloc($50)|0); + $high_pass = $51; + $52 = $M; + $53 = $len_filt; + $54 = Math_imul($52, $53)|0; + $55 = $temp_len; + $56 = (($54) + ($55))|0; + $57 = $temp_len; + $58 = (($57|0) % 2)&-1; + $59 = (($56) + ($58))|0; + $60 = $59<<3; + $61 = (_malloc($60)|0); + $sig = $61; + $62 = $M; + $63 = $62<<1; + $64 = $len_filt; + $65 = Math_imul($63, $64)|0; + $66 = $temp_len; + $67 = (($65) + ($66))|0; + $68 = $temp_len; + $69 = (($68|0) % 2)&-1; + $70 = (($67) + ($69))|0; + $71 = $70<<3; + $72 = (($71) - 1)|0; + $73 = (_malloc($72)|0); + $cA = $73; + $74 = $M; + $75 = $74<<1; + $76 = $len_filt; + $77 = Math_imul($75, $76)|0; + $78 = $temp_len; + $79 = (($77) + ($78))|0; + $80 = $temp_len; + $81 = (($80|0) % 2)&-1; + $82 = (($79) + ($81))|0; + $83 = $82<<3; + $84 = (($83) - 1)|0; + $85 = (_malloc($84)|0); + $cD = $85; + $M = 1; + $i = 0; + while(1) { + $86 = $i; + $87 = $temp_len; + $88 = ($86|0)<($87|0); + if (!($88)) { + break; + } + $89 = $i; + $90 = $1; + $91 = (($90) + ($89<<3)|0); + $92 = +HEAPF64[$91>>3]; + $93 = $i; + $94 = $0; + $95 = ((($94)) + 488|0); + $96 = (($95) + ($93<<3)|0); + HEAPF64[$96>>3] = $92; + $97 = $i; + $98 = (($97) + 1)|0; + $i = $98; + } + $99 = $0; + $100 = ((($99)) + 24|0); + $101 = HEAP32[$100>>2]|0; + $lenacc = $101; + $iter = 0; + while(1) { + $102 = $iter; + $103 = $J; + $104 = ($102|0)<($103|0); + if (!($104)) { + label = 28; + break; + } + $105 = $temp_len; + $106 = $lenacc; + $107 = (($106) - ($105))|0; + $lenacc = $107; + $108 = $iter; + $109 = ($108|0)>(0); + L12: do { + if ($109) { + $110 = $M; + $111 = $110<<1; + $M = $111; + $112 = $M; + $113 = $len_filt; + $114 = Math_imul($112, $113)|0; + $N = $114; + $115 = $0; + $116 = HEAP32[$115>>2]|0; + $117 = ((($116)) + 72|0); + $118 = HEAP32[$117>>2]|0; + $119 = $0; + $120 = HEAP32[$119>>2]|0; + $121 = ((($120)) + 56|0); + $122 = HEAP32[$121>>2]|0; + $123 = $M; + $124 = $low_pass; + (_upsamp2($118,$122,$123,$124)|0); + $125 = $0; + $126 = HEAP32[$125>>2]|0; + $127 = ((($126)) + 76|0); + $128 = HEAP32[$127>>2]|0; + $129 = $0; + $130 = HEAP32[$129>>2]|0; + $131 = ((($130)) + 60|0); + $132 = HEAP32[$131>>2]|0; + $133 = $M; + $134 = $high_pass; + (_upsamp2($128,$132,$133,$134)|0); + } else { + $135 = $len_filt; + $N = $135; + $i = 0; + while(1) { + $136 = $i; + $137 = $N; + $138 = ($136|0)<($137|0); + if (!($138)) { + break L12; + } + $139 = $i; + $140 = $0; + $141 = HEAP32[$140>>2]|0; + $142 = ((($141)) + 72|0); + $143 = HEAP32[$142>>2]|0; + $144 = (($143) + ($139<<3)|0); + $145 = +HEAPF64[$144>>3]; + $146 = $i; + $147 = $low_pass; + $148 = (($147) + ($146<<3)|0); + HEAPF64[$148>>3] = $145; + $149 = $i; + $150 = $0; + $151 = HEAP32[$150>>2]|0; + $152 = ((($151)) + 76|0); + $153 = HEAP32[$152>>2]|0; + $154 = (($153) + ($149<<3)|0); + $155 = +HEAPF64[$154>>3]; + $156 = $i; + $157 = $high_pass; + $158 = (($157) + ($156<<3)|0); + HEAPF64[$158>>3] = $155; + $159 = $i; + $160 = (($159) + 1)|0; + $i = $160; + } + } + } while(0); + $161 = $0; + $162 = ((($161)) + 488|0); + $163 = $temp_len; + $164 = $N; + $165 = (($164|0) / 2)&-1; + $166 = $sig; + (_per_ext($162,$163,$165,$166)|0); + $167 = $0; + $168 = HEAP32[$167>>2]|0; + $169 = ((($168)) + 56|0); + $170 = HEAP32[$169>>2]|0; + $171 = $0; + $172 = HEAP32[$171>>2]|0; + $173 = ((($172)) + 60|0); + $174 = HEAP32[$173>>2]|0; + $175 = ($170|0)==($174|0); + do { + if ($175) { + $176 = $0; + $177 = ((($176)) + 54|0); + $178 = (_strcmp($177,17200)|0); + $179 = ($178|0)!=(0); + if ($179) { + $180 = $0; + $181 = ((($180)) + 54|0); + $182 = (_strcmp($181,17208)|0); + $183 = ($182|0)!=(0); + if ($183) { + label = 18; + break; + } + } + $184 = $N; + $185 = $temp_len; + $186 = (($184) + ($185))|0; + $187 = $temp_len; + $188 = (($187|0) % 2)&-1; + $189 = (($186) + ($188))|0; + $190 = $N; + $191 = (_conv_init($189,$190)|0); + $192 = $0; + $193 = ((($192)) + 4|0); + HEAP32[$193>>2] = $191; + $194 = $0; + $195 = ((($194)) + 68|0); + HEAP32[$195>>2] = 1; + } else { + label = 18; + } + } while(0); + if ((label|0) == 18) { + label = 0; + $196 = $0; + $197 = HEAP32[$196>>2]|0; + $198 = ((($197)) + 56|0); + $199 = HEAP32[$198>>2]|0; + $200 = $0; + $201 = HEAP32[$200>>2]|0; + $202 = ((($201)) + 60|0); + $203 = HEAP32[$202>>2]|0; + $204 = ($199|0)==($203|0); + if (!($204)) { + label = 19; + break; + } + } + $205 = $0; + $206 = $sig; + $207 = $N; + $208 = $temp_len; + $209 = (($207) + ($208))|0; + $210 = $temp_len; + $211 = (($210|0) % 2)&-1; + $212 = (($209) + ($211))|0; + $213 = $low_pass; + $214 = $N; + $215 = $cA; + _wconv($205,$206,$212,$213,$214,$215); + $216 = $0; + $217 = $sig; + $218 = $N; + $219 = $temp_len; + $220 = (($218) + ($219))|0; + $221 = $temp_len; + $222 = (($221|0) % 2)&-1; + $223 = (($220) + ($222))|0; + $224 = $high_pass; + $225 = $N; + $226 = $cD; + _wconv($216,$217,$223,$224,$225,$226); + $227 = $0; + $228 = HEAP32[$227>>2]|0; + $229 = ((($228)) + 56|0); + $230 = HEAP32[$229>>2]|0; + $231 = $0; + $232 = HEAP32[$231>>2]|0; + $233 = ((($232)) + 60|0); + $234 = HEAP32[$233>>2]|0; + $235 = ($230|0)==($234|0); + do { + if ($235) { + $236 = $0; + $237 = ((($236)) + 54|0); + $238 = (_strcmp($237,17200)|0); + $239 = ($238|0)!=(0); + if ($239) { + $240 = $0; + $241 = ((($240)) + 54|0); + $242 = (_strcmp($241,17208)|0); + $243 = ($242|0)!=(0); + if ($243) { + break; + } + } + $244 = $0; + $245 = ((($244)) + 4|0); + $246 = HEAP32[$245>>2]|0; + _free_conv($246); + $247 = $0; + $248 = ((($247)) + 68|0); + HEAP32[$248>>2] = 0; + } + } while(0); + $i = 0; + while(1) { + $249 = $i; + $250 = $temp_len; + $251 = ($249|0)<($250|0); + if (!($251)) { + break; + } + $252 = $N; + $253 = $i; + $254 = (($252) + ($253))|0; + $255 = $cA; + $256 = (($255) + ($254<<3)|0); + $257 = +HEAPF64[$256>>3]; + $258 = $i; + $259 = $0; + $260 = ((($259)) + 488|0); + $261 = (($260) + ($258<<3)|0); + HEAPF64[$261>>3] = $257; + $262 = $N; + $263 = $i; + $264 = (($262) + ($263))|0; + $265 = $cD; + $266 = (($265) + ($264<<3)|0); + $267 = +HEAPF64[$266>>3]; + $268 = $lenacc; + $269 = $i; + $270 = (($268) + ($269))|0; + $271 = $0; + $272 = ((($271)) + 488|0); + $273 = (($272) + ($270<<3)|0); + HEAPF64[$273>>3] = $267; + $274 = $i; + $275 = (($274) + 1)|0; + $i = $275; + } + $276 = $iter; + $277 = (($276) + 1)|0; + $iter = $277; + } + if ((label|0) == 19) { + (_printf((17264|0),($vararg_buffer|0))|0); + _exit(-1); + // unreachable; + } + else if ((label|0) == 28) { + $278 = $low_pass; + _free($278); + $279 = $high_pass; + _free($279); + $280 = $sig; + _free($280); + $281 = $cA; + _free($281); + $282 = $cD; + _free($282); + STACKTOP = sp;return; + } +} +function _modwt_per($wt,$M,$inp,$N,$cA,$len_cA,$cD,$len_cD) { + $wt = $wt|0; + $M = $M|0; + $inp = $inp|0; + $N = $N|0; + $cA = $cA|0; + $len_cA = $len_cA|0; + $cD = $cD|0; + $len_cD = $len_cD|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0.0, $103 = 0.0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0.0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0.0, $114 = 0.0, $115 = 0; + var $116 = 0, $117 = 0, $118 = 0.0, $119 = 0.0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $13 = 0, $14 = 0, $15 = 0.0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0; + var $22 = 0, $23 = 0, $24 = 0, $25 = 0.0, $26 = 0.0, $27 = 0.0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0.0, $38 = 0.0, $39 = 0.0, $4 = 0; + var $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0.0, $53 = 0, $54 = 0, $55 = 0, $56 = 0.0, $57 = 0.0, $58 = 0; + var $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0.0, $65 = 0, $66 = 0, $67 = 0, $68 = 0.0, $69 = 0.0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0; + var $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0.0, $94 = 0; + var $95 = 0, $96 = 0, $97 = 0.0, $98 = 0.0, $99 = 0, $filt = 0, $i = 0, $l = 0, $len_avg = 0, $s = 0.0, $t = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $M; + $2 = $inp; + $3 = $N; + $4 = $cA; + $5 = $len_cA; + $6 = $cD; + $7 = $len_cD; + $8 = $0; + $9 = HEAP32[$8>>2]|0; + $10 = ((($9)) + 56|0); + $11 = HEAP32[$10>>2]|0; + $len_avg = $11; + $12 = $len_avg; + $13 = $12<<4; + $14 = (_malloc($13)|0); + $filt = $14; + $15 = (+Math_sqrt(2.0)); + $s = $15; + $i = 0; + while(1) { + $16 = $i; + $17 = $len_avg; + $18 = ($16|0)<($17|0); + if (!($18)) { + break; + } + $19 = $i; + $20 = $0; + $21 = HEAP32[$20>>2]|0; + $22 = ((($21)) + 72|0); + $23 = HEAP32[$22>>2]|0; + $24 = (($23) + ($19<<3)|0); + $25 = +HEAPF64[$24>>3]; + $26 = $s; + $27 = $25 / $26; + $28 = $i; + $29 = $filt; + $30 = (($29) + ($28<<3)|0); + HEAPF64[$30>>3] = $27; + $31 = $i; + $32 = $0; + $33 = HEAP32[$32>>2]|0; + $34 = ((($33)) + 76|0); + $35 = HEAP32[$34>>2]|0; + $36 = (($35) + ($31<<3)|0); + $37 = +HEAPF64[$36>>3]; + $38 = $s; + $39 = $37 / $38; + $40 = $len_avg; + $41 = $i; + $42 = (($40) + ($41))|0; + $43 = $filt; + $44 = (($43) + ($42<<3)|0); + HEAPF64[$44>>3] = $39; + $45 = $i; + $46 = (($45) + 1)|0; + $i = $46; + } + $i = 0; + while(1) { + $47 = $i; + $48 = $5; + $49 = ($47|0)<($48|0); + if (!($49)) { + break; + } + $50 = $i; + $t = $50; + $51 = $filt; + $52 = +HEAPF64[$51>>3]; + $53 = $t; + $54 = $2; + $55 = (($54) + ($53<<3)|0); + $56 = +HEAPF64[$55>>3]; + $57 = $52 * $56; + $58 = $i; + $59 = $4; + $60 = (($59) + ($58<<3)|0); + HEAPF64[$60>>3] = $57; + $61 = $len_avg; + $62 = $filt; + $63 = (($62) + ($61<<3)|0); + $64 = +HEAPF64[$63>>3]; + $65 = $t; + $66 = $2; + $67 = (($66) + ($65<<3)|0); + $68 = +HEAPF64[$67>>3]; + $69 = $64 * $68; + $70 = $i; + $71 = $6; + $72 = (($71) + ($70<<3)|0); + HEAPF64[$72>>3] = $69; + $l = 1; + while(1) { + $73 = $l; + $74 = $len_avg; + $75 = ($73|0)<($74|0); + if (!($75)) { + break; + } + $76 = $1; + $77 = $t; + $78 = (($77) - ($76))|0; + $t = $78; + while(1) { + $79 = $t; + $80 = $5; + $81 = ($79|0)>=($80|0); + if (!($81)) { + break; + } + $82 = $5; + $83 = $t; + $84 = (($83) - ($82))|0; + $t = $84; + } + while(1) { + $85 = $t; + $86 = ($85|0)<(0); + if (!($86)) { + break; + } + $87 = $5; + $88 = $t; + $89 = (($88) + ($87))|0; + $t = $89; + } + $90 = $l; + $91 = $filt; + $92 = (($91) + ($90<<3)|0); + $93 = +HEAPF64[$92>>3]; + $94 = $t; + $95 = $2; + $96 = (($95) + ($94<<3)|0); + $97 = +HEAPF64[$96>>3]; + $98 = $93 * $97; + $99 = $i; + $100 = $4; + $101 = (($100) + ($99<<3)|0); + $102 = +HEAPF64[$101>>3]; + $103 = $102 + $98; + HEAPF64[$101>>3] = $103; + $104 = $len_avg; + $105 = $l; + $106 = (($104) + ($105))|0; + $107 = $filt; + $108 = (($107) + ($106<<3)|0); + $109 = +HEAPF64[$108>>3]; + $110 = $t; + $111 = $2; + $112 = (($111) + ($110<<3)|0); + $113 = +HEAPF64[$112>>3]; + $114 = $109 * $113; + $115 = $i; + $116 = $6; + $117 = (($116) + ($115<<3)|0); + $118 = +HEAPF64[$117>>3]; + $119 = $118 + $114; + HEAPF64[$117>>3] = $119; + $120 = $l; + $121 = (($120) + 1)|0; + $l = $121; + } + $122 = $i; + $123 = (($122) + 1)|0; + $i = $123; + } + $124 = $filt; + _free($124); + STACKTOP = sp;return; +} +function _imodwt_per($wt,$M,$cA,$len_cA,$cD,$len_cD,$X) { + $wt = $wt|0; + $M = $M|0; + $cA = $cA|0; + $len_cA = $len_cA|0; + $cD = $cD|0; + $len_cD = $len_cD|0; + $X = $X|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0.0, $102 = 0, $103 = 0, $104 = 0, $105 = 0.0, $106 = 0.0, $107 = 0.0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0.0, $112 = 0.0, $113 = 0, $114 = 0, $115 = 0; + var $116 = 0, $117 = 0, $12 = 0, $13 = 0, $14 = 0.0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0.0, $25 = 0.0, $26 = 0.0, $27 = 0, $28 = 0; + var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0.0, $37 = 0.0, $38 = 0.0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0; + var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0.0, $52 = 0, $53 = 0, $54 = 0, $55 = 0.0, $56 = 0.0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0.0, $61 = 0, $62 = 0, $63 = 0, $64 = 0.0; + var $65 = 0.0, $66 = 0.0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0; + var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0.0, $91 = 0, $92 = 0, $93 = 0, $94 = 0.0, $95 = 0.0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $filt = 0, $i = 0; + var $l = 0, $len_avg = 0, $s = 0.0, $t = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $M; + $2 = $cA; + $3 = $len_cA; + $4 = $cD; + $5 = $len_cD; + $6 = $X; + $7 = $0; + $8 = HEAP32[$7>>2]|0; + $9 = ((($8)) + 56|0); + $10 = HEAP32[$9>>2]|0; + $len_avg = $10; + $11 = $len_avg; + $12 = $11<<4; + $13 = (_malloc($12)|0); + $filt = $13; + $14 = (+Math_sqrt(2.0)); + $s = $14; + $i = 0; + while(1) { + $15 = $i; + $16 = $len_avg; + $17 = ($15|0)<($16|0); + if (!($17)) { + break; + } + $18 = $i; + $19 = $0; + $20 = HEAP32[$19>>2]|0; + $21 = ((($20)) + 72|0); + $22 = HEAP32[$21>>2]|0; + $23 = (($22) + ($18<<3)|0); + $24 = +HEAPF64[$23>>3]; + $25 = $s; + $26 = $24 / $25; + $27 = $i; + $28 = $filt; + $29 = (($28) + ($27<<3)|0); + HEAPF64[$29>>3] = $26; + $30 = $i; + $31 = $0; + $32 = HEAP32[$31>>2]|0; + $33 = ((($32)) + 76|0); + $34 = HEAP32[$33>>2]|0; + $35 = (($34) + ($30<<3)|0); + $36 = +HEAPF64[$35>>3]; + $37 = $s; + $38 = $36 / $37; + $39 = $len_avg; + $40 = $i; + $41 = (($39) + ($40))|0; + $42 = $filt; + $43 = (($42) + ($41<<3)|0); + HEAPF64[$43>>3] = $38; + $44 = $i; + $45 = (($44) + 1)|0; + $i = $45; + } + $i = 0; + while(1) { + $46 = $i; + $47 = $3; + $48 = ($46|0)<($47|0); + if (!($48)) { + break; + } + $49 = $i; + $t = $49; + $50 = $filt; + $51 = +HEAPF64[$50>>3]; + $52 = $t; + $53 = $2; + $54 = (($53) + ($52<<3)|0); + $55 = +HEAPF64[$54>>3]; + $56 = $51 * $55; + $57 = $len_avg; + $58 = $filt; + $59 = (($58) + ($57<<3)|0); + $60 = +HEAPF64[$59>>3]; + $61 = $t; + $62 = $4; + $63 = (($62) + ($61<<3)|0); + $64 = +HEAPF64[$63>>3]; + $65 = $60 * $64; + $66 = $56 + $65; + $67 = $i; + $68 = $6; + $69 = (($68) + ($67<<3)|0); + HEAPF64[$69>>3] = $66; + $l = 1; + while(1) { + $70 = $l; + $71 = $len_avg; + $72 = ($70|0)<($71|0); + if (!($72)) { + break; + } + $73 = $1; + $74 = $t; + $75 = (($74) + ($73))|0; + $t = $75; + while(1) { + $76 = $t; + $77 = $3; + $78 = ($76|0)>=($77|0); + if (!($78)) { + break; + } + $79 = $3; + $80 = $t; + $81 = (($80) - ($79))|0; + $t = $81; + } + while(1) { + $82 = $t; + $83 = ($82|0)<(0); + if (!($83)) { + break; + } + $84 = $3; + $85 = $t; + $86 = (($85) + ($84))|0; + $t = $86; + } + $87 = $l; + $88 = $filt; + $89 = (($88) + ($87<<3)|0); + $90 = +HEAPF64[$89>>3]; + $91 = $t; + $92 = $2; + $93 = (($92) + ($91<<3)|0); + $94 = +HEAPF64[$93>>3]; + $95 = $90 * $94; + $96 = $len_avg; + $97 = $l; + $98 = (($96) + ($97))|0; + $99 = $filt; + $100 = (($99) + ($98<<3)|0); + $101 = +HEAPF64[$100>>3]; + $102 = $t; + $103 = $4; + $104 = (($103) + ($102<<3)|0); + $105 = +HEAPF64[$104>>3]; + $106 = $101 * $105; + $107 = $95 + $106; + $108 = $i; + $109 = $6; + $110 = (($109) + ($108<<3)|0); + $111 = +HEAPF64[$110>>3]; + $112 = $111 + $107; + HEAPF64[$110>>3] = $112; + $113 = $l; + $114 = (($113) + 1)|0; + $l = $114; + } + $115 = $i; + $116 = (($115) + 1)|0; + $i = $116; + } + $117 = $filt; + _free($117); + STACKTOP = sp;return; +} +function _swt_per($wt,$M,$inp,$N,$cA,$len_cA,$cD,$len_cD) { + $wt = $wt|0; + $M = $M|0; + $inp = $inp|0; + $N = $N|0; + $cA = $cA|0; + $len_cA = $len_cA|0; + $cD = $cD|0; + $len_cD = $len_cD|0; + var $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0.0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0.0, $111 = 0.0, $112 = 0, $113 = 0, $114 = 0, $115 = 0.0; + var $116 = 0.0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0.0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0.0, $13 = 0, $130 = 0.0, $131 = 0, $132 = 0, $133 = 0; + var $134 = 0.0, $135 = 0.0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0.0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; + var $152 = 0, $153 = 0, $154 = 0.0, $155 = 0.0, $156 = 0, $157 = 0, $158 = 0, $159 = 0.0, $16 = 0, $160 = 0.0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0.0, $168 = 0, $169 = 0, $17 = 0; + var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0.0, $176 = 0.0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0.0, $181 = 0.0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; + var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0.0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0.0, $204 = 0.0, $205 = 0; + var $206 = 0, $207 = 0, $208 = 0.0, $209 = 0.0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0.0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; + var $224 = 0.0, $225 = 0.0, $226 = 0, $227 = 0, $228 = 0, $229 = 0.0, $23 = 0, $230 = 0.0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; + var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0.0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0.0, $259 = 0.0, $26 = 0; + var $260 = 0, $261 = 0, $262 = 0, $263 = 0.0, $264 = 0.0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0.0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0; + var $279 = 0, $28 = 0, $280 = 0.0, $281 = 0.0, $282 = 0, $283 = 0, $284 = 0, $285 = 0.0, $286 = 0.0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0.0, $292 = 0.0, $293 = 0, $294 = 0, $295 = 0, $296 = 0.0; + var $297 = 0.0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0.0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0.0, $31 = 0, $310 = 0.0, $311 = 0, $312 = 0, $313 = 0; + var $314 = 0.0, $315 = 0.0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0; + var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0.0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0; + var $62 = 0, $63 = 0.0, $64 = 0.0, $65 = 0, $66 = 0, $67 = 0, $68 = 0.0, $69 = 0.0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0.0, $77 = 0, $78 = 0, $79 = 0, $8 = 0; + var $80 = 0, $81 = 0, $82 = 0.0, $83 = 0.0, $84 = 0, $85 = 0, $86 = 0, $87 = 0.0, $88 = 0.0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0; + var $99 = 0, $i = 0, $isodd = 0, $j = 0, $l = 0, $l2 = 0, $len_avg = 0, $or$cond = 0, $or$cond3 = 0, $t = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $wt; + $1 = $M; + $2 = $inp; + $3 = $N; + $4 = $cA; + $5 = $len_cA; + $6 = $cD; + $7 = $len_cD; + $8 = $1; + $9 = $0; + $10 = HEAP32[$9>>2]|0; + $11 = ((($10)) + 56|0); + $12 = HEAP32[$11>>2]|0; + $13 = Math_imul($8, $12)|0; + $len_avg = $13; + $14 = $len_avg; + $15 = (($14|0) / 2)&-1; + $l2 = $15; + $16 = $3; + $17 = (($16|0) % 2)&-1; + $isodd = $17; + $i = 0; + while(1) { + $18 = $i; + $19 = $5; + $20 = ($18|0)<($19|0); + if (!($20)) { + break; + } + $21 = $i; + $22 = $l2; + $23 = (($21) + ($22))|0; + $t = $23; + $24 = $i; + $25 = $4; + $26 = (($25) + ($24<<3)|0); + HEAPF64[$26>>3] = 0.0; + $27 = $i; + $28 = $6; + $29 = (($28) + ($27<<3)|0); + HEAPF64[$29>>3] = 0.0; + $l = -1; + $j = 0; + while(1) { + $30 = $j; + $31 = $len_avg; + $32 = ($30|0)<($31|0); + if (!($32)) { + break; + } + $33 = $l; + $34 = (($33) + 1)|0; + $l = $34; + while(1) { + $35 = $j; + $36 = $5; + $37 = ($35|0)>=($36|0); + if (!($37)) { + break; + } + $38 = $5; + $39 = $j; + $40 = (($39) - ($38))|0; + $j = $40; + } + $41 = $t; + $42 = $j; + $43 = (($41) - ($42))|0; + $44 = $l2; + $45 = ($43|0)>=($44|0); + if ($45) { + $46 = $t; + $47 = $j; + $48 = (($46) - ($47))|0; + $49 = $3; + $50 = ($48|0)<($49|0); + if ($50) { + $51 = $l; + $52 = $0; + $53 = HEAP32[$52>>2]|0; + $54 = ((($53)) + 72|0); + $55 = HEAP32[$54>>2]|0; + $56 = (($55) + ($51<<3)|0); + $57 = +HEAPF64[$56>>3]; + $58 = $t; + $59 = $j; + $60 = (($58) - ($59))|0; + $61 = $2; + $62 = (($61) + ($60<<3)|0); + $63 = +HEAPF64[$62>>3]; + $64 = $57 * $63; + $65 = $i; + $66 = $4; + $67 = (($66) + ($65<<3)|0); + $68 = +HEAPF64[$67>>3]; + $69 = $68 + $64; + HEAPF64[$67>>3] = $69; + $70 = $l; + $71 = $0; + $72 = HEAP32[$71>>2]|0; + $73 = ((($72)) + 76|0); + $74 = HEAP32[$73>>2]|0; + $75 = (($74) + ($70<<3)|0); + $76 = +HEAPF64[$75>>3]; + $77 = $t; + $78 = $j; + $79 = (($77) - ($78))|0; + $80 = $2; + $81 = (($80) + ($79<<3)|0); + $82 = +HEAPF64[$81>>3]; + $83 = $76 * $82; + $84 = $i; + $85 = $6; + $86 = (($85) + ($84<<3)|0); + $87 = +HEAPF64[$86>>3]; + $88 = $87 + $83; + HEAPF64[$86>>3] = $88; + } else { + label = 11; + } + } else { + label = 11; + } + do { + if ((label|0) == 11) { + label = 0; + $89 = $t; + $90 = $j; + $91 = (($89) - ($90))|0; + $92 = $l2; + $93 = ($91|0)<($92|0); + if ($93) { + $94 = $t; + $95 = $j; + $96 = (($94) - ($95))|0; + $97 = ($96|0)>=(0); + if ($97) { + $98 = $l; + $99 = $0; + $100 = HEAP32[$99>>2]|0; + $101 = ((($100)) + 72|0); + $102 = HEAP32[$101>>2]|0; + $103 = (($102) + ($98<<3)|0); + $104 = +HEAPF64[$103>>3]; + $105 = $t; + $106 = $j; + $107 = (($105) - ($106))|0; + $108 = $2; + $109 = (($108) + ($107<<3)|0); + $110 = +HEAPF64[$109>>3]; + $111 = $104 * $110; + $112 = $i; + $113 = $4; + $114 = (($113) + ($112<<3)|0); + $115 = +HEAPF64[$114>>3]; + $116 = $115 + $111; + HEAPF64[$114>>3] = $116; + $117 = $l; + $118 = $0; + $119 = HEAP32[$118>>2]|0; + $120 = ((($119)) + 76|0); + $121 = HEAP32[$120>>2]|0; + $122 = (($121) + ($117<<3)|0); + $123 = +HEAPF64[$122>>3]; + $124 = $t; + $125 = $j; + $126 = (($124) - ($125))|0; + $127 = $2; + $128 = (($127) + ($126<<3)|0); + $129 = +HEAPF64[$128>>3]; + $130 = $123 * $129; + $131 = $i; + $132 = $6; + $133 = (($132) + ($131<<3)|0); + $134 = +HEAPF64[$133>>3]; + $135 = $134 + $130; + HEAPF64[$133>>3] = $135; + break; + } + } + $136 = $t; + $137 = $j; + $138 = (($136) - ($137))|0; + $139 = ($138|0)<(0); + if ($139) { + $140 = $l; + $141 = $0; + $142 = HEAP32[$141>>2]|0; + $143 = ((($142)) + 72|0); + $144 = HEAP32[$143>>2]|0; + $145 = (($144) + ($140<<3)|0); + $146 = +HEAPF64[$145>>3]; + $147 = $t; + $148 = $j; + $149 = (($147) - ($148))|0; + $150 = $3; + $151 = (($149) + ($150))|0; + $152 = $2; + $153 = (($152) + ($151<<3)|0); + $154 = +HEAPF64[$153>>3]; + $155 = $146 * $154; + $156 = $i; + $157 = $4; + $158 = (($157) + ($156<<3)|0); + $159 = +HEAPF64[$158>>3]; + $160 = $159 + $155; + HEAPF64[$158>>3] = $160; + $161 = $l; + $162 = $0; + $163 = HEAP32[$162>>2]|0; + $164 = ((($163)) + 76|0); + $165 = HEAP32[$164>>2]|0; + $166 = (($165) + ($161<<3)|0); + $167 = +HEAPF64[$166>>3]; + $168 = $t; + $169 = $j; + $170 = (($168) - ($169))|0; + $171 = $3; + $172 = (($170) + ($171))|0; + $173 = $2; + $174 = (($173) + ($172<<3)|0); + $175 = +HEAPF64[$174>>3]; + $176 = $167 * $175; + $177 = $i; + $178 = $6; + $179 = (($178) + ($177<<3)|0); + $180 = +HEAPF64[$179>>3]; + $181 = $180 + $176; + HEAPF64[$179>>3] = $181; + break; + } + $182 = $t; + $183 = $j; + $184 = (($182) - ($183))|0; + $185 = $3; + $186 = ($184|0)>=($185|0); + $187 = $isodd; + $188 = ($187|0)==(0); + $or$cond = $186 & $188; + if ($or$cond) { + $189 = $l; + $190 = $0; + $191 = HEAP32[$190>>2]|0; + $192 = ((($191)) + 72|0); + $193 = HEAP32[$192>>2]|0; + $194 = (($193) + ($189<<3)|0); + $195 = +HEAPF64[$194>>3]; + $196 = $t; + $197 = $j; + $198 = (($196) - ($197))|0; + $199 = $3; + $200 = (($198) - ($199))|0; + $201 = $2; + $202 = (($201) + ($200<<3)|0); + $203 = +HEAPF64[$202>>3]; + $204 = $195 * $203; + $205 = $i; + $206 = $4; + $207 = (($206) + ($205<<3)|0); + $208 = +HEAPF64[$207>>3]; + $209 = $208 + $204; + HEAPF64[$207>>3] = $209; + $210 = $l; + $211 = $0; + $212 = HEAP32[$211>>2]|0; + $213 = ((($212)) + 76|0); + $214 = HEAP32[$213>>2]|0; + $215 = (($214) + ($210<<3)|0); + $216 = +HEAPF64[$215>>3]; + $217 = $t; + $218 = $j; + $219 = (($217) - ($218))|0; + $220 = $3; + $221 = (($219) - ($220))|0; + $222 = $2; + $223 = (($222) + ($221<<3)|0); + $224 = +HEAPF64[$223>>3]; + $225 = $216 * $224; + $226 = $i; + $227 = $6; + $228 = (($227) + ($226<<3)|0); + $229 = +HEAPF64[$228>>3]; + $230 = $229 + $225; + HEAPF64[$228>>3] = $230; + break; + } + $231 = $t; + $232 = $j; + $233 = (($231) - ($232))|0; + $234 = $3; + $235 = ($233|0)>=($234|0); + $236 = $isodd; + $237 = ($236|0)==(1); + $or$cond3 = $235 & $237; + if ($or$cond3) { + $238 = $t; + $239 = $l; + $240 = (($238) - ($239))|0; + $241 = $3; + $242 = ($240|0)!=($241|0); + $243 = $l; + $244 = $0; + $245 = HEAP32[$244>>2]|0; + $246 = ((($245)) + 72|0); + $247 = HEAP32[$246>>2]|0; + $248 = (($247) + ($243<<3)|0); + $249 = +HEAPF64[$248>>3]; + if ($242) { + $250 = $t; + $251 = $j; + $252 = (($250) - ($251))|0; + $253 = $3; + $254 = (($253) + 1)|0; + $255 = (($252) - ($254))|0; + $256 = $2; + $257 = (($256) + ($255<<3)|0); + $258 = +HEAPF64[$257>>3]; + $259 = $249 * $258; + $260 = $i; + $261 = $4; + $262 = (($261) + ($260<<3)|0); + $263 = +HEAPF64[$262>>3]; + $264 = $263 + $259; + HEAPF64[$262>>3] = $264; + $265 = $l; + $266 = $0; + $267 = HEAP32[$266>>2]|0; + $268 = ((($267)) + 76|0); + $269 = HEAP32[$268>>2]|0; + $270 = (($269) + ($265<<3)|0); + $271 = +HEAPF64[$270>>3]; + $272 = $t; + $273 = $j; + $274 = (($272) - ($273))|0; + $275 = $3; + $276 = (($275) + 1)|0; + $277 = (($274) - ($276))|0; + $278 = $2; + $279 = (($278) + ($277<<3)|0); + $280 = +HEAPF64[$279>>3]; + $281 = $271 * $280; + $282 = $i; + $283 = $6; + $284 = (($283) + ($282<<3)|0); + $285 = +HEAPF64[$284>>3]; + $286 = $285 + $281; + HEAPF64[$284>>3] = $286; + break; + } else { + $287 = $3; + $288 = (($287) - 1)|0; + $289 = $2; + $290 = (($289) + ($288<<3)|0); + $291 = +HEAPF64[$290>>3]; + $292 = $249 * $291; + $293 = $i; + $294 = $4; + $295 = (($294) + ($293<<3)|0); + $296 = +HEAPF64[$295>>3]; + $297 = $296 + $292; + HEAPF64[$295>>3] = $297; + $298 = $l; + $299 = $0; + $300 = HEAP32[$299>>2]|0; + $301 = ((($300)) + 76|0); + $302 = HEAP32[$301>>2]|0; + $303 = (($302) + ($298<<3)|0); + $304 = +HEAPF64[$303>>3]; + $305 = $3; + $306 = (($305) - 1)|0; + $307 = $2; + $308 = (($307) + ($306<<3)|0); + $309 = +HEAPF64[$308>>3]; + $310 = $304 * $309; + $311 = $i; + $312 = $6; + $313 = (($312) + ($311<<3)|0); + $314 = +HEAPF64[$313>>3]; + $315 = $314 + $310; + HEAPF64[$313>>3] = $315; + break; + } + } + } + } while(0); + $316 = $1; + $317 = $j; + $318 = (($317) + ($316))|0; + $j = $318; + } + $319 = $i; + $320 = (($319) + 1)|0; + $i = $320; + } + STACKTOP = sp;return; +} +function _wtoutputlength($N,$method,$lp,$J,$ext) { + $N = $N|0; + $method = $method|0; + $lp = $lp|0; + $J = $J|0; + $ext = $ext|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0.0, $19 = 0.0, $2 = 0, $20 = 0.0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0.0, $41 = 0.0, $42 = 0.0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $8 = 0, $9 = 0, $M = 0, $i = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $N; + $1 = $method; + $2 = $lp; + $3 = $J; + $4 = $ext; + $M = 0; + $5 = $1; + $6 = (_strcmp($5,17424)|0); + $7 = ($6|0)!=(0); + if ($7) { + $8 = $1; + $9 = (_strcmp($8,17432)|0); + $10 = ($9|0)!=(0); + if ($10) { + $51 = $1; + $52 = (_strcmp($51,17456)|0); + $53 = ($52|0)!=(0); + if ($53) { + $54 = $1; + $55 = (_strcmp($54,17464)|0); + $56 = ($55|0)!=(0); + if ($56) { + $61 = $1; + $62 = (_strcmp($61,17472)|0); + $63 = ($62|0)!=(0); + if ($63) { + $64 = $1; + $65 = (_strcmp($64,17480)|0); + $66 = ($65|0)!=(0); + if ($66) { + $71 = $M; + STACKTOP = sp;return ($71|0); + } + } + $67 = $3; + $68 = (($67) + 1)|0; + $69 = $0; + $70 = Math_imul($68, $69)|0; + $M = $70; + $71 = $M; + STACKTOP = sp;return ($71|0); + } + } + $57 = $3; + $58 = (($57) + 1)|0; + $59 = $0; + $60 = Math_imul($58, $59)|0; + $M = $60; + $71 = $M; + STACKTOP = sp;return ($71|0); + } + } + $11 = $4; + $12 = (_strcmp($11,17440)|0); + $13 = ($12|0)!=(0); + if (!($13)) { + $14 = $3; + $i = $14; + while(1) { + $15 = $i; + $16 = ($15|0)>(0); + $17 = $0; + if (!($16)) { + break; + } + $18 = (+($17|0)); + $19 = $18 / 2.0; + $20 = (+Math_ceil((+$19))); + $21 = (~~(($20))); + $0 = $21; + $22 = $0; + $23 = $M; + $24 = (($23) + ($22))|0; + $M = $24; + $25 = $i; + $26 = (($25) + -1)|0; + $i = $26; + } + $27 = $M; + $28 = (($27) + ($17))|0; + $M = $28; + $71 = $M; + STACKTOP = sp;return ($71|0); + } + $29 = $4; + $30 = (_strcmp($29,17448)|0); + $31 = ($30|0)!=(0); + if ($31) { + $71 = $M; + STACKTOP = sp;return ($71|0); + } + $32 = $3; + $i = $32; + while(1) { + $33 = $i; + $34 = ($33|0)>(0); + $35 = $0; + if (!($34)) { + break; + } + $36 = $2; + $37 = (($35) + ($36))|0; + $38 = (($37) - 2)|0; + $0 = $38; + $39 = $0; + $40 = (+($39|0)); + $41 = $40 / 2.0; + $42 = (+Math_ceil((+$41))); + $43 = (~~(($42))); + $0 = $43; + $44 = $0; + $45 = $M; + $46 = (($45) + ($44))|0; + $M = $46; + $47 = $i; + $48 = (($47) + -1)|0; + $i = $48; + } + $49 = $M; + $50 = (($49) + ($35))|0; + $M = $50; + $71 = $M; + STACKTOP = sp;return ($71|0); +} +function _wave_transform($inp,$N,$wname,$method,$J,$ext,$out,$length,$filters) { + $inp = $inp|0; + $N = $N|0; + $wname = $wname|0; + $method = $method|0; + $J = $J|0; + $ext = $ext|0; + $out = $out|0; + $length = $length|0; + $filters = $filters|0; + var $$ = 0, $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0; + var $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0.0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0; + var $133 = 0, $134 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0.0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0; + var $30 = 0, $31 = 0, $32 = 0, $33 = 0.0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0.0, $47 = 0, $48 = 0; + var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0.0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0; + var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0; + var $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $i = 0, $obj = 0, $wt = 0, $zpad = 0; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $inp; + $1 = $N; + $2 = $wname; + $3 = $method; + $4 = $J; + $5 = $ext; + $6 = $out; + $7 = $length; + $8 = $filters; + $zpad = 0; + $9 = $1; + $10 = (($9|0) % 2)&-1; + $11 = ($10|0)==(0); + $$ = $11 ? 1 : 0; + $zpad = $$; + $12 = $2; + $13 = (_wave_init($12)|0); + $obj = $13; + $i = 0; + while(1) { + $14 = $i; + $15 = $obj; + $16 = ((($15)) + 52|0); + $17 = HEAP32[$16>>2]|0; + $18 = ($14|0)<($17|0); + if (!($18)) { + break; + } + $19 = $i; + $20 = $obj; + $21 = ((($20)) + 72|0); + $22 = HEAP32[$21>>2]|0; + $23 = (($22) + ($19<<3)|0); + $24 = +HEAPF64[$23>>3]; + $25 = $i; + $26 = $8; + $27 = (($26) + ($25<<3)|0); + HEAPF64[$27>>3] = $24; + $28 = $i; + $29 = $obj; + $30 = ((($29)) + 76|0); + $31 = HEAP32[$30>>2]|0; + $32 = (($31) + ($28<<3)|0); + $33 = +HEAPF64[$32>>3]; + $34 = $obj; + $35 = ((($34)) + 52|0); + $36 = HEAP32[$35>>2]|0; + $37 = $i; + $38 = (($36) + ($37))|0; + $39 = $8; + $40 = (($39) + ($38<<3)|0); + HEAPF64[$40>>3] = $33; + $41 = $i; + $42 = $obj; + $43 = ((($42)) + 80|0); + $44 = HEAP32[$43>>2]|0; + $45 = (($44) + ($41<<3)|0); + $46 = +HEAPF64[$45>>3]; + $47 = $obj; + $48 = ((($47)) + 52|0); + $49 = HEAP32[$48>>2]|0; + $50 = $49<<1; + $51 = $i; + $52 = (($50) + ($51))|0; + $53 = $8; + $54 = (($53) + ($52<<3)|0); + HEAPF64[$54>>3] = $46; + $55 = $i; + $56 = $obj; + $57 = ((($56)) + 84|0); + $58 = HEAP32[$57>>2]|0; + $59 = (($58) + ($55<<3)|0); + $60 = +HEAPF64[$59>>3]; + $61 = $obj; + $62 = ((($61)) + 52|0); + $63 = HEAP32[$62>>2]|0; + $64 = ($63*3)|0; + $65 = $i; + $66 = (($64) + ($65))|0; + $67 = $8; + $68 = (($67) + ($66<<3)|0); + HEAPF64[$68>>3] = $60; + $69 = $i; + $70 = (($69) + 1)|0; + $i = $70; + } + $71 = $obj; + $72 = $3; + $73 = $1; + $74 = $4; + $75 = (_wt_init($71,$72,$73,$74)|0); + $wt = $75; + $76 = $3; + $77 = (_strcmp($76,17424)|0); + $78 = ($77|0)!=(0); + do { + if ($78) { + $79 = $3; + $80 = (_strcmp($79,17432)|0); + $81 = ($80|0)!=(0); + if ($81) { + $86 = $3; + $87 = (_strcmp($86,17456)|0); + $88 = ($87|0)!=(0); + if ($88) { + $89 = $3; + $90 = (_strcmp($89,17464)|0); + $91 = ($90|0)!=(0); + if ($91) { + $94 = $3; + $95 = (_strcmp($94,17472)|0); + $96 = ($95|0)!=(0); + if ($96) { + $97 = $3; + $98 = (_strcmp($97,17480)|0); + $99 = ($98|0)!=(0); + if ($99) { + break; + } + } + $100 = $wt; + $101 = $0; + _modwt($100,$101); + break; + } + } + $92 = $wt; + $93 = $0; + _swt($92,$93); + } else { + label = 6; + } + } else { + label = 6; + } + } while(0); + if ((label|0) == 6) { + $82 = $wt; + $83 = $5; + _setDWTExtension($82,$83); + $84 = $wt; + $85 = $0; + _dwt($84,$85); + } + $i = 0; + while(1) { + $102 = $i; + $103 = $wt; + $104 = ((($103)) + 28|0); + $105 = HEAP32[$104>>2]|0; + $106 = ($102|0)<($105|0); + if (!($106)) { + break; + } + $107 = $i; + $108 = $wt; + $109 = ((($108)) + 76|0); + $110 = (($109) + ($107<<2)|0); + $111 = HEAP32[$110>>2]|0; + $112 = $i; + $113 = $7; + $114 = (($113) + ($112<<2)|0); + HEAP32[$114>>2] = $111; + $115 = $i; + $116 = (($115) + 1)|0; + $i = $116; + } + $i = 0; + while(1) { + $117 = $i; + $118 = $wt; + $119 = ((($118)) + 24|0); + $120 = HEAP32[$119>>2]|0; + $121 = ($117|0)<($120|0); + if (!($121)) { + break; + } + $122 = $i; + $123 = $wt; + $124 = ((($123)) + 484|0); + $125 = HEAP32[$124>>2]|0; + $126 = (($125) + ($122<<3)|0); + $127 = +HEAPF64[$126>>3]; + $128 = $i; + $129 = $6; + $130 = (($129) + ($128<<3)|0); + HEAPF64[$130>>3] = $127; + $131 = $i; + $132 = (($131) + 1)|0; + $i = $132; + } + $133 = $obj; + _wave_free($133); + $134 = $wt; + _wt_free($134); + STACKTOP = sp;return; +} +function _inv_wave_transform($inp,$N,$wname,$method,$J,$ext,$out,$outlength,$length,$lenlength) { + $inp = $inp|0; + $N = $N|0; + $wname = $wname|0; + $method = $method|0; + $J = $J|0; + $ext = $ext|0; + $out = $out|0; + $outlength = $outlength|0; + $length = $length|0; + $lenlength = $lenlength|0; + var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0.0, $24 = 0, $25 = 0, $26 = 0; + var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; + var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; + var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $8 = 0, $9 = 0, $i = 0, $obj = 0, $wt = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $0 = $inp; + $1 = $N; + $2 = $wname; + $3 = $method; + $4 = $J; + $5 = $ext; + $6 = $out; + $7 = $outlength; + $8 = $length; + $9 = $lenlength; + $10 = $2; + $11 = (_wave_init($10)|0); + $obj = $11; + $12 = $obj; + $13 = $3; + $14 = $7; + $15 = $4; + $16 = (_wt_init($12,$13,$14,$15)|0); + $wt = $16; + $i = 0; + while(1) { + $17 = $i; + $18 = $1; + $19 = ($17|0)<($18|0); + if (!($19)) { + break; + } + $20 = $i; + $21 = $0; + $22 = (($21) + ($20<<3)|0); + $23 = +HEAPF64[$22>>3]; + $24 = $i; + $25 = $wt; + $26 = ((($25)) + 484|0); + $27 = HEAP32[$26>>2]|0; + $28 = (($27) + ($24<<3)|0); + HEAPF64[$28>>3] = $23; + $29 = $i; + $30 = (($29) + 1)|0; + $i = $30; + } + $31 = $9; + $32 = $wt; + $33 = ((($32)) + 28|0); + HEAP32[$33>>2] = $31; + $i = 0; + while(1) { + $34 = $i; + $35 = $9; + $36 = ($34|0)<($35|0); + if (!($36)) { + break; + } + $37 = $i; + $38 = $8; + $39 = (($38) + ($37<<2)|0); + $40 = HEAP32[$39>>2]|0; + $41 = $i; + $42 = $wt; + $43 = ((($42)) + 76|0); + $44 = (($43) + ($41<<2)|0); + HEAP32[$44>>2] = $40; + $45 = $i; + $46 = (($45) + 1)|0; + $i = $46; + } + $47 = $3; + $48 = (_strcmp($47,17424)|0); + $49 = ($48|0)!=(0); + if ($49) { + $50 = $3; + $51 = (_strcmp($50,17432)|0); + $52 = ($51|0)!=(0); + if ($52) { + $57 = $3; + $58 = (_strcmp($57,17456)|0); + $59 = ($58|0)!=(0); + if ($59) { + $60 = $3; + $61 = (_strcmp($60,17464)|0); + $62 = ($61|0)!=(0); + if ($62) { + $65 = $3; + $66 = (_strcmp($65,17472)|0); + $67 = ($66|0)!=(0); + if ($67) { + $68 = $3; + $69 = (_strcmp($68,17480)|0); + $70 = ($69|0)!=(0); + if ($70) { + $73 = $obj; + _wave_free($73); + $74 = $wt; + _wt_free($74); + STACKTOP = sp;return; + } + } + $71 = $wt; + $72 = $6; + _imodwt($71,$72); + $73 = $obj; + _wave_free($73); + $74 = $wt; + _wt_free($74); + STACKTOP = sp;return; + } + } + $63 = $wt; + $64 = $6; + _iswt($63,$64); + $73 = $obj; + _wave_free($73); + $74 = $wt; + _wt_free($74); + STACKTOP = sp;return; + } + } + $53 = $wt; + $54 = $5; + _setDWTExtension($53,$54); + $55 = $wt; + $56 = $6; + _idwt($55,$56); + $73 = $obj; + _wave_free($73); + $74 = $wt; + _wt_free($74); + STACKTOP = sp;return; +} +function _strchr($s,$c) { + $s = $s|0; + $c = $c|0; + var $0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (___strchrnul($s,$c)|0); + $1 = HEAP8[$0>>0]|0; + $2 = $c&255; + $3 = ($1<<24>>24)==($2<<24>>24); + $4 = $3 ? $0 : 0; + return ($4|0); +} +function ___strchrnul($s,$c) { + $s = $s|0; + $c = $c|0; + var $$0 = 0, $$02$lcssa = 0, $$0211 = 0, $$1 = 0, $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0; + var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond5 = 0, $w$0$lcssa = 0, $w$08 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = $c & 255; + $1 = ($0|0)==(0); + if ($1) { + $6 = (_strlen(($s|0))|0); + $7 = (($s) + ($6)|0); + $$0 = $7; + return ($$0|0); + } + $2 = $s; + $3 = $2 & 3; + $4 = ($3|0)==(0); + L5: do { + if ($4) { + $$02$lcssa = $s; + } else { + $5 = $c&255; + $$0211 = $s; + while(1) { + $8 = HEAP8[$$0211>>0]|0; + $9 = ($8<<24>>24)==(0); + $10 = ($8<<24>>24)==($5<<24>>24); + $or$cond = $9 | $10; + if ($or$cond) { + $$0 = $$0211; + break; + } + $11 = ((($$0211)) + 1|0); + $12 = $11; + $13 = $12 & 3; + $14 = ($13|0)==(0); + if ($14) { + $$02$lcssa = $11; + break L5; + } else { + $$0211 = $11; + } + } + return ($$0|0); + } + } while(0); + $15 = Math_imul($0, 16843009)|0; + $16 = HEAP32[$$02$lcssa>>2]|0; + $17 = (($16) + -16843009)|0; + $18 = $16 & -2139062144; + $19 = $18 ^ -2139062144; + $20 = $19 & $17; + $21 = ($20|0)==(0); + L12: do { + if ($21) { + $23 = $16;$w$08 = $$02$lcssa; + while(1) { + $22 = $23 ^ $15; + $24 = (($22) + -16843009)|0; + $25 = $22 & -2139062144; + $26 = $25 ^ -2139062144; + $27 = $26 & $24; + $28 = ($27|0)==(0); + if (!($28)) { + $w$0$lcssa = $w$08; + break L12; + } + $29 = ((($w$08)) + 4|0); + $30 = HEAP32[$29>>2]|0; + $31 = (($30) + -16843009)|0; + $32 = $30 & -2139062144; + $33 = $32 ^ -2139062144; + $34 = $33 & $31; + $35 = ($34|0)==(0); + if ($35) { + $23 = $30;$w$08 = $29; + } else { + $w$0$lcssa = $29; + break; + } + } + } else { + $w$0$lcssa = $$02$lcssa; + } + } while(0); + $36 = $c&255; + $$1 = $w$0$lcssa; + while(1) { + $37 = HEAP8[$$1>>0]|0; + $38 = ($37<<24>>24)==(0); + $39 = ($37<<24>>24)==($36<<24>>24); + $or$cond5 = $38 | $39; + $40 = ((($$1)) + 1|0); + if ($or$cond5) { + $$0 = $$1; + break; + } else { + $$1 = $40; + } + } + return ($$0|0); +} +function _strstr($h,$n) { + $h = $h|0; + $n = $n|0; + var $$0 = 0, $$0$i = 0, $$0$lcssa$i = 0, $$0$lcssa$i13 = 0, $$01$i = 0, $$02$i = 0, $$02$i9 = 0, $$03$i = 0, $$03$us$i = 0, $$lcssa$i = 0, $$lcssa$i12 = 0, $$lcssa$i6 = 0, $$lcssa303 = 0, $$lcssa306 = 0, $$lcssa309 = 0, $$lcssa323 = 0, $$lcssa326 = 0, $$lcssa329 = 0, $$lcssa344 = 0, $$pr$i = 0; + var $$pr$us$i = 0, $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0; + var $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0; + var $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0; + var $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0; + var $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0; + var $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0; + var $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0; + var $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0; + var $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0; + var $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0; + var $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $281$phi = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0; + var $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0; + var $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0; + var $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0; + var $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $byteset$i = 0, $div$i = 0, $div$us$i = 0, $div4$i = 0, $hw$0$in2$i = 0, $hw$03$i = 0, $hw$03$i8 = 0, $ip$0$ph$lcssa$i = 0, $ip$0$ph$lcssa147$i = 0, $ip$0$ph76$i = 0; + var $ip$1$ip$0$$i = 0, $ip$1$ip$0$i = 0, $ip$1$ph$lcssa$i = 0, $ip$1$ph55$i = 0, $jp$0$ph13$ph70$i = 0, $jp$0$ph1365$i = 0, $jp$0$ph1365$i$lcssa = 0, $jp$0$ph1365$i$lcssa$lcssa = 0, $jp$0$ph77$i = 0, $jp$1$ph56$i = 0, $jp$1$ph9$ph49$i = 0, $jp$1$ph944$i = 0, $jp$1$ph944$i$lcssa = 0, $jp$1$ph944$i$lcssa$lcssa = 0, $k$059$i = 0, $k$139$i = 0, $k$2$us$i = 0, $k$338$i = 0, $k$338$i$lcssa = 0, $k$338$us$i = 0; + var $k$338$us$i$lcssa = 0, $k$4$i = 0, $k$4$us$i = 0, $l$080$i = 0, $l$080$i$lcssa343 = 0, $mem$0$us$i = 0, $or$cond$i = 0, $or$cond$i10 = 0, $or$cond5$us$i = 0, $p$0$ph$ph$lcssa32$i = 0, $p$0$ph$ph$lcssa32151$i = 0, $p$0$ph$ph71$i = 0, $p$1$p$0$i = 0, $p$1$ph$ph$lcssa23$i = 0, $p$1$ph$ph50$i = 0, $p$3155$i = 0, $shift$i = 0, $z$0$i = 0, $z$0$us$i = 0, $z$1$i = 0; + var $z$1$us$i = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 1056|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort(); + $byteset$i = sp + 1024|0; + $shift$i = sp; + $0 = HEAP8[$n>>0]|0; + $1 = ($0<<24>>24)==(0); + if ($1) { + $$0 = $h; + STACKTOP = sp;return ($$0|0); + } + $2 = $0 << 24 >> 24; + $3 = (_strchr($h,$2)|0); + $4 = ($3|0)==(0|0); + if ($4) { + $$0 = 0; + STACKTOP = sp;return ($$0|0); + } + $5 = ((($n)) + 1|0); + $6 = HEAP8[$5>>0]|0; + $7 = ($6<<24>>24)==(0); + if ($7) { + $$0 = $3; + STACKTOP = sp;return ($$0|0); + } + $8 = ((($3)) + 1|0); + $9 = HEAP8[$8>>0]|0; + $10 = ($9<<24>>24)==(0); + if ($10) { + $$0 = 0; + STACKTOP = sp;return ($$0|0); + } + $11 = ((($n)) + 2|0); + $12 = HEAP8[$11>>0]|0; + $13 = ($12<<24>>24)==(0); + if ($13) { + $14 = $0&255; + $15 = $14 << 8; + $16 = $6&255; + $17 = $16 | $15; + $18 = HEAP8[$3>>0]|0; + $19 = $18&255; + $20 = $19 << 8; + $21 = $9&255; + $22 = $20 | $21; + $$01$i = $8;$280 = $9;$281 = $3;$hw$0$in2$i = $22; + while(1) { + $23 = $hw$0$in2$i & 65535; + $24 = ($23|0)==($17|0); + if ($24) { + $$lcssa$i = $281;$31 = $280; + break; + } + $25 = $23 << 8; + $26 = ((($$01$i)) + 1|0); + $27 = HEAP8[$26>>0]|0; + $28 = $27&255; + $29 = $28 | $25; + $30 = ($27<<24>>24)==(0); + if ($30) { + $$lcssa$i = $$01$i;$31 = 0; + break; + } else { + $281$phi = $$01$i;$$01$i = $26;$280 = $27;$hw$0$in2$i = $29;$281 = $281$phi; + } + } + $32 = ($31<<24>>24)!=(0); + $33 = $32 ? $$lcssa$i : 0; + $$0 = $33; + STACKTOP = sp;return ($$0|0); + } + $34 = ((($3)) + 2|0); + $35 = HEAP8[$34>>0]|0; + $36 = ($35<<24>>24)==(0); + if ($36) { + $$0 = 0; + STACKTOP = sp;return ($$0|0); + } + $37 = ((($n)) + 3|0); + $38 = HEAP8[$37>>0]|0; + $39 = ($38<<24>>24)==(0); + if ($39) { + $40 = $0&255; + $41 = $40 << 24; + $42 = $6&255; + $43 = $42 << 16; + $44 = $43 | $41; + $45 = $12&255; + $46 = $45 << 8; + $47 = $44 | $46; + $48 = HEAP8[$3>>0]|0; + $49 = $48&255; + $50 = $49 << 24; + $51 = $9&255; + $52 = $51 << 16; + $53 = $35&255; + $54 = $53 << 8; + $55 = $54 | $52; + $56 = $55 | $50; + $57 = ($56|0)==($47|0); + if ($57) { + $$0$lcssa$i = $34;$$lcssa$i6 = $35; + } else { + $$02$i = $34;$hw$03$i = $56; + while(1) { + $58 = ((($$02$i)) + 1|0); + $59 = HEAP8[$58>>0]|0; + $60 = $59&255; + $61 = $60 | $hw$03$i; + $62 = $61 << 8; + $63 = ($59<<24>>24)==(0); + $64 = ($62|0)==($47|0); + $or$cond$i = $63 | $64; + if ($or$cond$i) { + $$0$lcssa$i = $58;$$lcssa$i6 = $59; + break; + } else { + $$02$i = $58;$hw$03$i = $62; + } + } + } + $65 = ($$lcssa$i6<<24>>24)!=(0); + $66 = ((($$0$lcssa$i)) + -2|0); + $67 = $65 ? $66 : 0; + $$0 = $67; + STACKTOP = sp;return ($$0|0); + } + $68 = ((($3)) + 3|0); + $69 = HEAP8[$68>>0]|0; + $70 = ($69<<24>>24)==(0); + if ($70) { + $$0 = 0; + STACKTOP = sp;return ($$0|0); + } + $71 = ((($n)) + 4|0); + $72 = HEAP8[$71>>0]|0; + $73 = ($72<<24>>24)==(0); + if ($73) { + $74 = $0&255; + $75 = $74 << 24; + $76 = $6&255; + $77 = $76 << 16; + $78 = $77 | $75; + $79 = $12&255; + $80 = $79 << 8; + $81 = $78 | $80; + $82 = $38&255; + $83 = $81 | $82; + $84 = HEAP8[$3>>0]|0; + $85 = $84&255; + $86 = $85 << 24; + $87 = $9&255; + $88 = $87 << 16; + $89 = $35&255; + $90 = $89 << 8; + $91 = $69&255; + $92 = $90 | $88; + $93 = $92 | $91; + $94 = $93 | $86; + $95 = ($94|0)==($83|0); + if ($95) { + $$0$lcssa$i13 = $68;$$lcssa$i12 = $69; + } else { + $$02$i9 = $68;$hw$03$i8 = $94; + while(1) { + $96 = $hw$03$i8 << 8; + $97 = ((($$02$i9)) + 1|0); + $98 = HEAP8[$97>>0]|0; + $99 = $98&255; + $100 = $99 | $96; + $101 = ($98<<24>>24)==(0); + $102 = ($100|0)==($83|0); + $or$cond$i10 = $101 | $102; + if ($or$cond$i10) { + $$0$lcssa$i13 = $97;$$lcssa$i12 = $98; + break; + } else { + $$02$i9 = $97;$hw$03$i8 = $100; + } + } + } + $103 = ($$lcssa$i12<<24>>24)!=(0); + $104 = ((($$0$lcssa$i13)) + -3|0); + $105 = $103 ? $104 : 0; + $$0 = $105; + STACKTOP = sp;return ($$0|0); + } + ;HEAP32[$byteset$i>>2]=0|0;HEAP32[$byteset$i+4>>2]=0|0;HEAP32[$byteset$i+8>>2]=0|0;HEAP32[$byteset$i+12>>2]=0|0;HEAP32[$byteset$i+16>>2]=0|0;HEAP32[$byteset$i+20>>2]=0|0;HEAP32[$byteset$i+24>>2]=0|0;HEAP32[$byteset$i+28>>2]=0|0; + $110 = $0;$l$080$i = 0; + while(1) { + $106 = (($3) + ($l$080$i)|0); + $107 = HEAP8[$106>>0]|0; + $108 = ($107<<24>>24)==(0); + if ($108) { + $$0$i = 0; + break; + } + $109 = $110 & 31; + $111 = $109&255; + $112 = 1 << $111; + $div4$i = ($110&255) >>> 5; + $113 = $div4$i&255; + $114 = (($byteset$i) + ($113<<2)|0); + $115 = HEAP32[$114>>2]|0; + $116 = $115 | $112; + HEAP32[$114>>2] = $116; + $117 = (($l$080$i) + 1)|0; + $118 = $110&255; + $119 = (($shift$i) + ($118<<2)|0); + HEAP32[$119>>2] = $117; + $120 = (($n) + ($117)|0); + $121 = HEAP8[$120>>0]|0; + $122 = ($121<<24>>24)==(0); + if ($122) { + $$lcssa344 = $117;$l$080$i$lcssa343 = $l$080$i; + label = 23; + break; + } else { + $110 = $121;$l$080$i = $117; + } + } + L46: do { + if ((label|0) == 23) { + $123 = ($$lcssa344>>>0)>(1); + L48: do { + if ($123) { + $282 = 1;$ip$0$ph76$i = -1;$jp$0$ph77$i = 0; + L49: while(1) { + $283 = $282;$jp$0$ph13$ph70$i = $jp$0$ph77$i;$p$0$ph$ph71$i = 1; + while(1) { + $284 = $283;$jp$0$ph1365$i = $jp$0$ph13$ph70$i; + L53: while(1) { + $133 = $284;$k$059$i = 1; + while(1) { + $129 = (($k$059$i) + ($ip$0$ph76$i))|0; + $130 = (($n) + ($129)|0); + $131 = HEAP8[$130>>0]|0; + $132 = (($n) + ($133)|0); + $134 = HEAP8[$132>>0]|0; + $135 = ($131<<24>>24)==($134<<24>>24); + if (!($135)) { + $$lcssa323 = $133;$$lcssa326 = $131;$$lcssa329 = $134;$jp$0$ph1365$i$lcssa = $jp$0$ph1365$i; + break L53; + } + $136 = ($k$059$i|0)==($p$0$ph$ph71$i|0); + $127 = (($k$059$i) + 1)|0; + if ($136) { + break; + } + $126 = (($127) + ($jp$0$ph1365$i))|0; + $128 = ($126>>>0)<($$lcssa344>>>0); + if ($128) { + $133 = $126;$k$059$i = $127; + } else { + $ip$0$ph$lcssa$i = $ip$0$ph76$i;$p$0$ph$ph$lcssa32$i = $p$0$ph$ph71$i; + break L49; + } + } + $137 = (($jp$0$ph1365$i) + ($p$0$ph$ph71$i))|0; + $138 = (($137) + 1)|0; + $139 = ($138>>>0)<($$lcssa344>>>0); + if ($139) { + $284 = $138;$jp$0$ph1365$i = $137; + } else { + $ip$0$ph$lcssa$i = $ip$0$ph76$i;$p$0$ph$ph$lcssa32$i = $p$0$ph$ph71$i; + break L49; + } + } + $140 = ($$lcssa326&255)>($$lcssa329&255); + $141 = (($$lcssa323) - ($ip$0$ph76$i))|0; + if (!($140)) { + $jp$0$ph1365$i$lcssa$lcssa = $jp$0$ph1365$i$lcssa; + break; + } + $124 = (($$lcssa323) + 1)|0; + $125 = ($124>>>0)<($$lcssa344>>>0); + if ($125) { + $283 = $124;$jp$0$ph13$ph70$i = $$lcssa323;$p$0$ph$ph71$i = $141; + } else { + $ip$0$ph$lcssa$i = $ip$0$ph76$i;$p$0$ph$ph$lcssa32$i = $141; + break L49; + } + } + $142 = (($jp$0$ph1365$i$lcssa$lcssa) + 1)|0; + $143 = (($jp$0$ph1365$i$lcssa$lcssa) + 2)|0; + $144 = ($143>>>0)<($$lcssa344>>>0); + if ($144) { + $282 = $143;$ip$0$ph76$i = $jp$0$ph1365$i$lcssa$lcssa;$jp$0$ph77$i = $142; + } else { + $ip$0$ph$lcssa$i = $jp$0$ph1365$i$lcssa$lcssa;$p$0$ph$ph$lcssa32$i = 1; + break; + } + } + $285 = 1;$ip$1$ph55$i = -1;$jp$1$ph56$i = 0; + while(1) { + $287 = $285;$jp$1$ph9$ph49$i = $jp$1$ph56$i;$p$1$ph$ph50$i = 1; + while(1) { + $286 = $287;$jp$1$ph944$i = $jp$1$ph9$ph49$i; + L68: while(1) { + $152 = $286;$k$139$i = 1; + while(1) { + $148 = (($k$139$i) + ($ip$1$ph55$i))|0; + $149 = (($n) + ($148)|0); + $150 = HEAP8[$149>>0]|0; + $151 = (($n) + ($152)|0); + $153 = HEAP8[$151>>0]|0; + $154 = ($150<<24>>24)==($153<<24>>24); + if (!($154)) { + $$lcssa303 = $152;$$lcssa306 = $150;$$lcssa309 = $153;$jp$1$ph944$i$lcssa = $jp$1$ph944$i; + break L68; + } + $155 = ($k$139$i|0)==($p$1$ph$ph50$i|0); + $146 = (($k$139$i) + 1)|0; + if ($155) { + break; + } + $145 = (($146) + ($jp$1$ph944$i))|0; + $147 = ($145>>>0)<($$lcssa344>>>0); + if ($147) { + $152 = $145;$k$139$i = $146; + } else { + $ip$0$ph$lcssa147$i = $ip$0$ph$lcssa$i;$ip$1$ph$lcssa$i = $ip$1$ph55$i;$p$0$ph$ph$lcssa32151$i = $p$0$ph$ph$lcssa32$i;$p$1$ph$ph$lcssa23$i = $p$1$ph$ph50$i; + break L48; + } + } + $156 = (($jp$1$ph944$i) + ($p$1$ph$ph50$i))|0; + $157 = (($156) + 1)|0; + $158 = ($157>>>0)<($$lcssa344>>>0); + if ($158) { + $286 = $157;$jp$1$ph944$i = $156; + } else { + $ip$0$ph$lcssa147$i = $ip$0$ph$lcssa$i;$ip$1$ph$lcssa$i = $ip$1$ph55$i;$p$0$ph$ph$lcssa32151$i = $p$0$ph$ph$lcssa32$i;$p$1$ph$ph$lcssa23$i = $p$1$ph$ph50$i; + break L48; + } + } + $159 = ($$lcssa306&255)<($$lcssa309&255); + $160 = (($$lcssa303) - ($ip$1$ph55$i))|0; + if (!($159)) { + $jp$1$ph944$i$lcssa$lcssa = $jp$1$ph944$i$lcssa; + break; + } + $164 = (($$lcssa303) + 1)|0; + $165 = ($164>>>0)<($$lcssa344>>>0); + if ($165) { + $287 = $164;$jp$1$ph9$ph49$i = $$lcssa303;$p$1$ph$ph50$i = $160; + } else { + $ip$0$ph$lcssa147$i = $ip$0$ph$lcssa$i;$ip$1$ph$lcssa$i = $ip$1$ph55$i;$p$0$ph$ph$lcssa32151$i = $p$0$ph$ph$lcssa32$i;$p$1$ph$ph$lcssa23$i = $160; + break L48; + } + } + $161 = (($jp$1$ph944$i$lcssa$lcssa) + 1)|0; + $162 = (($jp$1$ph944$i$lcssa$lcssa) + 2)|0; + $163 = ($162>>>0)<($$lcssa344>>>0); + if ($163) { + $285 = $162;$ip$1$ph55$i = $jp$1$ph944$i$lcssa$lcssa;$jp$1$ph56$i = $161; + } else { + $ip$0$ph$lcssa147$i = $ip$0$ph$lcssa$i;$ip$1$ph$lcssa$i = $jp$1$ph944$i$lcssa$lcssa;$p$0$ph$ph$lcssa32151$i = $p$0$ph$ph$lcssa32$i;$p$1$ph$ph$lcssa23$i = 1; + break; + } + } + } else { + $ip$0$ph$lcssa147$i = -1;$ip$1$ph$lcssa$i = -1;$p$0$ph$ph$lcssa32151$i = 1;$p$1$ph$ph$lcssa23$i = 1; + } + } while(0); + $166 = (($ip$1$ph$lcssa$i) + 1)|0; + $167 = (($ip$0$ph$lcssa147$i) + 1)|0; + $168 = ($166>>>0)>($167>>>0); + $p$1$p$0$i = $168 ? $p$1$ph$ph$lcssa23$i : $p$0$ph$ph$lcssa32151$i; + $ip$1$ip$0$i = $168 ? $ip$1$ph$lcssa$i : $ip$0$ph$lcssa147$i; + $169 = (($n) + ($p$1$p$0$i)|0); + $170 = (($ip$1$ip$0$i) + 1)|0; + $171 = (_memcmp($n,$169,$170)|0); + $172 = ($171|0)==(0); + if ($172) { + $178 = (($$lcssa344) - ($p$1$p$0$i))|0; + $179 = $$lcssa344 | 63; + $180 = ($$lcssa344|0)==($p$1$p$0$i|0); + if ($180) { + $237 = $179;$p$3155$i = $$lcssa344; + } else { + $$03$us$i = $3;$mem$0$us$i = 0;$z$0$us$i = $3; + L82: while(1) { + $182 = $z$0$us$i; + $183 = $$03$us$i; + $184 = (($182) - ($183))|0; + $185 = ($184>>>0)<($$lcssa344>>>0); + do { + if ($185) { + $186 = (_memchr($z$0$us$i,0,$179)|0); + $187 = ($186|0)==(0|0); + if ($187) { + $191 = (($z$0$us$i) + ($179)|0); + $z$1$us$i = $191; + break; + } else { + $188 = $186; + $189 = (($188) - ($183))|0; + $190 = ($189>>>0)<($$lcssa344>>>0); + if ($190) { + $$0$i = 0; + break L46; + } else { + $z$1$us$i = $186; + break; + } + } + } else { + $z$1$us$i = $z$0$us$i; + } + } while(0); + $192 = (($$03$us$i) + ($l$080$i$lcssa343)|0); + $193 = HEAP8[$192>>0]|0; + $div$us$i = ($193&255) >>> 5; + $194 = $div$us$i&255; + $195 = (($byteset$i) + ($194<<2)|0); + $196 = HEAP32[$195>>2]|0; + $197 = $193 & 31; + $198 = $197&255; + $199 = 1 << $198; + $200 = $199 & $196; + $201 = ($200|0)==(0); + if ($201) { + $232 = (($$03$us$i) + ($$lcssa344)|0); + $$03$us$i = $232;$mem$0$us$i = 0;$z$0$us$i = $z$1$us$i; + continue; + } + $202 = $193&255; + $203 = (($shift$i) + ($202<<2)|0); + $204 = HEAP32[$203>>2]|0; + $205 = (($$lcssa344) - ($204))|0; + $206 = ($$lcssa344|0)==($204|0); + if (!($206)) { + $207 = ($mem$0$us$i|0)!=(0); + $208 = ($205>>>0)<($p$1$p$0$i>>>0); + $or$cond5$us$i = $207 & $208; + $k$2$us$i = $or$cond5$us$i ? $178 : $205; + $209 = (($$03$us$i) + ($k$2$us$i)|0); + $$03$us$i = $209;$mem$0$us$i = 0;$z$0$us$i = $z$1$us$i; + continue; + } + $210 = ($170>>>0)>($mem$0$us$i>>>0); + $211 = $210 ? $170 : $mem$0$us$i; + $212 = (($n) + ($211)|0); + $213 = HEAP8[$212>>0]|0; + $214 = ($213<<24>>24)==(0); + L96: do { + if ($214) { + $k$4$us$i = $170; + } else { + $$pr$us$i = $213;$k$338$us$i = $211; + while(1) { + $215 = (($$03$us$i) + ($k$338$us$i)|0); + $216 = HEAP8[$215>>0]|0; + $217 = ($$pr$us$i<<24>>24)==($216<<24>>24); + if (!($217)) { + $k$338$us$i$lcssa = $k$338$us$i; + break; + } + $220 = (($k$338$us$i) + 1)|0; + $221 = (($n) + ($220)|0); + $222 = HEAP8[$221>>0]|0; + $223 = ($222<<24>>24)==(0); + if ($223) { + $k$4$us$i = $170; + break L96; + } else { + $$pr$us$i = $222;$k$338$us$i = $220; + } + } + $218 = (($k$338$us$i$lcssa) - ($ip$1$ip$0$i))|0; + $219 = (($$03$us$i) + ($218)|0); + $$03$us$i = $219;$mem$0$us$i = 0;$z$0$us$i = $z$1$us$i; + continue L82; + } + } while(0); + while(1) { + $224 = ($k$4$us$i>>>0)>($mem$0$us$i>>>0); + if (!($224)) { + $$0$i = $$03$us$i; + break L46; + } + $225 = (($k$4$us$i) + -1)|0; + $226 = (($n) + ($225)|0); + $227 = HEAP8[$226>>0]|0; + $228 = (($$03$us$i) + ($225)|0); + $229 = HEAP8[$228>>0]|0; + $230 = ($227<<24>>24)==($229<<24>>24); + if ($230) { + $k$4$us$i = $225; + } else { + break; + } + } + $231 = (($$03$us$i) + ($p$1$p$0$i)|0); + $$03$us$i = $231;$mem$0$us$i = $178;$z$0$us$i = $z$1$us$i; + } + } + } else { + $173 = (($$lcssa344) - ($ip$1$ip$0$i))|0; + $174 = (($173) + -1)|0; + $175 = ($ip$1$ip$0$i>>>0)>($174>>>0); + $ip$1$ip$0$$i = $175 ? $ip$1$ip$0$i : $174; + $176 = (($ip$1$ip$0$$i) + 1)|0; + $177 = $$lcssa344 | 63; + $237 = $177;$p$3155$i = $176; + } + $181 = (($n) + ($170)|0); + $$03$i = $3;$z$0$i = $3; + L106: while(1) { + $233 = $z$0$i; + $234 = $$03$i; + $235 = (($233) - ($234))|0; + $236 = ($235>>>0)<($$lcssa344>>>0); + do { + if ($236) { + $238 = (_memchr($z$0$i,0,$237)|0); + $239 = ($238|0)==(0|0); + if ($239) { + $243 = (($z$0$i) + ($237)|0); + $z$1$i = $243; + break; + } else { + $240 = $238; + $241 = (($240) - ($234))|0; + $242 = ($241>>>0)<($$lcssa344>>>0); + if ($242) { + $$0$i = 0; + break L46; + } else { + $z$1$i = $238; + break; + } + } + } else { + $z$1$i = $z$0$i; + } + } while(0); + $244 = (($$03$i) + ($l$080$i$lcssa343)|0); + $245 = HEAP8[$244>>0]|0; + $div$i = ($245&255) >>> 5; + $246 = $div$i&255; + $247 = (($byteset$i) + ($246<<2)|0); + $248 = HEAP32[$247>>2]|0; + $249 = $245 & 31; + $250 = $249&255; + $251 = 1 << $250; + $252 = $251 & $248; + $253 = ($252|0)==(0); + if ($253) { + $260 = (($$03$i) + ($$lcssa344)|0); + $$03$i = $260;$z$0$i = $z$1$i; + continue; + } + $254 = $245&255; + $255 = (($shift$i) + ($254<<2)|0); + $256 = HEAP32[$255>>2]|0; + $257 = ($$lcssa344|0)==($256|0); + if (!($257)) { + $258 = (($$lcssa344) - ($256))|0; + $259 = (($$03$i) + ($258)|0); + $$03$i = $259;$z$0$i = $z$1$i; + continue; + } + $261 = HEAP8[$181>>0]|0; + $262 = ($261<<24>>24)==(0); + L120: do { + if ($262) { + $k$4$i = $170; + } else { + $$pr$i = $261;$k$338$i = $170; + while(1) { + $263 = (($$03$i) + ($k$338$i)|0); + $264 = HEAP8[$263>>0]|0; + $265 = ($$pr$i<<24>>24)==($264<<24>>24); + if (!($265)) { + $k$338$i$lcssa = $k$338$i; + break; + } + $266 = (($k$338$i) + 1)|0; + $267 = (($n) + ($266)|0); + $268 = HEAP8[$267>>0]|0; + $269 = ($268<<24>>24)==(0); + if ($269) { + $k$4$i = $170; + break L120; + } else { + $$pr$i = $268;$k$338$i = $266; + } + } + $270 = (($k$338$i$lcssa) - ($ip$1$ip$0$i))|0; + $271 = (($$03$i) + ($270)|0); + $$03$i = $271;$z$0$i = $z$1$i; + continue L106; + } + } while(0); + while(1) { + $272 = ($k$4$i|0)==(0); + if ($272) { + $$0$i = $$03$i; + break L46; + } + $273 = (($k$4$i) + -1)|0; + $274 = (($n) + ($273)|0); + $275 = HEAP8[$274>>0]|0; + $276 = (($$03$i) + ($273)|0); + $277 = HEAP8[$276>>0]|0; + $278 = ($275<<24>>24)==($277<<24>>24); + if ($278) { + $k$4$i = $273; + } else { + break; + } + } + $279 = (($$03$i) + ($p$3155$i)|0); + $$03$i = $279;$z$0$i = $z$1$i; + } + } + } while(0); + $$0 = $$0$i; + STACKTOP = sp;return ($$0|0); +} +function _log10($x) { + $x = +$x; + var $$0 = 0.0, $0 = 0, $1 = 0, $10 = 0.0, $11 = 0.0, $12 = 0.0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0.0; + var $26 = 0, $27 = 0.0, $28 = 0.0, $29 = 0.0, $3 = 0, $30 = 0.0, $31 = 0.0, $32 = 0.0, $33 = 0.0, $34 = 0.0, $35 = 0.0, $36 = 0.0, $37 = 0.0, $38 = 0.0, $39 = 0.0, $4 = 0, $40 = 0.0, $41 = 0.0, $42 = 0.0, $43 = 0.0; + var $44 = 0.0, $45 = 0.0, $46 = 0.0, $47 = 0.0, $48 = 0, $49 = 0, $5 = 0, $50 = 0.0, $51 = 0.0, $52 = 0.0, $53 = 0.0, $54 = 0.0, $55 = 0.0, $56 = 0.0, $57 = 0.0, $58 = 0.0, $59 = 0.0, $6 = 0, $60 = 0.0, $61 = 0.0; + var $62 = 0.0, $63 = 0.0, $64 = 0.0, $65 = 0.0, $66 = 0.0, $67 = 0.0, $68 = 0.0, $69 = 0.0, $7 = 0, $70 = 0, $8 = 0.0, $9 = 0.0, $hx$0 = 0, $k$0 = 0, $or$cond = 0, $or$cond4 = 0, label = 0, sp = 0; + sp = STACKTOP; + HEAPF64[tempDoublePtr>>3] = $x;$0 = HEAP32[tempDoublePtr>>2]|0; + $1 = HEAP32[tempDoublePtr+4>>2]|0; + $2 = ($1>>>0)<(1048576); + $3 = ($1|0)<(0); + $or$cond = $3 | $2; + do { + if ($or$cond) { + $4 = $1 & 2147483647; + $5 = ($0|0)==(0); + $6 = ($4|0)==(0); + $7 = $5 & $6; + if ($7) { + $8 = $x * $x; + $9 = -1.0 / $8; + $$0 = $9; + return (+$$0); + } + if (!($3)) { + $12 = $x * 18014398509481984.0; + HEAPF64[tempDoublePtr>>3] = $12;$13 = HEAP32[tempDoublePtr>>2]|0; + $14 = HEAP32[tempDoublePtr+4>>2]|0; + $26 = $13;$70 = $14;$hx$0 = $14;$k$0 = -1077; + break; + } + $10 = $x - $x; + $11 = $10 / 0.0; + $$0 = $11; + return (+$$0); + } else { + $15 = ($1>>>0)>(2146435071); + if ($15) { + $$0 = $x; + return (+$$0); + } + $16 = ($1|0)==(1072693248); + $17 = ($0|0)==(0); + $18 = (0)==(0); + $19 = $17 & $18; + $or$cond4 = $19 & $16; + if ($or$cond4) { + $$0 = 0.0; + return (+$$0); + } else { + $26 = $0;$70 = $1;$hx$0 = $1;$k$0 = -1023; + } + } + } while(0); + $20 = (($hx$0) + 614242)|0; + $21 = $20 >>> 20; + $22 = (($k$0) + ($21))|0; + $23 = $20 & 1048575; + $24 = (($23) + 1072079006)|0; + HEAP32[tempDoublePtr>>2] = $26;HEAP32[tempDoublePtr+4>>2] = $24;$25 = +HEAPF64[tempDoublePtr>>3]; + $27 = $25 + -1.0; + $28 = $27 * 0.5; + $29 = $27 * $28; + $30 = $27 + 2.0; + $31 = $27 / $30; + $32 = $31 * $31; + $33 = $32 * $32; + $34 = $33 * 0.15313837699209373; + $35 = $34 + 0.22222198432149784; + $36 = $33 * $35; + $37 = $36 + 0.39999999999409419; + $38 = $33 * $37; + $39 = $33 * 0.14798198605116586; + $40 = $39 + 0.1818357216161805; + $41 = $33 * $40; + $42 = $41 + 0.28571428743662391; + $43 = $33 * $42; + $44 = $43 + 0.66666666666667351; + $45 = $32 * $44; + $46 = $38 + $45; + $47 = $27 - $29; + HEAPF64[tempDoublePtr>>3] = $47;$48 = HEAP32[tempDoublePtr>>2]|0; + $49 = HEAP32[tempDoublePtr+4>>2]|0; + HEAP32[tempDoublePtr>>2] = 0;HEAP32[tempDoublePtr+4>>2] = $49;$50 = +HEAPF64[tempDoublePtr>>3]; + $51 = $27 - $50; + $52 = $51 - $29; + $53 = $29 + $46; + $54 = $31 * $53; + $55 = $54 + $52; + $56 = $50 * 0.43429448187816888; + $57 = (+($22|0)); + $58 = $57 * 0.30102999566361177; + $59 = $57 * 3.6942390771589308E-13; + $60 = $50 + $55; + $61 = $60 * 2.5082946711645275E-11; + $62 = $59 + $61; + $63 = $55 * 0.43429448187816888; + $64 = $63 + $62; + $65 = $58 + $56; + $66 = $58 - $65; + $67 = $56 + $66; + $68 = $67 + $64; + $69 = $65 + $68; + $$0 = $69; + return (+$$0); +} +function _memchr($src,$c,$n) { + $src = $src|0; + $c = $c|0; + $n = $n|0; + var $$0$lcssa = 0, $$0$lcssa44 = 0, $$019 = 0, $$1$lcssa = 0, $$110 = 0, $$110$lcssa = 0, $$24 = 0, $$3 = 0, $$lcssa = 0, $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0; + var $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0; + var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond18 = 0, $s$0$lcssa = 0, $s$0$lcssa43 = 0, $s$020 = 0, $s$15 = 0, $s$2 = 0, $w$0$lcssa = 0, $w$011 = 0, $w$011$lcssa = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = $c & 255; + $1 = $src; + $2 = $1 & 3; + $3 = ($2|0)!=(0); + $4 = ($n|0)!=(0); + $or$cond18 = $4 & $3; + L1: do { + if ($or$cond18) { + $5 = $c&255; + $$019 = $n;$s$020 = $src; + while(1) { + $6 = HEAP8[$s$020>>0]|0; + $7 = ($6<<24>>24)==($5<<24>>24); + if ($7) { + $$0$lcssa44 = $$019;$s$0$lcssa43 = $s$020; + label = 6; + break L1; + } + $8 = ((($s$020)) + 1|0); + $9 = (($$019) + -1)|0; + $10 = $8; + $11 = $10 & 3; + $12 = ($11|0)!=(0); + $13 = ($9|0)!=(0); + $or$cond = $13 & $12; + if ($or$cond) { + $$019 = $9;$s$020 = $8; + } else { + $$0$lcssa = $9;$$lcssa = $13;$s$0$lcssa = $8; + label = 5; + break; + } + } + } else { + $$0$lcssa = $n;$$lcssa = $4;$s$0$lcssa = $src; + label = 5; + } + } while(0); + if ((label|0) == 5) { + if ($$lcssa) { + $$0$lcssa44 = $$0$lcssa;$s$0$lcssa43 = $s$0$lcssa; + label = 6; + } else { + $$3 = 0;$s$2 = $s$0$lcssa; + } + } + L8: do { + if ((label|0) == 6) { + $14 = HEAP8[$s$0$lcssa43>>0]|0; + $15 = $c&255; + $16 = ($14<<24>>24)==($15<<24>>24); + if ($16) { + $$3 = $$0$lcssa44;$s$2 = $s$0$lcssa43; + } else { + $17 = Math_imul($0, 16843009)|0; + $18 = ($$0$lcssa44>>>0)>(3); + L11: do { + if ($18) { + $$110 = $$0$lcssa44;$w$011 = $s$0$lcssa43; + while(1) { + $19 = HEAP32[$w$011>>2]|0; + $20 = $19 ^ $17; + $21 = (($20) + -16843009)|0; + $22 = $20 & -2139062144; + $23 = $22 ^ -2139062144; + $24 = $23 & $21; + $25 = ($24|0)==(0); + if (!($25)) { + $$110$lcssa = $$110;$w$011$lcssa = $w$011; + break; + } + $26 = ((($w$011)) + 4|0); + $27 = (($$110) + -4)|0; + $28 = ($27>>>0)>(3); + if ($28) { + $$110 = $27;$w$011 = $26; + } else { + $$1$lcssa = $27;$w$0$lcssa = $26; + label = 11; + break L11; + } + } + $$24 = $$110$lcssa;$s$15 = $w$011$lcssa; + } else { + $$1$lcssa = $$0$lcssa44;$w$0$lcssa = $s$0$lcssa43; + label = 11; + } + } while(0); + if ((label|0) == 11) { + $29 = ($$1$lcssa|0)==(0); + if ($29) { + $$3 = 0;$s$2 = $w$0$lcssa; + break; + } else { + $$24 = $$1$lcssa;$s$15 = $w$0$lcssa; + } + } + while(1) { + $30 = HEAP8[$s$15>>0]|0; + $31 = ($30<<24>>24)==($15<<24>>24); + if ($31) { + $$3 = $$24;$s$2 = $s$15; + break L8; + } + $32 = ((($s$15)) + 1|0); + $33 = (($$24) + -1)|0; + $34 = ($33|0)==(0); + if ($34) { + $$3 = 0;$s$2 = $32; + break; + } else { + $$24 = $33;$s$15 = $32; + } + } + } + } + } while(0); + $35 = ($$3|0)!=(0); + $36 = $35 ? $s$2 : 0; + return ($36|0); +} +function _memcmp($vl,$vr,$n) { + $vl = $vl|0; + $vr = $vr|0; + $n = $n|0; + var $$03 = 0, $$lcssa = 0, $$lcssa19 = 0, $0 = 0, $1 = 0, $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $l$04 = 0, $r$05 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = ($n|0)==(0); + if ($0) { + $11 = 0; + return ($11|0); + } else { + $$03 = $n;$l$04 = $vl;$r$05 = $vr; + } + while(1) { + $1 = HEAP8[$l$04>>0]|0; + $2 = HEAP8[$r$05>>0]|0; + $3 = ($1<<24>>24)==($2<<24>>24); + if (!($3)) { + $$lcssa = $1;$$lcssa19 = $2; + break; + } + $4 = (($$03) + -1)|0; + $5 = ((($l$04)) + 1|0); + $6 = ((($r$05)) + 1|0); + $7 = ($4|0)==(0); + if ($7) { + $11 = 0; + label = 5; + break; + } else { + $$03 = $4;$l$04 = $5;$r$05 = $6; + } + } + if ((label|0) == 5) { + return ($11|0); + } + $8 = $$lcssa&255; + $9 = $$lcssa19&255; + $10 = (($8) - ($9))|0; + $11 = $10; + return ($11|0); +} +function _strcmp($l,$r) { + $l = $l|0; + $r = $r|0; + var $$014 = 0, $$05 = 0, $$lcssa = 0, $$lcssa2 = 0, $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond3 = 0, label = 0; + var sp = 0; + sp = STACKTOP; + $0 = HEAP8[$l>>0]|0; + $1 = HEAP8[$r>>0]|0; + $2 = ($0<<24>>24)!=($1<<24>>24); + $3 = ($0<<24>>24)==(0); + $or$cond3 = $3 | $2; + if ($or$cond3) { + $$lcssa = $0;$$lcssa2 = $1; + } else { + $$014 = $l;$$05 = $r; + while(1) { + $4 = ((($$014)) + 1|0); + $5 = ((($$05)) + 1|0); + $6 = HEAP8[$4>>0]|0; + $7 = HEAP8[$5>>0]|0; + $8 = ($6<<24>>24)!=($7<<24>>24); + $9 = ($6<<24>>24)==(0); + $or$cond = $9 | $8; + if ($or$cond) { + $$lcssa = $6;$$lcssa2 = $7; + break; + } else { + $$014 = $4;$$05 = $5; + } + } + } + $10 = $$lcssa&255; + $11 = $$lcssa2&255; + $12 = (($10) - ($11))|0; + return ($12|0); +} +function _malloc($bytes) { + $bytes = $bytes|0; + var $$3$i = 0, $$lcssa = 0, $$lcssa211 = 0, $$lcssa215 = 0, $$lcssa216 = 0, $$lcssa217 = 0, $$lcssa219 = 0, $$lcssa222 = 0, $$lcssa224 = 0, $$lcssa226 = 0, $$lcssa228 = 0, $$lcssa230 = 0, $$lcssa232 = 0, $$pre = 0, $$pre$i = 0, $$pre$i$i = 0, $$pre$i22$i = 0, $$pre$i25 = 0, $$pre$phi$i$iZ2D = 0, $$pre$phi$i23$iZ2D = 0; + var $$pre$phi$i26Z2D = 0, $$pre$phi$iZ2D = 0, $$pre$phi58$i$iZ2D = 0, $$pre$phiZ2D = 0, $$pre105 = 0, $$pre106 = 0, $$pre14$i$i = 0, $$pre43$i = 0, $$pre56$i$i = 0, $$pre57$i$i = 0, $$pre8$i = 0, $$rsize$0$i = 0, $$rsize$3$i = 0, $$sum = 0, $$sum$i$i = 0, $$sum$i$i$i = 0, $$sum$i13$i = 0, $$sum$i14$i = 0, $$sum$i17$i = 0, $$sum$i19$i = 0; + var $$sum$i2334 = 0, $$sum$i32 = 0, $$sum$i35 = 0, $$sum1 = 0, $$sum1$i = 0, $$sum1$i$i = 0, $$sum1$i15$i = 0, $$sum1$i20$i = 0, $$sum1$i24 = 0, $$sum10 = 0, $$sum10$i = 0, $$sum10$i$i = 0, $$sum11$i = 0, $$sum11$i$i = 0, $$sum1112 = 0, $$sum112$i = 0, $$sum113$i = 0, $$sum114$i = 0, $$sum115$i = 0, $$sum116$i = 0; + var $$sum117$i = 0, $$sum118$i = 0, $$sum119$i = 0, $$sum12$i = 0, $$sum12$i$i = 0, $$sum120$i = 0, $$sum121$i = 0, $$sum122$i = 0, $$sum123$i = 0, $$sum124$i = 0, $$sum125$i = 0, $$sum13$i = 0, $$sum13$i$i = 0, $$sum14$i$i = 0, $$sum15$i = 0, $$sum15$i$i = 0, $$sum16$i = 0, $$sum16$i$i = 0, $$sum17$i = 0, $$sum17$i$i = 0; + var $$sum18$i = 0, $$sum1819$i$i = 0, $$sum2 = 0, $$sum2$i = 0, $$sum2$i$i = 0, $$sum2$i$i$i = 0, $$sum2$i16$i = 0, $$sum2$i18$i = 0, $$sum2$i21$i = 0, $$sum20$i$i = 0, $$sum21$i$i = 0, $$sum22$i$i = 0, $$sum23$i$i = 0, $$sum24$i$i = 0, $$sum25$i$i = 0, $$sum27$i$i = 0, $$sum28$i$i = 0, $$sum29$i$i = 0, $$sum3$i = 0, $$sum3$i27 = 0; + var $$sum30$i$i = 0, $$sum3132$i$i = 0, $$sum34$i$i = 0, $$sum3536$i$i = 0, $$sum3738$i$i = 0, $$sum39$i$i = 0, $$sum4 = 0, $$sum4$i = 0, $$sum4$i$i = 0, $$sum4$i28 = 0, $$sum40$i$i = 0, $$sum41$i$i = 0, $$sum42$i$i = 0, $$sum5$i = 0, $$sum5$i$i = 0, $$sum56 = 0, $$sum6$i = 0, $$sum67$i$i = 0, $$sum7$i = 0, $$sum8$i = 0; + var $$sum9 = 0, $$sum9$i = 0, $$sum9$i$i = 0, $$tsize$1$i = 0, $$v$0$i = 0, $0 = 0, $1 = 0, $10 = 0, $100 = 0, $1000 = 0, $1001 = 0, $1002 = 0, $1003 = 0, $1004 = 0, $1005 = 0, $1006 = 0, $1007 = 0, $1008 = 0, $1009 = 0, $101 = 0; + var $1010 = 0, $1011 = 0, $1012 = 0, $1013 = 0, $1014 = 0, $1015 = 0, $1016 = 0, $1017 = 0, $1018 = 0, $1019 = 0, $102 = 0, $1020 = 0, $1021 = 0, $1022 = 0, $1023 = 0, $1024 = 0, $1025 = 0, $1026 = 0, $1027 = 0, $1028 = 0; + var $1029 = 0, $103 = 0, $1030 = 0, $1031 = 0, $1032 = 0, $1033 = 0, $1034 = 0, $1035 = 0, $1036 = 0, $1037 = 0, $1038 = 0, $1039 = 0, $104 = 0, $1040 = 0, $1041 = 0, $1042 = 0, $1043 = 0, $1044 = 0, $1045 = 0, $1046 = 0; + var $1047 = 0, $1048 = 0, $1049 = 0, $105 = 0, $1050 = 0, $1051 = 0, $1052 = 0, $1053 = 0, $1054 = 0, $1055 = 0, $1056 = 0, $1057 = 0, $1058 = 0, $1059 = 0, $106 = 0, $1060 = 0, $1061 = 0, $1062 = 0, $1063 = 0, $1064 = 0; + var $1065 = 0, $1066 = 0, $1067 = 0, $1068 = 0, $1069 = 0, $107 = 0, $1070 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0; + var $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0; + var $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0; + var $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0; + var $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0; + var $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0; + var $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0; + var $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0; + var $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0; + var $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0; + var $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0; + var $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0; + var $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0; + var $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0; + var $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0, $371 = 0; + var $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0; + var $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0; + var $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0, $425 = 0; + var $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0, $443 = 0; + var $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0, $461 = 0; + var $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0, $48 = 0; + var $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0, $498 = 0; + var $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0, $515 = 0; + var $516 = 0, $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0, $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0, $533 = 0; + var $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0, $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0, $551 = 0; + var $552 = 0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0, $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0, $564 = 0, $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0, $57 = 0; + var $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0, $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0, $588 = 0; + var $589 = 0, $59 = 0, $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0, $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0, $60 = 0, $600 = 0, $601 = 0, $602 = 0, $603 = 0, $604 = 0, $605 = 0; + var $606 = 0, $607 = 0, $608 = 0, $609 = 0, $61 = 0, $610 = 0, $611 = 0, $612 = 0, $613 = 0, $614 = 0, $615 = 0, $616 = 0, $617 = 0, $618 = 0, $619 = 0, $62 = 0, $620 = 0, $621 = 0, $622 = 0, $623 = 0; + var $624 = 0, $625 = 0, $626 = 0, $627 = 0, $628 = 0, $629 = 0, $63 = 0, $630 = 0, $631 = 0, $632 = 0, $633 = 0, $634 = 0, $635 = 0, $636 = 0, $637 = 0, $638 = 0, $639 = 0, $64 = 0, $640 = 0, $641 = 0; + var $642 = 0, $643 = 0, $644 = 0, $645 = 0, $646 = 0, $647 = 0, $648 = 0, $649 = 0, $65 = 0, $650 = 0, $651 = 0, $652 = 0, $653 = 0, $654 = 0, $655 = 0, $656 = 0, $657 = 0, $658 = 0, $659 = 0, $66 = 0; + var $660 = 0, $661 = 0, $662 = 0, $663 = 0, $664 = 0, $665 = 0, $666 = 0, $667 = 0, $668 = 0, $669 = 0, $67 = 0, $670 = 0, $671 = 0, $672 = 0, $673 = 0, $674 = 0, $675 = 0, $676 = 0, $677 = 0, $678 = 0; + var $679 = 0, $68 = 0, $680 = 0, $681 = 0, $682 = 0, $683 = 0, $684 = 0, $685 = 0, $686 = 0, $687 = 0, $688 = 0, $689 = 0, $69 = 0, $690 = 0, $691 = 0, $692 = 0, $693 = 0, $694 = 0, $695 = 0, $696 = 0; + var $697 = 0, $698 = 0, $699 = 0, $7 = 0, $70 = 0, $700 = 0, $701 = 0, $702 = 0, $703 = 0, $704 = 0, $705 = 0, $706 = 0, $707 = 0, $708 = 0, $709 = 0, $71 = 0, $710 = 0, $711 = 0, $712 = 0, $713 = 0; + var $714 = 0, $715 = 0, $716 = 0, $717 = 0, $718 = 0, $719 = 0, $72 = 0, $720 = 0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0, $726 = 0, $727 = 0, $728 = 0, $729 = 0, $73 = 0, $730 = 0, $731 = 0; + var $732 = 0, $733 = 0, $734 = 0, $735 = 0, $736 = 0, $737 = 0, $738 = 0, $739 = 0, $74 = 0, $740 = 0, $741 = 0, $742 = 0, $743 = 0, $744 = 0, $745 = 0, $746 = 0, $747 = 0, $748 = 0, $749 = 0, $75 = 0; + var $750 = 0, $751 = 0, $752 = 0, $753 = 0, $754 = 0, $755 = 0, $756 = 0, $757 = 0, $758 = 0, $759 = 0, $76 = 0, $760 = 0, $761 = 0, $762 = 0, $763 = 0, $764 = 0, $765 = 0, $766 = 0, $767 = 0, $768 = 0; + var $769 = 0, $77 = 0, $770 = 0, $771 = 0, $772 = 0, $773 = 0, $774 = 0, $775 = 0, $776 = 0, $777 = 0, $778 = 0, $779 = 0, $78 = 0, $780 = 0, $781 = 0, $782 = 0, $783 = 0, $784 = 0, $785 = 0, $786 = 0; + var $787 = 0, $788 = 0, $789 = 0, $79 = 0, $790 = 0, $791 = 0, $792 = 0, $793 = 0, $794 = 0, $795 = 0, $796 = 0, $797 = 0, $798 = 0, $799 = 0, $8 = 0, $80 = 0, $800 = 0, $801 = 0, $802 = 0, $803 = 0; + var $804 = 0, $805 = 0, $806 = 0, $807 = 0, $808 = 0, $809 = 0, $81 = 0, $810 = 0, $811 = 0, $812 = 0, $813 = 0, $814 = 0, $815 = 0, $816 = 0, $817 = 0, $818 = 0, $819 = 0, $82 = 0, $820 = 0, $821 = 0; + var $822 = 0, $823 = 0, $824 = 0, $825 = 0, $826 = 0, $827 = 0, $828 = 0, $829 = 0, $83 = 0, $830 = 0, $831 = 0, $832 = 0, $833 = 0, $834 = 0, $835 = 0, $836 = 0, $837 = 0, $838 = 0, $839 = 0, $84 = 0; + var $840 = 0, $841 = 0, $842 = 0, $843 = 0, $844 = 0, $845 = 0, $846 = 0, $847 = 0, $848 = 0, $849 = 0, $85 = 0, $850 = 0, $851 = 0, $852 = 0, $853 = 0, $854 = 0, $855 = 0, $856 = 0, $857 = 0, $858 = 0; + var $859 = 0, $86 = 0, $860 = 0, $861 = 0, $862 = 0, $863 = 0, $864 = 0, $865 = 0, $866 = 0, $867 = 0, $868 = 0, $869 = 0, $87 = 0, $870 = 0, $871 = 0, $872 = 0, $873 = 0, $874 = 0, $875 = 0, $876 = 0; + var $877 = 0, $878 = 0, $879 = 0, $88 = 0, $880 = 0, $881 = 0, $882 = 0, $883 = 0, $884 = 0, $885 = 0, $886 = 0, $887 = 0, $888 = 0, $889 = 0, $89 = 0, $890 = 0, $891 = 0, $892 = 0, $893 = 0, $894 = 0; + var $895 = 0, $896 = 0, $897 = 0, $898 = 0, $899 = 0, $9 = 0, $90 = 0, $900 = 0, $901 = 0, $902 = 0, $903 = 0, $904 = 0, $905 = 0, $906 = 0, $907 = 0, $908 = 0, $909 = 0, $91 = 0, $910 = 0, $911 = 0; + var $912 = 0, $913 = 0, $914 = 0, $915 = 0, $916 = 0, $917 = 0, $918 = 0, $919 = 0, $92 = 0, $920 = 0, $921 = 0, $922 = 0, $923 = 0, $924 = 0, $925 = 0, $926 = 0, $927 = 0, $928 = 0, $929 = 0, $93 = 0; + var $930 = 0, $931 = 0, $932 = 0, $933 = 0, $934 = 0, $935 = 0, $936 = 0, $937 = 0, $938 = 0, $939 = 0, $94 = 0, $940 = 0, $941 = 0, $942 = 0, $943 = 0, $944 = 0, $945 = 0, $946 = 0, $947 = 0, $948 = 0; + var $949 = 0, $95 = 0, $950 = 0, $951 = 0, $952 = 0, $953 = 0, $954 = 0, $955 = 0, $956 = 0, $957 = 0, $958 = 0, $959 = 0, $96 = 0, $960 = 0, $961 = 0, $962 = 0, $963 = 0, $964 = 0, $965 = 0, $966 = 0; + var $967 = 0, $968 = 0, $969 = 0, $97 = 0, $970 = 0, $971 = 0, $972 = 0, $973 = 0, $974 = 0, $975 = 0, $976 = 0, $977 = 0, $978 = 0, $979 = 0, $98 = 0, $980 = 0, $981 = 0, $982 = 0, $983 = 0, $984 = 0; + var $985 = 0, $986 = 0, $987 = 0, $988 = 0, $989 = 0, $99 = 0, $990 = 0, $991 = 0, $992 = 0, $993 = 0, $994 = 0, $995 = 0, $996 = 0, $997 = 0, $998 = 0, $999 = 0, $F$0$i$i = 0, $F1$0$i = 0, $F4$0 = 0, $F4$0$i$i = 0; + var $F5$0$i = 0, $I1$0$i$i = 0, $I7$0$i = 0, $I7$0$i$i = 0, $K12$029$i = 0, $K2$07$i$i = 0, $K8$051$i$i = 0, $R$0$i = 0, $R$0$i$i = 0, $R$0$i$i$lcssa = 0, $R$0$i$lcssa = 0, $R$0$i18 = 0, $R$0$i18$lcssa = 0, $R$1$i = 0, $R$1$i$i = 0, $R$1$i20 = 0, $RP$0$i = 0, $RP$0$i$i = 0, $RP$0$i$i$lcssa = 0, $RP$0$i$lcssa = 0; + var $RP$0$i17 = 0, $RP$0$i17$lcssa = 0, $T$0$lcssa$i = 0, $T$0$lcssa$i$i = 0, $T$0$lcssa$i25$i = 0, $T$028$i = 0, $T$028$i$lcssa = 0, $T$050$i$i = 0, $T$050$i$i$lcssa = 0, $T$06$i$i = 0, $T$06$i$i$lcssa = 0, $br$0$ph$i = 0, $cond$i = 0, $cond$i$i = 0, $cond$i21 = 0, $exitcond$i$i = 0, $i$02$i$i = 0, $idx$0$i = 0, $mem$0 = 0, $nb$0 = 0; + var $not$$i = 0, $not$$i$i = 0, $not$$i26$i = 0, $oldfirst$0$i$i = 0, $or$cond$i = 0, $or$cond$i30 = 0, $or$cond1$i = 0, $or$cond19$i = 0, $or$cond2$i = 0, $or$cond3$i = 0, $or$cond5$i = 0, $or$cond57$i = 0, $or$cond6$i = 0, $or$cond8$i = 0, $or$cond9$i = 0, $qsize$0$i$i = 0, $rsize$0$i = 0, $rsize$0$i$lcssa = 0, $rsize$0$i15 = 0, $rsize$1$i = 0; + var $rsize$2$i = 0, $rsize$3$lcssa$i = 0, $rsize$331$i = 0, $rst$0$i = 0, $rst$1$i = 0, $sizebits$0$i = 0, $sp$0$i$i = 0, $sp$0$i$i$i = 0, $sp$084$i = 0, $sp$084$i$lcssa = 0, $sp$183$i = 0, $sp$183$i$lcssa = 0, $ssize$0$$i = 0, $ssize$0$i = 0, $ssize$1$ph$i = 0, $ssize$2$i = 0, $t$0$i = 0, $t$0$i14 = 0, $t$1$i = 0, $t$2$ph$i = 0; + var $t$2$v$3$i = 0, $t$230$i = 0, $tbase$255$i = 0, $tsize$0$ph$i = 0, $tsize$0323944$i = 0, $tsize$1$i = 0, $tsize$254$i = 0, $v$0$i = 0, $v$0$i$lcssa = 0, $v$0$i16 = 0, $v$1$i = 0, $v$2$i = 0, $v$3$lcssa$i = 0, $v$3$ph$i = 0, $v$332$i = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = ($bytes>>>0)<(245); + do { + if ($0) { + $1 = ($bytes>>>0)<(11); + $2 = (($bytes) + 11)|0; + $3 = $2 & -8; + $4 = $1 ? 16 : $3; + $5 = $4 >>> 3; + $6 = HEAP32[17488>>2]|0; + $7 = $6 >>> $5; + $8 = $7 & 3; + $9 = ($8|0)==(0); + if (!($9)) { + $10 = $7 & 1; + $11 = $10 ^ 1; + $12 = (($11) + ($5))|0; + $13 = $12 << 1; + $14 = (17528 + ($13<<2)|0); + $$sum10 = (($13) + 2)|0; + $15 = (17528 + ($$sum10<<2)|0); + $16 = HEAP32[$15>>2]|0; + $17 = ((($16)) + 8|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($14|0)==($18|0); + do { + if ($19) { + $20 = 1 << $12; + $21 = $20 ^ -1; + $22 = $6 & $21; + HEAP32[17488>>2] = $22; + } else { + $23 = HEAP32[(17504)>>2]|0; + $24 = ($18>>>0)<($23>>>0); + if ($24) { + _abort(); + // unreachable; + } + $25 = ((($18)) + 12|0); + $26 = HEAP32[$25>>2]|0; + $27 = ($26|0)==($16|0); + if ($27) { + HEAP32[$25>>2] = $14; + HEAP32[$15>>2] = $18; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $28 = $12 << 3; + $29 = $28 | 3; + $30 = ((($16)) + 4|0); + HEAP32[$30>>2] = $29; + $$sum1112 = $28 | 4; + $31 = (($16) + ($$sum1112)|0); + $32 = HEAP32[$31>>2]|0; + $33 = $32 | 1; + HEAP32[$31>>2] = $33; + $mem$0 = $17; + return ($mem$0|0); + } + $34 = HEAP32[(17496)>>2]|0; + $35 = ($4>>>0)>($34>>>0); + if ($35) { + $36 = ($7|0)==(0); + if (!($36)) { + $37 = $7 << $5; + $38 = 2 << $5; + $39 = (0 - ($38))|0; + $40 = $38 | $39; + $41 = $37 & $40; + $42 = (0 - ($41))|0; + $43 = $41 & $42; + $44 = (($43) + -1)|0; + $45 = $44 >>> 12; + $46 = $45 & 16; + $47 = $44 >>> $46; + $48 = $47 >>> 5; + $49 = $48 & 8; + $50 = $49 | $46; + $51 = $47 >>> $49; + $52 = $51 >>> 2; + $53 = $52 & 4; + $54 = $50 | $53; + $55 = $51 >>> $53; + $56 = $55 >>> 1; + $57 = $56 & 2; + $58 = $54 | $57; + $59 = $55 >>> $57; + $60 = $59 >>> 1; + $61 = $60 & 1; + $62 = $58 | $61; + $63 = $59 >>> $61; + $64 = (($62) + ($63))|0; + $65 = $64 << 1; + $66 = (17528 + ($65<<2)|0); + $$sum4 = (($65) + 2)|0; + $67 = (17528 + ($$sum4<<2)|0); + $68 = HEAP32[$67>>2]|0; + $69 = ((($68)) + 8|0); + $70 = HEAP32[$69>>2]|0; + $71 = ($66|0)==($70|0); + do { + if ($71) { + $72 = 1 << $64; + $73 = $72 ^ -1; + $74 = $6 & $73; + HEAP32[17488>>2] = $74; + $88 = $34; + } else { + $75 = HEAP32[(17504)>>2]|0; + $76 = ($70>>>0)<($75>>>0); + if ($76) { + _abort(); + // unreachable; + } + $77 = ((($70)) + 12|0); + $78 = HEAP32[$77>>2]|0; + $79 = ($78|0)==($68|0); + if ($79) { + HEAP32[$77>>2] = $66; + HEAP32[$67>>2] = $70; + $$pre = HEAP32[(17496)>>2]|0; + $88 = $$pre; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $80 = $64 << 3; + $81 = (($80) - ($4))|0; + $82 = $4 | 3; + $83 = ((($68)) + 4|0); + HEAP32[$83>>2] = $82; + $84 = (($68) + ($4)|0); + $85 = $81 | 1; + $$sum56 = $4 | 4; + $86 = (($68) + ($$sum56)|0); + HEAP32[$86>>2] = $85; + $87 = (($68) + ($80)|0); + HEAP32[$87>>2] = $81; + $89 = ($88|0)==(0); + if (!($89)) { + $90 = HEAP32[(17508)>>2]|0; + $91 = $88 >>> 3; + $92 = $91 << 1; + $93 = (17528 + ($92<<2)|0); + $94 = HEAP32[17488>>2]|0; + $95 = 1 << $91; + $96 = $94 & $95; + $97 = ($96|0)==(0); + if ($97) { + $98 = $94 | $95; + HEAP32[17488>>2] = $98; + $$pre105 = (($92) + 2)|0; + $$pre106 = (17528 + ($$pre105<<2)|0); + $$pre$phiZ2D = $$pre106;$F4$0 = $93; + } else { + $$sum9 = (($92) + 2)|0; + $99 = (17528 + ($$sum9<<2)|0); + $100 = HEAP32[$99>>2]|0; + $101 = HEAP32[(17504)>>2]|0; + $102 = ($100>>>0)<($101>>>0); + if ($102) { + _abort(); + // unreachable; + } else { + $$pre$phiZ2D = $99;$F4$0 = $100; + } + } + HEAP32[$$pre$phiZ2D>>2] = $90; + $103 = ((($F4$0)) + 12|0); + HEAP32[$103>>2] = $90; + $104 = ((($90)) + 8|0); + HEAP32[$104>>2] = $F4$0; + $105 = ((($90)) + 12|0); + HEAP32[$105>>2] = $93; + } + HEAP32[(17496)>>2] = $81; + HEAP32[(17508)>>2] = $84; + $mem$0 = $69; + return ($mem$0|0); + } + $106 = HEAP32[(17492)>>2]|0; + $107 = ($106|0)==(0); + if ($107) { + $nb$0 = $4; + } else { + $108 = (0 - ($106))|0; + $109 = $106 & $108; + $110 = (($109) + -1)|0; + $111 = $110 >>> 12; + $112 = $111 & 16; + $113 = $110 >>> $112; + $114 = $113 >>> 5; + $115 = $114 & 8; + $116 = $115 | $112; + $117 = $113 >>> $115; + $118 = $117 >>> 2; + $119 = $118 & 4; + $120 = $116 | $119; + $121 = $117 >>> $119; + $122 = $121 >>> 1; + $123 = $122 & 2; + $124 = $120 | $123; + $125 = $121 >>> $123; + $126 = $125 >>> 1; + $127 = $126 & 1; + $128 = $124 | $127; + $129 = $125 >>> $127; + $130 = (($128) + ($129))|0; + $131 = (17792 + ($130<<2)|0); + $132 = HEAP32[$131>>2]|0; + $133 = ((($132)) + 4|0); + $134 = HEAP32[$133>>2]|0; + $135 = $134 & -8; + $136 = (($135) - ($4))|0; + $rsize$0$i = $136;$t$0$i = $132;$v$0$i = $132; + while(1) { + $137 = ((($t$0$i)) + 16|0); + $138 = HEAP32[$137>>2]|0; + $139 = ($138|0)==(0|0); + if ($139) { + $140 = ((($t$0$i)) + 20|0); + $141 = HEAP32[$140>>2]|0; + $142 = ($141|0)==(0|0); + if ($142) { + $rsize$0$i$lcssa = $rsize$0$i;$v$0$i$lcssa = $v$0$i; + break; + } else { + $144 = $141; + } + } else { + $144 = $138; + } + $143 = ((($144)) + 4|0); + $145 = HEAP32[$143>>2]|0; + $146 = $145 & -8; + $147 = (($146) - ($4))|0; + $148 = ($147>>>0)<($rsize$0$i>>>0); + $$rsize$0$i = $148 ? $147 : $rsize$0$i; + $$v$0$i = $148 ? $144 : $v$0$i; + $rsize$0$i = $$rsize$0$i;$t$0$i = $144;$v$0$i = $$v$0$i; + } + $149 = HEAP32[(17504)>>2]|0; + $150 = ($v$0$i$lcssa>>>0)<($149>>>0); + if ($150) { + _abort(); + // unreachable; + } + $151 = (($v$0$i$lcssa) + ($4)|0); + $152 = ($v$0$i$lcssa>>>0)<($151>>>0); + if (!($152)) { + _abort(); + // unreachable; + } + $153 = ((($v$0$i$lcssa)) + 24|0); + $154 = HEAP32[$153>>2]|0; + $155 = ((($v$0$i$lcssa)) + 12|0); + $156 = HEAP32[$155>>2]|0; + $157 = ($156|0)==($v$0$i$lcssa|0); + do { + if ($157) { + $167 = ((($v$0$i$lcssa)) + 20|0); + $168 = HEAP32[$167>>2]|0; + $169 = ($168|0)==(0|0); + if ($169) { + $170 = ((($v$0$i$lcssa)) + 16|0); + $171 = HEAP32[$170>>2]|0; + $172 = ($171|0)==(0|0); + if ($172) { + $R$1$i = 0; + break; + } else { + $R$0$i = $171;$RP$0$i = $170; + } + } else { + $R$0$i = $168;$RP$0$i = $167; + } + while(1) { + $173 = ((($R$0$i)) + 20|0); + $174 = HEAP32[$173>>2]|0; + $175 = ($174|0)==(0|0); + if (!($175)) { + $R$0$i = $174;$RP$0$i = $173; + continue; + } + $176 = ((($R$0$i)) + 16|0); + $177 = HEAP32[$176>>2]|0; + $178 = ($177|0)==(0|0); + if ($178) { + $R$0$i$lcssa = $R$0$i;$RP$0$i$lcssa = $RP$0$i; + break; + } else { + $R$0$i = $177;$RP$0$i = $176; + } + } + $179 = ($RP$0$i$lcssa>>>0)<($149>>>0); + if ($179) { + _abort(); + // unreachable; + } else { + HEAP32[$RP$0$i$lcssa>>2] = 0; + $R$1$i = $R$0$i$lcssa; + break; + } + } else { + $158 = ((($v$0$i$lcssa)) + 8|0); + $159 = HEAP32[$158>>2]|0; + $160 = ($159>>>0)<($149>>>0); + if ($160) { + _abort(); + // unreachable; + } + $161 = ((($159)) + 12|0); + $162 = HEAP32[$161>>2]|0; + $163 = ($162|0)==($v$0$i$lcssa|0); + if (!($163)) { + _abort(); + // unreachable; + } + $164 = ((($156)) + 8|0); + $165 = HEAP32[$164>>2]|0; + $166 = ($165|0)==($v$0$i$lcssa|0); + if ($166) { + HEAP32[$161>>2] = $156; + HEAP32[$164>>2] = $159; + $R$1$i = $156; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $180 = ($154|0)==(0|0); + do { + if (!($180)) { + $181 = ((($v$0$i$lcssa)) + 28|0); + $182 = HEAP32[$181>>2]|0; + $183 = (17792 + ($182<<2)|0); + $184 = HEAP32[$183>>2]|0; + $185 = ($v$0$i$lcssa|0)==($184|0); + if ($185) { + HEAP32[$183>>2] = $R$1$i; + $cond$i = ($R$1$i|0)==(0|0); + if ($cond$i) { + $186 = 1 << $182; + $187 = $186 ^ -1; + $188 = HEAP32[(17492)>>2]|0; + $189 = $188 & $187; + HEAP32[(17492)>>2] = $189; + break; + } + } else { + $190 = HEAP32[(17504)>>2]|0; + $191 = ($154>>>0)<($190>>>0); + if ($191) { + _abort(); + // unreachable; + } + $192 = ((($154)) + 16|0); + $193 = HEAP32[$192>>2]|0; + $194 = ($193|0)==($v$0$i$lcssa|0); + if ($194) { + HEAP32[$192>>2] = $R$1$i; + } else { + $195 = ((($154)) + 20|0); + HEAP32[$195>>2] = $R$1$i; + } + $196 = ($R$1$i|0)==(0|0); + if ($196) { + break; + } + } + $197 = HEAP32[(17504)>>2]|0; + $198 = ($R$1$i>>>0)<($197>>>0); + if ($198) { + _abort(); + // unreachable; + } + $199 = ((($R$1$i)) + 24|0); + HEAP32[$199>>2] = $154; + $200 = ((($v$0$i$lcssa)) + 16|0); + $201 = HEAP32[$200>>2]|0; + $202 = ($201|0)==(0|0); + do { + if (!($202)) { + $203 = ($201>>>0)<($197>>>0); + if ($203) { + _abort(); + // unreachable; + } else { + $204 = ((($R$1$i)) + 16|0); + HEAP32[$204>>2] = $201; + $205 = ((($201)) + 24|0); + HEAP32[$205>>2] = $R$1$i; + break; + } + } + } while(0); + $206 = ((($v$0$i$lcssa)) + 20|0); + $207 = HEAP32[$206>>2]|0; + $208 = ($207|0)==(0|0); + if (!($208)) { + $209 = HEAP32[(17504)>>2]|0; + $210 = ($207>>>0)<($209>>>0); + if ($210) { + _abort(); + // unreachable; + } else { + $211 = ((($R$1$i)) + 20|0); + HEAP32[$211>>2] = $207; + $212 = ((($207)) + 24|0); + HEAP32[$212>>2] = $R$1$i; + break; + } + } + } + } while(0); + $213 = ($rsize$0$i$lcssa>>>0)<(16); + if ($213) { + $214 = (($rsize$0$i$lcssa) + ($4))|0; + $215 = $214 | 3; + $216 = ((($v$0$i$lcssa)) + 4|0); + HEAP32[$216>>2] = $215; + $$sum4$i = (($214) + 4)|0; + $217 = (($v$0$i$lcssa) + ($$sum4$i)|0); + $218 = HEAP32[$217>>2]|0; + $219 = $218 | 1; + HEAP32[$217>>2] = $219; + } else { + $220 = $4 | 3; + $221 = ((($v$0$i$lcssa)) + 4|0); + HEAP32[$221>>2] = $220; + $222 = $rsize$0$i$lcssa | 1; + $$sum$i35 = $4 | 4; + $223 = (($v$0$i$lcssa) + ($$sum$i35)|0); + HEAP32[$223>>2] = $222; + $$sum1$i = (($rsize$0$i$lcssa) + ($4))|0; + $224 = (($v$0$i$lcssa) + ($$sum1$i)|0); + HEAP32[$224>>2] = $rsize$0$i$lcssa; + $225 = HEAP32[(17496)>>2]|0; + $226 = ($225|0)==(0); + if (!($226)) { + $227 = HEAP32[(17508)>>2]|0; + $228 = $225 >>> 3; + $229 = $228 << 1; + $230 = (17528 + ($229<<2)|0); + $231 = HEAP32[17488>>2]|0; + $232 = 1 << $228; + $233 = $231 & $232; + $234 = ($233|0)==(0); + if ($234) { + $235 = $231 | $232; + HEAP32[17488>>2] = $235; + $$pre$i = (($229) + 2)|0; + $$pre8$i = (17528 + ($$pre$i<<2)|0); + $$pre$phi$iZ2D = $$pre8$i;$F1$0$i = $230; + } else { + $$sum3$i = (($229) + 2)|0; + $236 = (17528 + ($$sum3$i<<2)|0); + $237 = HEAP32[$236>>2]|0; + $238 = HEAP32[(17504)>>2]|0; + $239 = ($237>>>0)<($238>>>0); + if ($239) { + _abort(); + // unreachable; + } else { + $$pre$phi$iZ2D = $236;$F1$0$i = $237; + } + } + HEAP32[$$pre$phi$iZ2D>>2] = $227; + $240 = ((($F1$0$i)) + 12|0); + HEAP32[$240>>2] = $227; + $241 = ((($227)) + 8|0); + HEAP32[$241>>2] = $F1$0$i; + $242 = ((($227)) + 12|0); + HEAP32[$242>>2] = $230; + } + HEAP32[(17496)>>2] = $rsize$0$i$lcssa; + HEAP32[(17508)>>2] = $151; + } + $243 = ((($v$0$i$lcssa)) + 8|0); + $mem$0 = $243; + return ($mem$0|0); + } + } else { + $nb$0 = $4; + } + } else { + $244 = ($bytes>>>0)>(4294967231); + if ($244) { + $nb$0 = -1; + } else { + $245 = (($bytes) + 11)|0; + $246 = $245 & -8; + $247 = HEAP32[(17492)>>2]|0; + $248 = ($247|0)==(0); + if ($248) { + $nb$0 = $246; + } else { + $249 = (0 - ($246))|0; + $250 = $245 >>> 8; + $251 = ($250|0)==(0); + if ($251) { + $idx$0$i = 0; + } else { + $252 = ($246>>>0)>(16777215); + if ($252) { + $idx$0$i = 31; + } else { + $253 = (($250) + 1048320)|0; + $254 = $253 >>> 16; + $255 = $254 & 8; + $256 = $250 << $255; + $257 = (($256) + 520192)|0; + $258 = $257 >>> 16; + $259 = $258 & 4; + $260 = $259 | $255; + $261 = $256 << $259; + $262 = (($261) + 245760)|0; + $263 = $262 >>> 16; + $264 = $263 & 2; + $265 = $260 | $264; + $266 = (14 - ($265))|0; + $267 = $261 << $264; + $268 = $267 >>> 15; + $269 = (($266) + ($268))|0; + $270 = $269 << 1; + $271 = (($269) + 7)|0; + $272 = $246 >>> $271; + $273 = $272 & 1; + $274 = $273 | $270; + $idx$0$i = $274; + } + } + $275 = (17792 + ($idx$0$i<<2)|0); + $276 = HEAP32[$275>>2]|0; + $277 = ($276|0)==(0|0); + L123: do { + if ($277) { + $rsize$2$i = $249;$t$1$i = 0;$v$2$i = 0; + label = 86; + } else { + $278 = ($idx$0$i|0)==(31); + $279 = $idx$0$i >>> 1; + $280 = (25 - ($279))|0; + $281 = $278 ? 0 : $280; + $282 = $246 << $281; + $rsize$0$i15 = $249;$rst$0$i = 0;$sizebits$0$i = $282;$t$0$i14 = $276;$v$0$i16 = 0; + while(1) { + $283 = ((($t$0$i14)) + 4|0); + $284 = HEAP32[$283>>2]|0; + $285 = $284 & -8; + $286 = (($285) - ($246))|0; + $287 = ($286>>>0)<($rsize$0$i15>>>0); + if ($287) { + $288 = ($285|0)==($246|0); + if ($288) { + $rsize$331$i = $286;$t$230$i = $t$0$i14;$v$332$i = $t$0$i14; + label = 90; + break L123; + } else { + $rsize$1$i = $286;$v$1$i = $t$0$i14; + } + } else { + $rsize$1$i = $rsize$0$i15;$v$1$i = $v$0$i16; + } + $289 = ((($t$0$i14)) + 20|0); + $290 = HEAP32[$289>>2]|0; + $291 = $sizebits$0$i >>> 31; + $292 = (((($t$0$i14)) + 16|0) + ($291<<2)|0); + $293 = HEAP32[$292>>2]|0; + $294 = ($290|0)==(0|0); + $295 = ($290|0)==($293|0); + $or$cond19$i = $294 | $295; + $rst$1$i = $or$cond19$i ? $rst$0$i : $290; + $296 = ($293|0)==(0|0); + $297 = $sizebits$0$i << 1; + if ($296) { + $rsize$2$i = $rsize$1$i;$t$1$i = $rst$1$i;$v$2$i = $v$1$i; + label = 86; + break; + } else { + $rsize$0$i15 = $rsize$1$i;$rst$0$i = $rst$1$i;$sizebits$0$i = $297;$t$0$i14 = $293;$v$0$i16 = $v$1$i; + } + } + } + } while(0); + if ((label|0) == 86) { + $298 = ($t$1$i|0)==(0|0); + $299 = ($v$2$i|0)==(0|0); + $or$cond$i = $298 & $299; + if ($or$cond$i) { + $300 = 2 << $idx$0$i; + $301 = (0 - ($300))|0; + $302 = $300 | $301; + $303 = $247 & $302; + $304 = ($303|0)==(0); + if ($304) { + $nb$0 = $246; + break; + } + $305 = (0 - ($303))|0; + $306 = $303 & $305; + $307 = (($306) + -1)|0; + $308 = $307 >>> 12; + $309 = $308 & 16; + $310 = $307 >>> $309; + $311 = $310 >>> 5; + $312 = $311 & 8; + $313 = $312 | $309; + $314 = $310 >>> $312; + $315 = $314 >>> 2; + $316 = $315 & 4; + $317 = $313 | $316; + $318 = $314 >>> $316; + $319 = $318 >>> 1; + $320 = $319 & 2; + $321 = $317 | $320; + $322 = $318 >>> $320; + $323 = $322 >>> 1; + $324 = $323 & 1; + $325 = $321 | $324; + $326 = $322 >>> $324; + $327 = (($325) + ($326))|0; + $328 = (17792 + ($327<<2)|0); + $329 = HEAP32[$328>>2]|0; + $t$2$ph$i = $329;$v$3$ph$i = 0; + } else { + $t$2$ph$i = $t$1$i;$v$3$ph$i = $v$2$i; + } + $330 = ($t$2$ph$i|0)==(0|0); + if ($330) { + $rsize$3$lcssa$i = $rsize$2$i;$v$3$lcssa$i = $v$3$ph$i; + } else { + $rsize$331$i = $rsize$2$i;$t$230$i = $t$2$ph$i;$v$332$i = $v$3$ph$i; + label = 90; + } + } + if ((label|0) == 90) { + while(1) { + label = 0; + $331 = ((($t$230$i)) + 4|0); + $332 = HEAP32[$331>>2]|0; + $333 = $332 & -8; + $334 = (($333) - ($246))|0; + $335 = ($334>>>0)<($rsize$331$i>>>0); + $$rsize$3$i = $335 ? $334 : $rsize$331$i; + $t$2$v$3$i = $335 ? $t$230$i : $v$332$i; + $336 = ((($t$230$i)) + 16|0); + $337 = HEAP32[$336>>2]|0; + $338 = ($337|0)==(0|0); + if (!($338)) { + $rsize$331$i = $$rsize$3$i;$t$230$i = $337;$v$332$i = $t$2$v$3$i; + label = 90; + continue; + } + $339 = ((($t$230$i)) + 20|0); + $340 = HEAP32[$339>>2]|0; + $341 = ($340|0)==(0|0); + if ($341) { + $rsize$3$lcssa$i = $$rsize$3$i;$v$3$lcssa$i = $t$2$v$3$i; + break; + } else { + $rsize$331$i = $$rsize$3$i;$t$230$i = $340;$v$332$i = $t$2$v$3$i; + label = 90; + } + } + } + $342 = ($v$3$lcssa$i|0)==(0|0); + if ($342) { + $nb$0 = $246; + } else { + $343 = HEAP32[(17496)>>2]|0; + $344 = (($343) - ($246))|0; + $345 = ($rsize$3$lcssa$i>>>0)<($344>>>0); + if ($345) { + $346 = HEAP32[(17504)>>2]|0; + $347 = ($v$3$lcssa$i>>>0)<($346>>>0); + if ($347) { + _abort(); + // unreachable; + } + $348 = (($v$3$lcssa$i) + ($246)|0); + $349 = ($v$3$lcssa$i>>>0)<($348>>>0); + if (!($349)) { + _abort(); + // unreachable; + } + $350 = ((($v$3$lcssa$i)) + 24|0); + $351 = HEAP32[$350>>2]|0; + $352 = ((($v$3$lcssa$i)) + 12|0); + $353 = HEAP32[$352>>2]|0; + $354 = ($353|0)==($v$3$lcssa$i|0); + do { + if ($354) { + $364 = ((($v$3$lcssa$i)) + 20|0); + $365 = HEAP32[$364>>2]|0; + $366 = ($365|0)==(0|0); + if ($366) { + $367 = ((($v$3$lcssa$i)) + 16|0); + $368 = HEAP32[$367>>2]|0; + $369 = ($368|0)==(0|0); + if ($369) { + $R$1$i20 = 0; + break; + } else { + $R$0$i18 = $368;$RP$0$i17 = $367; + } + } else { + $R$0$i18 = $365;$RP$0$i17 = $364; + } + while(1) { + $370 = ((($R$0$i18)) + 20|0); + $371 = HEAP32[$370>>2]|0; + $372 = ($371|0)==(0|0); + if (!($372)) { + $R$0$i18 = $371;$RP$0$i17 = $370; + continue; + } + $373 = ((($R$0$i18)) + 16|0); + $374 = HEAP32[$373>>2]|0; + $375 = ($374|0)==(0|0); + if ($375) { + $R$0$i18$lcssa = $R$0$i18;$RP$0$i17$lcssa = $RP$0$i17; + break; + } else { + $R$0$i18 = $374;$RP$0$i17 = $373; + } + } + $376 = ($RP$0$i17$lcssa>>>0)<($346>>>0); + if ($376) { + _abort(); + // unreachable; + } else { + HEAP32[$RP$0$i17$lcssa>>2] = 0; + $R$1$i20 = $R$0$i18$lcssa; + break; + } + } else { + $355 = ((($v$3$lcssa$i)) + 8|0); + $356 = HEAP32[$355>>2]|0; + $357 = ($356>>>0)<($346>>>0); + if ($357) { + _abort(); + // unreachable; + } + $358 = ((($356)) + 12|0); + $359 = HEAP32[$358>>2]|0; + $360 = ($359|0)==($v$3$lcssa$i|0); + if (!($360)) { + _abort(); + // unreachable; + } + $361 = ((($353)) + 8|0); + $362 = HEAP32[$361>>2]|0; + $363 = ($362|0)==($v$3$lcssa$i|0); + if ($363) { + HEAP32[$358>>2] = $353; + HEAP32[$361>>2] = $356; + $R$1$i20 = $353; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $377 = ($351|0)==(0|0); + do { + if (!($377)) { + $378 = ((($v$3$lcssa$i)) + 28|0); + $379 = HEAP32[$378>>2]|0; + $380 = (17792 + ($379<<2)|0); + $381 = HEAP32[$380>>2]|0; + $382 = ($v$3$lcssa$i|0)==($381|0); + if ($382) { + HEAP32[$380>>2] = $R$1$i20; + $cond$i21 = ($R$1$i20|0)==(0|0); + if ($cond$i21) { + $383 = 1 << $379; + $384 = $383 ^ -1; + $385 = HEAP32[(17492)>>2]|0; + $386 = $385 & $384; + HEAP32[(17492)>>2] = $386; + break; + } + } else { + $387 = HEAP32[(17504)>>2]|0; + $388 = ($351>>>0)<($387>>>0); + if ($388) { + _abort(); + // unreachable; + } + $389 = ((($351)) + 16|0); + $390 = HEAP32[$389>>2]|0; + $391 = ($390|0)==($v$3$lcssa$i|0); + if ($391) { + HEAP32[$389>>2] = $R$1$i20; + } else { + $392 = ((($351)) + 20|0); + HEAP32[$392>>2] = $R$1$i20; + } + $393 = ($R$1$i20|0)==(0|0); + if ($393) { + break; + } + } + $394 = HEAP32[(17504)>>2]|0; + $395 = ($R$1$i20>>>0)<($394>>>0); + if ($395) { + _abort(); + // unreachable; + } + $396 = ((($R$1$i20)) + 24|0); + HEAP32[$396>>2] = $351; + $397 = ((($v$3$lcssa$i)) + 16|0); + $398 = HEAP32[$397>>2]|0; + $399 = ($398|0)==(0|0); + do { + if (!($399)) { + $400 = ($398>>>0)<($394>>>0); + if ($400) { + _abort(); + // unreachable; + } else { + $401 = ((($R$1$i20)) + 16|0); + HEAP32[$401>>2] = $398; + $402 = ((($398)) + 24|0); + HEAP32[$402>>2] = $R$1$i20; + break; + } + } + } while(0); + $403 = ((($v$3$lcssa$i)) + 20|0); + $404 = HEAP32[$403>>2]|0; + $405 = ($404|0)==(0|0); + if (!($405)) { + $406 = HEAP32[(17504)>>2]|0; + $407 = ($404>>>0)<($406>>>0); + if ($407) { + _abort(); + // unreachable; + } else { + $408 = ((($R$1$i20)) + 20|0); + HEAP32[$408>>2] = $404; + $409 = ((($404)) + 24|0); + HEAP32[$409>>2] = $R$1$i20; + break; + } + } + } + } while(0); + $410 = ($rsize$3$lcssa$i>>>0)<(16); + L199: do { + if ($410) { + $411 = (($rsize$3$lcssa$i) + ($246))|0; + $412 = $411 | 3; + $413 = ((($v$3$lcssa$i)) + 4|0); + HEAP32[$413>>2] = $412; + $$sum18$i = (($411) + 4)|0; + $414 = (($v$3$lcssa$i) + ($$sum18$i)|0); + $415 = HEAP32[$414>>2]|0; + $416 = $415 | 1; + HEAP32[$414>>2] = $416; + } else { + $417 = $246 | 3; + $418 = ((($v$3$lcssa$i)) + 4|0); + HEAP32[$418>>2] = $417; + $419 = $rsize$3$lcssa$i | 1; + $$sum$i2334 = $246 | 4; + $420 = (($v$3$lcssa$i) + ($$sum$i2334)|0); + HEAP32[$420>>2] = $419; + $$sum1$i24 = (($rsize$3$lcssa$i) + ($246))|0; + $421 = (($v$3$lcssa$i) + ($$sum1$i24)|0); + HEAP32[$421>>2] = $rsize$3$lcssa$i; + $422 = $rsize$3$lcssa$i >>> 3; + $423 = ($rsize$3$lcssa$i>>>0)<(256); + if ($423) { + $424 = $422 << 1; + $425 = (17528 + ($424<<2)|0); + $426 = HEAP32[17488>>2]|0; + $427 = 1 << $422; + $428 = $426 & $427; + $429 = ($428|0)==(0); + if ($429) { + $430 = $426 | $427; + HEAP32[17488>>2] = $430; + $$pre$i25 = (($424) + 2)|0; + $$pre43$i = (17528 + ($$pre$i25<<2)|0); + $$pre$phi$i26Z2D = $$pre43$i;$F5$0$i = $425; + } else { + $$sum17$i = (($424) + 2)|0; + $431 = (17528 + ($$sum17$i<<2)|0); + $432 = HEAP32[$431>>2]|0; + $433 = HEAP32[(17504)>>2]|0; + $434 = ($432>>>0)<($433>>>0); + if ($434) { + _abort(); + // unreachable; + } else { + $$pre$phi$i26Z2D = $431;$F5$0$i = $432; + } + } + HEAP32[$$pre$phi$i26Z2D>>2] = $348; + $435 = ((($F5$0$i)) + 12|0); + HEAP32[$435>>2] = $348; + $$sum15$i = (($246) + 8)|0; + $436 = (($v$3$lcssa$i) + ($$sum15$i)|0); + HEAP32[$436>>2] = $F5$0$i; + $$sum16$i = (($246) + 12)|0; + $437 = (($v$3$lcssa$i) + ($$sum16$i)|0); + HEAP32[$437>>2] = $425; + break; + } + $438 = $rsize$3$lcssa$i >>> 8; + $439 = ($438|0)==(0); + if ($439) { + $I7$0$i = 0; + } else { + $440 = ($rsize$3$lcssa$i>>>0)>(16777215); + if ($440) { + $I7$0$i = 31; + } else { + $441 = (($438) + 1048320)|0; + $442 = $441 >>> 16; + $443 = $442 & 8; + $444 = $438 << $443; + $445 = (($444) + 520192)|0; + $446 = $445 >>> 16; + $447 = $446 & 4; + $448 = $447 | $443; + $449 = $444 << $447; + $450 = (($449) + 245760)|0; + $451 = $450 >>> 16; + $452 = $451 & 2; + $453 = $448 | $452; + $454 = (14 - ($453))|0; + $455 = $449 << $452; + $456 = $455 >>> 15; + $457 = (($454) + ($456))|0; + $458 = $457 << 1; + $459 = (($457) + 7)|0; + $460 = $rsize$3$lcssa$i >>> $459; + $461 = $460 & 1; + $462 = $461 | $458; + $I7$0$i = $462; + } + } + $463 = (17792 + ($I7$0$i<<2)|0); + $$sum2$i = (($246) + 28)|0; + $464 = (($v$3$lcssa$i) + ($$sum2$i)|0); + HEAP32[$464>>2] = $I7$0$i; + $$sum3$i27 = (($246) + 16)|0; + $465 = (($v$3$lcssa$i) + ($$sum3$i27)|0); + $$sum4$i28 = (($246) + 20)|0; + $466 = (($v$3$lcssa$i) + ($$sum4$i28)|0); + HEAP32[$466>>2] = 0; + HEAP32[$465>>2] = 0; + $467 = HEAP32[(17492)>>2]|0; + $468 = 1 << $I7$0$i; + $469 = $467 & $468; + $470 = ($469|0)==(0); + if ($470) { + $471 = $467 | $468; + HEAP32[(17492)>>2] = $471; + HEAP32[$463>>2] = $348; + $$sum5$i = (($246) + 24)|0; + $472 = (($v$3$lcssa$i) + ($$sum5$i)|0); + HEAP32[$472>>2] = $463; + $$sum6$i = (($246) + 12)|0; + $473 = (($v$3$lcssa$i) + ($$sum6$i)|0); + HEAP32[$473>>2] = $348; + $$sum7$i = (($246) + 8)|0; + $474 = (($v$3$lcssa$i) + ($$sum7$i)|0); + HEAP32[$474>>2] = $348; + break; + } + $475 = HEAP32[$463>>2]|0; + $476 = ((($475)) + 4|0); + $477 = HEAP32[$476>>2]|0; + $478 = $477 & -8; + $479 = ($478|0)==($rsize$3$lcssa$i|0); + L216: do { + if ($479) { + $T$0$lcssa$i = $475; + } else { + $480 = ($I7$0$i|0)==(31); + $481 = $I7$0$i >>> 1; + $482 = (25 - ($481))|0; + $483 = $480 ? 0 : $482; + $484 = $rsize$3$lcssa$i << $483; + $K12$029$i = $484;$T$028$i = $475; + while(1) { + $491 = $K12$029$i >>> 31; + $492 = (((($T$028$i)) + 16|0) + ($491<<2)|0); + $487 = HEAP32[$492>>2]|0; + $493 = ($487|0)==(0|0); + if ($493) { + $$lcssa232 = $492;$T$028$i$lcssa = $T$028$i; + break; + } + $485 = $K12$029$i << 1; + $486 = ((($487)) + 4|0); + $488 = HEAP32[$486>>2]|0; + $489 = $488 & -8; + $490 = ($489|0)==($rsize$3$lcssa$i|0); + if ($490) { + $T$0$lcssa$i = $487; + break L216; + } else { + $K12$029$i = $485;$T$028$i = $487; + } + } + $494 = HEAP32[(17504)>>2]|0; + $495 = ($$lcssa232>>>0)<($494>>>0); + if ($495) { + _abort(); + // unreachable; + } else { + HEAP32[$$lcssa232>>2] = $348; + $$sum11$i = (($246) + 24)|0; + $496 = (($v$3$lcssa$i) + ($$sum11$i)|0); + HEAP32[$496>>2] = $T$028$i$lcssa; + $$sum12$i = (($246) + 12)|0; + $497 = (($v$3$lcssa$i) + ($$sum12$i)|0); + HEAP32[$497>>2] = $348; + $$sum13$i = (($246) + 8)|0; + $498 = (($v$3$lcssa$i) + ($$sum13$i)|0); + HEAP32[$498>>2] = $348; + break L199; + } + } + } while(0); + $499 = ((($T$0$lcssa$i)) + 8|0); + $500 = HEAP32[$499>>2]|0; + $501 = HEAP32[(17504)>>2]|0; + $502 = ($500>>>0)>=($501>>>0); + $not$$i = ($T$0$lcssa$i>>>0)>=($501>>>0); + $503 = $502 & $not$$i; + if ($503) { + $504 = ((($500)) + 12|0); + HEAP32[$504>>2] = $348; + HEAP32[$499>>2] = $348; + $$sum8$i = (($246) + 8)|0; + $505 = (($v$3$lcssa$i) + ($$sum8$i)|0); + HEAP32[$505>>2] = $500; + $$sum9$i = (($246) + 12)|0; + $506 = (($v$3$lcssa$i) + ($$sum9$i)|0); + HEAP32[$506>>2] = $T$0$lcssa$i; + $$sum10$i = (($246) + 24)|0; + $507 = (($v$3$lcssa$i) + ($$sum10$i)|0); + HEAP32[$507>>2] = 0; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $508 = ((($v$3$lcssa$i)) + 8|0); + $mem$0 = $508; + return ($mem$0|0); + } else { + $nb$0 = $246; + } + } + } + } + } + } while(0); + $509 = HEAP32[(17496)>>2]|0; + $510 = ($509>>>0)<($nb$0>>>0); + if (!($510)) { + $511 = (($509) - ($nb$0))|0; + $512 = HEAP32[(17508)>>2]|0; + $513 = ($511>>>0)>(15); + if ($513) { + $514 = (($512) + ($nb$0)|0); + HEAP32[(17508)>>2] = $514; + HEAP32[(17496)>>2] = $511; + $515 = $511 | 1; + $$sum2 = (($nb$0) + 4)|0; + $516 = (($512) + ($$sum2)|0); + HEAP32[$516>>2] = $515; + $517 = (($512) + ($509)|0); + HEAP32[$517>>2] = $511; + $518 = $nb$0 | 3; + $519 = ((($512)) + 4|0); + HEAP32[$519>>2] = $518; + } else { + HEAP32[(17496)>>2] = 0; + HEAP32[(17508)>>2] = 0; + $520 = $509 | 3; + $521 = ((($512)) + 4|0); + HEAP32[$521>>2] = $520; + $$sum1 = (($509) + 4)|0; + $522 = (($512) + ($$sum1)|0); + $523 = HEAP32[$522>>2]|0; + $524 = $523 | 1; + HEAP32[$522>>2] = $524; + } + $525 = ((($512)) + 8|0); + $mem$0 = $525; + return ($mem$0|0); + } + $526 = HEAP32[(17500)>>2]|0; + $527 = ($526>>>0)>($nb$0>>>0); + if ($527) { + $528 = (($526) - ($nb$0))|0; + HEAP32[(17500)>>2] = $528; + $529 = HEAP32[(17512)>>2]|0; + $530 = (($529) + ($nb$0)|0); + HEAP32[(17512)>>2] = $530; + $531 = $528 | 1; + $$sum = (($nb$0) + 4)|0; + $532 = (($529) + ($$sum)|0); + HEAP32[$532>>2] = $531; + $533 = $nb$0 | 3; + $534 = ((($529)) + 4|0); + HEAP32[$534>>2] = $533; + $535 = ((($529)) + 8|0); + $mem$0 = $535; + return ($mem$0|0); + } + $536 = HEAP32[17960>>2]|0; + $537 = ($536|0)==(0); + do { + if ($537) { + $538 = (_sysconf(30)|0); + $539 = (($538) + -1)|0; + $540 = $539 & $538; + $541 = ($540|0)==(0); + if ($541) { + HEAP32[(17968)>>2] = $538; + HEAP32[(17964)>>2] = $538; + HEAP32[(17972)>>2] = -1; + HEAP32[(17976)>>2] = -1; + HEAP32[(17980)>>2] = 0; + HEAP32[(17932)>>2] = 0; + $542 = (_time((0|0))|0); + $543 = $542 & -16; + $544 = $543 ^ 1431655768; + HEAP32[17960>>2] = $544; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $545 = (($nb$0) + 48)|0; + $546 = HEAP32[(17968)>>2]|0; + $547 = (($nb$0) + 47)|0; + $548 = (($546) + ($547))|0; + $549 = (0 - ($546))|0; + $550 = $548 & $549; + $551 = ($550>>>0)>($nb$0>>>0); + if (!($551)) { + $mem$0 = 0; + return ($mem$0|0); + } + $552 = HEAP32[(17928)>>2]|0; + $553 = ($552|0)==(0); + if (!($553)) { + $554 = HEAP32[(17920)>>2]|0; + $555 = (($554) + ($550))|0; + $556 = ($555>>>0)<=($554>>>0); + $557 = ($555>>>0)>($552>>>0); + $or$cond1$i = $556 | $557; + if ($or$cond1$i) { + $mem$0 = 0; + return ($mem$0|0); + } + } + $558 = HEAP32[(17932)>>2]|0; + $559 = $558 & 4; + $560 = ($559|0)==(0); + L258: do { + if ($560) { + $561 = HEAP32[(17512)>>2]|0; + $562 = ($561|0)==(0|0); + L260: do { + if ($562) { + label = 174; + } else { + $sp$0$i$i = (17936); + while(1) { + $563 = HEAP32[$sp$0$i$i>>2]|0; + $564 = ($563>>>0)>($561>>>0); + if (!($564)) { + $565 = ((($sp$0$i$i)) + 4|0); + $566 = HEAP32[$565>>2]|0; + $567 = (($563) + ($566)|0); + $568 = ($567>>>0)>($561>>>0); + if ($568) { + $$lcssa228 = $sp$0$i$i;$$lcssa230 = $565; + break; + } + } + $569 = ((($sp$0$i$i)) + 8|0); + $570 = HEAP32[$569>>2]|0; + $571 = ($570|0)==(0|0); + if ($571) { + label = 174; + break L260; + } else { + $sp$0$i$i = $570; + } + } + $594 = HEAP32[(17500)>>2]|0; + $595 = (($548) - ($594))|0; + $596 = $595 & $549; + $597 = ($596>>>0)<(2147483647); + if ($597) { + $598 = (_sbrk(($596|0))|0); + $599 = HEAP32[$$lcssa228>>2]|0; + $600 = HEAP32[$$lcssa230>>2]|0; + $601 = (($599) + ($600)|0); + $602 = ($598|0)==($601|0); + $$3$i = $602 ? $596 : 0; + if ($602) { + $603 = ($598|0)==((-1)|0); + if ($603) { + $tsize$0323944$i = $$3$i; + } else { + $tbase$255$i = $598;$tsize$254$i = $$3$i; + label = 194; + break L258; + } + } else { + $br$0$ph$i = $598;$ssize$1$ph$i = $596;$tsize$0$ph$i = $$3$i; + label = 184; + } + } else { + $tsize$0323944$i = 0; + } + } + } while(0); + do { + if ((label|0) == 174) { + $572 = (_sbrk(0)|0); + $573 = ($572|0)==((-1)|0); + if ($573) { + $tsize$0323944$i = 0; + } else { + $574 = $572; + $575 = HEAP32[(17964)>>2]|0; + $576 = (($575) + -1)|0; + $577 = $576 & $574; + $578 = ($577|0)==(0); + if ($578) { + $ssize$0$i = $550; + } else { + $579 = (($576) + ($574))|0; + $580 = (0 - ($575))|0; + $581 = $579 & $580; + $582 = (($550) - ($574))|0; + $583 = (($582) + ($581))|0; + $ssize$0$i = $583; + } + $584 = HEAP32[(17920)>>2]|0; + $585 = (($584) + ($ssize$0$i))|0; + $586 = ($ssize$0$i>>>0)>($nb$0>>>0); + $587 = ($ssize$0$i>>>0)<(2147483647); + $or$cond$i30 = $586 & $587; + if ($or$cond$i30) { + $588 = HEAP32[(17928)>>2]|0; + $589 = ($588|0)==(0); + if (!($589)) { + $590 = ($585>>>0)<=($584>>>0); + $591 = ($585>>>0)>($588>>>0); + $or$cond2$i = $590 | $591; + if ($or$cond2$i) { + $tsize$0323944$i = 0; + break; + } + } + $592 = (_sbrk(($ssize$0$i|0))|0); + $593 = ($592|0)==($572|0); + $ssize$0$$i = $593 ? $ssize$0$i : 0; + if ($593) { + $tbase$255$i = $572;$tsize$254$i = $ssize$0$$i; + label = 194; + break L258; + } else { + $br$0$ph$i = $592;$ssize$1$ph$i = $ssize$0$i;$tsize$0$ph$i = $ssize$0$$i; + label = 184; + } + } else { + $tsize$0323944$i = 0; + } + } + } + } while(0); + L280: do { + if ((label|0) == 184) { + $604 = (0 - ($ssize$1$ph$i))|0; + $605 = ($br$0$ph$i|0)!=((-1)|0); + $606 = ($ssize$1$ph$i>>>0)<(2147483647); + $or$cond5$i = $606 & $605; + $607 = ($545>>>0)>($ssize$1$ph$i>>>0); + $or$cond6$i = $607 & $or$cond5$i; + do { + if ($or$cond6$i) { + $608 = HEAP32[(17968)>>2]|0; + $609 = (($547) - ($ssize$1$ph$i))|0; + $610 = (($609) + ($608))|0; + $611 = (0 - ($608))|0; + $612 = $610 & $611; + $613 = ($612>>>0)<(2147483647); + if ($613) { + $614 = (_sbrk(($612|0))|0); + $615 = ($614|0)==((-1)|0); + if ($615) { + (_sbrk(($604|0))|0); + $tsize$0323944$i = $tsize$0$ph$i; + break L280; + } else { + $616 = (($612) + ($ssize$1$ph$i))|0; + $ssize$2$i = $616; + break; + } + } else { + $ssize$2$i = $ssize$1$ph$i; + } + } else { + $ssize$2$i = $ssize$1$ph$i; + } + } while(0); + $617 = ($br$0$ph$i|0)==((-1)|0); + if ($617) { + $tsize$0323944$i = $tsize$0$ph$i; + } else { + $tbase$255$i = $br$0$ph$i;$tsize$254$i = $ssize$2$i; + label = 194; + break L258; + } + } + } while(0); + $618 = HEAP32[(17932)>>2]|0; + $619 = $618 | 4; + HEAP32[(17932)>>2] = $619; + $tsize$1$i = $tsize$0323944$i; + label = 191; + } else { + $tsize$1$i = 0; + label = 191; + } + } while(0); + if ((label|0) == 191) { + $620 = ($550>>>0)<(2147483647); + if ($620) { + $621 = (_sbrk(($550|0))|0); + $622 = (_sbrk(0)|0); + $623 = ($621|0)!=((-1)|0); + $624 = ($622|0)!=((-1)|0); + $or$cond3$i = $623 & $624; + $625 = ($621>>>0)<($622>>>0); + $or$cond8$i = $625 & $or$cond3$i; + if ($or$cond8$i) { + $626 = $622; + $627 = $621; + $628 = (($626) - ($627))|0; + $629 = (($nb$0) + 40)|0; + $630 = ($628>>>0)>($629>>>0); + $$tsize$1$i = $630 ? $628 : $tsize$1$i; + if ($630) { + $tbase$255$i = $621;$tsize$254$i = $$tsize$1$i; + label = 194; + } + } + } + } + if ((label|0) == 194) { + $631 = HEAP32[(17920)>>2]|0; + $632 = (($631) + ($tsize$254$i))|0; + HEAP32[(17920)>>2] = $632; + $633 = HEAP32[(17924)>>2]|0; + $634 = ($632>>>0)>($633>>>0); + if ($634) { + HEAP32[(17924)>>2] = $632; + } + $635 = HEAP32[(17512)>>2]|0; + $636 = ($635|0)==(0|0); + L299: do { + if ($636) { + $637 = HEAP32[(17504)>>2]|0; + $638 = ($637|0)==(0|0); + $639 = ($tbase$255$i>>>0)<($637>>>0); + $or$cond9$i = $638 | $639; + if ($or$cond9$i) { + HEAP32[(17504)>>2] = $tbase$255$i; + } + HEAP32[(17936)>>2] = $tbase$255$i; + HEAP32[(17940)>>2] = $tsize$254$i; + HEAP32[(17948)>>2] = 0; + $640 = HEAP32[17960>>2]|0; + HEAP32[(17524)>>2] = $640; + HEAP32[(17520)>>2] = -1; + $i$02$i$i = 0; + while(1) { + $641 = $i$02$i$i << 1; + $642 = (17528 + ($641<<2)|0); + $$sum$i$i = (($641) + 3)|0; + $643 = (17528 + ($$sum$i$i<<2)|0); + HEAP32[$643>>2] = $642; + $$sum1$i$i = (($641) + 2)|0; + $644 = (17528 + ($$sum1$i$i<<2)|0); + HEAP32[$644>>2] = $642; + $645 = (($i$02$i$i) + 1)|0; + $exitcond$i$i = ($645|0)==(32); + if ($exitcond$i$i) { + break; + } else { + $i$02$i$i = $645; + } + } + $646 = (($tsize$254$i) + -40)|0; + $647 = ((($tbase$255$i)) + 8|0); + $648 = $647; + $649 = $648 & 7; + $650 = ($649|0)==(0); + $651 = (0 - ($648))|0; + $652 = $651 & 7; + $653 = $650 ? 0 : $652; + $654 = (($tbase$255$i) + ($653)|0); + $655 = (($646) - ($653))|0; + HEAP32[(17512)>>2] = $654; + HEAP32[(17500)>>2] = $655; + $656 = $655 | 1; + $$sum$i13$i = (($653) + 4)|0; + $657 = (($tbase$255$i) + ($$sum$i13$i)|0); + HEAP32[$657>>2] = $656; + $$sum2$i$i = (($tsize$254$i) + -36)|0; + $658 = (($tbase$255$i) + ($$sum2$i$i)|0); + HEAP32[$658>>2] = 40; + $659 = HEAP32[(17976)>>2]|0; + HEAP32[(17516)>>2] = $659; + } else { + $sp$084$i = (17936); + while(1) { + $660 = HEAP32[$sp$084$i>>2]|0; + $661 = ((($sp$084$i)) + 4|0); + $662 = HEAP32[$661>>2]|0; + $663 = (($660) + ($662)|0); + $664 = ($tbase$255$i|0)==($663|0); + if ($664) { + $$lcssa222 = $660;$$lcssa224 = $661;$$lcssa226 = $662;$sp$084$i$lcssa = $sp$084$i; + label = 204; + break; + } + $665 = ((($sp$084$i)) + 8|0); + $666 = HEAP32[$665>>2]|0; + $667 = ($666|0)==(0|0); + if ($667) { + break; + } else { + $sp$084$i = $666; + } + } + if ((label|0) == 204) { + $668 = ((($sp$084$i$lcssa)) + 12|0); + $669 = HEAP32[$668>>2]|0; + $670 = $669 & 8; + $671 = ($670|0)==(0); + if ($671) { + $672 = ($635>>>0)>=($$lcssa222>>>0); + $673 = ($635>>>0)<($tbase$255$i>>>0); + $or$cond57$i = $673 & $672; + if ($or$cond57$i) { + $674 = (($$lcssa226) + ($tsize$254$i))|0; + HEAP32[$$lcssa224>>2] = $674; + $675 = HEAP32[(17500)>>2]|0; + $676 = (($675) + ($tsize$254$i))|0; + $677 = ((($635)) + 8|0); + $678 = $677; + $679 = $678 & 7; + $680 = ($679|0)==(0); + $681 = (0 - ($678))|0; + $682 = $681 & 7; + $683 = $680 ? 0 : $682; + $684 = (($635) + ($683)|0); + $685 = (($676) - ($683))|0; + HEAP32[(17512)>>2] = $684; + HEAP32[(17500)>>2] = $685; + $686 = $685 | 1; + $$sum$i17$i = (($683) + 4)|0; + $687 = (($635) + ($$sum$i17$i)|0); + HEAP32[$687>>2] = $686; + $$sum2$i18$i = (($676) + 4)|0; + $688 = (($635) + ($$sum2$i18$i)|0); + HEAP32[$688>>2] = 40; + $689 = HEAP32[(17976)>>2]|0; + HEAP32[(17516)>>2] = $689; + break; + } + } + } + $690 = HEAP32[(17504)>>2]|0; + $691 = ($tbase$255$i>>>0)<($690>>>0); + if ($691) { + HEAP32[(17504)>>2] = $tbase$255$i; + $755 = $tbase$255$i; + } else { + $755 = $690; + } + $692 = (($tbase$255$i) + ($tsize$254$i)|0); + $sp$183$i = (17936); + while(1) { + $693 = HEAP32[$sp$183$i>>2]|0; + $694 = ($693|0)==($692|0); + if ($694) { + $$lcssa219 = $sp$183$i;$sp$183$i$lcssa = $sp$183$i; + label = 212; + break; + } + $695 = ((($sp$183$i)) + 8|0); + $696 = HEAP32[$695>>2]|0; + $697 = ($696|0)==(0|0); + if ($697) { + $sp$0$i$i$i = (17936); + break; + } else { + $sp$183$i = $696; + } + } + if ((label|0) == 212) { + $698 = ((($sp$183$i$lcssa)) + 12|0); + $699 = HEAP32[$698>>2]|0; + $700 = $699 & 8; + $701 = ($700|0)==(0); + if ($701) { + HEAP32[$$lcssa219>>2] = $tbase$255$i; + $702 = ((($sp$183$i$lcssa)) + 4|0); + $703 = HEAP32[$702>>2]|0; + $704 = (($703) + ($tsize$254$i))|0; + HEAP32[$702>>2] = $704; + $705 = ((($tbase$255$i)) + 8|0); + $706 = $705; + $707 = $706 & 7; + $708 = ($707|0)==(0); + $709 = (0 - ($706))|0; + $710 = $709 & 7; + $711 = $708 ? 0 : $710; + $712 = (($tbase$255$i) + ($711)|0); + $$sum112$i = (($tsize$254$i) + 8)|0; + $713 = (($tbase$255$i) + ($$sum112$i)|0); + $714 = $713; + $715 = $714 & 7; + $716 = ($715|0)==(0); + $717 = (0 - ($714))|0; + $718 = $717 & 7; + $719 = $716 ? 0 : $718; + $$sum113$i = (($719) + ($tsize$254$i))|0; + $720 = (($tbase$255$i) + ($$sum113$i)|0); + $721 = $720; + $722 = $712; + $723 = (($721) - ($722))|0; + $$sum$i19$i = (($711) + ($nb$0))|0; + $724 = (($tbase$255$i) + ($$sum$i19$i)|0); + $725 = (($723) - ($nb$0))|0; + $726 = $nb$0 | 3; + $$sum1$i20$i = (($711) + 4)|0; + $727 = (($tbase$255$i) + ($$sum1$i20$i)|0); + HEAP32[$727>>2] = $726; + $728 = ($720|0)==($635|0); + L317: do { + if ($728) { + $729 = HEAP32[(17500)>>2]|0; + $730 = (($729) + ($725))|0; + HEAP32[(17500)>>2] = $730; + HEAP32[(17512)>>2] = $724; + $731 = $730 | 1; + $$sum42$i$i = (($$sum$i19$i) + 4)|0; + $732 = (($tbase$255$i) + ($$sum42$i$i)|0); + HEAP32[$732>>2] = $731; + } else { + $733 = HEAP32[(17508)>>2]|0; + $734 = ($720|0)==($733|0); + if ($734) { + $735 = HEAP32[(17496)>>2]|0; + $736 = (($735) + ($725))|0; + HEAP32[(17496)>>2] = $736; + HEAP32[(17508)>>2] = $724; + $737 = $736 | 1; + $$sum40$i$i = (($$sum$i19$i) + 4)|0; + $738 = (($tbase$255$i) + ($$sum40$i$i)|0); + HEAP32[$738>>2] = $737; + $$sum41$i$i = (($736) + ($$sum$i19$i))|0; + $739 = (($tbase$255$i) + ($$sum41$i$i)|0); + HEAP32[$739>>2] = $736; + break; + } + $$sum2$i21$i = (($tsize$254$i) + 4)|0; + $$sum114$i = (($$sum2$i21$i) + ($719))|0; + $740 = (($tbase$255$i) + ($$sum114$i)|0); + $741 = HEAP32[$740>>2]|0; + $742 = $741 & 3; + $743 = ($742|0)==(1); + if ($743) { + $744 = $741 & -8; + $745 = $741 >>> 3; + $746 = ($741>>>0)<(256); + L324: do { + if ($746) { + $$sum3738$i$i = $719 | 8; + $$sum124$i = (($$sum3738$i$i) + ($tsize$254$i))|0; + $747 = (($tbase$255$i) + ($$sum124$i)|0); + $748 = HEAP32[$747>>2]|0; + $$sum39$i$i = (($tsize$254$i) + 12)|0; + $$sum125$i = (($$sum39$i$i) + ($719))|0; + $749 = (($tbase$255$i) + ($$sum125$i)|0); + $750 = HEAP32[$749>>2]|0; + $751 = $745 << 1; + $752 = (17528 + ($751<<2)|0); + $753 = ($748|0)==($752|0); + do { + if (!($753)) { + $754 = ($748>>>0)<($755>>>0); + if ($754) { + _abort(); + // unreachable; + } + $756 = ((($748)) + 12|0); + $757 = HEAP32[$756>>2]|0; + $758 = ($757|0)==($720|0); + if ($758) { + break; + } + _abort(); + // unreachable; + } + } while(0); + $759 = ($750|0)==($748|0); + if ($759) { + $760 = 1 << $745; + $761 = $760 ^ -1; + $762 = HEAP32[17488>>2]|0; + $763 = $762 & $761; + HEAP32[17488>>2] = $763; + break; + } + $764 = ($750|0)==($752|0); + do { + if ($764) { + $$pre57$i$i = ((($750)) + 8|0); + $$pre$phi58$i$iZ2D = $$pre57$i$i; + } else { + $765 = ($750>>>0)<($755>>>0); + if ($765) { + _abort(); + // unreachable; + } + $766 = ((($750)) + 8|0); + $767 = HEAP32[$766>>2]|0; + $768 = ($767|0)==($720|0); + if ($768) { + $$pre$phi58$i$iZ2D = $766; + break; + } + _abort(); + // unreachable; + } + } while(0); + $769 = ((($748)) + 12|0); + HEAP32[$769>>2] = $750; + HEAP32[$$pre$phi58$i$iZ2D>>2] = $748; + } else { + $$sum34$i$i = $719 | 24; + $$sum115$i = (($$sum34$i$i) + ($tsize$254$i))|0; + $770 = (($tbase$255$i) + ($$sum115$i)|0); + $771 = HEAP32[$770>>2]|0; + $$sum5$i$i = (($tsize$254$i) + 12)|0; + $$sum116$i = (($$sum5$i$i) + ($719))|0; + $772 = (($tbase$255$i) + ($$sum116$i)|0); + $773 = HEAP32[$772>>2]|0; + $774 = ($773|0)==($720|0); + do { + if ($774) { + $$sum67$i$i = $719 | 16; + $$sum122$i = (($$sum2$i21$i) + ($$sum67$i$i))|0; + $784 = (($tbase$255$i) + ($$sum122$i)|0); + $785 = HEAP32[$784>>2]|0; + $786 = ($785|0)==(0|0); + if ($786) { + $$sum123$i = (($$sum67$i$i) + ($tsize$254$i))|0; + $787 = (($tbase$255$i) + ($$sum123$i)|0); + $788 = HEAP32[$787>>2]|0; + $789 = ($788|0)==(0|0); + if ($789) { + $R$1$i$i = 0; + break; + } else { + $R$0$i$i = $788;$RP$0$i$i = $787; + } + } else { + $R$0$i$i = $785;$RP$0$i$i = $784; + } + while(1) { + $790 = ((($R$0$i$i)) + 20|0); + $791 = HEAP32[$790>>2]|0; + $792 = ($791|0)==(0|0); + if (!($792)) { + $R$0$i$i = $791;$RP$0$i$i = $790; + continue; + } + $793 = ((($R$0$i$i)) + 16|0); + $794 = HEAP32[$793>>2]|0; + $795 = ($794|0)==(0|0); + if ($795) { + $R$0$i$i$lcssa = $R$0$i$i;$RP$0$i$i$lcssa = $RP$0$i$i; + break; + } else { + $R$0$i$i = $794;$RP$0$i$i = $793; + } + } + $796 = ($RP$0$i$i$lcssa>>>0)<($755>>>0); + if ($796) { + _abort(); + // unreachable; + } else { + HEAP32[$RP$0$i$i$lcssa>>2] = 0; + $R$1$i$i = $R$0$i$i$lcssa; + break; + } + } else { + $$sum3536$i$i = $719 | 8; + $$sum117$i = (($$sum3536$i$i) + ($tsize$254$i))|0; + $775 = (($tbase$255$i) + ($$sum117$i)|0); + $776 = HEAP32[$775>>2]|0; + $777 = ($776>>>0)<($755>>>0); + if ($777) { + _abort(); + // unreachable; + } + $778 = ((($776)) + 12|0); + $779 = HEAP32[$778>>2]|0; + $780 = ($779|0)==($720|0); + if (!($780)) { + _abort(); + // unreachable; + } + $781 = ((($773)) + 8|0); + $782 = HEAP32[$781>>2]|0; + $783 = ($782|0)==($720|0); + if ($783) { + HEAP32[$778>>2] = $773; + HEAP32[$781>>2] = $776; + $R$1$i$i = $773; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $797 = ($771|0)==(0|0); + if ($797) { + break; + } + $$sum30$i$i = (($tsize$254$i) + 28)|0; + $$sum118$i = (($$sum30$i$i) + ($719))|0; + $798 = (($tbase$255$i) + ($$sum118$i)|0); + $799 = HEAP32[$798>>2]|0; + $800 = (17792 + ($799<<2)|0); + $801 = HEAP32[$800>>2]|0; + $802 = ($720|0)==($801|0); + do { + if ($802) { + HEAP32[$800>>2] = $R$1$i$i; + $cond$i$i = ($R$1$i$i|0)==(0|0); + if (!($cond$i$i)) { + break; + } + $803 = 1 << $799; + $804 = $803 ^ -1; + $805 = HEAP32[(17492)>>2]|0; + $806 = $805 & $804; + HEAP32[(17492)>>2] = $806; + break L324; + } else { + $807 = HEAP32[(17504)>>2]|0; + $808 = ($771>>>0)<($807>>>0); + if ($808) { + _abort(); + // unreachable; + } + $809 = ((($771)) + 16|0); + $810 = HEAP32[$809>>2]|0; + $811 = ($810|0)==($720|0); + if ($811) { + HEAP32[$809>>2] = $R$1$i$i; + } else { + $812 = ((($771)) + 20|0); + HEAP32[$812>>2] = $R$1$i$i; + } + $813 = ($R$1$i$i|0)==(0|0); + if ($813) { + break L324; + } + } + } while(0); + $814 = HEAP32[(17504)>>2]|0; + $815 = ($R$1$i$i>>>0)<($814>>>0); + if ($815) { + _abort(); + // unreachable; + } + $816 = ((($R$1$i$i)) + 24|0); + HEAP32[$816>>2] = $771; + $$sum3132$i$i = $719 | 16; + $$sum119$i = (($$sum3132$i$i) + ($tsize$254$i))|0; + $817 = (($tbase$255$i) + ($$sum119$i)|0); + $818 = HEAP32[$817>>2]|0; + $819 = ($818|0)==(0|0); + do { + if (!($819)) { + $820 = ($818>>>0)<($814>>>0); + if ($820) { + _abort(); + // unreachable; + } else { + $821 = ((($R$1$i$i)) + 16|0); + HEAP32[$821>>2] = $818; + $822 = ((($818)) + 24|0); + HEAP32[$822>>2] = $R$1$i$i; + break; + } + } + } while(0); + $$sum120$i = (($$sum2$i21$i) + ($$sum3132$i$i))|0; + $823 = (($tbase$255$i) + ($$sum120$i)|0); + $824 = HEAP32[$823>>2]|0; + $825 = ($824|0)==(0|0); + if ($825) { + break; + } + $826 = HEAP32[(17504)>>2]|0; + $827 = ($824>>>0)<($826>>>0); + if ($827) { + _abort(); + // unreachable; + } else { + $828 = ((($R$1$i$i)) + 20|0); + HEAP32[$828>>2] = $824; + $829 = ((($824)) + 24|0); + HEAP32[$829>>2] = $R$1$i$i; + break; + } + } + } while(0); + $$sum9$i$i = $744 | $719; + $$sum121$i = (($$sum9$i$i) + ($tsize$254$i))|0; + $830 = (($tbase$255$i) + ($$sum121$i)|0); + $831 = (($744) + ($725))|0; + $oldfirst$0$i$i = $830;$qsize$0$i$i = $831; + } else { + $oldfirst$0$i$i = $720;$qsize$0$i$i = $725; + } + $832 = ((($oldfirst$0$i$i)) + 4|0); + $833 = HEAP32[$832>>2]|0; + $834 = $833 & -2; + HEAP32[$832>>2] = $834; + $835 = $qsize$0$i$i | 1; + $$sum10$i$i = (($$sum$i19$i) + 4)|0; + $836 = (($tbase$255$i) + ($$sum10$i$i)|0); + HEAP32[$836>>2] = $835; + $$sum11$i$i = (($qsize$0$i$i) + ($$sum$i19$i))|0; + $837 = (($tbase$255$i) + ($$sum11$i$i)|0); + HEAP32[$837>>2] = $qsize$0$i$i; + $838 = $qsize$0$i$i >>> 3; + $839 = ($qsize$0$i$i>>>0)<(256); + if ($839) { + $840 = $838 << 1; + $841 = (17528 + ($840<<2)|0); + $842 = HEAP32[17488>>2]|0; + $843 = 1 << $838; + $844 = $842 & $843; + $845 = ($844|0)==(0); + do { + if ($845) { + $846 = $842 | $843; + HEAP32[17488>>2] = $846; + $$pre$i22$i = (($840) + 2)|0; + $$pre56$i$i = (17528 + ($$pre$i22$i<<2)|0); + $$pre$phi$i23$iZ2D = $$pre56$i$i;$F4$0$i$i = $841; + } else { + $$sum29$i$i = (($840) + 2)|0; + $847 = (17528 + ($$sum29$i$i<<2)|0); + $848 = HEAP32[$847>>2]|0; + $849 = HEAP32[(17504)>>2]|0; + $850 = ($848>>>0)<($849>>>0); + if (!($850)) { + $$pre$phi$i23$iZ2D = $847;$F4$0$i$i = $848; + break; + } + _abort(); + // unreachable; + } + } while(0); + HEAP32[$$pre$phi$i23$iZ2D>>2] = $724; + $851 = ((($F4$0$i$i)) + 12|0); + HEAP32[$851>>2] = $724; + $$sum27$i$i = (($$sum$i19$i) + 8)|0; + $852 = (($tbase$255$i) + ($$sum27$i$i)|0); + HEAP32[$852>>2] = $F4$0$i$i; + $$sum28$i$i = (($$sum$i19$i) + 12)|0; + $853 = (($tbase$255$i) + ($$sum28$i$i)|0); + HEAP32[$853>>2] = $841; + break; + } + $854 = $qsize$0$i$i >>> 8; + $855 = ($854|0)==(0); + do { + if ($855) { + $I7$0$i$i = 0; + } else { + $856 = ($qsize$0$i$i>>>0)>(16777215); + if ($856) { + $I7$0$i$i = 31; + break; + } + $857 = (($854) + 1048320)|0; + $858 = $857 >>> 16; + $859 = $858 & 8; + $860 = $854 << $859; + $861 = (($860) + 520192)|0; + $862 = $861 >>> 16; + $863 = $862 & 4; + $864 = $863 | $859; + $865 = $860 << $863; + $866 = (($865) + 245760)|0; + $867 = $866 >>> 16; + $868 = $867 & 2; + $869 = $864 | $868; + $870 = (14 - ($869))|0; + $871 = $865 << $868; + $872 = $871 >>> 15; + $873 = (($870) + ($872))|0; + $874 = $873 << 1; + $875 = (($873) + 7)|0; + $876 = $qsize$0$i$i >>> $875; + $877 = $876 & 1; + $878 = $877 | $874; + $I7$0$i$i = $878; + } + } while(0); + $879 = (17792 + ($I7$0$i$i<<2)|0); + $$sum12$i$i = (($$sum$i19$i) + 28)|0; + $880 = (($tbase$255$i) + ($$sum12$i$i)|0); + HEAP32[$880>>2] = $I7$0$i$i; + $$sum13$i$i = (($$sum$i19$i) + 16)|0; + $881 = (($tbase$255$i) + ($$sum13$i$i)|0); + $$sum14$i$i = (($$sum$i19$i) + 20)|0; + $882 = (($tbase$255$i) + ($$sum14$i$i)|0); + HEAP32[$882>>2] = 0; + HEAP32[$881>>2] = 0; + $883 = HEAP32[(17492)>>2]|0; + $884 = 1 << $I7$0$i$i; + $885 = $883 & $884; + $886 = ($885|0)==(0); + if ($886) { + $887 = $883 | $884; + HEAP32[(17492)>>2] = $887; + HEAP32[$879>>2] = $724; + $$sum15$i$i = (($$sum$i19$i) + 24)|0; + $888 = (($tbase$255$i) + ($$sum15$i$i)|0); + HEAP32[$888>>2] = $879; + $$sum16$i$i = (($$sum$i19$i) + 12)|0; + $889 = (($tbase$255$i) + ($$sum16$i$i)|0); + HEAP32[$889>>2] = $724; + $$sum17$i$i = (($$sum$i19$i) + 8)|0; + $890 = (($tbase$255$i) + ($$sum17$i$i)|0); + HEAP32[$890>>2] = $724; + break; + } + $891 = HEAP32[$879>>2]|0; + $892 = ((($891)) + 4|0); + $893 = HEAP32[$892>>2]|0; + $894 = $893 & -8; + $895 = ($894|0)==($qsize$0$i$i|0); + L410: do { + if ($895) { + $T$0$lcssa$i25$i = $891; + } else { + $896 = ($I7$0$i$i|0)==(31); + $897 = $I7$0$i$i >>> 1; + $898 = (25 - ($897))|0; + $899 = $896 ? 0 : $898; + $900 = $qsize$0$i$i << $899; + $K8$051$i$i = $900;$T$050$i$i = $891; + while(1) { + $907 = $K8$051$i$i >>> 31; + $908 = (((($T$050$i$i)) + 16|0) + ($907<<2)|0); + $903 = HEAP32[$908>>2]|0; + $909 = ($903|0)==(0|0); + if ($909) { + $$lcssa = $908;$T$050$i$i$lcssa = $T$050$i$i; + break; + } + $901 = $K8$051$i$i << 1; + $902 = ((($903)) + 4|0); + $904 = HEAP32[$902>>2]|0; + $905 = $904 & -8; + $906 = ($905|0)==($qsize$0$i$i|0); + if ($906) { + $T$0$lcssa$i25$i = $903; + break L410; + } else { + $K8$051$i$i = $901;$T$050$i$i = $903; + } + } + $910 = HEAP32[(17504)>>2]|0; + $911 = ($$lcssa>>>0)<($910>>>0); + if ($911) { + _abort(); + // unreachable; + } else { + HEAP32[$$lcssa>>2] = $724; + $$sum23$i$i = (($$sum$i19$i) + 24)|0; + $912 = (($tbase$255$i) + ($$sum23$i$i)|0); + HEAP32[$912>>2] = $T$050$i$i$lcssa; + $$sum24$i$i = (($$sum$i19$i) + 12)|0; + $913 = (($tbase$255$i) + ($$sum24$i$i)|0); + HEAP32[$913>>2] = $724; + $$sum25$i$i = (($$sum$i19$i) + 8)|0; + $914 = (($tbase$255$i) + ($$sum25$i$i)|0); + HEAP32[$914>>2] = $724; + break L317; + } + } + } while(0); + $915 = ((($T$0$lcssa$i25$i)) + 8|0); + $916 = HEAP32[$915>>2]|0; + $917 = HEAP32[(17504)>>2]|0; + $918 = ($916>>>0)>=($917>>>0); + $not$$i26$i = ($T$0$lcssa$i25$i>>>0)>=($917>>>0); + $919 = $918 & $not$$i26$i; + if ($919) { + $920 = ((($916)) + 12|0); + HEAP32[$920>>2] = $724; + HEAP32[$915>>2] = $724; + $$sum20$i$i = (($$sum$i19$i) + 8)|0; + $921 = (($tbase$255$i) + ($$sum20$i$i)|0); + HEAP32[$921>>2] = $916; + $$sum21$i$i = (($$sum$i19$i) + 12)|0; + $922 = (($tbase$255$i) + ($$sum21$i$i)|0); + HEAP32[$922>>2] = $T$0$lcssa$i25$i; + $$sum22$i$i = (($$sum$i19$i) + 24)|0; + $923 = (($tbase$255$i) + ($$sum22$i$i)|0); + HEAP32[$923>>2] = 0; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $$sum1819$i$i = $711 | 8; + $924 = (($tbase$255$i) + ($$sum1819$i$i)|0); + $mem$0 = $924; + return ($mem$0|0); + } else { + $sp$0$i$i$i = (17936); + } + } + while(1) { + $925 = HEAP32[$sp$0$i$i$i>>2]|0; + $926 = ($925>>>0)>($635>>>0); + if (!($926)) { + $927 = ((($sp$0$i$i$i)) + 4|0); + $928 = HEAP32[$927>>2]|0; + $929 = (($925) + ($928)|0); + $930 = ($929>>>0)>($635>>>0); + if ($930) { + $$lcssa215 = $925;$$lcssa216 = $928;$$lcssa217 = $929; + break; + } + } + $931 = ((($sp$0$i$i$i)) + 8|0); + $932 = HEAP32[$931>>2]|0; + $sp$0$i$i$i = $932; + } + $$sum$i14$i = (($$lcssa216) + -47)|0; + $$sum1$i15$i = (($$lcssa216) + -39)|0; + $933 = (($$lcssa215) + ($$sum1$i15$i)|0); + $934 = $933; + $935 = $934 & 7; + $936 = ($935|0)==(0); + $937 = (0 - ($934))|0; + $938 = $937 & 7; + $939 = $936 ? 0 : $938; + $$sum2$i16$i = (($$sum$i14$i) + ($939))|0; + $940 = (($$lcssa215) + ($$sum2$i16$i)|0); + $941 = ((($635)) + 16|0); + $942 = ($940>>>0)<($941>>>0); + $943 = $942 ? $635 : $940; + $944 = ((($943)) + 8|0); + $945 = (($tsize$254$i) + -40)|0; + $946 = ((($tbase$255$i)) + 8|0); + $947 = $946; + $948 = $947 & 7; + $949 = ($948|0)==(0); + $950 = (0 - ($947))|0; + $951 = $950 & 7; + $952 = $949 ? 0 : $951; + $953 = (($tbase$255$i) + ($952)|0); + $954 = (($945) - ($952))|0; + HEAP32[(17512)>>2] = $953; + HEAP32[(17500)>>2] = $954; + $955 = $954 | 1; + $$sum$i$i$i = (($952) + 4)|0; + $956 = (($tbase$255$i) + ($$sum$i$i$i)|0); + HEAP32[$956>>2] = $955; + $$sum2$i$i$i = (($tsize$254$i) + -36)|0; + $957 = (($tbase$255$i) + ($$sum2$i$i$i)|0); + HEAP32[$957>>2] = 40; + $958 = HEAP32[(17976)>>2]|0; + HEAP32[(17516)>>2] = $958; + $959 = ((($943)) + 4|0); + HEAP32[$959>>2] = 27; + ;HEAP32[$944>>2]=HEAP32[(17936)>>2]|0;HEAP32[$944+4>>2]=HEAP32[(17936)+4>>2]|0;HEAP32[$944+8>>2]=HEAP32[(17936)+8>>2]|0;HEAP32[$944+12>>2]=HEAP32[(17936)+12>>2]|0; + HEAP32[(17936)>>2] = $tbase$255$i; + HEAP32[(17940)>>2] = $tsize$254$i; + HEAP32[(17948)>>2] = 0; + HEAP32[(17944)>>2] = $944; + $960 = ((($943)) + 28|0); + HEAP32[$960>>2] = 7; + $961 = ((($943)) + 32|0); + $962 = ($961>>>0)<($$lcssa217>>>0); + if ($962) { + $964 = $960; + while(1) { + $963 = ((($964)) + 4|0); + HEAP32[$963>>2] = 7; + $965 = ((($964)) + 8|0); + $966 = ($965>>>0)<($$lcssa217>>>0); + if ($966) { + $964 = $963; + } else { + break; + } + } + } + $967 = ($943|0)==($635|0); + if (!($967)) { + $968 = $943; + $969 = $635; + $970 = (($968) - ($969))|0; + $971 = HEAP32[$959>>2]|0; + $972 = $971 & -2; + HEAP32[$959>>2] = $972; + $973 = $970 | 1; + $974 = ((($635)) + 4|0); + HEAP32[$974>>2] = $973; + HEAP32[$943>>2] = $970; + $975 = $970 >>> 3; + $976 = ($970>>>0)<(256); + if ($976) { + $977 = $975 << 1; + $978 = (17528 + ($977<<2)|0); + $979 = HEAP32[17488>>2]|0; + $980 = 1 << $975; + $981 = $979 & $980; + $982 = ($981|0)==(0); + if ($982) { + $983 = $979 | $980; + HEAP32[17488>>2] = $983; + $$pre$i$i = (($977) + 2)|0; + $$pre14$i$i = (17528 + ($$pre$i$i<<2)|0); + $$pre$phi$i$iZ2D = $$pre14$i$i;$F$0$i$i = $978; + } else { + $$sum4$i$i = (($977) + 2)|0; + $984 = (17528 + ($$sum4$i$i<<2)|0); + $985 = HEAP32[$984>>2]|0; + $986 = HEAP32[(17504)>>2]|0; + $987 = ($985>>>0)<($986>>>0); + if ($987) { + _abort(); + // unreachable; + } else { + $$pre$phi$i$iZ2D = $984;$F$0$i$i = $985; + } + } + HEAP32[$$pre$phi$i$iZ2D>>2] = $635; + $988 = ((($F$0$i$i)) + 12|0); + HEAP32[$988>>2] = $635; + $989 = ((($635)) + 8|0); + HEAP32[$989>>2] = $F$0$i$i; + $990 = ((($635)) + 12|0); + HEAP32[$990>>2] = $978; + break; + } + $991 = $970 >>> 8; + $992 = ($991|0)==(0); + if ($992) { + $I1$0$i$i = 0; + } else { + $993 = ($970>>>0)>(16777215); + if ($993) { + $I1$0$i$i = 31; + } else { + $994 = (($991) + 1048320)|0; + $995 = $994 >>> 16; + $996 = $995 & 8; + $997 = $991 << $996; + $998 = (($997) + 520192)|0; + $999 = $998 >>> 16; + $1000 = $999 & 4; + $1001 = $1000 | $996; + $1002 = $997 << $1000; + $1003 = (($1002) + 245760)|0; + $1004 = $1003 >>> 16; + $1005 = $1004 & 2; + $1006 = $1001 | $1005; + $1007 = (14 - ($1006))|0; + $1008 = $1002 << $1005; + $1009 = $1008 >>> 15; + $1010 = (($1007) + ($1009))|0; + $1011 = $1010 << 1; + $1012 = (($1010) + 7)|0; + $1013 = $970 >>> $1012; + $1014 = $1013 & 1; + $1015 = $1014 | $1011; + $I1$0$i$i = $1015; + } + } + $1016 = (17792 + ($I1$0$i$i<<2)|0); + $1017 = ((($635)) + 28|0); + HEAP32[$1017>>2] = $I1$0$i$i; + $1018 = ((($635)) + 20|0); + HEAP32[$1018>>2] = 0; + HEAP32[$941>>2] = 0; + $1019 = HEAP32[(17492)>>2]|0; + $1020 = 1 << $I1$0$i$i; + $1021 = $1019 & $1020; + $1022 = ($1021|0)==(0); + if ($1022) { + $1023 = $1019 | $1020; + HEAP32[(17492)>>2] = $1023; + HEAP32[$1016>>2] = $635; + $1024 = ((($635)) + 24|0); + HEAP32[$1024>>2] = $1016; + $1025 = ((($635)) + 12|0); + HEAP32[$1025>>2] = $635; + $1026 = ((($635)) + 8|0); + HEAP32[$1026>>2] = $635; + break; + } + $1027 = HEAP32[$1016>>2]|0; + $1028 = ((($1027)) + 4|0); + $1029 = HEAP32[$1028>>2]|0; + $1030 = $1029 & -8; + $1031 = ($1030|0)==($970|0); + L452: do { + if ($1031) { + $T$0$lcssa$i$i = $1027; + } else { + $1032 = ($I1$0$i$i|0)==(31); + $1033 = $I1$0$i$i >>> 1; + $1034 = (25 - ($1033))|0; + $1035 = $1032 ? 0 : $1034; + $1036 = $970 << $1035; + $K2$07$i$i = $1036;$T$06$i$i = $1027; + while(1) { + $1043 = $K2$07$i$i >>> 31; + $1044 = (((($T$06$i$i)) + 16|0) + ($1043<<2)|0); + $1039 = HEAP32[$1044>>2]|0; + $1045 = ($1039|0)==(0|0); + if ($1045) { + $$lcssa211 = $1044;$T$06$i$i$lcssa = $T$06$i$i; + break; + } + $1037 = $K2$07$i$i << 1; + $1038 = ((($1039)) + 4|0); + $1040 = HEAP32[$1038>>2]|0; + $1041 = $1040 & -8; + $1042 = ($1041|0)==($970|0); + if ($1042) { + $T$0$lcssa$i$i = $1039; + break L452; + } else { + $K2$07$i$i = $1037;$T$06$i$i = $1039; + } + } + $1046 = HEAP32[(17504)>>2]|0; + $1047 = ($$lcssa211>>>0)<($1046>>>0); + if ($1047) { + _abort(); + // unreachable; + } else { + HEAP32[$$lcssa211>>2] = $635; + $1048 = ((($635)) + 24|0); + HEAP32[$1048>>2] = $T$06$i$i$lcssa; + $1049 = ((($635)) + 12|0); + HEAP32[$1049>>2] = $635; + $1050 = ((($635)) + 8|0); + HEAP32[$1050>>2] = $635; + break L299; + } + } + } while(0); + $1051 = ((($T$0$lcssa$i$i)) + 8|0); + $1052 = HEAP32[$1051>>2]|0; + $1053 = HEAP32[(17504)>>2]|0; + $1054 = ($1052>>>0)>=($1053>>>0); + $not$$i$i = ($T$0$lcssa$i$i>>>0)>=($1053>>>0); + $1055 = $1054 & $not$$i$i; + if ($1055) { + $1056 = ((($1052)) + 12|0); + HEAP32[$1056>>2] = $635; + HEAP32[$1051>>2] = $635; + $1057 = ((($635)) + 8|0); + HEAP32[$1057>>2] = $1052; + $1058 = ((($635)) + 12|0); + HEAP32[$1058>>2] = $T$0$lcssa$i$i; + $1059 = ((($635)) + 24|0); + HEAP32[$1059>>2] = 0; + break; + } else { + _abort(); + // unreachable; + } + } + } + } while(0); + $1060 = HEAP32[(17500)>>2]|0; + $1061 = ($1060>>>0)>($nb$0>>>0); + if ($1061) { + $1062 = (($1060) - ($nb$0))|0; + HEAP32[(17500)>>2] = $1062; + $1063 = HEAP32[(17512)>>2]|0; + $1064 = (($1063) + ($nb$0)|0); + HEAP32[(17512)>>2] = $1064; + $1065 = $1062 | 1; + $$sum$i32 = (($nb$0) + 4)|0; + $1066 = (($1063) + ($$sum$i32)|0); + HEAP32[$1066>>2] = $1065; + $1067 = $nb$0 | 3; + $1068 = ((($1063)) + 4|0); + HEAP32[$1068>>2] = $1067; + $1069 = ((($1063)) + 8|0); + $mem$0 = $1069; + return ($mem$0|0); + } + } + $1070 = (___errno_location()|0); + HEAP32[$1070>>2] = 12; + $mem$0 = 0; + return ($mem$0|0); +} +function _free($mem) { + $mem = $mem|0; + var $$lcssa = 0, $$pre = 0, $$pre$phi59Z2D = 0, $$pre$phi61Z2D = 0, $$pre$phiZ2D = 0, $$pre57 = 0, $$pre58 = 0, $$pre60 = 0, $$sum = 0, $$sum11 = 0, $$sum12 = 0, $$sum13 = 0, $$sum14 = 0, $$sum1718 = 0, $$sum19 = 0, $$sum2 = 0, $$sum20 = 0, $$sum22 = 0, $$sum23 = 0, $$sum24 = 0; + var $$sum25 = 0, $$sum26 = 0, $$sum27 = 0, $$sum28 = 0, $$sum29 = 0, $$sum3 = 0, $$sum30 = 0, $$sum31 = 0, $$sum5 = 0, $$sum67 = 0, $$sum8 = 0, $$sum9 = 0, $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0; + var $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0; + var $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0; + var $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0; + var $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0; + var $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0; + var $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0; + var $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0; + var $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0; + var $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0; + var $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0; + var $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0; + var $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0; + var $321 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0; + var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0; + var $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0; + var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $F16$0 = 0, $I18$0 = 0, $K19$052 = 0, $R$0 = 0, $R$0$lcssa = 0, $R$1 = 0; + var $R7$0 = 0, $R7$0$lcssa = 0, $R7$1 = 0, $RP$0 = 0, $RP$0$lcssa = 0, $RP9$0 = 0, $RP9$0$lcssa = 0, $T$0$lcssa = 0, $T$051 = 0, $T$051$lcssa = 0, $cond = 0, $cond47 = 0, $not$ = 0, $p$0 = 0, $psize$0 = 0, $psize$1 = 0, $sp$0$i = 0, $sp$0$in$i = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = ($mem|0)==(0|0); + if ($0) { + return; + } + $1 = ((($mem)) + -8|0); + $2 = HEAP32[(17504)>>2]|0; + $3 = ($1>>>0)<($2>>>0); + if ($3) { + _abort(); + // unreachable; + } + $4 = ((($mem)) + -4|0); + $5 = HEAP32[$4>>2]|0; + $6 = $5 & 3; + $7 = ($6|0)==(1); + if ($7) { + _abort(); + // unreachable; + } + $8 = $5 & -8; + $$sum = (($8) + -8)|0; + $9 = (($mem) + ($$sum)|0); + $10 = $5 & 1; + $11 = ($10|0)==(0); + do { + if ($11) { + $12 = HEAP32[$1>>2]|0; + $13 = ($6|0)==(0); + if ($13) { + return; + } + $$sum2 = (-8 - ($12))|0; + $14 = (($mem) + ($$sum2)|0); + $15 = (($12) + ($8))|0; + $16 = ($14>>>0)<($2>>>0); + if ($16) { + _abort(); + // unreachable; + } + $17 = HEAP32[(17508)>>2]|0; + $18 = ($14|0)==($17|0); + if ($18) { + $$sum3 = (($8) + -4)|0; + $103 = (($mem) + ($$sum3)|0); + $104 = HEAP32[$103>>2]|0; + $105 = $104 & 3; + $106 = ($105|0)==(3); + if (!($106)) { + $p$0 = $14;$psize$0 = $15; + break; + } + HEAP32[(17496)>>2] = $15; + $107 = $104 & -2; + HEAP32[$103>>2] = $107; + $108 = $15 | 1; + $$sum20 = (($$sum2) + 4)|0; + $109 = (($mem) + ($$sum20)|0); + HEAP32[$109>>2] = $108; + HEAP32[$9>>2] = $15; + return; + } + $19 = $12 >>> 3; + $20 = ($12>>>0)<(256); + if ($20) { + $$sum30 = (($$sum2) + 8)|0; + $21 = (($mem) + ($$sum30)|0); + $22 = HEAP32[$21>>2]|0; + $$sum31 = (($$sum2) + 12)|0; + $23 = (($mem) + ($$sum31)|0); + $24 = HEAP32[$23>>2]|0; + $25 = $19 << 1; + $26 = (17528 + ($25<<2)|0); + $27 = ($22|0)==($26|0); + if (!($27)) { + $28 = ($22>>>0)<($2>>>0); + if ($28) { + _abort(); + // unreachable; + } + $29 = ((($22)) + 12|0); + $30 = HEAP32[$29>>2]|0; + $31 = ($30|0)==($14|0); + if (!($31)) { + _abort(); + // unreachable; + } + } + $32 = ($24|0)==($22|0); + if ($32) { + $33 = 1 << $19; + $34 = $33 ^ -1; + $35 = HEAP32[17488>>2]|0; + $36 = $35 & $34; + HEAP32[17488>>2] = $36; + $p$0 = $14;$psize$0 = $15; + break; + } + $37 = ($24|0)==($26|0); + if ($37) { + $$pre60 = ((($24)) + 8|0); + $$pre$phi61Z2D = $$pre60; + } else { + $38 = ($24>>>0)<($2>>>0); + if ($38) { + _abort(); + // unreachable; + } + $39 = ((($24)) + 8|0); + $40 = HEAP32[$39>>2]|0; + $41 = ($40|0)==($14|0); + if ($41) { + $$pre$phi61Z2D = $39; + } else { + _abort(); + // unreachable; + } + } + $42 = ((($22)) + 12|0); + HEAP32[$42>>2] = $24; + HEAP32[$$pre$phi61Z2D>>2] = $22; + $p$0 = $14;$psize$0 = $15; + break; + } + $$sum22 = (($$sum2) + 24)|0; + $43 = (($mem) + ($$sum22)|0); + $44 = HEAP32[$43>>2]|0; + $$sum23 = (($$sum2) + 12)|0; + $45 = (($mem) + ($$sum23)|0); + $46 = HEAP32[$45>>2]|0; + $47 = ($46|0)==($14|0); + do { + if ($47) { + $$sum25 = (($$sum2) + 20)|0; + $57 = (($mem) + ($$sum25)|0); + $58 = HEAP32[$57>>2]|0; + $59 = ($58|0)==(0|0); + if ($59) { + $$sum24 = (($$sum2) + 16)|0; + $60 = (($mem) + ($$sum24)|0); + $61 = HEAP32[$60>>2]|0; + $62 = ($61|0)==(0|0); + if ($62) { + $R$1 = 0; + break; + } else { + $R$0 = $61;$RP$0 = $60; + } + } else { + $R$0 = $58;$RP$0 = $57; + } + while(1) { + $63 = ((($R$0)) + 20|0); + $64 = HEAP32[$63>>2]|0; + $65 = ($64|0)==(0|0); + if (!($65)) { + $R$0 = $64;$RP$0 = $63; + continue; + } + $66 = ((($R$0)) + 16|0); + $67 = HEAP32[$66>>2]|0; + $68 = ($67|0)==(0|0); + if ($68) { + $R$0$lcssa = $R$0;$RP$0$lcssa = $RP$0; + break; + } else { + $R$0 = $67;$RP$0 = $66; + } + } + $69 = ($RP$0$lcssa>>>0)<($2>>>0); + if ($69) { + _abort(); + // unreachable; + } else { + HEAP32[$RP$0$lcssa>>2] = 0; + $R$1 = $R$0$lcssa; + break; + } + } else { + $$sum29 = (($$sum2) + 8)|0; + $48 = (($mem) + ($$sum29)|0); + $49 = HEAP32[$48>>2]|0; + $50 = ($49>>>0)<($2>>>0); + if ($50) { + _abort(); + // unreachable; + } + $51 = ((($49)) + 12|0); + $52 = HEAP32[$51>>2]|0; + $53 = ($52|0)==($14|0); + if (!($53)) { + _abort(); + // unreachable; + } + $54 = ((($46)) + 8|0); + $55 = HEAP32[$54>>2]|0; + $56 = ($55|0)==($14|0); + if ($56) { + HEAP32[$51>>2] = $46; + HEAP32[$54>>2] = $49; + $R$1 = $46; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $70 = ($44|0)==(0|0); + if ($70) { + $p$0 = $14;$psize$0 = $15; + } else { + $$sum26 = (($$sum2) + 28)|0; + $71 = (($mem) + ($$sum26)|0); + $72 = HEAP32[$71>>2]|0; + $73 = (17792 + ($72<<2)|0); + $74 = HEAP32[$73>>2]|0; + $75 = ($14|0)==($74|0); + if ($75) { + HEAP32[$73>>2] = $R$1; + $cond = ($R$1|0)==(0|0); + if ($cond) { + $76 = 1 << $72; + $77 = $76 ^ -1; + $78 = HEAP32[(17492)>>2]|0; + $79 = $78 & $77; + HEAP32[(17492)>>2] = $79; + $p$0 = $14;$psize$0 = $15; + break; + } + } else { + $80 = HEAP32[(17504)>>2]|0; + $81 = ($44>>>0)<($80>>>0); + if ($81) { + _abort(); + // unreachable; + } + $82 = ((($44)) + 16|0); + $83 = HEAP32[$82>>2]|0; + $84 = ($83|0)==($14|0); + if ($84) { + HEAP32[$82>>2] = $R$1; + } else { + $85 = ((($44)) + 20|0); + HEAP32[$85>>2] = $R$1; + } + $86 = ($R$1|0)==(0|0); + if ($86) { + $p$0 = $14;$psize$0 = $15; + break; + } + } + $87 = HEAP32[(17504)>>2]|0; + $88 = ($R$1>>>0)<($87>>>0); + if ($88) { + _abort(); + // unreachable; + } + $89 = ((($R$1)) + 24|0); + HEAP32[$89>>2] = $44; + $$sum27 = (($$sum2) + 16)|0; + $90 = (($mem) + ($$sum27)|0); + $91 = HEAP32[$90>>2]|0; + $92 = ($91|0)==(0|0); + do { + if (!($92)) { + $93 = ($91>>>0)<($87>>>0); + if ($93) { + _abort(); + // unreachable; + } else { + $94 = ((($R$1)) + 16|0); + HEAP32[$94>>2] = $91; + $95 = ((($91)) + 24|0); + HEAP32[$95>>2] = $R$1; + break; + } + } + } while(0); + $$sum28 = (($$sum2) + 20)|0; + $96 = (($mem) + ($$sum28)|0); + $97 = HEAP32[$96>>2]|0; + $98 = ($97|0)==(0|0); + if ($98) { + $p$0 = $14;$psize$0 = $15; + } else { + $99 = HEAP32[(17504)>>2]|0; + $100 = ($97>>>0)<($99>>>0); + if ($100) { + _abort(); + // unreachable; + } else { + $101 = ((($R$1)) + 20|0); + HEAP32[$101>>2] = $97; + $102 = ((($97)) + 24|0); + HEAP32[$102>>2] = $R$1; + $p$0 = $14;$psize$0 = $15; + break; + } + } + } + } else { + $p$0 = $1;$psize$0 = $8; + } + } while(0); + $110 = ($p$0>>>0)<($9>>>0); + if (!($110)) { + _abort(); + // unreachable; + } + $$sum19 = (($8) + -4)|0; + $111 = (($mem) + ($$sum19)|0); + $112 = HEAP32[$111>>2]|0; + $113 = $112 & 1; + $114 = ($113|0)==(0); + if ($114) { + _abort(); + // unreachable; + } + $115 = $112 & 2; + $116 = ($115|0)==(0); + if ($116) { + $117 = HEAP32[(17512)>>2]|0; + $118 = ($9|0)==($117|0); + if ($118) { + $119 = HEAP32[(17500)>>2]|0; + $120 = (($119) + ($psize$0))|0; + HEAP32[(17500)>>2] = $120; + HEAP32[(17512)>>2] = $p$0; + $121 = $120 | 1; + $122 = ((($p$0)) + 4|0); + HEAP32[$122>>2] = $121; + $123 = HEAP32[(17508)>>2]|0; + $124 = ($p$0|0)==($123|0); + if (!($124)) { + return; + } + HEAP32[(17508)>>2] = 0; + HEAP32[(17496)>>2] = 0; + return; + } + $125 = HEAP32[(17508)>>2]|0; + $126 = ($9|0)==($125|0); + if ($126) { + $127 = HEAP32[(17496)>>2]|0; + $128 = (($127) + ($psize$0))|0; + HEAP32[(17496)>>2] = $128; + HEAP32[(17508)>>2] = $p$0; + $129 = $128 | 1; + $130 = ((($p$0)) + 4|0); + HEAP32[$130>>2] = $129; + $131 = (($p$0) + ($128)|0); + HEAP32[$131>>2] = $128; + return; + } + $132 = $112 & -8; + $133 = (($132) + ($psize$0))|0; + $134 = $112 >>> 3; + $135 = ($112>>>0)<(256); + do { + if ($135) { + $136 = (($mem) + ($8)|0); + $137 = HEAP32[$136>>2]|0; + $$sum1718 = $8 | 4; + $138 = (($mem) + ($$sum1718)|0); + $139 = HEAP32[$138>>2]|0; + $140 = $134 << 1; + $141 = (17528 + ($140<<2)|0); + $142 = ($137|0)==($141|0); + if (!($142)) { + $143 = HEAP32[(17504)>>2]|0; + $144 = ($137>>>0)<($143>>>0); + if ($144) { + _abort(); + // unreachable; + } + $145 = ((($137)) + 12|0); + $146 = HEAP32[$145>>2]|0; + $147 = ($146|0)==($9|0); + if (!($147)) { + _abort(); + // unreachable; + } + } + $148 = ($139|0)==($137|0); + if ($148) { + $149 = 1 << $134; + $150 = $149 ^ -1; + $151 = HEAP32[17488>>2]|0; + $152 = $151 & $150; + HEAP32[17488>>2] = $152; + break; + } + $153 = ($139|0)==($141|0); + if ($153) { + $$pre58 = ((($139)) + 8|0); + $$pre$phi59Z2D = $$pre58; + } else { + $154 = HEAP32[(17504)>>2]|0; + $155 = ($139>>>0)<($154>>>0); + if ($155) { + _abort(); + // unreachable; + } + $156 = ((($139)) + 8|0); + $157 = HEAP32[$156>>2]|0; + $158 = ($157|0)==($9|0); + if ($158) { + $$pre$phi59Z2D = $156; + } else { + _abort(); + // unreachable; + } + } + $159 = ((($137)) + 12|0); + HEAP32[$159>>2] = $139; + HEAP32[$$pre$phi59Z2D>>2] = $137; + } else { + $$sum5 = (($8) + 16)|0; + $160 = (($mem) + ($$sum5)|0); + $161 = HEAP32[$160>>2]|0; + $$sum67 = $8 | 4; + $162 = (($mem) + ($$sum67)|0); + $163 = HEAP32[$162>>2]|0; + $164 = ($163|0)==($9|0); + do { + if ($164) { + $$sum9 = (($8) + 12)|0; + $175 = (($mem) + ($$sum9)|0); + $176 = HEAP32[$175>>2]|0; + $177 = ($176|0)==(0|0); + if ($177) { + $$sum8 = (($8) + 8)|0; + $178 = (($mem) + ($$sum8)|0); + $179 = HEAP32[$178>>2]|0; + $180 = ($179|0)==(0|0); + if ($180) { + $R7$1 = 0; + break; + } else { + $R7$0 = $179;$RP9$0 = $178; + } + } else { + $R7$0 = $176;$RP9$0 = $175; + } + while(1) { + $181 = ((($R7$0)) + 20|0); + $182 = HEAP32[$181>>2]|0; + $183 = ($182|0)==(0|0); + if (!($183)) { + $R7$0 = $182;$RP9$0 = $181; + continue; + } + $184 = ((($R7$0)) + 16|0); + $185 = HEAP32[$184>>2]|0; + $186 = ($185|0)==(0|0); + if ($186) { + $R7$0$lcssa = $R7$0;$RP9$0$lcssa = $RP9$0; + break; + } else { + $R7$0 = $185;$RP9$0 = $184; + } + } + $187 = HEAP32[(17504)>>2]|0; + $188 = ($RP9$0$lcssa>>>0)<($187>>>0); + if ($188) { + _abort(); + // unreachable; + } else { + HEAP32[$RP9$0$lcssa>>2] = 0; + $R7$1 = $R7$0$lcssa; + break; + } + } else { + $165 = (($mem) + ($8)|0); + $166 = HEAP32[$165>>2]|0; + $167 = HEAP32[(17504)>>2]|0; + $168 = ($166>>>0)<($167>>>0); + if ($168) { + _abort(); + // unreachable; + } + $169 = ((($166)) + 12|0); + $170 = HEAP32[$169>>2]|0; + $171 = ($170|0)==($9|0); + if (!($171)) { + _abort(); + // unreachable; + } + $172 = ((($163)) + 8|0); + $173 = HEAP32[$172>>2]|0; + $174 = ($173|0)==($9|0); + if ($174) { + HEAP32[$169>>2] = $163; + HEAP32[$172>>2] = $166; + $R7$1 = $163; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $189 = ($161|0)==(0|0); + if (!($189)) { + $$sum12 = (($8) + 20)|0; + $190 = (($mem) + ($$sum12)|0); + $191 = HEAP32[$190>>2]|0; + $192 = (17792 + ($191<<2)|0); + $193 = HEAP32[$192>>2]|0; + $194 = ($9|0)==($193|0); + if ($194) { + HEAP32[$192>>2] = $R7$1; + $cond47 = ($R7$1|0)==(0|0); + if ($cond47) { + $195 = 1 << $191; + $196 = $195 ^ -1; + $197 = HEAP32[(17492)>>2]|0; + $198 = $197 & $196; + HEAP32[(17492)>>2] = $198; + break; + } + } else { + $199 = HEAP32[(17504)>>2]|0; + $200 = ($161>>>0)<($199>>>0); + if ($200) { + _abort(); + // unreachable; + } + $201 = ((($161)) + 16|0); + $202 = HEAP32[$201>>2]|0; + $203 = ($202|0)==($9|0); + if ($203) { + HEAP32[$201>>2] = $R7$1; + } else { + $204 = ((($161)) + 20|0); + HEAP32[$204>>2] = $R7$1; + } + $205 = ($R7$1|0)==(0|0); + if ($205) { + break; + } + } + $206 = HEAP32[(17504)>>2]|0; + $207 = ($R7$1>>>0)<($206>>>0); + if ($207) { + _abort(); + // unreachable; + } + $208 = ((($R7$1)) + 24|0); + HEAP32[$208>>2] = $161; + $$sum13 = (($8) + 8)|0; + $209 = (($mem) + ($$sum13)|0); + $210 = HEAP32[$209>>2]|0; + $211 = ($210|0)==(0|0); + do { + if (!($211)) { + $212 = ($210>>>0)<($206>>>0); + if ($212) { + _abort(); + // unreachable; + } else { + $213 = ((($R7$1)) + 16|0); + HEAP32[$213>>2] = $210; + $214 = ((($210)) + 24|0); + HEAP32[$214>>2] = $R7$1; + break; + } + } + } while(0); + $$sum14 = (($8) + 12)|0; + $215 = (($mem) + ($$sum14)|0); + $216 = HEAP32[$215>>2]|0; + $217 = ($216|0)==(0|0); + if (!($217)) { + $218 = HEAP32[(17504)>>2]|0; + $219 = ($216>>>0)<($218>>>0); + if ($219) { + _abort(); + // unreachable; + } else { + $220 = ((($R7$1)) + 20|0); + HEAP32[$220>>2] = $216; + $221 = ((($216)) + 24|0); + HEAP32[$221>>2] = $R7$1; + break; + } + } + } + } + } while(0); + $222 = $133 | 1; + $223 = ((($p$0)) + 4|0); + HEAP32[$223>>2] = $222; + $224 = (($p$0) + ($133)|0); + HEAP32[$224>>2] = $133; + $225 = HEAP32[(17508)>>2]|0; + $226 = ($p$0|0)==($225|0); + if ($226) { + HEAP32[(17496)>>2] = $133; + return; + } else { + $psize$1 = $133; + } + } else { + $227 = $112 & -2; + HEAP32[$111>>2] = $227; + $228 = $psize$0 | 1; + $229 = ((($p$0)) + 4|0); + HEAP32[$229>>2] = $228; + $230 = (($p$0) + ($psize$0)|0); + HEAP32[$230>>2] = $psize$0; + $psize$1 = $psize$0; + } + $231 = $psize$1 >>> 3; + $232 = ($psize$1>>>0)<(256); + if ($232) { + $233 = $231 << 1; + $234 = (17528 + ($233<<2)|0); + $235 = HEAP32[17488>>2]|0; + $236 = 1 << $231; + $237 = $235 & $236; + $238 = ($237|0)==(0); + if ($238) { + $239 = $235 | $236; + HEAP32[17488>>2] = $239; + $$pre = (($233) + 2)|0; + $$pre57 = (17528 + ($$pre<<2)|0); + $$pre$phiZ2D = $$pre57;$F16$0 = $234; + } else { + $$sum11 = (($233) + 2)|0; + $240 = (17528 + ($$sum11<<2)|0); + $241 = HEAP32[$240>>2]|0; + $242 = HEAP32[(17504)>>2]|0; + $243 = ($241>>>0)<($242>>>0); + if ($243) { + _abort(); + // unreachable; + } else { + $$pre$phiZ2D = $240;$F16$0 = $241; + } + } + HEAP32[$$pre$phiZ2D>>2] = $p$0; + $244 = ((($F16$0)) + 12|0); + HEAP32[$244>>2] = $p$0; + $245 = ((($p$0)) + 8|0); + HEAP32[$245>>2] = $F16$0; + $246 = ((($p$0)) + 12|0); + HEAP32[$246>>2] = $234; + return; + } + $247 = $psize$1 >>> 8; + $248 = ($247|0)==(0); + if ($248) { + $I18$0 = 0; + } else { + $249 = ($psize$1>>>0)>(16777215); + if ($249) { + $I18$0 = 31; + } else { + $250 = (($247) + 1048320)|0; + $251 = $250 >>> 16; + $252 = $251 & 8; + $253 = $247 << $252; + $254 = (($253) + 520192)|0; + $255 = $254 >>> 16; + $256 = $255 & 4; + $257 = $256 | $252; + $258 = $253 << $256; + $259 = (($258) + 245760)|0; + $260 = $259 >>> 16; + $261 = $260 & 2; + $262 = $257 | $261; + $263 = (14 - ($262))|0; + $264 = $258 << $261; + $265 = $264 >>> 15; + $266 = (($263) + ($265))|0; + $267 = $266 << 1; + $268 = (($266) + 7)|0; + $269 = $psize$1 >>> $268; + $270 = $269 & 1; + $271 = $270 | $267; + $I18$0 = $271; + } + } + $272 = (17792 + ($I18$0<<2)|0); + $273 = ((($p$0)) + 28|0); + HEAP32[$273>>2] = $I18$0; + $274 = ((($p$0)) + 16|0); + $275 = ((($p$0)) + 20|0); + HEAP32[$275>>2] = 0; + HEAP32[$274>>2] = 0; + $276 = HEAP32[(17492)>>2]|0; + $277 = 1 << $I18$0; + $278 = $276 & $277; + $279 = ($278|0)==(0); + L199: do { + if ($279) { + $280 = $276 | $277; + HEAP32[(17492)>>2] = $280; + HEAP32[$272>>2] = $p$0; + $281 = ((($p$0)) + 24|0); + HEAP32[$281>>2] = $272; + $282 = ((($p$0)) + 12|0); + HEAP32[$282>>2] = $p$0; + $283 = ((($p$0)) + 8|0); + HEAP32[$283>>2] = $p$0; + } else { + $284 = HEAP32[$272>>2]|0; + $285 = ((($284)) + 4|0); + $286 = HEAP32[$285>>2]|0; + $287 = $286 & -8; + $288 = ($287|0)==($psize$1|0); + L202: do { + if ($288) { + $T$0$lcssa = $284; + } else { + $289 = ($I18$0|0)==(31); + $290 = $I18$0 >>> 1; + $291 = (25 - ($290))|0; + $292 = $289 ? 0 : $291; + $293 = $psize$1 << $292; + $K19$052 = $293;$T$051 = $284; + while(1) { + $300 = $K19$052 >>> 31; + $301 = (((($T$051)) + 16|0) + ($300<<2)|0); + $296 = HEAP32[$301>>2]|0; + $302 = ($296|0)==(0|0); + if ($302) { + $$lcssa = $301;$T$051$lcssa = $T$051; + break; + } + $294 = $K19$052 << 1; + $295 = ((($296)) + 4|0); + $297 = HEAP32[$295>>2]|0; + $298 = $297 & -8; + $299 = ($298|0)==($psize$1|0); + if ($299) { + $T$0$lcssa = $296; + break L202; + } else { + $K19$052 = $294;$T$051 = $296; + } + } + $303 = HEAP32[(17504)>>2]|0; + $304 = ($$lcssa>>>0)<($303>>>0); + if ($304) { + _abort(); + // unreachable; + } else { + HEAP32[$$lcssa>>2] = $p$0; + $305 = ((($p$0)) + 24|0); + HEAP32[$305>>2] = $T$051$lcssa; + $306 = ((($p$0)) + 12|0); + HEAP32[$306>>2] = $p$0; + $307 = ((($p$0)) + 8|0); + HEAP32[$307>>2] = $p$0; + break L199; + } + } + } while(0); + $308 = ((($T$0$lcssa)) + 8|0); + $309 = HEAP32[$308>>2]|0; + $310 = HEAP32[(17504)>>2]|0; + $311 = ($309>>>0)>=($310>>>0); + $not$ = ($T$0$lcssa>>>0)>=($310>>>0); + $312 = $311 & $not$; + if ($312) { + $313 = ((($309)) + 12|0); + HEAP32[$313>>2] = $p$0; + HEAP32[$308>>2] = $p$0; + $314 = ((($p$0)) + 8|0); + HEAP32[$314>>2] = $309; + $315 = ((($p$0)) + 12|0); + HEAP32[$315>>2] = $T$0$lcssa; + $316 = ((($p$0)) + 24|0); + HEAP32[$316>>2] = 0; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $317 = HEAP32[(17520)>>2]|0; + $318 = (($317) + -1)|0; + HEAP32[(17520)>>2] = $318; + $319 = ($318|0)==(0); + if ($319) { + $sp$0$in$i = (17944); + } else { + return; + } + while(1) { + $sp$0$i = HEAP32[$sp$0$in$i>>2]|0; + $320 = ($sp$0$i|0)==(0|0); + $321 = ((($sp$0$i)) + 8|0); + if ($320) { + break; + } else { + $sp$0$in$i = $321; + } + } + HEAP32[(17520)>>2] = -1; + return; +} +function runPostSets() { + +} +function _memset(ptr, value, num) { + ptr = ptr|0; value = value|0; num = num|0; + var stop = 0, value4 = 0, stop4 = 0, unaligned = 0; + stop = (ptr + num)|0; + if ((num|0) >= 20) { + // This is unaligned, but quite large, so work hard to get to aligned settings + value = value & 0xff; + unaligned = ptr & 3; + value4 = value | (value << 8) | (value << 16) | (value << 24); + stop4 = stop & ~3; + if (unaligned) { + unaligned = (ptr + 4 - unaligned)|0; + while ((ptr|0) < (unaligned|0)) { // no need to check for stop, since we have large num + HEAP8[((ptr)>>0)]=value; + ptr = (ptr+1)|0; + } + } + while ((ptr|0) < (stop4|0)) { + HEAP32[((ptr)>>2)]=value4; + ptr = (ptr+4)|0; + } + } + while ((ptr|0) < (stop|0)) { + HEAP8[((ptr)>>0)]=value; + ptr = (ptr+1)|0; + } + return (ptr-num)|0; +} +function _strlen(ptr) { + ptr = ptr|0; + var curr = 0; + curr = ptr; + while (((HEAP8[((curr)>>0)])|0)) { + curr = (curr + 1)|0; + } + return (curr - ptr)|0; +} +function _memcpy(dest, src, num) { + dest = dest|0; src = src|0; num = num|0; + var ret = 0; + if ((num|0) >= 4096) return _emscripten_memcpy_big(dest|0, src|0, num|0)|0; + ret = dest|0; + if ((dest&3) == (src&3)) { + while (dest & 3) { + if ((num|0) == 0) return ret|0; + HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0); + dest = (dest+1)|0; + src = (src+1)|0; + num = (num-1)|0; + } + while ((num|0) >= 4) { + HEAP32[((dest)>>2)]=((HEAP32[((src)>>2)])|0); + dest = (dest+4)|0; + src = (src+4)|0; + num = (num-4)|0; + } + } + while ((num|0) > 0) { + HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0); + dest = (dest+1)|0; + src = (src+1)|0; + num = (num-1)|0; + } + return ret|0; +} +function _strcpy(pdest, psrc) { + pdest = pdest|0; psrc = psrc|0; + var i = 0; + do { + HEAP8[(((pdest+i)|0)>>0)]=HEAP8[(((psrc+i)|0)>>0)]; + i = (i+1)|0; + } while (((HEAP8[(((psrc)+(i-1))>>0)])|0)); + return pdest|0; +} + + + + +// EMSCRIPTEN_END_FUNCS + + + return { _filtcoef: _filtcoef, _free: _free, _wave_transform: _wave_transform, _wtoutputlength: _wtoutputlength, _memset: _memset, _malloc: _malloc, _memcpy: _memcpy, _strlen: _strlen, _inv_wave_transform: _inv_wave_transform, _filtlength: _filtlength, _strcpy: _strcpy, runPostSets: runPostSets, stackAlloc: stackAlloc, stackSave: stackSave, stackRestore: stackRestore, establishStackSpace: establishStackSpace, setThrew: setThrew, setTempRet0: setTempRet0, getTempRet0: getTempRet0 }; +}) +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg, Module.asmLibraryArg, buffer); +var real__wtoutputlength = asm["_wtoutputlength"]; asm["_wtoutputlength"] = function() { +assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); +assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); +return real__wtoutputlength.apply(null, arguments); +}; + +var real__free = asm["_free"]; asm["_free"] = function() { +assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); +assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); +return real__free.apply(null, arguments); +}; + +var real__wave_transform = asm["_wave_transform"]; asm["_wave_transform"] = function() { +assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); +assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); +return real__wave_transform.apply(null, arguments); +}; + +var real__filtcoef = asm["_filtcoef"]; asm["_filtcoef"] = function() { +assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); +assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); +return real__filtcoef.apply(null, arguments); +}; + +var real__malloc = asm["_malloc"]; asm["_malloc"] = function() { +assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); +assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); +return real__malloc.apply(null, arguments); +}; + +var real__strlen = asm["_strlen"]; asm["_strlen"] = function() { +assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); +assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); +return real__strlen.apply(null, arguments); +}; + +var real__inv_wave_transform = asm["_inv_wave_transform"]; asm["_inv_wave_transform"] = function() { +assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); +assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); +return real__inv_wave_transform.apply(null, arguments); +}; + +var real__filtlength = asm["_filtlength"]; asm["_filtlength"] = function() { +assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); +assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); +return real__filtlength.apply(null, arguments); +}; + +var real__strcpy = asm["_strcpy"]; asm["_strcpy"] = function() { +assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); +assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); +return real__strcpy.apply(null, arguments); +}; +var _wtoutputlength = Module["_wtoutputlength"] = asm["_wtoutputlength"]; +var _free = Module["_free"] = asm["_free"]; +var runPostSets = Module["runPostSets"] = asm["runPostSets"]; +var _wave_transform = Module["_wave_transform"] = asm["_wave_transform"]; +var _filtcoef = Module["_filtcoef"] = asm["_filtcoef"]; +var _memset = Module["_memset"] = asm["_memset"]; +var _malloc = Module["_malloc"] = asm["_malloc"]; +var _memcpy = Module["_memcpy"] = asm["_memcpy"]; +var _strlen = Module["_strlen"] = asm["_strlen"]; +var _inv_wave_transform = Module["_inv_wave_transform"] = asm["_inv_wave_transform"]; +var _filtlength = Module["_filtlength"] = asm["_filtlength"]; +var _strcpy = Module["_strcpy"] = asm["_strcpy"]; +; + +Runtime.stackAlloc = asm['stackAlloc']; +Runtime.stackSave = asm['stackSave']; +Runtime.stackRestore = asm['stackRestore']; +Runtime.establishStackSpace = asm['establishStackSpace']; + +Runtime.setTempRet0 = asm['setTempRet0']; +Runtime.getTempRet0 = asm['getTempRet0']; + + +// Warning: printing of i64 values may be slightly rounded! No deep i64 math used, so precise i64 code not included +var i64Math = null; + +// === Auto-generated postamble setup entry stuff === + + +function ExitStatus(status) { + this.name = "ExitStatus"; + this.message = "Program terminated with exit(" + status + ")"; + this.status = status; +}; +ExitStatus.prototype = new Error(); +ExitStatus.prototype.constructor = ExitStatus; + +var initialStackTop; +var preloadStartTime = null; +var calledMain = false; + +dependenciesFulfilled = function runCaller() { + // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false) + if (!Module['calledRun']) run(); + if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled +} + +Module['callMain'] = Module.callMain = function callMain(args) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on __ATMAIN__)'); + assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remain to be called'); + + args = args || []; + + ensureInitRuntime(); + + var argc = args.length+1; + function pad() { + for (var i = 0; i < 4-1; i++) { + argv.push(0); + } + } + var argv = [allocate(intArrayFromString(Module['thisProgram']), 'i8', ALLOC_NORMAL) ]; + pad(); + for (var i = 0; i < argc-1; i = i + 1) { + argv.push(allocate(intArrayFromString(args[i]), 'i8', ALLOC_NORMAL)); + pad(); + } + argv.push(0); + argv = allocate(argv, 'i32', ALLOC_NORMAL); + + initialStackTop = STACKTOP; + + try { + + var ret = Module['_main'](argc, argv, 0); + + + // if we're not running an evented main loop, it's time to exit + exit(ret, /* implicit = */ true); + } + catch(e) { + if (e instanceof ExitStatus) { + // exit() throws this once it's done to make sure execution + // has been stopped completely + return; + } else if (e == 'SimulateInfiniteLoop') { + // running an evented main loop, don't immediately exit + Module['noExitRuntime'] = true; + return; + } else { + if (e && typeof e === 'object' && e.stack) Module.printErr('exception thrown: ' + [e, e.stack]); + throw e; + } + } finally { + calledMain = true; + } +} + + + + +function run(args) { + args = args || Module['arguments']; + + if (preloadStartTime === null) preloadStartTime = Date.now(); + + if (runDependencies > 0) { + Module.printErr('run() called, but dependencies remain, so not running'); + return; + } + + preRun(); + + if (runDependencies > 0) return; // a preRun added a dependency, run will be called later + if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame + + function doRun() { + if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening + Module['calledRun'] = true; + + if (ABORT) return; + + ensureInitRuntime(); + + preMain(); + + if (ENVIRONMENT_IS_WEB && preloadStartTime !== null) { + Module.printErr('pre-main prep time: ' + (Date.now() - preloadStartTime) + ' ms'); + } + + if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized'](); + + if (Module['_main'] && shouldRunNow) Module['callMain'](args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(function() { + setTimeout(function() { + Module['setStatus'](''); + }, 1); + doRun(); + }, 1); + } else { + doRun(); + } +} +Module['run'] = Module.run = run; + +function exit(status, implicit) { + if (implicit && Module['noExitRuntime']) { + Module.printErr('exit(' + status + ') implicitly called by end of main(), but noExitRuntime, so not exiting the runtime (you can use emscripten_force_exit, if you want to force a true shutdown)'); + return; + } + + if (Module['noExitRuntime']) { + Module.printErr('exit(' + status + ') called, but noExitRuntime, 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)'); + } else { + + ABORT = true; + EXITSTATUS = status; + STACKTOP = initialStackTop; + + exitRuntime(); + + if (Module['onExit']) Module['onExit'](status); + } + + if (ENVIRONMENT_IS_NODE) { + // Work around a node.js bug where stdout buffer is not flushed at process exit: + // Instead of process.exit() directly, wait for stdout flush event. + // See https://github.com/joyent/node/issues/1669 and https://github.com/kripken/emscripten/issues/2582 + // Workaround is based on https://github.com/RReverser/acorn/commit/50ab143cecc9ed71a2d66f78b4aec3bb2e9844f6 + process['stdout']['once']('drain', function () { + process['exit'](status); + }); + console.log(' '); // Make sure to print something to force the drain event to occur, in case the stdout buffer was empty. + // Work around another node bug where sometimes 'drain' is never fired - make another effort + // to emit the exit status, after a significant delay (if node hasn't fired drain by then, give up) + setTimeout(function() { + process['exit'](status); + }, 500); + } else + if (ENVIRONMENT_IS_SHELL && typeof quit === 'function') { + quit(status); + } + // if we reach here, we must throw an exception to halt the current execution + throw new ExitStatus(status); +} +Module['exit'] = Module.exit = exit; + +var abortDecorators = []; + +function abort(what) { + if (what !== undefined) { + Module.print(what); + Module.printErr(what); + what = JSON.stringify(what) + } else { + what = ''; + } + + ABORT = true; + EXITSTATUS = 1; + + var extra = ''; + + var output = 'abort(' + what + ') at ' + stackTrace() + extra; + if (abortDecorators) { + abortDecorators.forEach(function(decorator) { + output = decorator(output, what); + }); + } + throw output; +} +Module['abort'] = Module.abort = abort; + +// {{PRE_RUN_ADDITIONS}} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} + +// shouldRunNow refers to calling main(), not run(). +var shouldRunNow = true; +if (Module['noInitialRun']) { + shouldRunNow = false; +} + + +run(); + +// {{POST_RUN_ADDITIONS}} + + + + + + +// {{MODULE_ADDITIONS}} + + + diff --git a/js/wavewrapper.js b/js/wavewrapper.js new file mode 100644 index 0000000..1af6c4c --- /dev/null +++ b/js/wavewrapper.js @@ -0,0 +1,296 @@ +var flength = function (str) { + filtlength = Module.cwrap('filtlength', 'number', ['string']); + return filtlength(str); +}; + +function zeroArray(length) { + var array = []; + for (var i = 0; i < length; i++) { + array[i] = 0; + } + return array; +} + +function sigdata() { + var sigdata = [ -18.3237,-18.2232,-18.0974,-17.9410,-17.7480,-17.5113,-17.2230,-16.8744,-16.4558,-15.9565,-15.3653,-14.6701,-13.8586,-12.9182, + -11.8363,-10.6008,-9.2006,-7.6257,-5.8680,-3.9217,-1.7839,0.5452,3.0614,5.7562,8.6167,11.6252,14.7591,17.9909,21.2884,24.6155,27.9319, + 31.1947,34.3587,37.3775,40.2049,42.7957,13.2164,14.2125,15.0317,15.6595,16.0845,16.2990,16.2990,16.0845,15.6595,15.0317,14.2125,13.2164, + 12.0608,10.7654,9.3517,34.3587,31.1947,27.9319,24.6155,21.2884,17.9909,14.7591,11.6252,8.6167,5.7562,3.0614,0.5452,-1.7839,-3.9217,-5.8680, + -7.6257,-9.2006,-10.6008,-11.8363,-12.9182,-13.8586,-14.6701,-15.3653,-15.9565,-16.4558,-16.8744,-17.2230,-17.5113,-17.7480,-17.9410,-18.0974, + -18.2232,-18.3237,-18.4035,-18.0080,-17.8889,-17.7403,-17.5533,-17.3156,-17.0102,-16.6129,-16.0884,-15.3848,-14.4239,-13.0840,-11.1708,-8.3634, + -4.1098,2.5833,13.6048,32.7934,28.0187,10.9660,1.0776,-4.9459,-8.7354,-11.1225,-12.4865,-12.8019,-11.2050,-3.3124,1.8995,-11.3573,-15.0684, + -16.5028,-17.1937,-17.5831,-17.8288,-17.9968,-18.1185,-18.2103,-18.2818,-18.3388,-18.3849,-18.4229,-18.4545,-18.4810,-17.4642,-17.2104,-16.9033, + -16.5317,-16.0822,-15.5384,-14.8804,-14.0844,-13.1214,-11.9563,-10.5467,-8.8414,-6.7782,-4.2822,-1.2624,2.3911,6.8111,12.1585,18.6280,26.4549, + 35.9241,35.9241,26.4549,18.6280,12.1585,6.8111,2.3911,-1.2624,-4.2822,-6.7782,-8.8414,-10.5467,-11.9563,-13.1214,-14.0844,-14.8804,-15.5384, + -16.0822,-16.5317,-16.9033,-17.2104,-17.4642,-18.6741,-18.6741,-18.6741,-18.6741,-18.6741,-18.6741,-18.6741,-18.6741,-18.6741,-18.6741,-18.6741, + -18.6741,6.3259,6.3259,6.3259,6.3259,6.3259,6.3259,6.3259,6.3259,6.3259,6.3259,6.3259,6.3259,6.3259,6.3259,6.3259,6.3259,6.3259,6.3259,6.3259, + 6.3259,6.3259,6.3259,6.3259,6.3259,34.8066,34.6752,34.5285,34.3645,34.1812,33.9763,33.7474,33.4917,33.2058,32.8863,32.5294,32.1304,31.6846,31.1864, + 30.6296,30.0074,29.3121,28.5350,27.6667,26.6963,25.6118,24.3999,23.0456,21.5322,19.8408,17.9507,15.8385,13.4781,10.8403,7.8925,4.5982,0.9168,-3.1972, + -7.7947,-12.932,-18.6741,-18.6741,-18.6741,-18.6741,-18.6741,-18.6741,-18.6741,-18.6741,-18.6741,-18.6741,-18.6741,-18.6741,-18.6741,-18.6741,-18.3237]; + return sigdata; +} + +var fcoef = function (str) { + fcoef = Module.cwrap('filtcoef', 'number', ['string', 'number', 'number', 'number', 'number']); + var length = flength(str); + var lpd = new Float64Array(length); + var hpd = new Float64Array(length); + var lpr = new Float64Array(length); + var hpr = new Float64Array(length); + var lbl = new Uint8Array(length); + for (var i = 0; i < length; ++i) { + lpd[i] = hpd[i] = lpr[i] = hpr[i] = 0.0; + lbl[i] = i; + } + var size = 8 * length; + var ptr1 = Module._malloc(size); + var ptr2 = Module._malloc(size); + var ptr3 = Module._malloc(size); + var ptr4 = Module._malloc(size); + var buf1 = new Uint8Array(Module.HEAPU8.buffer, ptr1, size); + var buf2 = new Uint8Array(Module.HEAPU8.buffer, ptr2, size); + var buf3 = new Uint8Array(Module.HEAPU8.buffer, ptr3, size); + var buf4 = new Uint8Array(Module.HEAPU8.buffer, ptr4, size); + buf1.set(new Uint8Array(lpd.buffer)); + buf2.set(new Uint8Array(hpd.buffer)); + buf3.set(new Uint8Array(lpr.buffer)); + buf4.set(new Uint8Array(hpr.buffer)); + var t = fcoef(str, buf1.byteOffset, buf2.byteOffset, buf3.byteOffset, buf4.byteOffset); + var lpd = new Float64Array(buf1.buffer, buf1.byteOffset, length); + var hpd = new Float64Array(buf2.buffer, buf2.byteOffset, length); + var lpr = new Float64Array(buf3.buffer, buf3.byteOffset, length); + var hpr = new Float64Array(buf4.buffer, buf4.byteOffset, length); + + Module._free(buf1); + Module._free(buf2); + Module._free(buf3); + Module._free(buf4); + console.log(lpd); + console.log(hpd); + console.log(lpr); + console.log(hpr); + + $('#canvas-holder').append("
"); + $('#canvas-holder').append("
"); + + for (var i = 0; i < 2; ++i) { + $('.row').append("
"); + } + + var newCanvas = $('',{ + id: 'canvas1' + }); + $('.col-md-6:eq(0)').append(newCanvas); + + var newCanvas2 = $('',{ + id: 'canvas2' + }); + $('.col-md-6:eq(1)').append(newCanvas2); + + var newCanvas3 = $('',{ + id: 'canvas3' + }); + $('.col-md-6:eq(2)').append(newCanvas3); + + var newCanvas4 = $('',{ + id: 'canvas4' + }); + $('.col-md-6:eq(3)').append(newCanvas4); + + var barChartData = { + labels: lbl, + datasets: [ + { + fillColor: "rgba(255,0,0,0.5)", + strokeColor: "rgba(255,0,0,0.8)", + highlightFill: "rgba(255,0,0,0.75)", + highlightStroke: "rgba(255,0,0,1)", + data: lpd + }, + + ] + + } + + var barChartData2 = { + labels: lbl, + datasets: [ + { + fillColor: "rgba(0,0,255,0.5)", + strokeColor: "rgba(0,0,255,0.8)", + highlightFill: "rgba(0,0,255,0.75)", + highlightStroke: "rgba(0,0,255,1)", + data: hpd + }, + + ] + + } + + var barChartData3 = { + labels: lbl, + datasets: [ + { + fillColor: "rgba(255,0,0,0.5)", + strokeColor: "rgba(255,0,0,0.8)", + highlightFill: "rgba(255,0,0,0.75)", + highlightStroke: "rgba(255,0,0,1)", + data: lpr + }, + + ] + + } + + var barChartData4 = { + labels: lbl, + datasets: [ + { + fillColor: "rgba(0,0,255,0.5)", + strokeColor: "rgba(0,0,255,0.8)", + highlightFill: "rgba(0,0,255,0.75)", + highlightStroke: "rgba(0,0,255,1)", + data: hpr + }, + + ] + + } + + window.onload = function () { + var ctx = document.getElementById("canvas1").getContext("2d"); + window.myBar = new Chart(ctx).Bar(barChartData, { + responsive: true + }); + var ctx2 = document.getElementById("canvas2").getContext("2d"); + window.myBar = new Chart(ctx2).Bar(barChartData2, { + responsive: true + }); + var ctx3 = document.getElementById("canvas3").getContext("2d"); + window.myBar = new Chart(ctx3).Bar(barChartData3, { + responsive: true + }); + var ctx4 = document.getElementById("canvas4").getContext("2d"); + window.myBar = new Chart(ctx4).Bar(barChartData4, { + responsive: true + }); + } +} + +var frontpage = function () { + //$('#canvas-holder').append(""); + $('#canvas-holder').append("
"); + //$('#canvas-holder').append("
"); + //for (var i = 0; i < 2; ++i) { + // $('.row').append("
"); + //} + //$('.col-md-6').append(""); + //$row.append("
").append(""); + $('.row').append("
"); + $('.row').append("
"); + $('.row').append("
"); + var sig = sigdata(); + var length = sig.length; + var lbl = []; + + for (i = 0; i < length; ++i) { + lbl[i] = i; + } + + var sigChartData = { + labels: lbl, + datasets: [ + { + label: "Input Signal", + fillColor: "rgba(151,187,205,0.2)", + strokeColor: "rgba(151,187,205,1)", + pointColor: "rgba(151,187,205,1)", + pointStrokeColor: "#fff", + pointHighlightFill: "#fff", + pointHighlightStroke: "rgba(151,187,205,1)", + data: sig + }, + + ] + + } + + var newCanvas = $('',{ + id: 'canvas1' + }); + $('.col-md-6').append(newCanvas); + + window.onload = function () { + var ctx = document.getElementById("canvas1").getContext("2d"); + window.myBar = new Chart(ctx).Line(sigChartData, { + responsive: true + }); + } + +} + +var frontpage2 = function () { + //$('#canvas-holder').append(""); + $('#canvas-holder').append("
"); + //$('#canvas-holder').append("
"); + //for (var i = 0; i < 2; ++i) { + // $('.row').append("
"); + //} + //$('.col-md-6').append(""); + //$row.append("
").append(""); + $('.row').append("
"); + $('.row').append("
"); + $('.row').append("
"); + var sig = sigdata(); + var length = sig.length; + var lbl = []; + + for (i = 0; i < length; ++i) { + lbl[i] = [i, sig[i]]; + } + $('.starter-template').empty(); + $('.starter-template').append("
"); + + g = new Dygraph(document.getElementById("graph"), + lbl, + { + legend: 'always', + color: '#3399ff', + animatedZooms: true, + title: 'Input' + }); + + $('.col-md-4:eq(0)').append("
"); + $('.input-group').append(""); + $('.input-group').append(""); + $('.input-group-btn').append(""); + + $('.col-md-4:eq(1)').append("
"); + $('.form1').append("
"); + $('.form-group').append("