diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/README.md b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/README.md
new file mode 100644
index 000000000000..256146780034
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/README.md
@@ -0,0 +1,160 @@
+
+
+# rfftf
+
+> Compute the forward discrete Fourier transform (DFT) of a real-valued single-precision floating-point sequence.
+
+
+
+
+
+
+
+
+
+
+
+## Usage
+
+```javascript
+var rfftf = require( '@stdlib/fft/base/fftpack/float32/rfftf' );
+```
+
+#### rfftf( N, r, strideR, offsetR, w, strideW, offsetW )
+
+Computes the forward discrete Fourier transform (DFT) of a real-valued single-precision floating-point sequence.
+
+```javascript
+var Float32Array = require( '@stdlib/array/float32' );
+var rffti = require( '@stdlib/fft/base/fftpack/float32/rffti' );
+
+var N = 4;
+var w = new Float32Array( ( 2*N ) + 34 );
+
+rffti( N, w, 1, 0 );
+
+var r = new Float32Array( [ 1.0, 2.0, 3.0, 4.0 ] );
+
+rfftf( N, r, 1, 0, w, 1, 0 );
+
+// r => [ 10.0, -2.0, 2.0, -2.0 ]
+```
+
+The function accepts the following arguments:
+
+- **N**: length of the sequence to transform. The function is most efficient when this value is a product of small prime numbers.
+- **r**: input array.
+- **strideR**: stride length for `r`.
+- **offsetR**: starting index for `r`.
+- **w**: workspace array containing pre-computed values.
+- **strideW**: stride length for `w`.
+- **offsetW**: starting index for `w`.
+
+
+
+
+
+
+
+
+
+## Notes
+
+- Before calling this function, initialize the workspace by calling [`rffti`][@stdlib/fft/base/fftpack/float32/rffti] with the same sequence length and workspace layout.
+
+- The function performs the transform in-place (i.e., the input array is **mutated**).
+
+- For `N = 4`, the output
+
+ ```text
+ [ 10.0, -2.0, 2.0, -2.0 ]
+ ```
+
+ corresponds to a zero-frequency term `10.0`, a complex coefficient `-2.0 + 2.0i` at frequency `1`, and a Nyquist term `-2.0`.
+
+- If `N` equals `1`, the function returns early without modifying the input, as a single data point is its own Fourier transform.
+
+- This transform is unnormalized as a call to this function followed by a call performing a [backward transform][@stdlib/fft/base/fftpack/float32/rfftb] will multiply the input array by `N`.
+
+
+
+
+
+
+
+## Examples
+
+
+
+```javascript
+var zeros = require( '@stdlib/array/zeros' );
+var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
+var rffti = require( '@stdlib/fft/base/fftpack/float32/rffti' );
+var rfftf = require( '@stdlib/fft/base/fftpack/float32/rfftf' );
+
+var N = 4;
+var opts = {
+ 'dtype': 'float32'
+};
+var r = discreteUniform( N, -10, 10, opts );
+var w = zeros( ( 2*N ) + 34, 'float32' );
+
+console.log( r );
+
+rffti( N, w, 1, 0 );
+rfftf( N, r, 1, 0, w, 1, 0 );
+
+console.log( r );
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+[@stdlib/fft/base/fftpack/float32/rffti]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/fft/base/fftpack/float32/rffti
+
+[@stdlib/fft/base/fftpack/float32/rfftb]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/fft/base/fftpack/float32/rfftb
+
+
+
+
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/benchmark/benchmark.js b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/benchmark/benchmark.js
new file mode 100644
index 000000000000..82bac7121ba1
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/benchmark/benchmark.js
@@ -0,0 +1,138 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+// MODULES //
+
+var bench = require( '@stdlib/bench' );
+var slice = require( '@stdlib/array/slice' );
+var uniform = require( '@stdlib/random/array/uniform' );
+var floor = require( '@stdlib/math/base/special/floor' );
+var pow = require( '@stdlib/math/base/special/pow' );
+var format = require( '@stdlib/string/format' );
+var isnanf = require( '@stdlib/math/base/assert/is-nanf' );
+var Float32Array = require( '@stdlib/array/float32' );
+var scopy = require( '@stdlib/blas/base/scopy' );
+var rffti = require( '@stdlib/fft/base/fftpack/float32/rffti' );
+var pkg = require( './../package.json' ).name;
+var rfftf = require( './../lib' );
+
+
+// VARIABLES //
+
+var options = {
+ 'dtype': 'float32'
+};
+
+
+// FUNCTIONS //
+
+/**
+* Creates a benchmark function.
+*
+* @private
+* @param {PositiveInteger} iter - number of iterations
+* @param {PositiveInteger} N - sequence length
+* @returns {Function} benchmark function
+*/
+function createBenchmark( iter, N ) {
+ var w;
+ var x;
+ var i;
+
+ x = [];
+ for ( i = 0; i < iter; i++ ) {
+ x.push( uniform( N, -100.0, 100.0, options ) );
+ }
+ w = new Float32Array( ( 2*N ) + 34 );
+ rffti( N, w, 1, 0 );
+ return benchmark;
+
+ /**
+ * Benchmark function.
+ *
+ * @private
+ * @param {Benchmark} b - benchmark instance
+ */
+ function benchmark( b ) {
+ var xc;
+ var y;
+ var i;
+
+ xc = slice( x );
+ for ( i = 0; i < iter; i++ ) {
+ xc[ i ] = scopy( N, x[ i ], 1, new Float32Array( N ), 1 );
+ }
+ b.tic();
+ for ( i = 0; i < b.iterations; i++ ) {
+ y = rfftf( N, xc[ i ], 1, 0, w, 1, 0 );
+ if ( isnanf( y[ i%N ] ) ) {
+ b.fail( 'should not return NaN' );
+ }
+ }
+ b.toc();
+ if ( isnanf( y[ i%N ] ) ) {
+ b.fail( 'should not return NaN' );
+ }
+ b.pass( 'benchmark finished' );
+ b.end();
+ }
+}
+
+
+// MAIN //
+
+/**
+* Main execution sequence.
+*
+* @private
+*/
+function main() {
+ var lengths;
+ var opts;
+ var iter;
+ var N;
+ var f;
+ var i;
+
+ lengths = [
+ 8,
+ 16,
+ 32,
+ 64,
+ 128,
+ 256,
+ 512,
+ 1024
+ ];
+
+ iter = 1e6;
+
+ for ( i = 0; i < lengths.length; i++ ) {
+ N = lengths[ i ];
+ f = createBenchmark( iter, N );
+ opts = {
+ 'iterations': iter
+ };
+ bench( format( '%s:N=%d', pkg, N ), opts, f );
+ iter = floor( pow( iter, 3.0/4.0 ) );
+ }
+}
+
+main();
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/docs/repl.txt b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/docs/repl.txt
new file mode 100644
index 000000000000..8f7e48d18b54
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/docs/repl.txt
@@ -0,0 +1,56 @@
+
+{{alias}}( N, r, strideR, offsetR, w, strideW, offsetW )
+ Computes the forward discrete Fourier transform (DFT) of a real-valued
+ single-precision floating-point sequence.
+
+ Before calling this function, one must first initialize the workspace array
+ using the corresponding initialization function with the same sequence
+ length and workspace layout.
+
+ This transform is unnormalized as a call to this function followed by a call
+ performing a backward transform will multiply the input array by `N`.
+
+ Parameters
+ ----------
+ N: integer
+ Length of the sequence to transform. The function is most efficient when
+ this value is a product of small prime numbers.
+
+ r: Float32Array
+ Input array.
+
+ strideR: integer
+ Stride length for `r`.
+
+ offsetR: integer
+ Starting index for `r`.
+
+ w: Float32Array
+ Workspace array containing pre-computed values.
+
+ strideW: integer
+ Stride length for `w`.
+
+ offsetW: integer
+ Starting index for `w`.
+
+ Returns
+ -------
+ r: Float32Array
+ Input array.
+
+ Examples
+ --------
+ > var N = 4;
+ > var r = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0 ] );
+ > var w = new {{alias:@stdlib/array/float32}}( ( 2*N ) + 34 );
+ > {{alias:@stdlib/fft/base/fftpack/float32/rffti}}( N, w, 1, 0 )
+
+ > var out = {{alias}}( N, r, 1, 0, w, 1, 0 )
+ [ 10.0, -2.0, 2.0, -2.0 ]
+ > var bool = ( out === r )
+ true
+
+ See Also
+ --------
+
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/docs/types/index.d.ts b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/docs/types/index.d.ts
new file mode 100644
index 000000000000..aabd109d5a25
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/docs/types/index.d.ts
@@ -0,0 +1,52 @@
+/*
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+// TypeScript Version: 4.1
+
+/**
+* Computes the forward discrete Fourier transform (DFT) of a real-valued single-precision floating-point sequence.
+*
+* @param N - length of the sequence to transform
+* @param r - input array
+* @param strideR - stride length for `r`
+* @param offsetR - starting index for `r`
+* @param w - workspace array containing pre-computed values
+* @param strideW - stride length for `w`
+* @param offsetW - starting index for `w`
+* @returns input array
+*
+* @example
+* var Float32Array = require( '@stdlib/array/float32' );
+* var rffti = require( '@stdlib/fft/base/fftpack/float32/rffti' );
+*
+* var N = 4;
+*
+* var w = new Float32Array( ( 2*N ) + 34 );
+* rffti( N, w, 1, 0 );
+*
+* var r = new Float32Array( [ 1.0, 2.0, 3.0, 4.0 ] );
+*
+* rfftf( N, r, 1, 0, w, 1, 0 );
+* // r => [ 10.0, -2.0, 2.0, -2.0 ]
+*/
+declare function rfftf( N: number, r: Float32Array, strideR: number, offsetR: number, w: Float32Array, strideW: number, offsetW: number ): Float32Array;
+
+
+// EXPORTS //
+
+export = rfftf;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/docs/types/test.ts b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/docs/types/test.ts
new file mode 100644
index 000000000000..651de2bd9f70
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/docs/types/test.ts
@@ -0,0 +1,150 @@
+/*
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+import rfftf = require( './index' );
+
+
+// TESTS //
+
+// The function returns a Float32Array...
+{
+ const r = new Float32Array( 4 );
+ const w = new Float32Array( ( 2*4 ) + 34 );
+
+ rfftf( 4, r, 1, 0, w, 1, 0 ); // $ExpectType Float32Array
+}
+
+// The compiler throws an error if the function is provided a first argument which is not a number...
+{
+ const r = new Float32Array( 4 );
+ const w = new Float32Array( ( 2*4 ) + 34 );
+
+ rfftf( '4', r, 1, 0, w, 1, 0 ); // $ExpectError
+ rfftf( true, r, 1, 0, w, 1, 0 ); // $ExpectError
+ rfftf( false, r, 1, 0, w, 1, 0 ); // $ExpectError
+ rfftf( null, r, 1, 0, w, 1, 0 ); // $ExpectError
+ rfftf( void 0, r, 1, 0, w, 1, 0 ); // $ExpectError
+ rfftf( [], r, 1, 0, w, 1, 0 ); // $ExpectError
+ rfftf( {}, r, 1, 0, w, 1, 0 ); // $ExpectError
+ rfftf( ( x: number ): number => x, r, 1, 0, w, 1, 0 ); // $ExpectError
+}
+
+// The compiler throws an error if the function is provided a second argument which is not a Float32Array...
+{
+ const w = new Float32Array( ( 2*4 ) + 34 );
+
+ rfftf( 4, '4', 1, 0, w, 1, 0 ); // $ExpectError
+ rfftf( 4, 4, 1, 0, w, 1, 0 ); // $ExpectError
+ rfftf( 4, true, 1, 0, w, 1, 0 ); // $ExpectError
+ rfftf( 4, false, 1, 0, w, 1, 0 ); // $ExpectError
+ rfftf( 4, null, 1, 0, w, 1, 0 ); // $ExpectError
+ rfftf( 4, void 0, 1, 0, w, 1, 0 ); // $ExpectError
+ rfftf( 4, [], 1, 0, w, 1, 0 ); // $ExpectError
+ rfftf( 4, {}, 1, 0, w, 1, 0 ); // $ExpectError
+ rfftf( 4, ( x: number ): number => x, 1, 0, w, 1, 0 ); // $ExpectError
+}
+
+// The compiler throws an error if the function is provided a third argument which is not a number...
+{
+ const r = new Float32Array( 4 );
+ const w = new Float32Array( ( 2*4 ) + 34 );
+
+ rfftf( 4, r, '1', 0, w, 1, 0 ); // $ExpectError
+ rfftf( 4, r, true, 0, w, 1, 0 ); // $ExpectError
+ rfftf( 4, r, false, 0, w, 1, 0 ); // $ExpectError
+ rfftf( 4, r, null, 0, w, 1, 0 ); // $ExpectError
+ rfftf( 4, r, void 0, 0, w, 1, 0 ); // $ExpectError
+ rfftf( 4, r, [], 0, w, 1, 0 ); // $ExpectError
+ rfftf( 4, r, {}, 0, w, 1, 0 ); // $ExpectError
+ rfftf( 4, r, ( x: number ): number => x, 0, w, 1, 0 ); // $ExpectError
+}
+
+// The compiler throws an error if the function is provided a fourth argument which is not a number...
+{
+ const r = new Float32Array( 4 );
+ const w = new Float32Array( ( 2*4 ) + 34 );
+
+ rfftf( 4, r, 1, '0', w, 1, 0 ); // $ExpectError
+ rfftf( 4, r, 1, true, w, 1, 0 ); // $ExpectError
+ rfftf( 4, r, 1, false, w, 1, 0 ); // $ExpectError
+ rfftf( 4, r, 1, null, w, 1, 0 ); // $ExpectError
+ rfftf( 4, r, 1, void 0, w, 1, 0 ); // $ExpectError
+ rfftf( 4, r, 1, [], w, 1, 0 ); // $ExpectError
+ rfftf( 4, r, 1, {}, w, 1, 0 ); // $ExpectError
+ rfftf( 4, r, 1, ( x: number ): number => x, w, 1, 0 ); // $ExpectError
+}
+
+// The compiler throws an error if the function is provided a fifth argument which is not a Float32Array...
+{
+ const r = new Float32Array( 4 );
+
+ rfftf( 4, r, 1, 0, '42', 1, 0 ); // $ExpectError
+ rfftf( 4, r, 1, 0, 42, 1, 0 ); // $ExpectError
+ rfftf( 4, r, 1, 0, true, 1, 0 ); // $ExpectError
+ rfftf( 4, r, 1, 0, false, 1, 0 ); // $ExpectError
+ rfftf( 4, r, 1, 0, null, 1, 0 ); // $ExpectError
+ rfftf( 4, r, 1, 0, void 0, 1, 0 ); // $ExpectError
+ rfftf( 4, r, 1, 0, [], 1, 0 ); // $ExpectError
+ rfftf( 4, r, 1, 0, {}, 1, 0 ); // $ExpectError
+ rfftf( 4, r, 1, 0, ( x: number ): number => x, 1, 0 ); // $ExpectError
+}
+
+// The compiler throws an error if the function is provided a sixth argument which is not a number...
+{
+ const r = new Float32Array( 4 );
+ const w = new Float32Array( ( 2*4 ) + 34 );
+
+ rfftf( 4, r, 1, 0, w, '1', 0 ); // $ExpectError
+ rfftf( 4, r, 1, 0, w, true, 0 ); // $ExpectError
+ rfftf( 4, r, 1, 0, w, false, 0 ); // $ExpectError
+ rfftf( 4, r, 1, 0, w, null, 0 ); // $ExpectError
+ rfftf( 4, r, 1, 0, w, void 0, 0 ); // $ExpectError
+ rfftf( 4, r, 1, 0, w, [], 0 ); // $ExpectError
+ rfftf( 4, r, 1, 0, w, {}, 0 ); // $ExpectError
+ rfftf( 4, r, 1, 0, w, ( x: number ): number => x, 0 ); // $ExpectError
+}
+
+// The compiler throws an error if the function is provided a seventh argument which is not a number...
+{
+ const r = new Float32Array( 4 );
+ const w = new Float32Array( ( 2*4 ) + 34 );
+
+ rfftf( 4, r, 1, 0, w, 1, '0' ); // $ExpectError
+ rfftf( 4, r, 1, 0, w, 1, true ); // $ExpectError
+ rfftf( 4, r, 1, 0, w, 1, false ); // $ExpectError
+ rfftf( 4, r, 1, 0, w, 1, null ); // $ExpectError
+ rfftf( 4, r, 1, 0, w, 1, void 0 ); // $ExpectError
+ rfftf( 4, r, 1, 0, w, 1, [] ); // $ExpectError
+ rfftf( 4, r, 1, 0, w, 1, {} ); // $ExpectError
+ rfftf( 4, r, 1, 0, w, 1, ( x: number ): number => x ); // $ExpectError
+}
+
+// The compiler throws an error if the function is provided an unsupported number of arguments...
+{
+ const r = new Float32Array( 4 );
+ const w = new Float32Array( ( 2*4 ) + 34 );
+
+ rfftf(); // $ExpectError
+ rfftf( 4 ); // $ExpectError
+ rfftf( 4, r ); // $ExpectError
+ rfftf( 4, r, 1 ); // $ExpectError
+ rfftf( 4, r, 1, 0 ); // $ExpectError
+ rfftf( 4, r, 1, 0, w ); // $ExpectError
+ rfftf( 4, r, 1, 0, w, 1 ); // $ExpectError
+ rfftf( 4, r, 1, 0, w, 1, 0, 123 ); // $ExpectError
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/examples/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/examples/index.js
new file mode 100644
index 000000000000..53759a16a3ea
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/examples/index.js
@@ -0,0 +1,38 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+var zeros = require( '@stdlib/array/zeros' );
+var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
+var rffti = require( '@stdlib/fft/base/fftpack/float32/rffti' );
+var rfftf = require( './../lib' );
+
+var N = 4;
+var opts = {
+ 'dtype': 'float32'
+};
+var r = discreteUniform( N, -10, 10, opts );
+var w = zeros( ( 2*N ) + 34, 'float32' );
+
+console.log( r );
+
+rffti( N, w, 1, 0 );
+rfftf( N, r, 1, 0, w, 1, 0 );
+
+console.log( r );
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/index.js
new file mode 100644
index 000000000000..c06e9764f078
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/index.js
@@ -0,0 +1,49 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* Compute the forward discrete Fourier transform (DFT) of a real-valued single-precision floating-point sequence.
+*
+* @module @stdlib/fft/base/fftpack/float32/rfftf
+*
+* @example
+* var Float32Array = require( '@stdlib/array/float32' );
+* var rffti = require( '@stdlib/fft/base/fftpack/float32/rffti' );
+* var rfftf = require( '@stdlib/fft/base/fftpack/float32/rfftf' );
+*
+* var N = 4;
+*
+* var w = new Float32Array( ( 2*N ) + 34 );
+* rffti( N, w, 1, 0 );
+*
+* var r = new Float32Array( [ 1.0, 2.0, 3.0, 4.0 ] );
+*
+* rfftf( N, r, 1, 0, w, 1, 0 );
+* // r => [ 10.0, -2.0, 2.0, -2.0 ]
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/main.js
new file mode 100644
index 000000000000..d4f62c20eb0c
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/main.js
@@ -0,0 +1,118 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var Uint32Array = require( '@stdlib/array/uint32' );
+var rfftf1 = require( './rfftf1.js' );
+
+
+// MAIN //
+
+/**
+* Computes the forward discrete Fourier transform (DFT) of a real-valued single-precision floating-point sequence.
+*
+* @param {NonNegativeInteger} N - length of the sequence to transform
+* @param {Float32Array} r - input array
+* @param {integer} strideR - stride length for `r`
+* @param {NonNegativeInteger} offsetR - starting index for `r`
+* @param {Float32Array} w - workspace array containing pre-computed values
+* @param {integer} strideW - stride length for `w`
+* @param {NonNegativeInteger} offsetW - starting index for `w`
+* @returns {Float32Array} input array
+*
+* @example
+* var Float32Array = require( '@stdlib/array/float32' );
+* var rffti = require( '@stdlib/fft/base/fftpack/float32/rffti' );
+*
+* var N = 4;
+*
+* var w = new Float32Array( ( 2*N ) + 34 );
+* rffti( N, w, 1, 0 );
+*
+* var r = new Float32Array( [ 1.0, 2.0, 3.0, 4.0 ] );
+*
+* rfftf( N, r, 1, 0, w, 1, 0 );
+* // r => [ 10.0, -2.0, 2.0, -2.0 ]
+*/
+function rfftf( N, r, strideR, offsetR, w, strideW, offsetW ) {
+ var offsetT;
+ var offsetF;
+ var fview;
+
+ // When a sub-sequence is a single data point, the FFT is the identity, so no transformation necessary...
+ if ( N === 1 ) {
+ return r;
+ }
+
+ // Resolve the starting indices for storing twiddle factors and factorization results:
+ offsetT = offsetW + ( N * strideW ); // index offset for twiddle factors
+ offsetF = offsetT + ( N * strideW ); // index offset for factors describing the sub-transforms
+
+ fview = new Uint32Array( w.buffer, w.byteOffset, w.length );
+ rfftf1( N, r, strideR, offsetR, w, strideW, offsetW, w, strideW, offsetT, fview, strideW, offsetF ); // eslint-disable-line max-len
+
+ return r;
+}
+
+
+// EXPORTS //
+
+module.exports = rfftf;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/radf2.js b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/radf2.js
new file mode 100644
index 000000000000..e6cf686447d6
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/radf2.js
@@ -0,0 +1,371 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var f32 = require( '@stdlib/number/float64/base/to-float32' );
+
+
+// FUNCTIONS //
+
+/**
+* Resolves an index into the input array.
+*
+* ## Notes
+*
+* In a forward real FFT, the previous stage writes its results as two "rows" per sub-sequence.
+*
+* Thus, when reading from an input array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having two "rows" (`even + odd` and `even - odd`, respectively) and where each "row" is arranged as `M*L` contiguous elements corresponding to interleaved real and imaginary components.
+*
+* Accordingly, the following is a logical view of an input array (zero-based indexing) which contains `L = 3` transforms and in which each sub-sequence has length `M = 4`:
+*
+* ```text
+* │ k = 0 k = 1 k = 2
+* │ ──────────────────────────────────────────────────────────────────────────→ k
+* j = 0 (even+odd) │ cc(0,0,0) ... cc(3,0,0) cc(0,1,0) ... cc(3,1,0) cc(0,2,0) ... cc(3,2,0)
+* │
+* j = 1 (even-odd) │ cc(0,0,1) ... cc(3,0,1) cc(0,1,1) ... cc(3,1,1) cc(0,2,1) ... cc(3,2,1)
+* └───────────────────────────────────────────────────────────────────────────→ i
+* ↑ ↑ ↑ ↑ ↑ ↑
+* i = 0 M-1 0 M-1 0 M-1
+* ```
+*
+* In the above,
+*
+* - `i` is the fastest varying index, which walks within one short sub-sequence corresponding to either the `even + odd` or `even - odd` row.
+* - `j` selects between the `even + odd` and `even - odd` row.
+* - `k` specifies the index of one of the `L` independent transforms we are processing.
+*
+* In linear memory, the three-dimensional logical view is arranged as follows:
+*
+* ```text
+* | cc(0,0,0)...cc(3,0,0) ... cc(0,2,0)...cc(3,2,0) | cc(0,0,1)...cc(3,0,1) ... cc(0,2,1)...cc(3,2,1) |
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* 0 M-1 LM LM-1 (L+1)M (L+1)M-1 (2L-1)M 2LM-1
+* ```
+*
+* @private
+* @param {NonNegativeInteger} i - index of an element within a sub-sequence
+* @param {NonNegativeInteger} k - index of the sub-sequence being transformed
+* @param {NonNegativeInteger} j - input row
+* @param {NonNegativeInteger} L - number of sub-sequences
+* @param {NonNegativeInteger} M - sub-sequence length
+* @param {integer} stride - stride length of the input array
+* @param {NonNegativeInteger} offset - index specifying the first indexed element in the input array
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var stride = 1;
+* var offset = 0;
+*
+* var M = 4; // sub-sequence length
+* var L = 3; // number of sub-sequences
+*
+* var idx = iptr( 0, 0, 0, L, M, stride, offset );
+* // returns 0
+*
+* idx = iptr( 1, 0, 0, L, M, stride, offset );
+* // returns 1
+*
+* idx = iptr( M-1, 0, 0, L, M, stride, offset );
+* // returns 3
+*
+* idx = iptr( 0, 1, 0, L, M, stride, offset );
+* // returns 4
+*
+* // ...
+*
+* idx = iptr( M-1, L-1, 1, L, M, stride, offset );
+* // returns 23
+*/
+function iptr( i, k, j, L, M, stride, offset ) {
+ var n = i + ( ( k+(j*L) ) * M );
+ return ( n*stride ) + offset;
+}
+
+/**
+* Resolves an index into the output array.
+*
+* ## Notes
+*
+* When writing to an output array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having two "columns" corresponding to the even and odd half-spectrum of a folded complex vector (with real and imaginary parts of each half-spectrum interleaved along each sub-sequence) and where each "column" has `M` elements.
+*
+* Accordingly, the following is a logical view of an output array (zero-based indexing) which contains `L = 3` transforms and in which each "column" sub-sequence has length `M = 4`:
+*
+* ```text
+* j = 0 ("even" column) j = 1 ("odd" column)
+* k = 0 ─┬───────────────────────────────────────┬───────────────────────────────────────┐
+* │ out(0,0,0) out(1,0,0) ... out(3,0,0) │ out(0,1,0) out(1,1,0) ... out(3,1,0) │
+* └───────────────────────────────────────┴───────────────────────────────────────┤
+* k = 1 ─┬───────────────────────────────────────┬───────────────────────────────────────┤
+* │ out(0,0,1) out(1,0,1) ... out(3,0,1) │ out(0,1,1) out(1,1,1) ... out(3,1,1) │
+* └───────────────────────────────────────┴───────────────────────────────────────┤
+* k = 2 ─┬───────────────────────────────────────┬───────────────────────────────────────┤
+* │ out(0,0,2) out(1,0,2) ... out(3,0,2) │ out(0,1,2) out(1,1,2) ... out(3,1,2) │
+* └───────────────────────────────────────┴───────────────────────────────────────┘
+* ↑ ↑ ↑ ↑ ↑ ↑
+* i = 0 1 M-1 0 1 M-1
+* ```
+*
+* In the above,
+*
+* - `i` is the fastest varying index, which walks within one short "column" sub-sequence.
+* - `j` selects between the even (0) and odd (1) column.
+* - `k` specifies the index of one of the `L` independent transforms we are processing.
+*
+* In linear memory, the three-dimensional logical view is arranged as follows:
+*
+* ```text
+* | out(0,0,0)...out(3,0,0) | out(0,1,0)...out(3,1,0) | out(0,0,1)...out(3,0,1) | ... | out(0,1,2)...out(3,1,2) |
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* 0 M-1 M 2M-1 2M 3M-1 (2L-1)M 2LM-1
+* ```
+*
+* As may be observed, when resolving an index in the output array, the `j` and `k` dimensions are swapped relative index resolution in the input array. This stems from `radf2` being only one stage in a multi-stage driver which alternates between using `cc` and `out` as workspace buffers. After each stage, the next stage reads what the previous stage wrote.
+*
+* Each stage expects a transpose, and, in order to avoid explicit transposition between the stages, we swap the last two logical dimensions while still maintaining cache locality within the inner loop logical dimension, as indexed by `i`.
+*
+* @private
+* @param {NonNegativeInteger} i - index of an element within a sub-sequence
+* @param {NonNegativeInteger} j - index specifying which of the two complex halves we are in (either `0` or `1`)
+* @param {NonNegativeInteger} k - index of the sub-sequence being transformed
+* @param {NonNegativeInteger} M - sub-sequence length
+* @param {integer} stride - stride length of the output array
+* @param {NonNegativeInteger} offset - index specifying the first indexed element in the output array
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var stride = 1;
+* var offset = 0;
+*
+* var M = 4; // sub-sequence length
+* var L = 3; // number of sub-sequences
+*
+* var idx = optr( 0, 0, 0, M, stride, offset );
+* // returns 0
+*
+* idx = optr( 1, 0, 0, M, stride, offset );
+* // returns 1
+*
+* idx = optr( M-1, 0, 0, M, stride, offset );
+* // returns 3
+*
+* idx = optr( 0, 1, 0, M, stride, offset );
+* // returns 4
+*
+* // ...
+*
+* idx = optr( M-1, 1, L-1, M, stride, offset );
+* // returns 23
+*/
+function optr( i, j, k, M, stride, offset ) {
+ var n = i + ( ( j+(k*2) ) * M );
+ return ( n*stride ) + offset;
+}
+
+
+// MAIN //
+
+/**
+* Performs one radix-2 stage within a forward Fourier transform for a real-valued single-precision floating-point sequence.
+*
+* @private
+* @param {NonNegativeInteger} M - number of elements in each sub-sequence to be transformed
+* @param {NonNegativeInteger} L - number of sub-sequences to be transformed
+* @param {Float32Array} cc - input array containing the sub-sequences to be transformed
+* @param {integer} sc - stride length for `cc`
+* @param {NonNegativeInteger} oc - index offset for `cc`
+* @param {Float32Array} out - output array containing transformed sub-sequences
+* @param {integer} so - stride length for `out`
+* @param {NonNegativeInteger} oo - index offset for `out`
+* @param {Float32Array} twiddles - array containing twiddle factors
+* @param {integer} st - stride length for `twiddles`
+* @param {NonNegativeInteger} ot - index offset for `twiddles`
+* @returns {void}
+*/
+function radf2( M, L, cc, sc, oc, out, so, oo, twiddles, st, ot ) { // eslint-disable-line max-params
+ var tr2;
+ var ti2;
+ var ip1;
+ var ip2;
+ var it1;
+ var it2;
+ var io;
+ var im;
+ var i;
+ var k;
+
+ /*
+ * First, perform the core butterfly for each sub-sequence being transformed.
+ *
+ * In the following loop, we handle harmonic `n = 0` for every transform. As described for `iptr`, the input array is interpreted as a three-dimensional array, containing two "rows" per sub-sequence.
+ *
+ * row0 = even + odd (j = 0)
+ * row1 = even - odd (j = 1)
+ *
+ * For a radix-2 forward FFT of a real-valued signal `x` and `n = 0`,
+ *
+ * x[0] = row0 + row1 = 2⋅even
+ * x[M] = row0 - row1 = 2⋅odd
+ *
+ * Because `W_2^0 = 1`, no twiddle multiplication is necessary.
+ */
+ for ( k = 0; k < L; k++ ) {
+ ip1 = iptr( 0, k, 0, L, M, sc, oc ); // real part row 0
+ ip2 = iptr( 0, k, 1, L, M, sc, oc ); // real part row 1
+
+ io = optr( 0, 0, k, M, so, oo );
+ out[ io ] = cc[ ip1 ] + cc[ ip2 ]; // even + odd
+
+ io = optr( M-1, 1, k, M, so, oo );
+ out[ io ] = cc[ ip1 ] - cc[ ip2 ]; // even - odd
+ }
+ // When the number of elements in a sub-sequence is less than `2`, there is nothing more to do, as the above butterfly produced the full result...
+ if ( M < 2 ) {
+ return;
+ }
+ /*
+ * Next, apply the general case where we need to loop through the non-trivial harmonics.
+ *
+ * For each harmonic `n = 1, ..., M/2-1`, we need to
+ *
+ * - recover even/odd spectra from the two input rows.
+ * - multiply the odd part by the twiddle factor `W_n = cos(θ) - j sin(θ)`.
+ * - form the following
+ *
+ * x[2n] = E_n + W_n⋅O_n => column 0
+ * x[2n+1] = E_n - W_n⋅O_n => column 1
+ *
+ * The mirror index `im = M - i` selects the conjugate-symmetric partner, thus allowing the routine to read each symmetry pair only once.
+ */
+ if ( M >= 3 ) {
+ // Loop over each sub-sequence to be transformed...
+ for ( k = 0; k < L; k++ ) {
+ // Loop over the elements in each sub-sequence...
+ for ( i = 2; i < M; i += 2 ) {
+ im = M - i; // "mirror" index
+
+ // Resolve twiddle factor indices:
+ it1 = ( (i-2)*st ) + ot; // cos(θ)
+ it2 = ( (i-1)*st ) + ot; // sin(θ)
+
+ // Load the `even-odd` row...
+ ip1 = iptr( i-1, k, 1, L, M, sc, oc ); // c = Re(row1)
+ ip2 = iptr( i, k, 1, L, M, sc, oc ); // d = Im(row1)
+
+ // eslint-disable-next-line stdlib/capitalized-comments, stdlib/empty-line-before-comment
+ // tmp = W_n ⋅ (c + j⋅d)
+ tr2 = f32( f32( twiddles[ it1 ] * cc[ ip1 ] ) + f32( twiddles[ it2 ] * cc[ ip2 ] ) ); // Re(tmp)
+ ti2 = f32( f32( twiddles[ it1 ] * cc[ ip2 ] ) - f32( twiddles[ it2 ] * cc[ ip1 ] ) ); // Im(tmp)
+
+ // Load the `even+odd` row...
+ ip1 = iptr( i, k, 0, L, M, sc, oc ); // b = Im(row0)
+ io = optr( i, 0, k, M, so, oo ); // Im(x[2n])
+ out[ io ] = cc[ ip1 ] + ti2;
+
+ io = optr( im, 1, k, M, so, oo ); // Im(x[2n+1])
+ out[ io ] = ti2 - cc[ ip1 ];
+
+ ip1 = iptr( i-1, k, 0, L, M, sc, oc ); // a = Re(row0)
+ io = optr( i-1, 0, k, M, so, oo ); // Re(x[2n])
+ out[ io ] = cc[ ip1 ] + tr2;
+
+ io = optr( im-1, 1, k, M, so, oo ); // Re(x[2n+1])
+ out[ io ] = cc[ ip1 ] - tr2;
+ }
+ }
+ // When `M` is odd, there is no Nyquist pair to process, so we do not need to perform any further transformations...
+ if ( M%2 === 1 ) {
+ return;
+ }
+ }
+ /*
+ * Lastly, handle the Nyquist frequency where `i = M-1` (i.e., the last element of each sub-sequence).
+ *
+ * When `M` is even, the Nyquist index is `i = M/2`. In this stage, we've stored that element at the end of each sub-sequence (i.e., `i = M-1` in the packed layout).
+ *
+ * At this point, the cosine term is -1 and the sine term is 0, so the twiddle multiplication collapses to simple addition/subtraction.
+ *
+ * In this case,
+ *
+ * W_n⋅O_n = ±Re(O_n)
+ *
+ * where
+ *
+ * row0 = Re(E_n)
+ * row1 = -Re(O_n)
+ */
+ for ( k = 0; k < L; k++ ) {
+ ip1 = iptr( M-1, k, 1, L, M, sc, oc ); // -Re(O_n)
+ io = optr( 0, 1, k, M, so, oo );
+ out[ io ] = -cc[ ip1 ]; // -(-Re(O_n)) = Re(O_n)
+
+ ip1 = iptr( M-1, k, 0, L, M, sc, oc ); // Re(E_n)
+ io = optr( M-1, 0, k, M, so, oo );
+ out[ io ] = cc[ ip1 ];
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = radf2;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/radf3.js b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/radf3.js
new file mode 100644
index 000000000000..698f4a2a327b
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/radf3.js
@@ -0,0 +1,406 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var f32 = require( '@stdlib/number/float64/base/to-float32' );
+
+
+// VARIABLES //
+
+// cos( 2π/3 ):
+var TAUR = -0.5;
+
+// sin( 2π/3 ):
+var TAUI = 0.8660253882408142;
+
+
+// FUNCTIONS //
+
+/**
+* Resolves an index into the input array.
+*
+* ## Notes
+*
+* In a forward real FFT, the previous stage writes its results as three "rows" per sub-sequence.
+*
+* Thus, when reading from an input array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having three "rows" (components 0, 1, and 2) and where each "row" is arranged as `M*L` contiguous elements corresponding to interleaved real and imaginary components.
+*
+* Accordingly, the following is a logical view of an input array (zero-based indexing) which contains `L = 3` transforms and in which each sub-sequence has length `M = 4`:
+*
+* ```text
+* │ k = 0 k = 1 k = 2
+* │ ──────────────────────────────────────────────────────────────────────────→ k
+* j = 0 │ cc(0,0,0) ... cc(3,0,0) cc(0,1,0) ... cc(3,1,0) cc(0,2,0) ... cc(3,2,0)
+* │
+* j = 1 │ cc(0,0,1) ... cc(3,0,1) cc(0,1,1) ... cc(3,1,1) cc(0,2,1) ... cc(3,2,1)
+* │
+* j = 2 │ cc(0,0,2) ... cc(3,0,2) cc(0,1,2) ... cc(3,1,2) cc(0,2,2) ... cc(3,2,2)
+* └───────────────────────────────────────────────────────────────────────────→ i
+* ↑ ↑ ↑ ↑ ↑ ↑
+* i = 0 M-1 0 M-1 0 M-1
+* ```
+*
+* In the above,
+*
+* - `i` is the fastest varying index, which walks within one short sub-sequence corresponding to one of the three component rows.
+* - `j` selects between the three component rows (0, 1, or 2).
+* - `k` specifies the index of one of the `L` independent transforms we are processing.
+*
+* In linear memory, the three-dimensional logical view is arranged as follows:
+*
+* ```text
+* | cc(0,0,0)...cc(3,0,0) ... cc(0,2,0)...cc(3,2,0) | cc(0,0,1)...cc(3,0,1) ... cc(0,2,1)...cc(3,2,1) | cc(0,0,2)...cc(3,0,2) ... cc(0,2,2)...cc(3,2,2) |
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* 0 M-1 LM LM-1 (L+1)M (L+1)M-1 (2L-1)M 2LM-1 2LM (2L+1)M-1 (3L-1)M 3LM-1
+* ```
+*
+* @private
+* @param {NonNegativeInteger} i - index of an element within a sub-sequence
+* @param {NonNegativeInteger} k - index of the sub-sequence being transformed
+* @param {NonNegativeInteger} j - input row
+* @param {NonNegativeInteger} L - number of sub-sequences
+* @param {NonNegativeInteger} M - sub-sequence length
+* @param {integer} stride - stride length of the input array
+* @param {NonNegativeInteger} offset - index specifying the first indexed element in the input array
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var stride = 1;
+* var offset = 0;
+*
+* var M = 4; // sub-sequence length
+* var L = 3; // number of sub-sequences
+*
+* var idx = iptr( 0, 0, 0, L, M, stride, offset );
+* // returns 0
+*
+* idx = iptr( 1, 0, 0, L, M, stride, offset );
+* // returns 1
+*
+* idx = iptr( M-1, 0, 0, L, M, stride, offset );
+* // returns 3
+*
+* idx = iptr( 0, 1, 0, L, M, stride, offset );
+* // returns 4
+*
+* // ...
+*
+* idx = iptr( M-1, L-1, 1, L, M, stride, offset );
+* // returns 23
+*/
+function iptr( i, k, j, L, M, stride, offset ) {
+ var n = i + ( ( k+(j*L) ) * M );
+ return ( n*stride ) + offset;
+}
+
+/**
+* Resolves an index into the output array.
+*
+* ## Notes
+*
+* When writing to an output array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having three "columns" corresponding to the three components of a radix-3 stage (with real and imaginary parts of each component interleaved along each sub-sequence) and where each "column" has `M` elements.
+*
+* Accordingly, the following is a logical view of an output array (zero-based indexing) which contains `L = 3` transforms and in which each "column" sub-sequence has length `M = 4`:
+*
+* ```text
+* j = 0 (component 0) j = 1 (component 1) j = 2 (component 2)
+* k = 0 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┐
+* │ out(0,0,0) out(1,0,0) ... out(3,0,0) │ out(0,1,0) out(1,1,0) ... out(3,1,0) │ out(0,2,0) out(1,2,0) ... out(3,2,0) │
+* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┤
+* k = 1 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┤
+* │ out(0,0,1) out(1,0,1) ... out(3,0,1) │ out(0,1,1) out(1,1,1) ... out(3,1,1) │ out(0,2,1) out(1,2,1) ... out(3,2,1) │
+* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┤
+* k = 2 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┤
+* │ out(0,0,2) out(1,0,2) ... out(3,0,2) │ out(0,1,2) out(1,1,2) ... out(3,1,2) │ out(0,2,2) out(1,2,2) ... out(3,2,2) │
+* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┘
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* i = 0 1 M-1 0 1 M-1 0 1 M-1
+* ```
+*
+* In the above,
+*
+* - `i` is the fastest varying index, which walks within one short "column" sub-sequence.
+* - `j` selects between one of the three components (0, 1, or 2).
+* - `k` specifies the index of one of the `L` independent transforms we are processing.
+*
+* In linear memory, the three-dimensional logical view is arranged as follows:
+*
+* ```text
+* | out(0,0,0)...out(3,0,0) | out(0,1,0)...out(3,1,0) | out(0,2,0)...out(3,2,0) | out(0,0,1)...out(3,0,1) | ... | out(0,2,2)...out(3,2,2) |
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* 0 M-1 M 2M-1 2M 3M-1 3M 4M-1 (3L-1)M 3LM-1
+* ```
+*
+* As may be observed, when resolving an index in the output array, the `j` and `k` dimensions are swapped relative index resolution in the input array. This stems from `radf3` being only one stage in a multi-stage driver which alternates between using `cc` and `out` as workspace buffers. After each stage, the next stage reads what the previous stage wrote.
+*
+* Each stage expects a transpose, and, in order to avoid explicit transposition between the stages, we swap the last two logical dimensions while still maintaining cache locality within the inner loop logical dimension, as indexed by `i`.
+*
+* @private
+* @param {NonNegativeInteger} i - index of an element within a sub-sequence
+* @param {NonNegativeInteger} j - index specifying which of the three complex components we are in (0, 1, or 2)
+* @param {NonNegativeInteger} k - index of the sub-sequence being transformed
+* @param {NonNegativeInteger} M - sub-sequence length
+* @param {integer} stride - stride length of the output array
+* @param {NonNegativeInteger} offset - index specifying the first indexed element in the output array
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var stride = 1;
+* var offset = 0;
+*
+* var M = 4; // sub-sequence length
+* var L = 3; // number of sub-sequences
+*
+* var idx = optr( 0, 0, 0, M, stride, offset );
+* // returns 0
+*
+* idx = optr( 1, 0, 0, M, stride, offset );
+* // returns 1
+*
+* idx = optr( M-1, 0, 0, M, stride, offset );
+* // returns 3
+*
+* idx = optr( 0, 1, 0, M, stride, offset );
+* // returns 4
+*
+* // ...
+*
+* idx = optr( M-1, 2, L-1, M, stride, offset );
+* // returns 35
+*/
+function optr( i, j, k, M, stride, offset ) {
+ var n = i + ( ( j+(k*3) ) * M );
+ return ( n*stride ) + offset;
+}
+
+
+// MAIN //
+
+/**
+* Performs one radix-3 stage within a forward Fourier transform for a real-valued single-precision floating-point sequence.
+*
+* @private
+* @param {NonNegativeInteger} M - number of elements in each sub-sequence to be transformed
+* @param {NonNegativeInteger} L - number of sub-sequences to be transformed
+* @param {Float32Array} cc - input array containing the sub-sequences to be transformed
+* @param {integer} sc - stride length for `cc`
+* @param {NonNegativeInteger} oc - index offset for `cc`
+* @param {Float32Array} out - output array containing transformed sub-sequences
+* @param {integer} so - stride length for `out`
+* @param {NonNegativeInteger} oo - index offset for `out`
+* @param {Float32Array} twiddles1 - first array containing twiddle factors
+* @param {integer} st1 - stride length for `twiddles1`
+* @param {NonNegativeInteger} ot1 - index offset for `twiddles1`
+* @param {Float32Array} twiddles2 - second array containing twiddle factors
+* @param {integer} st2 - stride length for `twiddles2`
+* @param {NonNegativeInteger} ot2 - index offset for `twiddles2`
+* @returns {void}
+*/
+function radf3( M, L, cc, sc, oc, out, so, oo, twiddles1, st1, ot1, twiddles2, st2, ot2 ) { // eslint-disable-line max-params
+ var it11;
+ var it12;
+ var it21;
+ var it22;
+ var tr2;
+ var ti2;
+ var tr3;
+ var ti3;
+ var cr2;
+ var ci2;
+ var dr2;
+ var di2;
+ var dr3;
+ var di3;
+ var ip1;
+ var ip2;
+ var ip3;
+ var io;
+ var im;
+ var i;
+ var k;
+
+ /*
+ * First, perform the core butterfly for each sub-sequence being transformed.
+ *
+ * In the following loop, we handle harmonic `n = 0` for every transform. As described for `iptr`, the input array is interpreted as a three-dimensional array, containing three "rows" per sub-sequence.
+ *
+ * row0 = input component 0 (j = 0)
+ * row1 = input component 1 (j = 1)
+ * row2 = input component 2 (j = 2)
+ *
+ * For a radix-3 forward FFT of a real-valued signal `x` and `n = 0`,
+ *
+ * taur = cos(2π/3)
+ * taui = sin(2π/3)
+ *
+ * x[0] = row0 + row1 + row2
+ * x[2M] = taui * ( row2-row1 )
+ * x[M] = row0 + ( taur * ( row1+row2 ) )
+ *
+ * Because `W_3^0 = 1`, no twiddle multiplication is necessary beyond these constant factors (`taur` and `taui`).
+ */
+ for ( k = 0; k < L; k++ ) {
+ ip1 = iptr( 0, k, 0, L, M, sc, oc ); // real part row 0
+ ip2 = iptr( 0, k, 1, L, M, sc, oc ); // real part row 1
+ ip3 = iptr( 0, k, 2, L, M, sc, oc ); // real part row 2
+
+ cr2 = f32( cc[ ip2 ] + cc[ ip3 ] );
+
+ io = optr( 0, 0, k, M, so, oo );
+ out[ io ] = cc[ ip1 ] + cr2; // row0 + row1 + row2
+
+ io = optr( 0, 2, k, M, so, oo );
+ out[ io ] = TAUI * f32( cc[ ip3 ] - cc[ ip2 ] ); // taui * ( row2-row1 )
+
+ io = optr( M-1, 1, k, M, so, oo );
+ out[ io ] = cc[ ip1 ] + f32( TAUR * cr2 ); // row0 + ( taur * ( row1+row2 ) )
+ }
+ // When the number of elements in a sub-sequence is less than `2`, there is nothing more to do, as the above butterfly produced the full result...
+ if ( M < 2 ) {
+ return;
+ }
+ /*
+ * Next, apply the general case where we need to loop through the non-trivial harmonics.
+ *
+ * For each harmonic `n = 1, ..., M/2-1`, we need to
+ *
+ * - recover three spectra from the three input rows.
+ * - apply radix-3 twiddle factors to rows 1 and 2, then combine with row 0 to form three output columns.
+ * - form the following
+ *
+ * x[3n] = X₀ + (W₁⋅X₁ + W₂⋅X₂) => column 0
+ * x[3n+1] = X₀ + taur⋅(W₁⋅X₁ + W₂⋅X₂) + taui⋅i⋅(W₁⋅X₁ - W₂⋅X₂) => column 2
+ * x[3n+2] = X₀ + taur⋅(W₁⋅X₁ + W₂⋅X₂) - taui⋅i⋅(W₁⋅X₁ - W₂⋅X₂) => column 1
+ *
+ * The mirror index `im = M - i` selects the conjugate-symmetric partner, thus allowing the routine to read each symmetry pair only once.
+ */
+ // Loop over each sub-sequence to be transformed...
+ for ( k = 0; k < L; k++ ) {
+ // Loop over the elements in each sub-sequence...
+ for ( i = 2; i < M; i += 2 ) {
+ im = M - i; // "mirror" index
+
+ // Resolve twiddle factor indices for component 1:
+ it11 = ( (i-2)*st1 ) + ot1; // cos(θ) for component 1
+ it12 = ( (i-1)*st1 ) + ot1; // sin(θ) for component 1
+
+ // Resolve twiddle factor indices for component 2:
+ it21 = ( (i-2)*st2 ) + ot2; // cos(θ) for component 2
+ it22 = ( (i-1)*st2 ) + ot2; // sin(θ) for component 2
+
+ // Load component 1 data...
+ ip1 = iptr( i-1, k, 1, L, M, sc, oc ); // real part component 1
+ ip2 = iptr( i, k, 1, L, M, sc, oc ); // imag part component 1
+
+ // Apply twiddle factor for component 1:
+ dr2 = f32( f32( twiddles1[ it11 ] * cc[ ip1 ] ) + f32( twiddles1[ it12 ] * cc[ ip2 ] ) );
+ di2 = f32( f32( twiddles1[ it11 ] * cc[ ip2 ] ) - f32( twiddles1[ it12 ] * cc[ ip1 ] ) );
+
+ // Load component 2 data...
+ ip1 = iptr( i-1, k, 2, L, M, sc, oc ); // real part component 2
+ ip2 = iptr( i, k, 2, L, M, sc, oc ); // imag part component 2
+
+ // Apply twiddle factor for component 2:
+ dr3 = f32( f32( twiddles2[ it21 ] * cc[ ip1 ] ) + f32( twiddles2[ it22 ] * cc[ ip2 ] ) );
+ di3 = f32( f32( twiddles2[ it21 ] * cc[ ip2 ] ) - f32( twiddles2[ it22 ] * cc[ ip1 ] ) );
+
+ // Combine the twiddled components:
+ cr2 = f32( dr2 + dr3 ); // sum of real parts
+ ci2 = f32( di2 + di3 ); // sum of imag parts
+
+ // Load component 0 data...
+ ip1 = iptr( i-1, k, 0, L, M, sc, oc ); // real part component 0
+ io = optr( i-1, 0, k, M, so, oo );
+ out[ io ] = cc[ ip1 ] + cr2;
+
+ ip2 = iptr( i, k, 0, L, M, sc, oc ); // imag part component 0
+ io = optr( i, 0, k, M, so, oo );
+ out[ io ] = cc[ ip2 ] + ci2;
+
+ // Intermediate results for components 1 and 2:
+ tr2 = f32( cc[ ip1 ] + f32( TAUR * cr2 ) );
+ ti2 = f32( cc[ ip2 ] + f32( TAUR * ci2 ) );
+ tr3 = f32( TAUI * f32( di2 - di3 ) );
+ ti3 = f32( TAUI * f32( dr3 - dr2 ) );
+
+ // Output component 1:
+ io = optr( i-1, 2, k, M, so, oo );
+ out[ io ] = tr2 + tr3;
+
+ io = optr( im-1, 1, k, M, so, oo );
+ out[ io ] = tr2 - tr3;
+
+ // Output component 2:
+ io = optr( i, 2, k, M, so, oo );
+ out[ io ] = ti2 + ti3;
+
+ io = optr( im, 1, k, M, so, oo );
+ out[ io ] = ti3 - ti2;
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = radf3;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/radf4.js b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/radf4.js
new file mode 100644
index 000000000000..8c0c71850167
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/radf4.js
@@ -0,0 +1,493 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len, max-statements */
+
+'use strict';
+
+// MODULES //
+
+var SQRT_HALF = require( '@stdlib/constants/float32/sqrt-half' );
+var f32 = require( '@stdlib/number/float64/base/to-float32' );
+
+
+// FUNCTIONS //
+
+/**
+* Resolves an index into the input array.
+*
+* ## Notes
+*
+* In a forward real FFT, the previous stage writes its results as four "rows" per sub-sequence.
+*
+* Thus, when reading from an input array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having four "rows" (components 0, 1, 2, and 3) and where each "row" is arranged as `M*L` contiguous elements corresponding to interleaved real and imaginary components.
+*
+* Accordingly, the following is a logical view of an input array (zero-based indexing) which contains `L = 3` transforms and in which each sub-sequence has length `M = 4`:
+*
+* ```text
+* │ k = 0 k = 1 k = 2
+* │ ──────────────────────────────────────────────────────────────────────────→ k
+* j = 0 │ cc(0,0,0) ... cc(3,0,0) cc(0,1,0) ... cc(3,1,0) cc(0,2,0) ... cc(3,2,0)
+* │
+* j = 1 │ cc(0,0,1) ... cc(3,0,1) cc(0,1,1) ... cc(3,1,1) cc(0,2,1) ... cc(3,2,1)
+* │
+* j = 2 │ cc(0,0,2) ... cc(3,0,2) cc(0,1,2) ... cc(3,1,2) cc(0,2,2) ... cc(3,2,2)
+* │
+* j = 3 │ cc(0,0,3) ... cc(3,0,3) cc(0,1,3) ... cc(3,1,3) cc(0,2,3) ... cc(3,2,3)
+* └───────────────────────────────────────────────────────────────────────────→ i
+* ↑ ↑ ↑ ↑ ↑ ↑
+* i = 0 M-1 0 M-1 0 M-1
+* ```
+*
+* In the above,
+*
+* - `i` is the fastest varying index, which walks within one short sub-sequence corresponding to one of the four component rows.
+* - `j` selects between the four component rows (0, 1, 2, or 3).
+* - `k` specifies the index of one of the `L` independent transforms we are processing.
+*
+* In linear memory, the three-dimensional logical view is arranged as follows:
+*
+* ```text
+* | cc(0,0,0)...cc(3,0,0) ... cc(0,2,0)...cc(3,2,0) | cc(0,0,1)...cc(3,0,1) ... cc(0,2,1)...cc(3,2,1) | ... | cc(0,0,3)...cc(3,0,3) ... cc(0,2,3)...cc(3,2,3) |
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* 0 M-1 LM LM-1 (L+1)M (L+1)M-1 (2L-1)M 2LM-1 3LM (3L+1)M-1 (4L-1)M 4LM-1
+* ```
+*
+* @private
+* @param {NonNegativeInteger} i - index of an element within a sub-sequence
+* @param {NonNegativeInteger} k - index of the sub-sequence being transformed
+* @param {NonNegativeInteger} j - input row
+* @param {NonNegativeInteger} L - number of sub-sequences
+* @param {NonNegativeInteger} M - sub-sequence length
+* @param {integer} stride - stride length of the input array
+* @param {NonNegativeInteger} offset - index specifying the first indexed element in the input array
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var stride = 1;
+* var offset = 0;
+*
+* var M = 4; // sub-sequence length
+* var L = 3; // number of sub-sequences
+*
+* var idx = iptr( 0, 0, 0, L, M, stride, offset );
+* // returns 0
+*
+* idx = iptr( 1, 0, 0, L, M, stride, offset );
+* // returns 1
+*
+* idx = iptr( M-1, 0, 0, L, M, stride, offset );
+* // returns 3
+*
+* idx = iptr( 0, 1, 0, L, M, stride, offset );
+* // returns 4
+*
+* // ...
+*
+* idx = iptr( M-1, L-1, 1, L, M, stride, offset );
+* // returns 23
+*/
+function iptr( i, k, j, L, M, stride, offset ) {
+ var n = i + ( ( k+(j*L) ) * M );
+ return ( n*stride ) + offset;
+}
+
+/**
+* Resolves an index into the output array.
+*
+* ## Notes
+*
+* When writing to an output array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having four "columns" corresponding to the four components of a radix-4 stage (with real and imaginary parts of each component interleaved along each sub-sequence) and where each "column" has `M` elements.
+*
+* Accordingly, the following is a logical view of an output array (zero-based indexing) which contains `L = 3` transforms and in which each "column" sub-sequence has length `M = 4`:
+*
+* ```text
+* j = 0 (component 0) j = 1 (component 1) j = 2 (component 2) j = 3 (component 3)
+* k = 0 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┐
+* │ out(0,0,0) out(1,0,0) ... out(3,0,0) │ out(0,1,0) out(1,1,0) ... out(3,1,0) │ out(0,2,0) out(1,2,0) ... out(3,2,0) │ out(0,3,0) out(1,3,0) ... out(3,3,0) │
+* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┤
+* k = 1 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┤
+* │ out(0,0,1) out(1,0,1) ... out(3,0,1) │ out(0,1,1) out(1,1,1) ... out(3,1,1) │ out(0,2,1) out(1,2,1) ... out(3,2,1) │ out(0,3,1) out(1,3,1) ... out(3,3,1) │
+* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┤
+* k = 2 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┤
+* │ out(0,0,2) out(1,0,2) ... out(3,0,2) │ out(0,1,2) out(1,1,2) ... out(3,1,2) │ out(0,2,2) out(1,2,2) ... out(3,2,2) │ out(0,3,2) out(1,3,2) ... out(3,3,2) │
+* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┘
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* i = 0 1 M-1 0 1 M-1 0 1 M-1 0 1 M-1
+* ```
+*
+* In the above,
+*
+* - `i` is the fastest varying index, which walks within one short "column" sub-sequence.
+* - `j` selects which of the four components (0, 1, 2, or 3).
+* - `k` specifies the index of one of the `L` independent transforms we are processing.
+*
+* In linear memory, the three-dimensional logical view is arranged as follows:
+*
+* ```text
+* | out(0,0,0)...out(3,0,0) | out(0,1,0)...out(3,1,0) | out(0,2,0)...out(3,2,0) | out(0,3,0)...out(3,3,0) | out(0,0,1)...out(3,0,1) | ... | out(0,3,2)...out(3,3,2) |
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* 0 M-1 M 2M-1 2M 3M-1 3M 4M-1 4M 5M-1 (4L-1)M 4LM-1
+* ```
+*
+* As may be observed, when resolving an index in the output array, the `j` and `k` dimensions are swapped relative index resolution in the input array. This stems from `radf4` being only one stage in a multi-stage driver which alternates between using `cc` and `out` as workspace buffers. After each stage, the next stage reads what the previous stage wrote.
+*
+* Each stage expects a transpose, and, in order to avoid explicit transposition between the stages, we swap the last two logical dimensions while still maintaining cache locality within the inner loop logical dimension, as indexed by `i`.
+*
+* @private
+* @param {NonNegativeInteger} i - index of an element within a sub-sequence
+* @param {NonNegativeInteger} j - index specifying which of the four complex components we are in (0, 1, 2, or 3)
+* @param {NonNegativeInteger} k - index of the sub-sequence being transformed
+* @param {NonNegativeInteger} M - sub-sequence length
+* @param {integer} stride - stride length of the output array
+* @param {NonNegativeInteger} offset - index specifying the first indexed element in the output array
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var stride = 1;
+* var offset = 0;
+*
+* var M = 4; // sub-sequence length
+* var L = 3; // number of sub-sequences
+*
+* var idx = optr( 0, 0, 0, M, stride, offset );
+* // returns 0
+*
+* idx = optr( 1, 0, 0, M, stride, offset );
+* // returns 1
+*
+* idx = optr( M-1, 0, 0, M, stride, offset );
+* // returns 3
+*
+* idx = optr( 0, 1, 0, M, stride, offset );
+* // returns 4
+*
+* // ...
+*
+* idx = optr( M-1, 3, L-1, M, stride, offset );
+* // returns 47
+*/
+function optr( i, j, k, M, stride, offset ) {
+ var n = i + ( ( j+(k*4) ) * M );
+ return ( n*stride ) + offset;
+}
+
+
+// MAIN //
+
+/**
+* Performs one radix-4 stage within a forward Fourier transform for a real-valued single-precision floating-point sequence.
+*
+* @private
+* @param {NonNegativeInteger} M - number of elements in each sub-sequence to be transformed
+* @param {NonNegativeInteger} L - number of sub-sequences to be transformed
+* @param {Float32Array} cc - input array containing the sub-sequences to be transformed
+* @param {integer} sc - stride length for `cc`
+* @param {NonNegativeInteger} oc - index offset for `cc`
+* @param {Float32Array} out - output array containing transformed sub-sequences
+* @param {integer} so - stride length for `out`
+* @param {NonNegativeInteger} oo - index offset for `out`
+* @param {Float32Array} twiddles1 - first array containing twiddle factors
+* @param {integer} st1 - stride length for `twiddles1`
+* @param {NonNegativeInteger} ot1 - index offset for `twiddles1`
+* @param {Float32Array} twiddles2 - second array containing twiddle factors
+* @param {integer} st2 - stride length for `twiddles2`
+* @param {NonNegativeInteger} ot2 - index offset for `twiddles2`
+* @param {Float32Array} twiddles3 - third array containing twiddle factors
+* @param {integer} st3 - stride length for `twiddles3`
+* @param {NonNegativeInteger} ot3 - index offset for `twiddles3`
+* @returns {void}
+*/
+function radf4( M, L, cc, sc, oc, out, so, oo, twiddles1, st1, ot1, twiddles2, st2, ot2, twiddles3, st3, ot3 ) { // eslint-disable-line max-params
+ var it11;
+ var it12;
+ var it21;
+ var it22;
+ var it31;
+ var it32;
+ var tr1;
+ var tr2;
+ var tr3;
+ var tr4;
+ var ti1;
+ var ti2;
+ var ti3;
+ var ti4;
+ var cr2;
+ var cr3;
+ var cr4;
+ var ci2;
+ var ci3;
+ var ci4;
+ var ip1;
+ var ip2;
+ var ip3;
+ var ip4;
+ var io;
+ var im;
+ var i;
+ var k;
+
+ /*
+ * First, perform the core butterfly for each sub-sequence being transformed.
+ *
+ * In the following loop, we handle harmonic `n = 0` for every transform. As described for `iptr`, the input array is interpreted as a three-dimensional array, containing four "rows" per sub-sequence.
+ *
+ * row0 = input component 0 (j = 0)
+ * row1 = input component 1 (j = 1)
+ * row2 = input component 2 (j = 2)
+ * row3 = input component 3 (j = 3)
+ *
+ * For a radix-4 forward FFT of a real-valued signal `x` and `n = 0`,
+ *
+ * tr1 = row1 + row3
+ * tr2 = row0 + row2
+ *
+ * x[0] = tr1 + tr2
+ * x[2M-1] = row0 - row2
+ * x[2M] = row3 - row1
+ * x[4M-1] = tr2 - tr1
+ *
+ * Because `W_4^0 = 1`, no twiddle multiplication is necessary.
+ */
+ for ( k = 0; k < L; k++ ) {
+ ip1 = iptr( 0, k, 0, L, M, sc, oc ); // real part row 0
+ ip2 = iptr( 0, k, 1, L, M, sc, oc ); // real part row 1
+ ip3 = iptr( 0, k, 2, L, M, sc, oc ); // real part row 2
+ ip4 = iptr( 0, k, 3, L, M, sc, oc ); // real part row 3
+
+ tr1 = f32( cc[ ip2 ] + cc[ ip4 ] ); // row1 + row3
+ tr2 = f32( cc[ ip1 ] + cc[ ip3 ] ); // row0 + row2
+
+ io = optr( 0, 0, k, M, so, oo );
+ out[ io ] = tr1 + tr2;
+
+ io = optr( M-1, 3, k, M, so, oo );
+ out[ io ] = tr2 - tr1;
+
+ io = optr( M-1, 1, k, M, so, oo );
+ out[ io ] = cc[ ip1 ] - cc[ ip3 ];
+
+ io = optr( 0, 2, k, M, so, oo );
+ out[ io ] = cc[ ip4 ] - cc[ ip2 ];
+ }
+ // When the number of elements in a sub-sequence is equal to `1`, there is nothing more to do, as the above butterfly produced the full result...
+ if ( M < 2 ) {
+ return;
+ }
+ /*
+ * Next, apply the general case where we need to loop through the non-trivial harmonics.
+ *
+ * For each harmonic `n = 1, ..., M/2-1`, we need to
+ *
+ * - recover four spectra from the four input rows.
+ * - apply radix-4 twiddle factors to rows 1, 2, and 3, then combine with row 0 to form four output columns.
+ * - form the following
+ *
+ * x[4n] = X₀ + W₂·X₂ + (W₁·X₁ + W₃·X₃) => column 0
+ * x[4n+1] = X₀ + W₂·X₂ - (W₁·X₁ + W₃·X₃) => column 3
+ * x[4n+2] = X₀ - W₂·X₂ + i·(W₁·X₁ - W₃·X₃) => column 2
+ * x[4n+3] = X₀ - W₂·X₂ - i·(W₁·X₁ - W₃·X₃) => column 1
+ *
+ * The mirror index `im = M - i` selects the conjugate-symmetric partner, thus allowing the routine to read each symmetry pair only once.
+ */
+ if ( M >= 3 ) {
+ // Loop over each sub-sequence to be transformed...
+ for ( k = 0; k < L; k++ ) {
+ // Loop over the elements in each sub-sequence...
+ for ( i = 2; i < M; i += 2 ) {
+ im = M - i; // "mirror" index
+
+ // Resolve twiddle factor indices for component 1:
+ it11 = ( (i-2)*st1 ) + ot1; // cos(θ) for component 1
+ it12 = ( (i-1)*st1 ) + ot1; // sin(θ) for component 1
+
+ // Resolve twiddle factor indices for component 2:
+ it21 = ( (i-2)*st2 ) + ot2; // cos(θ) for component 2
+ it22 = ( (i-1)*st2 ) + ot2; // sin(θ) for component 2
+
+ // Resolve twiddle factor indices for component 3:
+ it31 = ( (i-2)*st3 ) + ot3; // cos(θ) for component 3
+ it32 = ( (i-1)*st3 ) + ot3; // sin(θ) for component 3
+
+ // Load component 1 data and apply twiddle...
+ ip1 = iptr( i-1, k, 1, L, M, sc, oc ); // real part component 1
+ ip2 = iptr( i, k, 1, L, M, sc, oc ); // imag part component 1
+
+ // Apply the twiddle factors for component 1:
+ cr2 = f32( f32( twiddles1[ it11 ] * cc[ ip1 ] ) + f32( twiddles1[ it12 ] * cc[ ip2 ] ) );
+ ci2 = f32( f32( twiddles1[ it11 ] * cc[ ip2 ] ) - f32( twiddles1[ it12 ] * cc[ ip1 ] ) );
+
+ // Load component 2 data and apply twiddle...
+ ip1 = iptr( i-1, k, 2, L, M, sc, oc ); // real part component 2
+ ip2 = iptr( i, k, 2, L, M, sc, oc ); // imag part component 2
+
+ // Apply the twiddle factors for component 2:
+ cr3 = f32( f32( twiddles2[ it21 ] * cc[ ip1 ] ) + f32( twiddles2[ it22 ] * cc[ ip2 ] ) );
+ ci3 = f32( f32( twiddles2[ it21 ] * cc[ ip2 ] ) - f32( twiddles2[ it22 ] * cc[ ip1 ] ) );
+
+ // Load component 3 data and apply twiddle...
+ ip1 = iptr( i-1, k, 3, L, M, sc, oc ); // real part component 3
+ ip2 = iptr( i, k, 3, L, M, sc, oc ); // imag part component 3
+
+ // Apply the twiddle factors for component 3:
+ cr4 = f32( f32( twiddles3[ it31 ] * cc[ ip1 ] ) + f32( twiddles3[ it32 ] * cc[ ip2 ] ) );
+ ci4 = f32( f32( twiddles3[ it31 ] * cc[ ip2 ] ) - f32( twiddles3[ it32 ] * cc[ ip1 ] ) );
+
+ // Radix-4 butterfly intermediate computations:
+ tr1 = f32( cr2 + cr4 );
+ tr4 = f32( cr4 - cr2 );
+ ti1 = f32( ci2 + ci4 );
+ ti4 = f32( ci2 - ci4 );
+
+ // Load component 0 data and compute intermediates...
+ ip1 = iptr( i-1, k, 0, L, M, sc, oc ); // real part component 0
+ tr2 = f32( cc[ ip1 ] + cr3 );
+ tr3 = f32( cc[ ip1 ] - cr3 );
+
+ ip2 = iptr( i, k, 0, L, M, sc, oc ); // imag part component 0
+ ti2 = f32( cc[ ip2 ] + ci3 );
+ ti3 = f32( cc[ ip2 ] - ci3 );
+
+ // Output column 0 (real part):
+ io = optr( i-1, 0, k, M, so, oo );
+ out[ io ] = tr1 + tr2;
+
+ // Output column 3 (real part):
+ io = optr( im-1, 3, k, M, so, oo );
+ out[ io ] = tr2 - tr1;
+
+ // Output column 0 (imag part):
+ io = optr( i, 0, k, M, so, oo );
+ out[ io ] = ti1 + ti2;
+
+ // Output column 3 (imag part):
+ io = optr( im, 3, k, M, so, oo );
+ out[ io ] = ti1 - ti2;
+
+ // Output column 2 (real part):
+ io = optr( i-1, 2, k, M, so, oo );
+ out[ io ] = ti4 + tr3;
+
+ // Output column 1 (real part):
+ io = optr( im-1, 1, k, M, so, oo );
+ out[ io ] = tr3 - ti4;
+
+ // Output column 2 (imag part):
+ io = optr( i, 2, k, M, so, oo );
+ out[ io ] = tr4 + ti3;
+
+ // Output column 1 (imag part):
+ io = optr( im, 1, k, M, so, oo );
+ out[ io ] = tr4 - ti3;
+ }
+ }
+
+ // When `M` is odd, there is no Nyquist pair to process, so we do not need to perform any further transformations...
+ if ( M%2 === 1 ) {
+ return;
+ }
+ }
+
+ /*
+ * Lastly, handle the Nyquist frequency where `i = M-1` (i.e., the last element of each sub-sequence).
+ *
+ * When `M` is even, the Nyquist index is `i = M/2`. In this stage, we've stored that element at the end of each sub-sequence (i.e., `i = M-1` in the packed layout).
+ *
+ * At this point, only real components exist for rows 1 and 3 (imaginary parts are zero due to symmetry), and the twiddle multiplication simplifies to involve √(1/2) factors.
+ *
+ * In this case,
+ *
+ * ti1 = -√(1/2) ⋅ (row1 + row3)
+ * tr1 = √(1/2) ⋅ (row1 - row3)
+ *
+ * where
+ *
+ * row0 = Re(X₀)
+ * row1 = Re(X₁) (imaginary part is zero)
+ * row2 = Re(X₂)
+ * row3 = Re(X₃) (imaginary part is zero)
+ */
+ for ( k = 0; k < L; k++ ) {
+ ip1 = iptr( M-1, k, 1, L, M, sc, oc ); // Re(X₁)
+ ip2 = iptr( M-1, k, 3, L, M, sc, oc ); // Re(X₃)
+
+ ti1 = f32( -SQRT_HALF * f32( cc[ ip1 ] + cc[ ip2 ] ) );
+ tr1 = f32( SQRT_HALF * f32( cc[ ip1 ] - cc[ ip2 ] ) );
+
+ ip3 = iptr( M-1, k, 0, L, M, sc, oc ); // Re(X₀)
+ ip4 = iptr( M-1, k, 2, L, M, sc, oc ); // Re(X₂)
+
+ io = optr( M-1, 0, k, M, so, oo );
+ out[ io ] = cc[ ip3 ] + tr1;
+
+ io = optr( M-1, 2, k, M, so, oo );
+ out[ io ] = cc[ ip3 ] - tr1;
+
+ io = optr( 0, 1, k, M, so, oo );
+ out[ io ] = ti1 - cc[ ip4 ];
+
+ io = optr( 0, 3, k, M, so, oo );
+ out[ io ] = cc[ ip4 ] + ti1;
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = radf4;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/radf5.js b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/radf5.js
new file mode 100644
index 000000000000..e8e6b3aa640e
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/radf5.js
@@ -0,0 +1,516 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len, max-statements */
+
+'use strict';
+
+// MODULES //
+
+var f32 = require( '@stdlib/number/float64/base/to-float32' );
+
+
+// VARIABLES //
+
+// cos( 2π/5 ):
+var TR11 = 0.30901700258255005;
+
+// sin( 2π/5 ):
+var TI11 = 0.9510565400123596;
+
+// cos( 4π/5 ):
+var TR12 = -0.80901700258255;
+
+// sin( 4π/5 ):
+var TI12 = 0.5877852439880371;
+
+
+// FUNCTIONS //
+
+/**
+* Resolves an index into the input array.
+*
+* ## Notes
+*
+* In a forward real FFT, the previous stage writes its results as five "rows" per sub-sequence.
+*
+* Thus, when reading from an input array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having five "rows" (components 0, 1, 2, 3, and 4) and where each "row" is arranged as `M*L` contiguous elements corresponding to interleaved real and imaginary components.
+*
+* Accordingly, the following is a logical view of an input array (zero-based indexing) which contains `L = 3` transforms and in which each sub-sequence has length `M = 4`:
+*
+* ```text
+* │ k = 0 k = 1 k = 2
+* │ ──────────────────────────────────────────────────────────────────────────→ k
+* j = 0 │ cc(0,0,0) ... cc(3,0,0) cc(0,1,0) ... cc(3,1,0) cc(0,2,0) ... cc(3,2,0)
+* │
+* j = 1 │ cc(0,0,1) ... cc(3,0,1) cc(0,1,1) ... cc(3,1,1) cc(0,2,1) ... cc(3,2,1)
+* │
+* j = 2 │ cc(0,0,2) ... cc(3,0,2) cc(0,1,2) ... cc(3,1,2) cc(0,2,2) ... cc(3,2,2)
+* │
+* j = 3 │ cc(0,0,3) ... cc(3,0,3) cc(0,1,3) ... cc(3,1,3) cc(0,2,3) ... cc(3,2,3)
+* │
+* j = 4 │ cc(0,0,4) ... cc(3,0,4) cc(0,1,4) ... cc(3,1,4) cc(0,2,4) ... cc(3,2,4)
+* └───────────────────────────────────────────────────────────────────────────→ i
+* ↑ ↑ ↑ ↑ ↑ ↑
+* i = 0 M-1 0 M-1 0 M-1
+* ```
+*
+* In the above,
+*
+* - `i` is the fastest varying index, which walks within one short sub-sequence corresponding to one of the five component rows.
+* - `j` selects between the five component rows (0, 1, 2, 3, or 4).
+* - `k` specifies the index of one of the `L` independent transforms we are processing.
+*
+* In linear memory, the three-dimensional logical view is arranged as follows:
+*
+* ```text
+* | cc(0,0,0)...cc(3,0,0) ... cc(0,2,0)...cc(3,2,0) | cc(0,0,1)...cc(3,0,1) ... cc(0,2,1)...cc(3,2,1) | ... | cc(0,0,4)...cc(3,0,4) ... cc(0,2,4)...cc(3,2,4) |
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* 0 M-1 LM LM-1 (L+1)M (L+1)M-1 (2L-1)M 2LM-1 4LM (4L+1)M-1 (5L-1)M 5LM-1
+* ```
+*
+* @private
+* @param {NonNegativeInteger} i - index of an element within a sub-sequence
+* @param {NonNegativeInteger} k - index of the sub-sequence being transformed
+* @param {NonNegativeInteger} j - input row
+* @param {NonNegativeInteger} L - number of sub-sequences
+* @param {NonNegativeInteger} M - sub-sequence length
+* @param {integer} stride - stride length of the input array
+* @param {NonNegativeInteger} offset - index specifying the first indexed element in the input array
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var stride = 1;
+* var offset = 0;
+*
+* var M = 4; // sub-sequence length
+* var L = 3; // number of sub-sequences
+*
+* var idx = iptr( 0, 0, 0, L, M, stride, offset );
+* // returns 0
+*
+* idx = iptr( 1, 0, 0, L, M, stride, offset );
+* // returns 1
+*
+* idx = iptr( M-1, 0, 0, L, M, stride, offset );
+* // returns 3
+*
+* idx = iptr( 0, 1, 0, L, M, stride, offset );
+* // returns 4
+*
+* // ...
+*
+* idx = iptr( M-1, L-1, 1, L, M, stride, offset );
+* // returns 23
+*/
+function iptr( i, k, j, L, M, stride, offset ) {
+ var n = i + ( ( k+(j*L) ) * M );
+ return ( n*stride ) + offset;
+}
+
+/**
+* Resolves an index into the output array.
+*
+* ## Notes
+*
+* When writing to an output array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having five "columns" corresponding to the five components of a radix-5 stage (with real and imaginary parts of each component interleaved along each sub-sequence) and where each "column" has `M` elements.
+*
+* Accordingly, the following is a logical view of an output array (zero-based indexing) which contains `L = 3` transforms and in which each "column" sub-sequence has length `M = 4`:
+*
+* ```text
+* j = 0 (component 0) j = 1 (component 1) j = 2 (component 2) j = 3 (component 3) j = 4 (component 4)
+* k = 0 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┐
+* │ out(0,0,0) out(1,0,0) ... out(3,0,0) │ out(0,1,0) out(1,1,0) ... out(3,1,0) │ out(0,2,0) out(1,2,0) ... out(3,2,0) │ out(0,3,0) out(1,3,0) ... out(3,3,0) │ out(0,4,0) out(1,4,0) ... out(3,4,0) │
+* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┤
+* k = 1 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┤
+* │ out(0,0,1) out(1,0,1) ... out(3,0,1) │ out(0,1,1) out(1,1,1) ... out(3,1,1) │ out(0,2,1) out(1,2,1) ... out(3,2,1) │ out(0,3,1) out(1,3,1) ... out(3,3,1) │ out(0,4,1) out(1,4,1) ... out(3,4,1) │
+* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┤
+* k = 2 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┤
+* │ out(0,0,2) out(1,0,2) ... out(3,0,2) │ out(0,1,2) out(1,1,2) ... out(3,1,2) │ out(0,2,2) out(1,2,2) ... out(3,2,2) │ out(0,3,2) out(1,3,2) ... out(3,3,2) │ out(0,4,2) out(1,4,2) ... out(3,4,2) │
+* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┘
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* i = 0 1 M-1 0 1 M-1 0 1 M-1 0 1 M-1 0 1 M-1
+* ```
+*
+* In the above,
+*
+* - `i` is the fastest varying index, which walks within one short "column" sub-sequence.
+* - `j` selects which of the five components (0, 1, 2, 3, or 4).
+* - `k` specifies the index of one of the `L` independent transforms we are processing.
+*
+* In linear memory, the three-dimensional logical view is arranged as follows:
+*
+* ```text
+* | out(0,0,0)...out(3,0,0) | out(0,1,0)...out(3,1,0) | out(0,2,0)...out(3,2,0) | out(0,3,0)...out(3,3,0) | out(0,4,0)...out(3,4,0) | out(0,0,1)...out(3,0,1) | ... | out(0,4,2)...out(3,4,2) |
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* 0 M-1 M 2M-1 2M 3M-1 3M 4M-1 4M 5M-1 5M 6M-1 (5L-1)M 5LM-1
+* ```
+*
+* As may be observed, when resolving an index in the output array, the `j` and `k` dimensions are swapped relative index resolution in the input array. This stems from `radf5` being only one stage in a multi-stage driver which alternates between using `cc` and `out` as workspace buffers. After each stage, the next stage reads what the previous stage wrote.
+*
+* Each stage expects a transpose, and, in order to avoid explicit transposition between the stages, we swap the last two logical dimensions while still maintaining cache locality within the inner loop logical dimension, as indexed by `i`.
+*
+* @private
+* @param {NonNegativeInteger} i - index of an element within a sub-sequence
+* @param {NonNegativeInteger} j - index specifying which of the five complex components we are in (0, 1, 2, 3, or 4)
+* @param {NonNegativeInteger} k - index of the sub-sequence being transformed
+* @param {NonNegativeInteger} M - sub-sequence length
+* @param {integer} stride - stride length of the output array
+* @param {NonNegativeInteger} offset - index specifying the first indexed element in the output array
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var stride = 1;
+* var offset = 0;
+*
+* var M = 4; // sub-sequence length
+* var L = 3; // number of sub-sequences
+*
+* var idx = optr( 0, 0, 0, M, stride, offset );
+* // returns 0
+*
+* idx = optr( 1, 0, 0, M, stride, offset );
+* // returns 1
+*
+* idx = optr( M-1, 0, 0, M, stride, offset );
+* // returns 3
+*
+* idx = optr( 0, 1, 0, M, stride, offset );
+* // returns 4
+*
+* // ...
+*
+* idx = optr( M-1, 4, L-1, M, stride, offset );
+* // returns 59
+*/
+function optr( i, j, k, M, stride, offset ) {
+ var n = i + ( ( j+(k*5) ) * M );
+ return ( n*stride ) + offset;
+}
+
+
+// MAIN //
+
+/**
+* Performs one radix-5 stage within a forward Fourier transform for a real-valued single-precision floating-point sequence.
+*
+* @private
+* @param {NonNegativeInteger} M - number of elements in each sub-sequence to be transformed
+* @param {NonNegativeInteger} L - number of sub-sequences to be transformed
+* @param {Float32Array} cc - input array containing the sub-sequences to be transformed
+* @param {integer} sc - stride length for `cc`
+* @param {NonNegativeInteger} oc - index offset for `cc`
+* @param {Float32Array} out - output array containing transformed sub-sequences
+* @param {integer} so - stride length for `out`
+* @param {NonNegativeInteger} oo - index offset for `out`
+* @param {Float32Array} twiddles1 - first array containing twiddle factors
+* @param {integer} st1 - stride length for `twiddles1`
+* @param {NonNegativeInteger} ot1 - index offset for `twiddles1`
+* @param {Float32Array} twiddles2 - second array containing twiddle factors
+* @param {integer} st2 - stride length for `twiddles2`
+* @param {NonNegativeInteger} ot2 - index offset for `twiddles2`
+* @param {Float32Array} twiddles3 - third array containing twiddle factors
+* @param {integer} st3 - stride length for `twiddles3`
+* @param {NonNegativeInteger} ot3 - index offset for `twiddles3`
+* @param {Float32Array} twiddles4 - fourth array containing twiddle factors
+* @param {integer} st4 - stride length for `twiddles4`
+* @param {NonNegativeInteger} ot4 - index offset for `twiddles4`
+* @returns {void}
+*/
+function radf5( M, L, cc, sc, oc, out, so, oo, twiddles1, st1, ot1, twiddles2, st2, ot2, twiddles3, st3, ot3, twiddles4, st4, ot4 ) { // eslint-disable-line max-params
+ var it11;
+ var it12;
+ var it21;
+ var it22;
+ var it31;
+ var it32;
+ var it41;
+ var it42;
+ var ci2;
+ var ci3;
+ var ci4;
+ var ci5;
+ var cr2;
+ var cr3;
+ var cr4;
+ var cr5;
+ var dr2;
+ var dr3;
+ var dr4;
+ var dr5;
+ var di2;
+ var di3;
+ var di4;
+ var di5;
+ var ti2;
+ var ti3;
+ var ti4;
+ var ti5;
+ var tr2;
+ var tr3;
+ var tr4;
+ var tr5;
+ var ip1;
+ var ip2;
+ var ip3;
+ var ip4;
+ var ip5;
+ var io;
+ var im;
+ var i;
+ var k;
+
+ /*
+ * First, perform the core butterfly for each sub-sequence being transformed.
+ *
+ * In the following loop, we handle harmonic `n = 0` for every transform. As described for `iptr`, the input array is interpreted as a three-dimensional array, containing five "rows" per sub-sequence.
+ *
+ * row0 = input component 0 (j = 0)
+ * row1 = input component 1 (j = 1)
+ * row2 = input component 2 (j = 2)
+ * row3 = input component 3 (j = 3)
+ * row4 = input component 4 (j = 4)
+ *
+ * For a radix-5 forward FFT of a real-valued signal `x` and `n = 0`,
+ *
+ * cr2 = row4 + row1
+ * ci5 = row4 - row1
+ * cr3 = row3 + row2
+ * ci4 = row3 - row2
+ *
+ * x[0] = row0 + cr2 + cr3
+ * x[M] = row0 + ( TR11*cr2 ) + ( TR12*cr3 )
+ * x[2M] = ( TI11*ci5 ) + ( TI12*ci4 )
+ * x[3M] = row0 + ( TR12*cr2 ) + ( TR11*cr3 )
+ * x[4M] = ( TI12*ci5 ) - ( TI11*ci4 )
+ *
+ * Because `W_5^0 = 1`, no frequency-dependent twiddle multiplication is necessary beyond these constant factors.
+ */
+ for ( k = 0; k < L; k++ ) {
+ ip1 = iptr( 0, k, 0, L, M, sc, oc ); // row 0
+ ip2 = iptr( 0, k, 1, L, M, sc, oc ); // row 1
+ ip3 = iptr( 0, k, 2, L, M, sc, oc ); // row 2
+ ip4 = iptr( 0, k, 3, L, M, sc, oc ); // row 3
+ ip5 = iptr( 0, k, 4, L, M, sc, oc ); // row 4
+
+ cr2 = f32( cc[ ip5 ] + cc[ ip2 ] ); // row4 + row1
+ ci5 = f32( cc[ ip5 ] - cc[ ip2 ] ); // row4 - row1
+ cr3 = f32( cc[ ip4 ] + cc[ ip3 ] ); // row3 + row2
+ ci4 = f32( cc[ ip4 ] - cc[ ip3 ] ); // row3 - row2
+
+ io = optr( 0, 0, k, M, so, oo );
+ out[ io ] = f32( cc[ ip1 ] + cr2 ) + cr3;
+
+ io = optr( M-1, 1, k, M, so, oo );
+ out[ io ] = f32( cc[ ip1 ] + f32( TR11 * cr2 ) ) + f32( TR12 * cr3 );
+
+ io = optr( 0, 2, k, M, so, oo );
+ out[ io ] = f32( TI11 * ci5 ) + f32( TI12 * ci4 );
+
+ io = optr( M-1, 3, k, M, so, oo );
+ out[ io ] = f32( cc[ ip1 ] + f32( TR12 * cr2 ) ) + f32( TR11 * cr3 );
+
+ io = optr( 0, 4, k, M, so, oo );
+ out[ io ] = f32( TI12 * ci5 ) - f32( TI11 * ci4 );
+ }
+ // When the number of elements in a sub-sequence is less than `2`, there is nothing more to do, as the above butterfly produced the full result...
+ if ( M < 2 ) {
+ return;
+ }
+ /*
+ * Next, apply the general case where we need to loop through the non-trivial harmonics.
+ *
+ * For each harmonic `n = 1, ..., M/2-1`, we need to
+ *
+ * - recover five spectra from the five input rows.
+ * - apply radix-5 twiddle factors to rows 1, 2, 3, and 4, then combine with row 0 to form five output columns.
+ * - form the following
+ *
+ * x[5n] = X₀ + (W₁⋅X₁ + W₄⋅X₄) + (W₂⋅X₂ + W₃⋅X₃) => column 0
+ * x[5n+1] = X₀ + TR11⋅(W₁⋅X₁ + W₄⋅X₄) + TR12⋅(W₂⋅X₂ + W₃⋅X₃) - i⋅(TI11⋅(W₁⋅X₁ - W₄⋅X₄) + TI12⋅(W₂⋅X₂ - W₃⋅X₃)) => column 1
+ * x[5n+2] = X₀ + TR11⋅(W₁⋅X₁ + W₄⋅X₄) + TR12⋅(W₂⋅X₂ + W₃⋅X₃) + i⋅(TI11⋅(W₁⋅X₁ - W₄⋅X₄) + TI12⋅(W₂⋅X₂ - W₃⋅X₃)) => column 2
+ * x[5n+3] = X₀ + TR12⋅(W₁⋅X₁ + W₄⋅X₄) + TR11⋅(W₂⋅X₂ + W₃⋅X₃) - i⋅(TI12⋅(W₁⋅X₁ - W₄⋅X₄) - TI11⋅(W₂⋅X₂ - W₃⋅X₃)) => column 3
+ * x[5n+4] = X₀ + TR12⋅(W₁⋅X₁ + W₄⋅X₄) + TR11⋅(W₂⋅X₂ + W₃⋅X₃) + i⋅(TI12⋅(W₁⋅X₁ - W₄⋅X₄) - TI11⋅(W₂⋅X₂ - W₃⋅X₃)) => column 4
+ *
+ * The mirror index `im = M - i` selects the conjugate-symmetric partner, thus allowing the routine to read each symmetry pair only once.
+ */
+ // Loop over each sub-sequence to be transformed...
+ for ( k = 0; k < L; k++ ) {
+ // Loop over the elements in each sub-sequence...
+ for ( i = 2; i < M; i += 2 ) {
+ im = M - i; // "mirror" index
+
+ // Resolve twiddle factor indices for component 1:
+ it11 = ( (i-2)*st1 ) + ot1; // cos(θ) for component 1
+ it12 = ( (i-1)*st1 ) + ot1; // sin(θ) for component 1
+
+ // Resolve twiddle factor indices for component 2:
+ it21 = ( (i-2)*st2 ) + ot2; // cos(θ) for component 2
+ it22 = ( (i-1)*st2 ) + ot2; // sin(θ) for component 2
+
+ // Resolve twiddle factor indices for component 3:
+ it31 = ( (i-2)*st3 ) + ot3; // cos(θ) for component 3
+ it32 = ( (i-1)*st3 ) + ot3; // sin(θ) for component 3
+
+ // Resolve twiddle factor indices for component 4:
+ it41 = ( (i-2)*st4 ) + ot4; // cos(θ) for component 4
+ it42 = ( (i-1)*st4 ) + ot4; // sin(θ) for component 4
+
+ // Load component 1 data and apply twiddle...
+ ip1 = iptr( i-1, k, 1, L, M, sc, oc ); // real part component 1
+ ip2 = iptr( i, k, 1, L, M, sc, oc ); // imag part component 1
+
+ // Apply the twiddle factors for component 1:
+ dr2 = f32( f32( twiddles1[ it11 ] * cc[ ip1 ] ) + f32( twiddles1[ it12 ] * cc[ ip2 ] ) ); // Re(dr2)
+ di2 = f32( f32( twiddles1[ it11 ] * cc[ ip2 ] ) - f32( twiddles1[ it12 ] * cc[ ip1 ] ) ); // Im(di2)
+
+ // Load component 2 data and apply twiddle...
+ ip1 = iptr( i-1, k, 2, L, M, sc, oc ); // real part component 2
+ ip2 = iptr( i, k, 2, L, M, sc, oc ); // imag part component 2
+
+ // Apply the twiddle factors for component 2:
+ dr3 = f32( f32( twiddles2[ it21 ] * cc[ ip1 ] ) + f32( twiddles2[ it22 ] * cc[ ip2 ] ) ); // Re(dr3)
+ di3 = f32( f32( twiddles2[ it21 ] * cc[ ip2 ] ) - f32( twiddles2[ it22 ] * cc[ ip1 ] ) ); // Im(di3)
+
+ // Load component 3 data and apply twiddle...
+ ip1 = iptr( i-1, k, 3, L, M, sc, oc ); // real part component 3
+ ip2 = iptr( i, k, 3, L, M, sc, oc ); // imag part component 3
+
+ // Apply the twiddle factors for component 3:
+ dr4 = f32( f32( twiddles3[ it31 ] * cc[ ip1 ] ) + f32( twiddles3[ it32 ] * cc[ ip2 ] ) ); // Re(dr4)
+ di4 = f32( f32( twiddles3[ it31 ] * cc[ ip2 ] ) - f32( twiddles3[ it32 ] * cc[ ip1 ] ) ); // Im(di4)
+
+ // Load component 4 data and apply twiddle...
+ ip1 = iptr( i-1, k, 4, L, M, sc, oc ); // real part component 4
+ ip2 = iptr( i, k, 4, L, M, sc, oc ); // imag part component 4
+
+ // Apply the twiddle factors for component 4:
+ dr5 = f32( f32( twiddles4[ it41 ] * cc[ ip1 ] ) + f32( twiddles4[ it42 ] * cc[ ip2 ] ) ); // Re(dr5)
+ di5 = f32( f32( twiddles4[ it41 ] * cc[ ip2 ] ) - f32( twiddles4[ it42 ] * cc[ ip1 ] ) ); // Im(di5)
+
+ // Radix-5 butterfly intermediate computations (symmetric/antisymmetric combinations):
+ cr2 = f32( dr2 + dr5 );
+ ci5 = f32( dr5 - dr2 );
+ cr5 = f32( di2 - di5 );
+ ci2 = f32( di5 + di2 );
+ cr3 = f32( dr3 + dr4 );
+ ci4 = f32( dr4 - dr3 );
+ cr4 = f32( di3 - di4 );
+ ci3 = f32( di3 + di4 );
+
+ // Output column 0 (real part):
+ ip1 = iptr( i-1, k, 0, L, M, sc, oc );
+ io = optr( i-1, 0, k, M, so, oo );
+ out[ io ] = f32( cc[ ip1 ] + cr2 ) + cr3;
+
+ // Output column 0 (imag part):
+ ip2 = iptr( i, k, 0, L, M, sc, oc );
+ io = optr( i, 0, k, M, so, oo );
+ out[ io ] = f32( cc[ ip2 ] + ci2 ) + ci3;
+
+ // Load component 0 data and compute intermediates...
+ tr2 = f32( f32( cc[ ip1 ] + f32( TR11 * cr2 ) ) + f32( TR12 * cr3 ) );
+ ti2 = f32( f32( cc[ ip2 ] + f32( TR11 * ci2 ) ) + f32( TR12 * ci3 ) );
+ tr3 = f32( f32( cc[ ip1 ] + f32( TR12 * cr2 ) ) + f32( TR11 * cr3 ) );
+ ti3 = f32( f32( cc[ ip2 ] + f32( TR12 * ci2 ) ) + f32( TR11 * ci3 ) );
+
+ // Additional intermediates:
+ tr5 = f32( f32( TI11 * cr5 ) + f32( TI12 * cr4 ) );
+ ti5 = f32( f32( TI11 * ci5 ) + f32( TI12 * ci4 ) );
+ tr4 = f32( f32( TI12 * cr5 ) - f32( TI11 * cr4 ) );
+ ti4 = f32( f32( TI12 * ci5 ) - f32( TI11 * ci4 ) );
+
+ // Output column 2 (real part):
+ io = optr( i-1, 2, k, M, so, oo );
+ out[ io ] = tr2 + tr5;
+
+ // Output column 1 (real part):
+ io = optr( im-1, 1, k, M, so, oo );
+ out[ io ] = tr2 - tr5;
+
+ // Output column 2 (imag part):
+ io = optr( i, 2, k, M, so, oo );
+ out[ io ] = ti2 + ti5;
+
+ // Output column 1 (imag part):
+ io = optr( im, 1, k, M, so, oo );
+ out[ io ] = ti5 - ti2;
+
+ // Output column 4 (real part):
+ io = optr( i-1, 4, k, M, so, oo );
+ out[ io ] = tr3 + tr4;
+
+ // Output column 3 (real part):
+ io = optr( im-1, 3, k, M, so, oo );
+ out[ io ] = tr3 - tr4;
+
+ // Output column 4 (imag part):
+ io = optr( i, 4, k, M, so, oo );
+ out[ io ] = ti3 + ti4;
+
+ // Output column 3 (imag part):
+ io = optr( im, 3, k, M, so, oo );
+ out[ io ] = ti4 - ti3;
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = radf5;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/radfg.js b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/radfg.js
new file mode 100644
index 000000000000..dfb86ca4adf8
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/radfg.js
@@ -0,0 +1,766 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len, max-statements, max-lines-per-function */
+
+'use strict';
+
+// MODULES //
+
+var TWO_PI = require( '@stdlib/constants/float32/two-pi' );
+var cosf = require( '@stdlib/math/base/special/cosf' );
+var sinf = require( '@stdlib/math/base/special/sinf' );
+var floor = require( '@stdlib/math/base/special/floor' );
+var f32 = require( '@stdlib/number/float64/base/to-float32' );
+
+
+// FUNCTIONS //
+
+/**
+* Resolves an index into the input array.
+*
+* ## Notes
+*
+* In a forward real FFT, the previous stage writes its results as `R` "rows" per sub-sequence.
+*
+* Thus, when reading from an input array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having `R` "rows" (components 0, 1, 2, ..., R-1) and where each "row" is arranged as `M*L` contiguous elements corresponding to interleaved real and imaginary components.
+*
+* Accordingly, the following is a logical view of an input array (zero-based indexing) which contains `L = 3` transforms and in which each sub-sequence has length `M = 4`:
+*
+* ```text
+* │ k = 0 k = 1 k = 2
+* │ ─────────────────────────────────────────────────────────────────────────────────────→ k
+* j = 0 │ cc(0,0,0) ... cc(3,0,0) cc(0,1,0) ... cc(3,1,0) cc(0,2,0) ... cc(3,2,0)
+* │
+* j = 1 │ cc(0,0,1) ... cc(3,0,1) cc(0,1,1) ... cc(3,1,1) cc(0,2,1) ... cc(3,2,1)
+* │
+* j = 2 │ cc(0,0,2) ... cc(3,0,2) cc(0,1,2) ... cc(3,1,2) cc(0,2,2) ... cc(3,2,2)
+* │
+* j = 3 │ cc(0,0,3) ... cc(3,0,3) cc(0,1,3) ... cc(3,1,3) cc(0,2,3) ... cc(3,2,3)
+* │
+* ... │ ... ... ...
+* │
+* j=R-1 │ cc(0,0,R-1) ... cc(3,0,R-1) cc(0,1,R-1) ... cc(3,1,R-1) cc(0,2,R-1) ... cc(3,2,R-1)
+* └──────────────────────────────────────────────────────────────────────────────────────→ i
+* ↑ ↑ ↑ ↑ ↑ ↑
+* i = 0 M-1 0 M-1 0 M-1
+* ```
+*
+* In the above,
+*
+* - `i` is the fastest varying index, which walks within one short sub-sequence corresponding to one of the R component rows.
+* - `j` selects between the R component rows (0, 1, 2, ..., R-1).
+* - `k` specifies the index of one of the `L` independent transforms we are processing.
+*
+* In linear memory, the three-dimensional logical view is arranged as follows:
+*
+* ```text
+* | cc(0,0,0)...cc(3,0,0) ... cc(0,2,0)...cc(3,2,0) | cc(0,0,1)...cc(3,0,1) ... cc(0,2,1)...cc(3,2,1) | ... | cc(0,0,R-1)...cc(3,0,R-1) ... cc(0,2,R-1)...cc(3,2,R-1) |
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* 0 M-1 LM LM-1 (L+1)M (L+1)M-1 (2L-1)M 2LM-1 (R-1)LM ((R-1)L+1)M-1 (RL-1)M RLM-1
+* ```
+*
+* @private
+* @param {NonNegativeInteger} i - index of an element within a sub-sequence
+* @param {NonNegativeInteger} k - index of the sub-sequence being transformed
+* @param {NonNegativeInteger} j - input row
+* @param {NonNegativeInteger} L - number of sub-sequences
+* @param {NonNegativeInteger} M - sub-sequence length
+* @param {integer} stride - stride length of the input array
+* @param {NonNegativeInteger} offset - index specifying the first indexed element in the input array
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var stride = 1;
+* var offset = 0;
+*
+* var M = 4; // sub-sequence length
+* var L = 3; // number of sub-sequences
+*
+* var idx = iptr( 0, 0, 0, L, M, stride, offset );
+* // returns 0
+*
+* idx = iptr( 1, 0, 0, L, M, stride, offset );
+* // returns 1
+*
+* idx = iptr( M-1, 0, 0, L, M, stride, offset );
+* // returns 3
+*
+* idx = iptr( 0, 1, 0, L, M, stride, offset );
+* // returns 4
+*
+* // ...
+*
+* idx = iptr( M-1, L-1, 6, L, M, stride, offset );
+* // returns 83
+*/
+function iptr( i, k, j, L, M, stride, offset ) {
+ var n = i + ( ( k+(j*L) ) * M );
+ return ( n*stride ) + offset;
+}
+
+/**
+* Resolves an index into the output array.
+*
+* ## Notes
+*
+* When writing to an output array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having `R` "columns" corresponding to the `R` components of a radix-R stage (with real and imaginary parts of each component interleaved along each sub-sequence) and where each "column" has `M` elements.
+*
+* Accordingly, the following is a logical view of an output array (zero-based indexing) which contains `L = 3` transforms and in which each "column" sub-sequence has length `M = 4` for an arbitrary radix `R`:
+*
+* ```text
+* j = 0 (component 0) j = 1 (component 1) j = 2 (component 2) ... j = R-1 (component R-1)
+* k = 0 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────────────┐
+* │ out(0,0,0) out(1,0,0) ... out(3,0,0) │ out(0,1,0) out(1,1,0) ... out(3,1,0) │ out(0,2,0) out(1,2,0) ... out(3,2,0) │ ... │ out(0,R-1,0) out(1,R-1,0) ... out(3,R-1,0) │
+* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────────────┤
+* k = 1 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────────────┤
+* │ out(0,0,1) out(1,0,1) ... out(3,0,1) │ out(0,1,1) out(1,1,1) ... out(3,1,1) │ out(0,2,1) out(1,2,1) ... out(3,2,1) │ ... │ out(0,R-1,1) out(1,R-1,1) ... out(3,R-1,1) │
+* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────────────┤
+* k = 2 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────────────┤
+* │ out(0,0,2) out(1,0,2) ... out(3,0,2) │ out(0,1,2) out(1,1,2) ... out(3,1,2) │ out(0,2,2) out(1,2,2) ... out(3,2,2) │ ... │ out(0,R-1,2) out(1,R-1,2) ... out(3,R-1,2) │
+* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────────────┘
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* i = 0 1 M-1 0 1 M-1 0 1 M-1 0 1 M-1
+* ```
+*
+* In the above,
+*
+* - `i` is the fastest varying index, which walks within one short "column" sub-sequence.
+* - `j` selects which of the R components we are in (0, 1, 2, ..., R-1).
+* - `k` specifies the index of one of the `L` independent transforms we are processing.
+*
+* In linear memory, the three-dimensional logical view is arranged as follows:
+*
+* ```text
+* | out(0,0,0)...out(3,0,0) | out(0,1,0)...out(3,1,0) | out(0,2,0)...out(3,2,0) | ... | out(0,R-1,0)...out(3,R-1,0) | out(0,0,1)...out(3,0,1) | ... | out(0,R-1,2)...out(3,R-1,2) |
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* 0 M-1 M 2M-1 2M 3M-1 (R-1)M RM-1 RM (R+1)M-1 (RL-1)M RLM-1
+* ```
+*
+* As may be observed, when resolving an index in the output array, the `j` and `k` dimensions are swapped relative index resolution in the input array. This stems from `radfg` being only one stage in a multi-stage driver which alternates between using `cc` and `out` as workspace buffers. After each stage, the next stage reads what the previous stage wrote.
+*
+* Each stage expects a transpose, and, in order to avoid explicit transposition between the stages, we swap the last two logical dimensions while still maintaining cache locality within the inner loop logical dimension, as indexed by `i`.
+*
+* @private
+* @param {NonNegativeInteger} i - index of an element within a sub-sequence
+* @param {NonNegativeInteger} j - index specifying which of the R complex components we are in (0, 1, ..., R-1)
+* @param {NonNegativeInteger} k - index of the sub-sequence being transformed
+* @param {NonNegativeInteger} R - radix
+* @param {NonNegativeInteger} M - sub-sequence length
+* @param {integer} stride - stride length of the output array
+* @param {NonNegativeInteger} offset - index specifying the first indexed element in the output array
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var stride = 1;
+* var offset = 0;
+*
+* var M = 4; // sub-sequence length
+* var L = 3; // number of sub-sequences
+*
+* var idx = optr( 0, 0, 0, 7, M, stride, offset );
+* // returns 0
+*
+* idx = optr( 1, 0, 0, 7, M, stride, offset );
+* // returns 1
+*
+* idx = optr( M-1, 0, 0, 7, M, stride, offset );
+* // returns 3
+*
+* idx = optr( 0, 1, 0, 7, M, stride, offset );
+* // returns 4
+*
+* // ...
+*
+* idx = optr( M-1, 6, L-1, 7, M, stride, offset );
+* // returns 83
+*/
+function optr( i, j, k, R, M, stride, offset ) {
+ var n = i + ( ( j+(k*R) ) * M );
+ return ( n*stride ) + offset;
+}
+
+/**
+* Resolves an index into a flattened workspace array.
+*
+* ## Notes
+*
+* During the general radix stage, flattened workspace arrays store `ML = M * L` elements for each of the `R` component columns. Both the flattened input and output workspace arrays share the same `[ML, R]` logical layout.
+*
+* Thus, when accessing a flattened workspace array stored in linear memory, we can reinterpret the array as a two-dimensional logical view having `R` component columns, where each column has `ML` elements.
+*
+* Accordingly, the following is a logical view of a flattened workspace array (zero-based indexing) having flattened dimension `ML` and arbitrary radix `R`:
+*
+* ```text
+* │ j = 0 j = 1 j = 2 ... j = R-1
+* │ ────────────────────────────────────────────────────────────────────────→ j
+* ik = 0 │ ws(0,0) ws(0,1) ws(0,2) ... ws(0,R-1)
+* │
+* ik = 1 │ ws(1,0) ws(1,1) ws(1,2) ... ws(1,R-1)
+* │
+* ik = 2 │ ws(2,0) ws(2,1) ws(2,2) ... ws(2,R-1)
+* │
+* ik = 3 │ ws(3,0) ws(3,1) ws(3,2) ... ws(3,R-1)
+* │
+* ... │ ... ... ... ... ...
+* │
+* ik = ML-1 │ ws(ML-1,0) ws(ML-1,1) ws(ML-1,2) ... ws(ML-1,R-1)
+* ```
+*
+* In the above,
+*
+* - `ik` is the fastest varying index, which walks along the flattened sub-sequence dimension.
+* - `j` selects between the `R` workspace component columns (0, 1, 2, ..., R-1).
+*
+* In linear memory, the two-dimensional logical view is arranged as follows:
+*
+* ```text
+* | ws(0,0)...ws(ML-1,0) | ws(0,1)...ws(ML-1,1) | ws(0,2)...ws(ML-1,2) | ... | ws(0,R-1)...ws(ML-1,R-1) |
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* 0 ML-1 ML 2ML-1 2ML 3ML-1 (R-1)ML RML-1
+* ```
+*
+* Here, the original `M` and `L` dimensions have been collapsed into the single flattened `ik` dimension. Each workspace component `j` therefore occupies one contiguous block of `ML` elements in linear memory.
+*
+* @private
+* @param {NonNegativeInteger} ik - index of an element within a flattened sub-sequence
+* @param {NonNegativeInteger} j - index specifying which of the R workspace component columns we are in (0, 1, ..., R-1)
+* @param {NonNegativeInteger} ML - flattened sub-sequence length
+* @param {integer} stride - stride length of the flattened workspace array
+* @param {NonNegativeInteger} offset - index specifying the first indexed element in the flattened workspace array
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var stride = 1;
+* var offset = 0;
+*
+* var M = 4; // sub-sequence length
+* var L = 3; // number of sub-sequences
+* var ML = M * L; // flattened dimension ( 4*3 = 12 )
+*
+* var idx = fptr( 0, 0, ML, stride, offset );
+* // returns 0
+*
+* idx = fptr( 1, 0, ML, stride, offset );
+* // returns 1
+*
+* idx = fptr( ML-1, 0, ML, stride, offset );
+* // returns 11
+*
+* idx = fptr( 0, 1, ML, stride, offset );
+* // returns 12
+*
+* // ...
+*
+* idx = fptr( ML-1, 6, ML, stride, offset );
+* // returns 83
+*/
+function fptr( ik, j, ML, stride, offset ) {
+ var n = ik + ( j*ML );
+ return ( n*stride ) + offset;
+}
+
+
+// MAIN //
+
+/**
+* Performs one general radix stage within a forward Fourier transform for a double-precision floating-point real-valued sequence.
+*
+* @private
+* @param {NonNegativeInteger} M - number of elements in each sub-sequence to be transformed
+* @param {NonNegativeInteger} R - radix of the transform
+* @param {NonNegativeInteger} L - number of sub-sequences to be transformed
+* @param {NonNegativeInteger} ML - number of elements in each flattened sub-sequence (`M*L`)
+* @param {Float32Array} cc - input array containing the sub-sequences to be transformed
+* @param {integer} sc - stride length for `cc`
+* @param {NonNegativeInteger} oc - index offset for `cc`
+* @param {Float32Array} c1 - input workspace array containing intermediate sub-sequences to be transformed
+* @param {integer} sc1 - stride length for `c1`
+* @param {NonNegativeInteger} oc1 - index offset for `c1`
+* @param {Float32Array} c2 - flattened input workspace array containing intermediate sub-sequences
+* @param {integer} sc2 - stride length for `c2`
+* @param {NonNegativeInteger} oc2 - index offset for `c2`
+* @param {Float32Array} ch - output array containing transformed sequences
+* @param {integer} sch - stride length for `ch`
+* @param {NonNegativeInteger} och - index offset for `ch`
+* @param {Float32Array} ch2 - flattened output workspace array containing intermediate sub-sequences
+* @param {integer} sch2 - stride length for `ch2`
+* @param {NonNegativeInteger} och2 - index offset for `ch2`
+* @param {Float32Array} twiddles - array of twiddle factors
+* @param {integer} stw - stride length for `twiddles`
+* @param {NonNegativeInteger} otw - index offset for `twiddles`
+* @returns {void}
+*/
+function radfg( M, R, L, ML, cc, sc, oc, c1, sc1, oc1, c2, sc2, oc2, ch, sch, och, ch2, sch2, och2, twiddles, stw, otw ) { // eslint-disable-line max-params
+ var ar1h;
+ var ar2h;
+ var idij;
+ var ic2o;
+ var ic1o;
+ var ich;
+ var icc;
+ var Rph;
+ var Rp1;
+ var ih1;
+ var ih2;
+ var ih3;
+ var ih4;
+ var ic1;
+ var ic2;
+ var ic3;
+ var ic4;
+ var it1;
+ var it2;
+ var io1;
+ var io2;
+ var io3;
+ var io4;
+ var dc2;
+ var ai1;
+ var ai2;
+ var ar1;
+ var ar2;
+ var ds2;
+ var nbd;
+ var dcp;
+ var dsp;
+ var im;
+ var ik;
+ var is;
+ var jc;
+ var lc;
+ var j2;
+ var i;
+ var j;
+ var k;
+ var l;
+
+ // Compute the basic rotation angle for the radix-R DFT matrix:
+ dcp = cosf( f32( TWO_PI/R ) ); // cos(2π/R)
+ dsp = sinf( f32( TWO_PI/R ) ); // sin(2π/R)
+
+ // Compute half the radix, rounded up, which is used as the exclusive upper bound for conjugate-symmetric component loops:
+ Rph = floor( ( R + 1 ) / 2 );
+ Rp1 = R + 1;
+
+ // Compute the number of non-DC complex harmonics in each sub-sequence:
+ nbd = floor( ( M - 1 ) / 2 );
+
+ /*
+ * First, initialize the work arrays for the general-radix butterfly.
+ *
+ * At this stage, each sub-sequence has already been split into `R` radix components. The `j = 0` component is carried in the flattened work arrays, while the remaining components `j = 1, ..., R-1` are carried in the three-dimensional work arrays.
+ *
+ * For harmonic `n = 0`, we only copy the DC terms.
+ *
+ * For harmonics `n = 1, ..., floor((M-1)/2)`, each nonzero radix component is multiplied by its stage twiddle factor and stored in `ch`.
+ */
+ if ( M === 1 ) {
+ // Copy the DC column from the flattened output workspace back to the flattened input workspace...
+ for ( ik = 0; ik < ML; ik++ ) {
+ ic2o = fptr( ik, 0, ML, sc2, oc2 );
+ ich = fptr( ik, 0, ML, sch2, och2 );
+ c2[ ic2o ] = ch2[ ich ];
+ }
+ } else {
+ // Copy the DC column into the flattened output workspace...
+ for ( ik = 0; ik < ML; ik++ ) {
+ ich = fptr( ik, 0, ML, sch2, och2 );
+ ic2o = fptr( ik, 0, ML, sc2, oc2 );
+ ch2[ ich ] = c2[ ic2o ];
+ }
+
+ // Copy the DC terms for the remaining radix components...
+ for ( j = 1; j < R; j++ ) {
+ for ( k = 0; k < L; k++ ) {
+ ih1 = optr( 0, k, j, L, M, sch, och );
+ ic1 = iptr( 0, k, j, L, M, sc1, oc1 );
+ ch[ ih1 ] = c1[ ic1 ];
+ }
+ }
+
+ // Apply twiddle factors to the non-DC harmonics of the remaining radix components...
+ if ( nbd <= L ) {
+ // Loop over harmonics before sub-sequences...
+ is = 0;
+ for ( j = 1; j < R; j++ ) {
+ idij = is;
+ for ( i = 2; i < M; i += 2 ) {
+ for ( k = 0; k < L; k++ ) {
+ // Resolve output indices in ch:
+ ih1 = optr( i-1, k, j, L, M, sch, och ); // real part
+ ih2 = optr( i, k, j, L, M, sch, och ); // imaginary part
+
+ // Resolve indices in the input workspace:
+ ic1 = iptr( i-1, k, j, L, M, sc1, oc1 ); // real part
+ ic2 = iptr( i, k, j, L, M, sc1, oc1 ); // imaginary part
+
+ // Resolve twiddle factor indices:
+ it1 = ( idij * stw ) + otw; // cos(θ)
+ it2 = ( (idij+1) * stw ) + otw; // sin(θ)
+
+ // Apply the twiddle factor:
+ ch[ ih1 ] = f32( f32( twiddles[ it1 ] * c1[ ic1 ] ) + f32( twiddles[ it2 ] * c1[ ic2 ] ) ); // Re(ch)
+ ch[ ih2 ] = f32( f32( twiddles[ it1 ] * c1[ ic2 ] ) - f32( twiddles[ it2 ] * c1[ ic1 ] ) ); // Im(ch)
+ }
+ idij += 2;
+ }
+ is += M;
+ }
+ } else {
+ // Loop over sub-sequences before harmonics...
+ is = 0;
+ for ( j = 1; j < R; j++ ) {
+ for ( k = 0; k < L; k++ ) {
+ idij = is;
+ for ( i = 2; i < M; i += 2 ) {
+ // Resolve output indices in ch:
+ ih1 = optr( i-1, k, j, L, M, sch, och ); // real part
+ ih2 = optr( i, k, j, L, M, sch, och ); // imaginary part
+
+ // Resolve indices in the input workspace:
+ ic1 = iptr( i-1, k, j, L, M, sc1, oc1 ); // real part
+ ic2 = iptr( i, k, j, L, M, sc1, oc1 ); // imaginary part
+
+ // Resolve twiddle factor indices:
+ it1 = ( idij * stw ) + otw; // cos(θ)
+ it2 = ( (idij+1) * stw ) + otw; // sin(θ)
+
+ // Apply the twiddle factor:
+ ch[ ih1 ] = f32( f32( twiddles[ it1 ] * c1[ ic1 ] ) + f32( twiddles[ it2 ] * c1[ ic2 ] ) ); // Re(ch)
+ ch[ ih2 ] = f32( f32( twiddles[ it1 ] * c1[ ic2 ] ) - f32( twiddles[ it2 ] * c1[ ic1 ] ) ); // Im(ch)
+
+ idij += 2;
+ }
+ }
+ is += M;
+ }
+ }
+
+ /*
+ * Next, combine mirrored radix components, storing their sums and differences in c1.
+ */
+ if ( nbd >= L ) {
+ // Loop over sub-sequences before harmonics...
+ for ( j = 1; j < Rph; j++ ) {
+ jc = Rp1 - j - 1; // "mirror" index
+ for ( k = 0; k < L; k++ ) {
+ for ( i = 2; i < M; i += 2 ) {
+ // Resolve ch indices for component j:
+ ih1 = optr( i-1, k, j, L, M, sch, och ); // Re(ch[j])
+ ih2 = optr( i, k, j, L, M, sch, och ); // Im(ch[j])
+
+ // Resolve ch indices for conjugate component jc:
+ ih3 = optr( i-1, k, jc, L, M, sch, och ); // Re(ch[jc])
+ ih4 = optr( i, k, jc, L, M, sch, och ); // Im(ch[jc])
+
+ // Resolve input-workspace indices for component j:
+ ic1 = iptr( i-1, k, j, L, M, sc1, oc1 ); // Re(component j)
+ ic2 = iptr( i, k, j, L, M, sc1, oc1 ); // Im(component j)
+
+ // Resolve input-workspace indices for component jc:
+ ic3 = iptr( i-1, k, jc, L, M, sc1, oc1 ); // Re(component jc)
+ ic4 = iptr( i, k, jc, L, M, sc1, oc1 ); // Im(component jc)
+
+ // Form the sum and difference combinations:
+ c1[ ic1 ] = ch[ ih1 ] + ch[ ih3 ]; // Re(j) + Re(jc)
+ c1[ ic3 ] = ch[ ih2 ] - ch[ ih4 ]; // Im(j) - Im(jc)
+ c1[ ic2 ] = ch[ ih2 ] + ch[ ih4 ]; // Im(j) + Im(jc)
+ c1[ ic4 ] = ch[ ih3 ] - ch[ ih1 ]; // Re(jc) - Re(j)
+ }
+ }
+ }
+ } else {
+ // Loop over harmonics before sub-sequences...
+ for ( j = 1; j < Rph; j++ ) {
+ jc = Rp1 - j - 1; // "mirror" index
+ for ( i = 2; i < M; i += 2 ) {
+ for ( k = 0; k < L; k++ ) {
+ // Resolve ch indices for component j:
+ ih1 = optr( i-1, k, j, L, M, sch, och ); // Re(ch[j])
+ ih2 = optr( i, k, j, L, M, sch, och ); // Im(ch[j])
+
+ // Resolve ch indices for conjugate component jc:
+ ih3 = optr( i-1, k, jc, L, M, sch, och ); // Re(ch[jc])
+ ih4 = optr( i, k, jc, L, M, sch, och ); // Im(ch[jc])
+
+ // Resolve input-workspace indices for component j:
+ ic1 = iptr( i-1, k, j, L, M, sc1, oc1 ); // Re(component j)
+ ic2 = iptr( i, k, j, L, M, sc1, oc1 ); // Im(component j)
+
+ // Resolve input-workspace indices for component jc:
+ ic3 = iptr( i-1, k, jc, L, M, sc1, oc1 ); // Re(component jc)
+ ic4 = iptr( i, k, jc, L, M, sc1, oc1 ); // Im(component jc)
+
+ // Form the sum and difference combinations:
+ c1[ ic1 ] = ch[ ih1 ] + ch[ ih3 ]; // Re(j) + Re(jc)
+ c1[ ic3 ] = ch[ ih2 ] - ch[ ih4 ]; // Im(j) - Im(jc)
+ c1[ ic2 ] = ch[ ih2 ] + ch[ ih4 ]; // Im(j) + Im(jc)
+ c1[ ic4 ] = ch[ ih3 ] - ch[ ih1 ]; // Re(jc) - Re(j)
+ }
+ }
+ }
+ }
+ }
+
+ // Combine the DC terms for each conjugate-symmetric component pair...
+ for ( j = 1; j < Rph; j++ ) {
+ jc = Rp1 - j - 1; // "mirror" index
+ for ( k = 0; k < L; k++ ) {
+ ih1 = optr( 0, k, j, L, M, sch, och );
+ ih2 = optr( 0, k, jc, L, M, sch, och );
+
+ ic1 = iptr( 0, k, j, L, M, sc1, oc1 );
+ ic2 = iptr( 0, k, jc, L, M, sc1, oc1 );
+
+ c1[ ic1 ] = ch[ ih1 ] + ch[ ih2 ];
+ c1[ ic2 ] = ch[ ih2 ] - ch[ ih1 ];
+ }
+ }
+
+ /*
+ * Next, apply the radix-`R` DFT matrix.
+ *
+ * For each mirrored output pair, accumulate the contributions of the radix components in the flattened work array.
+ *
+ * The required rotation factors are generated recursively from the previous ones:
+ *
+ * W_l = W_{l-1} ⋅ W_1
+ * W_{lj} = W_{l(j-1)} ⋅ W_l
+ *
+ * Here, `W_1` is the basic radix-`R` rotation, `W_{l-1}` and `W_l` are the previous and current outer factors, and `W_{l(j-1)}` and `W_{lj}` are the previous and current inner factors.
+ */
+ ar1 = 1.0; // Re(W_0)
+ ai1 = 0.0; // Im(W_0)
+ for ( l = 1; l < Rph; l++ ) {
+ lc = Rp1 - l - 1; // "mirror" index
+
+ // Advance the rotation factor by one step: W_l = W_{l-1} ⋅ W_1
+ ar1h = f32( f32( dcp * ar1 ) - f32( dsp * ai1 ) ); // Re(W_l)
+ ai1 = f32( f32( dcp * ai1 ) + f32( dsp * ar1 ) ); // Im(W_l)
+ ar1 = ar1h;
+
+ // Accumulate the contributions from components 1 and R-1:
+ for ( ik = 0; ik < ML; ik++ ) {
+ ich = fptr( ik, l, ML, sch2, och2 );
+ ic1o = fptr( ik, lc, ML, sch2, och2 );
+
+ ic2o = fptr( ik, 0, ML, sc2, oc2 );
+ ic1 = fptr( ik, 1, ML, sc2, oc2 );
+ ic2 = fptr( ik, R-1, ML, sc2, oc2 );
+
+ ch2[ ich ] = c2[ ic2o ] + f32( ar1 * c2[ ic1 ] );
+ ch2[ ic1o ] = ai1 * c2[ ic2 ];
+ }
+
+ // Save W_l for the inner recurrence:
+ dc2 = ar1;
+ ds2 = ai1;
+
+ // Initialize W_{l·1}:
+ ar2 = ar1;
+ ai2 = ai1;
+
+ // Accumulate the remaining component pairs:
+ for ( j = 2; j < Rph; j++ ) {
+ jc = Rp1 - j - 1; // "mirror" index
+
+ // Advance the nested rotation factor by one step: W_{l*j} = W_{l*(j-1)} ⋅ W_l
+ ar2h = f32( f32( dc2 * ar2 ) - f32( ds2 * ai2 ) ); // Re(W_{l*j})
+ ai2 = f32( f32( dc2 * ai2 ) + f32( ds2 * ar2 ) ); // Im(W_{l*j})
+ ar2 = ar2h;
+
+ // Accumulate the contributions from components j and jc:
+ for ( ik = 0; ik < ML; ik++ ) {
+ ich = fptr( ik, l, ML, sch2, och2 );
+ ic1o = fptr( ik, lc, ML, sch2, och2 );
+
+ ic1 = fptr( ik, j, ML, sc2, oc2 );
+ ic2 = fptr( ik, jc, ML, sc2, oc2 );
+
+ ch2[ ich ] += f32( ar2 * c2[ ic1 ] );
+ ch2[ ic1o ] += f32( ai2 * c2[ ic2 ] );
+ }
+ }
+ }
+
+ // Accumulate the nonzero radix components into the DC output...
+ for ( j = 1; j < Rph; j++ ) {
+ for ( ik = 0; ik < ML; ik++ ) {
+ ich = fptr( ik, 0, ML, sch2, och2 );
+ ic1 = fptr( ik, j, ML, sc2, oc2 );
+ ch2[ ich ] += c2[ ic1 ];
+ }
+ }
+
+ // Copy the first output column from ch to cc...
+ if ( M >= L ) {
+ for ( k = 0; k < L; k++ ) {
+ for ( i = 0; i < M; i++ ) {
+ icc = optr( i, 0, k, R, M, sc, oc );
+ ih1 = optr( i, k, 0, L, M, sch, och );
+ cc[ icc ] = ch[ ih1 ];
+ }
+ }
+ } else {
+ for ( i = 0; i < M; i++ ) {
+ for ( k = 0; k < L; k++ ) {
+ icc = optr( i, 0, k, R, M, sc, oc );
+ ih1 = optr( i, k, 0, L, M, sch, och );
+ cc[ icc ] = ch[ ih1 ];
+ }
+ }
+ }
+
+ /*
+ * `cc` is stored in output order, where the component index comes before the sub-sequence index. Accordingly, writes to `cc` use `optr`, not `iptr`.
+ */
+ // Store DC harmonics for conjugate pairs in the output array...
+ for ( j = 1; j < Rph; j++ ) {
+ jc = Rp1 - j - 1; // "mirror" index
+ j2 = 2 * j; // output column index
+ for ( k = 0; k < L; k++ ) {
+ io1 = optr( M-1, j2-1, k, R, M, sc, oc );
+ io2 = optr( 0, j2, k, R, M, sc, oc );
+
+ ih1 = optr( 0, k, j, L, M, sch, och );
+ ih2 = optr( 0, k, jc, L, M, sch, och );
+
+ cc[ io1 ] = ch[ ih1 ];
+ cc[ io2 ] = ch[ ih2 ];
+ }
+ }
+
+ // When M = 1, there are no non-DC harmonics to process, so we're done...
+ if ( M === 1 ) {
+ return;
+ }
+
+ /*
+ * Finally, store the non-DC harmonics in folded format.
+ *
+ * For each mirror pair, write the non-DC harmonics from `ch` to the two output columns as the required sum and difference combinations.
+ */
+ if ( nbd >= L ) {
+ // Loop over sub-sequences before harmonics...
+ for ( j = 1; j < Rph; j++ ) {
+ jc = Rp1 - j - 1; // "mirror" index
+ j2 = 2 * j; // output column index
+ for ( k = 0; k < L; k++ ) {
+ for ( i = 2; i < M; i += 2 ) {
+ im = M - i; // "mirror" harmonic index
+
+ // Resolve ch indices for component j:
+ ih1 = optr( i-1, k, j, L, M, sch, och ); // Re(ch[j])
+ ih2 = optr( i, k, j, L, M, sch, och ); // Im(ch[j])
+
+ // Resolve ch indices for conjugate component jc:
+ ih3 = optr( i-1, k, jc, L, M, sch, och ); // Re(ch[jc])
+ ih4 = optr( i, k, jc, L, M, sch, och ); // Im(ch[jc])
+
+ // Resolve cc output indices:
+ io1 = optr( i-1, j2, k, R, M, sc, oc );
+ io2 = optr( im-1, j2-1, k, R, M, sc, oc );
+ io3 = optr( i, j2, k, R, M, sc, oc );
+ io4 = optr( im, j2-1, k, R, M, sc, oc );
+
+ // Store the sum and difference combinations:
+ cc[ io1 ] = ch[ ih1 ] + ch[ ih3 ];
+ cc[ io2 ] = ch[ ih1 ] - ch[ ih3 ];
+ cc[ io3 ] = ch[ ih2 ] + ch[ ih4 ];
+ cc[ io4 ] = ch[ ih4 ] - ch[ ih2 ];
+ }
+ }
+ }
+ } else {
+ // Loop over harmonics before sub-sequences...
+ for ( j = 1; j < Rph; j++ ) {
+ jc = Rp1 - j - 1; // "mirror" index
+ j2 = 2 * j; // output column index
+ for ( i = 2; i < M; i += 2 ) {
+ im = M - i; // "mirror" harmonic index
+ for ( k = 0; k < L; k++ ) {
+ // Resolve ch indices for component j:
+ ih1 = optr( i-1, k, j, L, M, sch, och ); // Re(ch[j])
+ ih2 = optr( i, k, j, L, M, sch, och ); // Im(ch[j])
+
+ // Resolve ch indices for conjugate component jc:
+ ih3 = optr( i-1, k, jc, L, M, sch, och ); // Re(ch[jc])
+ ih4 = optr( i, k, jc, L, M, sch, och ); // Im(ch[jc])
+
+ // Resolve cc output indices:
+ io1 = optr( i-1, j2, k, R, M, sc, oc );
+ io2 = optr( im-1, j2-1, k, R, M, sc, oc );
+ io3 = optr( i, j2, k, R, M, sc, oc );
+ io4 = optr( im, j2-1, k, R, M, sc, oc );
+
+ // Store the sum and difference combinations:
+ cc[ io1 ] = ch[ ih1 ] + ch[ ih3 ];
+ cc[ io2 ] = ch[ ih1 ] - ch[ ih3 ];
+ cc[ io3 ] = ch[ ih2 ] + ch[ ih4 ];
+ cc[ io4 ] = ch[ ih4 ] - ch[ ih2 ];
+ }
+ }
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = radfg;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/rfftf1.js b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/rfftf1.js
new file mode 100644
index 000000000000..a7ec8b7b4962
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/lib/rfftf1.js
@@ -0,0 +1,181 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var floor = require( '@stdlib/math/base/special/floor' );
+var scopy = require( '@stdlib/blas/base/scopy' ).ndarray;
+var radf2 = require( './radf2.js' );
+var radf3 = require( './radf3.js' );
+var radf4 = require( './radf4.js' );
+var radf5 = require( './radf5.js' );
+var radfg = require( './radfg.js' );
+
+
+// MAIN //
+
+/**
+* Performs the forward Fourier transform.
+*
+* @private
+* @param {NonNegativeInteger} N - length of the sequence to transform
+* @param {Float32Array} c - input array containing the sequence to be transformed
+* @param {integer} sc - stride length for `c`
+* @param {NonNegativeInteger} oc - starting index for `c`
+* @param {Float32Array} ch - working array for intermediate results
+* @param {integer} sch - stride length for `ch`
+* @param {NonNegativeInteger} och - starting index for `ch`
+* @param {Float32Array} wa - workspace array for storing twiddle factors
+* @param {integer} swa - stride length for `wa`
+* @param {NonNegativeInteger} owa - starting index for `wa`
+* @param {Uint32Array} ifac - workspace array for storing factorization results
+* @param {integer} si - stride length for `ifac`
+* @param {NonNegativeInteger} oi - starting index for `ifac`
+* @returns {void}
+*/
+function rfftf1( N, c, sc, oc, ch, sch, och, wa, swa, owa, ifac, si, oi ) { // eslint-disable-line max-params
+ var factor;
+ var idl1;
+ var FLG;
+ var ido;
+ var ix4;
+ var ix3;
+ var ix2;
+ var nf;
+ var l2;
+ var l1;
+ var kh;
+ var iw;
+ var k1;
+
+ // Resolve the number of factors:
+ nf = ifac[ oi+si ];
+
+ FLG = 1; // flag to track whether the latest stage output resides in `c` or `ch`
+ l2 = N;
+
+ // Initialize an index offset to the last element in each workspace:
+ iw = N - 1;
+
+ for ( k1 = 1; k1 <= nf; k1++ ) {
+ kh = nf - k1;
+
+ // Resolve the next factor:
+ factor = ifac[ oi+((kh+2)*si) ];
+
+ // Compute a sub-transform length:
+ l1 = floor( l2 / factor );
+
+ ido = floor( N / l2 );
+ idl1 = ido * l1;
+
+ // Adjust the index offset
+ iw -= ( ( factor - 1 ) * ido );
+
+ // Toggle the flag to swap the input and output work buffers for the next stage:
+ FLG = 1 - FLG;
+
+ switch ( factor ) {
+ case 4:
+ ix2 = iw + ido;
+ ix3 = ix2 + ido;
+ radf4( ido, l1, ( FLG ) ? ch : c, ( FLG ) ? sch : sc, ( FLG ) ? och : oc, ( FLG ) ? c : ch, ( FLG ) ? sc : sch, ( FLG ) ? oc : och, wa, swa, owa+(iw*swa), wa, swa, owa+(ix2*swa), wa, swa, owa+(ix3*swa) );
+ break;
+ case 2:
+ radf2( ido, l1, ( FLG ) ? ch : c, ( FLG ) ? sch : sc, ( FLG ) ? och : oc, ( FLG ) ? c : ch, ( FLG ) ? sc : sch, ( FLG ) ? oc : och, wa, swa, owa+(iw*swa) );
+ break;
+ case 3:
+ ix2 = iw + ido;
+ radf3( ido, l1, ( FLG ) ? ch : c, ( FLG ) ? sch : sc, ( FLG ) ? och : oc, ( FLG ) ? c : ch, ( FLG ) ? sc : sch, ( FLG ) ? oc : och, wa, swa, owa+(iw*swa), wa, swa, owa+(ix2*swa) );
+ break;
+ case 5:
+ ix2 = iw + ido;
+ ix3 = ix2 + ido;
+ ix4 = ix3 + ido;
+ radf5( ido, l1, ( FLG ) ? ch : c, ( FLG ) ? sch : sc, ( FLG ) ? och : oc, ( FLG ) ? c : ch, ( FLG ) ? sc : sch, ( FLG ) ? oc : och, wa, swa, owa+(iw*swa), wa, swa, owa+(ix2*swa ), wa, swa, owa+(ix3*swa), wa, swa, owa+(ix4*swa) );
+ break;
+ default:
+ if ( ido === 1 ) {
+ FLG = 1 - FLG;
+ }
+ if ( FLG === 0 ) {
+ radfg( ido, factor, l1, idl1, c, sc, oc, c, sc, oc, c, sc, oc, ch, sch, och, ch, sch, och, wa, swa, owa+(iw*swa) );
+ FLG = 1;
+ } else {
+ radfg( ido, factor, l1, idl1, ch, sch, och, ch, sch, och, ch, sch, och, c, sc, oc, c, sc, oc, wa, swa, owa+(iw*swa) );
+ FLG = 0;
+ }
+ break;
+ }
+ l2 = l1;
+ }
+ if ( FLG === 1 ) {
+ return;
+ }
+ // Now that we've finished computing the transforms, copy over the final results to the input array...
+ scopy( N, ch, sch, och, c, sc, oc );
+}
+
+
+// EXPORTS //
+
+module.exports = rfftf1;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/package.json
new file mode 100644
index 000000000000..fd660db7341d
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/package.json
@@ -0,0 +1,64 @@
+{
+ "name": "@stdlib/fft/base/fftpack/float32/rfftf",
+ "version": "0.0.0",
+ "description": "Compute the forward discrete Fourier transform (DFT) of a real-valued single-precision floating-point sequence.",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "fft",
+ "fftpack",
+ "rfftf",
+ "fourier",
+ "transform",
+ "forward",
+ "real",
+ "single",
+ "float32"
+ ],
+ "__stdlib__": {}
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/test/fixtures/c/fftpack/Makefile b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/test/fixtures/c/fftpack/Makefile
new file mode 100644
index 000000000000..1a97f580df4a
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/test/fixtures/c/fftpack/Makefile
@@ -0,0 +1,138 @@
+#/
+# @license Apache-2.0
+#
+# Copyright (c) 2026 The Stdlib Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#/
+
+# VARIABLES #
+
+ifndef VERBOSE
+ QUIET := @
+endif
+
+# Specify the path to FFTPACK:
+FFTPACK ?=
+
+# Specify a list of FFTPACK source files:
+FFTPACK_SRC ?=
+
+# Determine the OS:
+#
+# [1]: https://en.wikipedia.org/wiki/Uname#Examples
+# [2]: http://stackoverflow.com/a/27776822/2225624
+OS ?= $(shell uname)
+ifneq (, $(findstring MINGW,$(OS)))
+ OS := WINNT
+else
+ifneq (, $(findstring MSYS,$(OS)))
+ OS := WINNT
+else
+ifneq (, $(findstring CYGWIN,$(OS)))
+ OS := WINNT
+endif
+endif
+endif
+
+# Define the program used for compiling C source files:
+ifdef C_COMPILER
+ CC := $(C_COMPILER)
+else
+ CC := gcc
+endif
+
+# Define the command-line options when compiling C files:
+CFLAGS ?= \
+ -std=c99 \
+ -O3 \
+ -ffp-contract=off \
+ -Wall \
+ -pedantic
+
+# Determine whether to generate [position independent code][1]:
+#
+# [1]: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options
+# [2]: http://stackoverflow.com/questions/5311515/gcc-fpic-option
+ifeq ($(OS), WINNT)
+ fPIC ?=
+else
+ fPIC ?= -fPIC
+endif
+
+# List of C targets:
+c_targets := runner.out
+
+
+# RULES #
+
+#/
+# Compiles C source files.
+#
+# @param {string} [C_COMPILER] - C compiler
+# @param {string} [CFLAGS] - C compiler flags
+# @param {(string|void)} [fPIC] - flag indicating whether to generate position independent code
+#
+# @example
+# make
+#
+# @example
+# make all
+#/
+all: $(c_targets)
+
+.PHONY: all
+
+#/
+# Compiles C source files.
+#
+# @private
+# @param {string} CC - C compiler
+# @param {string} CFLAGS - C compiler flags
+# @param {(string|void)} fPIC - flag indicating whether to generate position independent code
+#/
+$(c_targets): %.out: %.c
+ $(QUIET) $(CC) $(CFLAGS) $(fPIC) -o $@ $(FFTPACK_SRC) $< -lm
+
+#/
+# Generates test fixtures.
+#
+# @example
+# make run
+#/
+run: $(c_targets)
+ $(QUIET) ./$<
+
+.PHONY: run
+
+#/
+# Removes generated files.
+#
+# @example
+# make clean
+#/
+clean:
+ $(QUIET) -rm -f *.o *.out
+
+.PHONY: clean
+
+#/
+# Removes generated test fixtures.
+#
+# @example
+# make clean-fixtures
+#/
+clean-fixtures:
+ $(QUIET) -rm -f *.json
+
+.PHONY: clean-fixtures
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/test/fixtures/c/fftpack/large.json b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/test/fixtures/c/fftpack/large.json
new file mode 100644
index 000000000000..76286e55408c
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/test/fixtures/c/fftpack/large.json
@@ -0,0 +1 @@
+{"lengths":[763,151,719,623,823,892,412,835,752,826],"offsets":[0,763,914,1633,2256,3079,3971,4383,5218,5970],"input":[7.10007286,-9.06502819,4.07627964,-9.97589779,-4.90618801,1.69882584,-7.85054636,-4.13362598,6.140522,3.75944328,4.98061562,9.20886993,-6.51832819,6.4570446,3.55112457,3.74820232,-3.96938276,6.58955383,-9.35469913,-4.42894888,2.65776443,9.04207039,-9.90704823,-7.76497078,-5.86374712,8.00450516,-8.28853321,-5.38050842,9.79275131,6.75931358,3.78139877,-6.04113579,6.6305294,-0.68867588,5.42464447,-8.00211525,8.44641685,-1.07474995,-3.32403564,-7.06740093,-1.80951214,7.52210426,3.9997282,3.43739891,-7.63665628,-9.2795229,-0.936608315,-1.57853222,9.61147308,0.0237283707,-1.19491005,-2.86008167,-9.3950901,-3.27413082,-8.3177557,3.48445415,3.22014904,1.04292488,8.44068909,2.67436981,8.12679863,7.11075401,-9.55394363,6.86158371,2.61769295,-4.42529917,3.99317646,-6.68149471,4.11509991,2.49191666,1.63119698,-4.47305775,1.3096323,-9.0171175,9.31122017,-6.32134008,-2.767272,-9.54491138,-1.3326807,1.63297081,5.32772064,3.00705719,-0.407582283,9.76455116,-7.20075655,-3.11512375,4.12203312,-0.99567318,5.72933102,-7.14468956,-0.792402267,2.08899593,9.7515564,-5.59261703,4.89110088,4.73620319,1.36005402,-1.57910538,-0.0346841812,-2.93091345,0.133377075,1.67932034,4.32945442,5.14953613,8.25186729,9.14361954,-3.18597269,-6.64517975,-5.53985786,-8.39253139,6.71840858,-3.70691299,-2.08836937,0.77929306,-2.42116928,7.40623093,-3.46469164,8.92391968,4.30186176,1.38847733,-3.86065722,-6.06154013,3.69374275,0.725932121,0.744064331,5.47924805,9.70542145,-0.976376534,-9.96267605,-2.6949029,6.76396942,2.04462147,3.94802856,-5.48383951,-6.88844919,5.83273125,-9.27638531,-8.21411514,5.36205101,-0.0234537125,5.81043339,-4.04473829,0.0778007507,7.60293198,2.4683466,5.50609112,0.871816635,-7.36479902,-0.178312302,3.11408234,-1.61161995,-6.49949074,3.05716038,1.69487953,5.84695816,9.81731606,-0.355410576,6.60983086,-8.56922436,-2.9507618,6.54737854,1.81244659,1.77572632,4.63551712,9.15078926,-2.70136595,-1.85805225,-8.28626251,-7.20660973,-1.49180222,7.27885246,-4.33513212,-0.563934326,1.95776367,4.13137245,-4.03235865,8.14699364,6.51565742,8.65841293,1.97236252,9.50479698,7.11679649,-8.00680256,9.66274071,1.6731739,1.03640747,-1.10140038,8.76111221,8.01048279,-7.80671787,-7.50307274,-4.14822578,0.765062332,-1.58953571,4.67702866,6.81275368,1.94743061,-9.5363884,1.92572117,5.59906006,3.39626503,1.03885841,0.11100769,5.70742798,4.74031067,-9.59603024,-0.473618507,-0.106492043,-9.81309032,-8.60886192,-9.13726139,-9.94808578,2.52715969,-6.02769756,-7.51610661,-3.19844055,3.81254959,-2.49506855,5.38365746,3.12430573,-9.78931808,-9.0680151,-6.12987995,-4.88683605,6.951931,1.10253525,-9.678545,-7.31392097,-5.07249355,6.60073471,-1.46282578,-5.71859026,7.65457344,-9.56977081,0.855813026,3.65916824,-0.358192444,-0.150691032,7.34644508,-8.29349327,-8.74182892,-3.91161013,-2.43319511,5.28523636,8.97232628,-2.10917425,-8.89114571,6.51127625,-4.98145962,-3.38383389,7.90719795,-3.70449781,-1.49706078,-1.11325836,9.47028923,7.14245033,3.15680122,-3.63537407,0.262966156,-0.334779739,-6.63771343,-0.0506010056,9.54860306,3.35133553,5.89236832,-6.96094465,7.40634727,-1.51764774,-7.10514688,3.79391766,4.36829662,-2.02733326,6.60483551,7.45336342,8.69019508,-3.89609241,-1.62210083,-2.64774036,-0.571333885,-2.40387011,-1.84524632,6.94953728,0.858718872,-7.50820065,9.67092705,-0.742854118,-5.1554184,-7.11565971,7.10126495,-9.02873993,-6.03229523,-4.79054546,5.2965498,-0.896676064,9.56237221,-5.21165562,7.70217705,-9.51197338,-7.73648643,-7.1225481,-8.66419697,0.839626312,-8.38871384,-9.11992073,1.49557495,-3.87226963,-1.22817993,-2.021451,5.47003555,-5.11471939,-3.08613396,-8.66159344,4.60640526,-0.139103889,2.07496548,-6.06368017,7.72813225,6.71278763,1.82223511,6.31700134,9.83192825,5.22040367,-0.673812866,-4.7693882,0.88873291,-3.07710123,3.16104889,7.74330521,1.72141171,-8.22687054,-9.0125351,6.3294239,-1.36351395,3.42370415,2.1923275,6.46327782,8.33133888,4.80964184,-4.35530281,0.420759201,-8.30350113,3.05353069,0.684104919,-2.24202394,-1.69606781,-5.80482531,-1.70010471,6.33538818,-1.13824654,9.49244308,-0.491109848,5.91770363,-1.14963722,-1.95432281,-6.29559898,9.87144661,9.39928246,-6.25176191,6.63864899,-4.2396841,3.62278175,8.09980011,-6.65556145,-0.0187425613,4.98918533,-6.76511765,-1.32597733,-5.7044096,5.98786736,-1.9225626,7.49048996,-7.3334198,7.21582603,-3.63311577,-1.77382183,7.38341141,-7.01344872,4.97131729,-7.06822777,4.29727364,4.27134705,8.54387474,-3.10378933,-5.3811655,-1.24790859,6.4015789,-8.64662266,-3.78223991,-8.11128807,-6.41282892,-0.415449142,-2.45820141,5.00670338,7.65694618,-9.70475101,-7.74347734,-4.6232729,-3.35421753,5.67117119,-4.62533903,1.92722511,-9.11081028,-5.39512825,4.07700062,2.14730453,9.75840187,9.45501137,-9.62319469,2.97246933,-1.70067215,-3.189147,0.00433921814,-7.07256079,-8.52865791,-1.15488148,9.899786,5.68863773,8.92126656,-0.268527985,6.83878136,-0.610025406,7.30216789,7.55340385,-9.9442873,6.35918427,-1.19684601,4.60382366,-3.54947042,4.05622673,-6.99219275,2.21439457,-2.66762161,5.2826128,4.88513565,4.48416901,5.43207741,-3.06586981,-8.07255936,4.48611069,-1.94307518,2.72702789,-6.83856392,4.25304413,0.907455444,-8.38802814,2.40769482,6.13448715,2.3188982,-6.27586746,1.49787807,-5.1652379,7.84139442,-9.66736507,0.600491524,-7.53330517,7.74087143,0.837711334,-0.586084366,9.68116951,-8.57572269,7.83100319,-4.33220434,8.6443634,5.80071354,-7.40532684,-1.3278904,2.15222263,-7.6003046,1.68286324,3.87967205,5.65649414,8.70002365,1.3054142,0.102117538,-3.71314478,-6.8186512,-1.07105827,-1.27329254,-0.237131119,-5.46091509,-1.59895134,6.42017174,3.82946587,1.83943176,-4.68100977,6.27335358,-3.72849703,-4.84731483,-8.82364082,1.07451344,-0.647533417,-3.09856987,2.33271122,5.88194942,-2.06202555,3.53390694,-5.62428808,-7.40969944,5.18250275,2.321558,-1.57571602,-3.05589771,-0.479627609,-1.10312653,-0.246230125,1.6140213,6.85131264,9.99397087,8.67371941,-0.804776192,-5.87328815,7.64501572,9.78601646,-6.41436863,-6.29631329,-2.13905621,8.87884331,6.70869064,-7.02680397,0.502438545,4.47625923,-7.50913477,-6.02736187,-1.86906719,6.5772171,3.27672482,-8.07888031,-1.7438612,-9.06439114,-5.21693468,-1.02020645,-6.6012125,-6.57469845,-0.959076881,0.791637421,5.05728817,-2.15329123,9.63565636,6.47823334,-0.336238861,8.83068848,-2.6167798,-0.221712112,-6.31417608,-2.35795498,9.84869385,6.997715,-9.39537716,-8.10331345,7.60544968,4.7764473,-2.25725269,2.34675217,1.86435795,-5.73561954,1.44190311,-5.9435029,7.54154396,-9.26031208,1.93947315,-3.28246498,-8.38190365,5.35121727,-2.09219503,-3.52403545,-8.45762253,-7.26620007,-3.0246067,5.43720341,3.07678604,-8.4690485,0.698020935,-8.36303139,2.53439808,-4.38322306,-8.82877541,-5.23609543,-3.05197811,5.39930439,6.12083626,-7.11033344,-3.38150549,7.03826332,-7.91756105,9.55338097,3.68134594,-7.61937428,1.17817116,1.53341293,-7.93750477,-5.6374917,-9.32436466,5.39952755,9.86810303,-6.81737089,0.446762085,8.72142792,1.03571129,7.21179581,8.64358902,-7.19293785,8.29728699,-7.50801086,-7.14280224,-9.07854557,-3.11664629,-1.47395134,7.29896164,-6.36480236,6.77185822,-5.38701439,0.44929409,-8.72488117,0.928159714,-0.418259621,-9.68611336,5.48566437,-2.43562698,4.4201622,9.67304802,-5.0748024,7.79102135,3.69181728,8.38549614,-4.96561289,2.94265938,-2.71571732,-3.06550074,-1.87078857,-2.33980894,-5.17366219,6.26456833,8.57570648,-8.10852623,0.00223636627,-2.40908718,-9.5343914,-4.52091169,-2.9648571,9.6456871,-4.94255543,-9.53341389,-8.08976269,-4.64016199,-7.20457745,-7.33658791,-6.02915668,7.96356583,3.64979553,2.11389923,8.29561043,4.31815529,-4.76482773,-2.45370293,0.619447708,-8.94122219,4.88246536,-0.396927834,8.83219147,2.65347004,-3.1190877,-2.51355362,-5.29299307,0.670885086,-4.44391727,-8.91586685,-8.97360611,0.598398209,-2.71956539,-7.73932934,5.09386826,-7.36819363,2.76917839,1.57683277,1.82274914,-5.05818367,7.10521889,-2.60243034,0.944568634,-4.61841536,-1.70875072,1.03085995,5.65633202,5.96846485,-8.01340294,-1.26743507,-1.78218842,6.76014709,-2.20627022,-0.785243988,2.39938736,6.50751877,-8.11349297,-3.4749136,-2.87271261,-1.68566895,8.96097374,7.0934906,0.310025215,-9.40534592,4.35540771,1.3440876,-9.92527199,5.94662476,4.92064381,1.25406075,-3.00741577,-5.63421822,5.69375896,-4.99587154,-5.61371899,-9.7739706,8.88301086,-3.23215532,-2.83943892,-2.44697523,-6.31080437,-5.68533707,6.54170799,6.48100662,6.28591156,7.32692528,3.62385559,6.13316345,0.0851230621,-9.3474474,-2.5498395,4.84798336,0.0519762039,-6.44062042,-7.50881958,-0.730162621,8.16745949,-9.51650906,-3.96798372,-9.90191078,-1.40818596,-7.38635206,-2.42196941,-6.04087925,-9.06152344,2.97142982,0.818193436,-8.62349892,4.84457779,2.81977272,-8.08548641,7.22735214,-9.89588356,-0.120254517,-1.11673737,-9.01476002,8.92845726,0.592995644,6.48578453,6.59588623,-2.92155552,-2.58665323,6.1158905,9.78113747,-8.41530895,3.89766121,7.98553848,-7.05138779,7.32336044,3.71925926,9.59515762,5.82797813,-9.18721581,-9.53843975,7.44399071,-8.84945297,7.24352646,1.9416256,-7.09427261,6.56593513,-6.31159163,1.07980251,8.24969101,-7.45514393,1.39382172,5.96242714,-9.49777699,-9.13553143,-0.882985115,-0.327501297,-4.31844902,-0.17517662,-4.19817352,1.30118275,8.97795105,-7.5627203,-6.64148235,-3.39394665,-2.06275845,-8.77227592,4.3576355,-1.21831894,3.71506596,-0.882548332,6.99970245,3.9895668,-7.36043167,-6.77166414,8.64419174,2.94737625,-3.45212841,0.0837440491,7.4871254,-3.87971973,-6.45728874,-7.64650679,5.15801811,-9.18361568,-9.0305872,2.91470623,7.46592712,-0.164536476,-5.37111425,7.68380356,1.66638279,6.89663696,-8.20368004,0.742219925,-5.51348829,-5.19713688,-8.27648163,-2.8310976,-2.26574469,-0.372256279,3.48262691,-7.48535872,-6.42280865,-8.14409065,2.26578808,1.11356926,-4.22333431,-1.57852268,9.76330376,-8.1431818,-2.45166016,-5.04752254,6.28931618,4.53408337,4.3477993,-6.54003859,1.57042313,-5.91489363,8.38099289,-0.648013115,8.85451317,-2.19030142,7.60177612,3.04533386,2.91574478,4.9195137,2.25680161,-9.94208717,3.34300518,5.88253593,7.77806854,5.9949398,-3.05269241,-6.59883213,-6.56989908,-0.29347229,7.6202507,-6.44737959,-1.10856915,8.27494049,-3.08420181,3.81862164,-0.419021606,-2.49146271,5.98746109,-8.75169563,-9.75268745,6.57453918,-1.71628857,-5.66913652,-1.18062782,-2.80780554,9.21190643,4.51351261,-1.39536762,8.05449677,-8.06659126,4.80216408,9.96400642,5.06532764,-7.04260874,-5.12797832,-5.92994642,-4.61077595,6.68909836,3.67557907,-4.54880142,8.30277443,4.73013306,-0.648373604,2.78250313,5.5321455,-1.23139572,3.92698193,0.782270432,7.62439346,3.16175652,-0.344021797,-1.98049927,-6.25385094,-8.47373104,1.9968338,0.793180466,-9.02506351,-4.24483204,-2.891469,3.0821085,0.991830826,9.6929493,9.39338303,-5.40262508,-1.9225359,7.94238472,7.65846634,-4.13287163,-1.17449856,0.206466675,-9.91317081,9.34269142,2.6200695,-4.49375439,-6.53491497,7.68130112,-0.354803085,-3.16470432,-9.18750381,5.62689877,-8.70925713,3.51881409,0.711031914,-9.6916132,-6.94203472,5.22471523,-8.20178986,-7.48193836,-8.93984795,7.97150803,-2.87585974,5.42951965,-6.07333422,5.47403526,2.11958408,3.8519783,0.204000473,8.64072609,4.67802143,3.51532078,2.00261879,-1.99407864,5.51826477,5.47111034,-7.04582405,0.836107254,-7.54213476,-0.661020279,-9.76274586,-2.47237587,6.78266716,-3.7227397,-8.08912945,6.00495148,5.23334312,-3.20155096,-8.46571922,-3.35079575,3.17667103,-9.68091106,-7.07109451,-3.88248205,7.12451553,1.73201561,9.99208069,-3.11605406,8.48432159,-4.01940584,5.84715843,-6.80028296,7.64587021,4.11797714,-9.15520954,8.39390182,-3.67147255,-6.4453187,-6.47093773,2.95619202,4.72655678,-0.773516655,-0.490371704,-1.68297958,-5.831882,3.55763054,-6.8915925,-6.99432182,6.43818283,6.53370667,-7.99041748,5.05608177,-2.42217922,-9.55883217,4.70270634,-1.62089729,-2.41610622,-7.4967165,2.69032383,-3.73521614,2.22428131,3.4929285,5.64739132,-4.30408573,1.22401714,-7.9378376,8.76477623,9.58804321,6.24888229,4.94774437,-3.25625801,-7.92166758,0.530126572,9.83561897,7.25048447,-1.10330391,-3.21884155,0.931328773,-7.16216469,5.50086403,-6.97839499,-5.88292694,5.64058113,1.24825478,-0.574848175,-1.47010517,-8.05538559,-6.8654952,-8.37891769,-4.47032928,7.17497253,9.77500534,8.51719856,8.56577873,5.04016876,-9.88772202,-2.94560194,-6.73488331,6.8126297,-0.13328743,-0.172743797,-3.30523729,8.87498665,1.89852715,8.54958153,-7.17065907,2.73380184,6.99785423,-7.04934502,1.66406059,7.8568306,9.73999214,0.0498332977,-2.44755363,3.95851517,-9.24809074,7.33251572,-2.40101576,6.12429237,-9.00862026,-7.88837671,0.0533866882,-2.72218227,8.2811718,1.64717579,4.0842638,4.21784782,9.36291885,2.57109642,-7.57453918,-5.28475189,-0.825388908,7.68511963,3.80733871,9.9300499,-5.63508415,-8.86156654,3.65649605,-5.27983093,1.88368034,-0.969782829,0.852294922,4.52421761,-1.47011185,-8.18045044,-8.83934975,-2.95196629,6.3005619,-6.44548035,-9.19279194,-3.25576782,0.307602882,9.88360214,-6.28019905,8.69120026,-7.00850916,7.9863987,7.40438652,5.51032829,-7.91432667,3.90782928,-1.11848831,1.56748295,4.69038486,-8.69207001,-7.63008881,1.10390282,-6.71112537,6.1099205,9.41812706,-9.5491209,7.9274292,-3.71120834,5.72620964,0.40564537,-2.32569027,-7.87454605,-7.49154997,9.52310753,-5.12954664,7.71350288,0.84160614,4.86975574,5.9723053,-3.46354437,8.20934486,-5.54210758,-6.20078278,3.44842339,-2.34579849,-5.83767557,6.18742371,-7.97521782,0.510653496,2.5518837,9.50289154,-4.91528082,8.87237358,-2.02415276,0.0672330856,9.97643661,-6.01757145,2.67408466,3.34269619,0.691617966,4.02470493,3.20894051,-7.33919144,-9.79671764,6.56017685,-3.10562181,3.80814075,3.41848469,-5.51873112,6.68702316,8.81286049,-2.25684071,9.28294945,-1.45552254,-2.96277094,4.70782185,4.34832573,2.31001949,4.50125504,-7.4165554,9.95017242,-7.45594692,7.90241432,-4.13828611,7.82361031,-8.57894707,-6.35752583,9.06873894,-1.70966434,5.67129707,-2.5144105,0.299444199,-7.24330807,1.71845436,2.05627537,-0.180958748,-1.36771297,-7.15355492,-9.79661179,8.34036255,-3.52033138,-6.20527267,7.97749329,-2.28290939,-8.8564539,9.5812645,-7.68834162,2.04342079,3.79058838,8.41977501,-8.84418869,-4.27404785,6.08227921,4.88476181,-1.8105793,9.58907509,3.57348919,-0.37366581,-0.202939987,9.18336105,4.74220657,2.26965904,6.15382957,7.41125107,0.891046524,-4.18035936,0.706607819,-4.02959871,-5.46893358,3.63237858,9.385149,-3.80977392,9.12473297,-0.611144066,8.49743843,-3.55167913,6.92386246,9.3412056,-2.34886599,2.60846519,0.469366074,8.64641953,0.361647606,-1.79439735,1.55071068,2.7887907,-8.7905817,-3.30867958,-8.97690868,5.09159565,-5.5436573,7.74617386,9.93622971,-1.79074669,2.91116714,7.98614693,3.16859818,-5.37137079,3.37319469,-6.71657085,-5.40272045,-3.52334118,3.20319748,-3.85413408,3.5691452,6.61476135,-5.70550489,7.58102798,-5.6464963,-0.666780472,-6.57869053,-8.04984474,6.25655937,-6.00669622,5.45580864,-4.23033524,0.749354362,-5.60427618,8.93180656,-3.1261735,-1.60287476,0.476750374,-7.26587057,2.51568031,1.03742981,-3.9156332,9.95933914,6.62538528,-7.1550293,5.41821575,3.94984818,5.0969162,3.8649416,-1.93132305,0.249092102,6.48934937,6.48670769,2.10994244,1.80512428,-1.26857281,-0.900600433,3.62051487,-9.99943447,-0.500509262,7.93649292,8.62797356,-9.64287376,-7.7825737,-1.71881866,-8.18573093,2.41604042,6.39147568,1.54323483,-2.84838438,7.20409012,-0.882195473,-7.06368399,0.663384438,9.50066757,-2.30059433,-6.09554052,-7.7514267,1.77105522,6.12607765,0.982809067,-1.93043327,-4.79142904,-9.5516386,5.6116581,-4.85489607,3.75805855,1.69935799,1.11972427,-0.782367706,-9.26339054,-9.8053503,1.47744751,-8.53012848,-5.86100769,-5.95906925,5.91963768,-8.64218616,-9.22824669,0.858564377,9.88640022,0.741252899,-1.75461292,-9.78433609,-5.32899475,-4.41186333,9.8185215,-0.0965414047,-2.56404877,6.03149033,-8.73827267,-4.14788914,6.42462349,-1.3534174,-6.89027977,-4.93084717,7.24749374,8.60961342,1.76949024,-0.169584274,9.79918289,-5.14036989,5.80332375,-3.53727531,9.02069855,-9.12002277,-0.226852417,7.29131508,5.1525116,-1.74248505,-5.94357443,6.34755325,3.33472824,6.79151917,5.05340958,-7.35164261,0.93775177,0.781154633,8.87475967,-1.91729736,-4.01440525,9.89845085,3.27548027,-8.996418,-2.79023075,4.59097862,0.575473785,-8.0156374,1.18148804,-2.72045517,-2.68785095,5.28775787,-8.64569283,-8.15579796,5.49802971,5.39767838,-1.21604538,1.91870499,7.67649269,-1.18053532,-1.25646305,2.63227272,0.600477219,-7.76621819,-6.82370281,-5.97667742,9.98598862,-5.47181559,-4.80110741,7.78322411,-7.34617805,-7.21667528,9.34012985,-0.427152634,0.840877533,-7.3764782,3.53368664,-9.33539581,0.00191879272,-7.74917603,-0.397997856,-9.14435196,-9.1228714,-8.09574413,-5.17457104,-9.01594925,8.93662262,-2.16379261,-6.86133575,1.52589893,5.7918539,3.68860626,-5.59265947,4.17107487,3.25969315,5.67041206,2.60875702,5.37947464,-7.17605591,-7.97131395,6.12536812,9.06011772,-6.59689045,6.06073761,2.83738995,8.00218391,-7.27934837,-4.01028204,-0.810318947,0.975073814,8.0599556,3.67176151,-8.70655823,8.86918068,4.31669426,-9.315835,8.7664032,-3.05206537,3.9409399,-4.63060665,-6.60607147,-8.24708843,-8.80875683,-8.77234077,3.25959587,4.0300045,-7.7116375,-9.49605751,-0.243707657,4.01572418,-7.7200861,8.50856018,3.35845375,5.53407574,-8.79360008,5.96674347,3.04906654,5.65317249,-7.12468529,-4.58363152,2.89943218,-9.23914146,-2.24638844,4.94878197,-5.81628942,5.62391853,1.20589256,7.44359207,4.4516449,-1.21085739,9.12214661,-4.08819103,9.77674675,-2.23753738,-6.28899956,0.783934593,-4.42075634,0.356470108,-8.80578041,1.25271606,-5.61388302,7.46473122,-0.279401779,4.09806728,-3.77898407,6.61632156,0.509076118,-3.96682978,9.49230194,-2.87690067,7.93836594,0.123944283,3.13946247,4.93974781,2.35308647,8.31847763,8.62794685,9.92229271,3.97791767,-3.15051985,9.21294022,1.86833,1.01908493,7.74435806,-0.572053909,5.49578094,7.58050537,5.5608902,1.88975239,1.06603622,-3.12705564,3.57601643,2.1058321,-7.28872395,-1.58514881,-1.59074688,4.31485081,-0.312170029,-6.64353752,2.06938171,0.0934562683,-9.27437782,5.53647614,-8.44960594,7.48008537,-2.18765736,-7.95477772,4.0521059,3.74678707,-7.74933577,-3.08745098,9.21013069,-5.33579016,1.37292099,-5.30803537,7.84926033,2.52470779,-7.23509741,-0.278237343,3.65913868,-0.862054825,-8.55349159,1.47580242,3.81101418,-8.29657364,-0.504025459,8.83441353,-0.0252351761,-4.13028145,2.36218452,1.24510574,6.48524284,-2.53044176,-9.13630962,6.0471344,-5.80294514,9.90559006,3.2775135,5.1706934,3.83919811,5.4097662,1.93740368,1.94669819,-1.83631039,-2.86212444,-3.72530222,8.84893608,4.04854298,3.85377407,-9.61141491,0.951280594,8.17255783,-3.82887888,8.0285244,-4.5834322,6.25318718,-2.66616583,9.74627876,5.70331478,-4.39971352,-5.98555565,0.76483345,-5.44793558,-3.45252609,-6.61108875,7.43239212,-3.78443241,-4.95313835,-7.39673424,3.09084988,7.91078186,-3.486691,-0.816774368,-7.53111839,4.48833656,-4.52410889,3.30743027,7.99159622,-5.25521183,-4.34306335,6.13609123,9.3040638,-6.61310577,-6.46329975,-8.68336868,-1.37935257,-2.772089,9.49630737,4.43316269,8.16226768,3.24905777,6.90705872,6.94373322,3.31836605,-8.22334099,-9.68380356,4.31697845,-4.54597569,-4.2132349,8.16759872,-7.1496582,-4.3100934,0.259628296,3.56471062,-7.91841412,-4.78484058,1.19195557,-6.79384804,-4.20951748,-9.35621643,-9.92522526,6.74381828,3.35974312,7.21217918,-4.9049778,2.03658485,8.8764782,6.96873474,3.5463419,3.35792732,-3.29860783,0.289458275,4.91222,-0.316820145,-4.79562569,-0.083190918,1.80340004,9.75726891,-9.5768404,2.0451107,-7.82583141,-8.74547768,-5.24639654,3.81339455,-8.28848648,-4.5925498,-6.98273945,1.10315228,0.676679611,-7.03567314,-8.55859089,-4.23671532,-6.47566128,3.56002426,-6.67282009,9.91441154,-8.48369598,-5.4763546,-1.08942413,-9.96047974,-5.78480673,-5.24261189,7.41673088,-6.9918046,8.73986435,-9.09062386,-6.11184692,-1.80786896,-4.84862137,9.22245407,1.79423809,-4.2489295,8.24336815,6.29970169,-0.910802841,-7.85586166,6.53932571,6.44177246,6.85404015,-4.16510582,-2.93205738,0.912597656,-1.97458076,-6.78132391,6.29054642,5.19350815,7.27791595,-0.0589342117,9.49666214,-9.5829525,-0.675672531,3.96630192,1.62492561,-9.88188648,-4.86695099,1.14932442,-3.29858017,0.762952805,2.9484024,-6.19482708,3.53735542,-7.66532803,8.8341732,-4.04344988,1.73853016,-0.522336006,1.0943737,-6.8697896,-0.555886269,-2.78316593,3.32419968,9.83637047,-0.121042252,5.64088821,6.41694641,9.61119843,-4.60322094,-6.33526039,3.2734375,-3.35308313,4.73511124,3.01128769,-9.29265213,-1.60046387,1.00779438,-1.99938965,-3.75384283,9.16763115,0.398132324,-8.58568764,0.342943192,3.86339378,-7.94116592,-7.17451143,-2.01422119,6.98427963,4.78381634,1.60365009,-7.46431541,7.25394821,-2.8827858,9.01791,4.03524399,0.342216492,-8.3646822,-5.21211672,-0.0420150757,-6.15334082,0.797201157,-1.42808628,-1.84561634,0.724755287,0.963541031,-5.75726175,-2.29800034,-2.49280262,3.46614361,-4.52161264,5.26005745,5.78191376,-3.37401104,-7.00289822,2.29086113,2.50564003,-7.71145725,-6.45770454,5.35640621,5.11390686,9.43412971,-0.594532013,7.69376945,9.19498253,0.0667819977,2.41741657,9.52512932,8.82969666,0.699279785,-7.21696377,4.4841814,5.63681602,-2.03733206,-1.4373312,2.77356148,-4.75214481,-9.30065727,3.84859562,3.35403633,-8.69856739,3.1781292,-5.17795753,-5.93321991,0.3723526,-1.86945629,0.0542507172,-8.20818043,5.10928249,-8.28281307,-9.24608421,1.05962849,9.17396355,6.81186676,7.04289246,9.89987183,7.15013313,-7.71217537,1.46933746,-4.83558369,8.34388924,-4.25937605,-7.33496428,1.25294113,-1.82999039,3.35454178,-0.218227386,-7.73615026,-1.47503948,9.00372696,5.64012337,-6.45351839,-4.28140402,2.4444294,3.52279091,7.55151367,-1.73499966,-0.136253357,9.98439789,7.76795006,-4.06783819,-8.158638,-2.22325611,-6.26552439,-4.6681304,2.73930168,-0.553627968,-4.81917095,4.1961689,5.02116776,-9.23411083,2.30078316,9.25880241,-7.30536175,-1.21193027,-8.91575623,-7.12079144,0.854363441,-0.71558857,-6.90709782,-7.59034729,9.02957726,0.111619949,-3.99009657,-1.54613304,-5.86199856,-2.61295748,4.02949238,3.68060875,-0.0169696808,-5.2012701,2.25462914,-6.43848181,8.43706894,1.80775642,2.96387577,-6.15259552,-6.6679287,-7.87584019,-9.24948215,3.94904613,-8.37367439,3.6547451,5.30022144,0.815028191,-1.82433987,-1.68561554,9.85740662,-6.56825495,7.34362984,4.38076496,7.51478004,0.929288864,-1.4349308,3.11129475,-8.46903229,0.97836113,3.32054043,8.31703758,4.46450233,-5.10633183,-2.11804104,2.08617401,2.33346367,-1.48190689,-6.41080141,-6.33708954,-7.46728992,-2.73886299,7.92638016,-1.32288742,6.24155235,1.74910927,-2.71755743,6.01110649,8.65145493,5.02324009,5.5980854,7.01144791,1.41787052,-9.85522079,3.31024075,-4.78190136,-9.41097546,9.74055099,9.45415497,-4.01056528,-5.57422972,-6.07656956,-8.89966488,3.33645916,-4.12397146,8.41246223,8.25880432,5.73100853,1.04417038,9.38217545,6.22637177,6.62371445,4.78775024,7.70923424,9.09399223,2.71997547,-5.37049198,-1.85594177,7.18174744,3.63396454,-3.95635986,5.46570969,2.19740677,-8.18578148,1.57220078,3.98715878,-7.82260418,5.4943924,4.24055099,-9.06166553,0.585795403,5.46961212,7.76218796,-0.888634682,4.71046448,8.77533722,7.08743668,-1.43887997,-3.25068188,5.7947216,-8.11802006,0.429924965,5.73619366,8.21505356,-9.57970715,-6.13448811,-2.3419075,-0.445230484,-2.97752476,-3.26614952,5.82292652,5.92735672,1.08833694,-8.32896233,-4.87230539,-8.83482552,-6.91002369,3.23469639,5.53760529,-9.47300816,7.15499687,-5.96293068,1.02009773,4.7726593,-5.91412306,1.33160019,0.191539764,-0.79463768,4.52899742,-1.13978863,3.56931782,9.52397919,9.52110481,1.19139576,3.78054237,-0.429288864,4.9300518,-0.625105858,-6.15088654,2.05328083,9.49908829,-8.8380909,-1.79682064,0.834180832,0.0767316818,9.63280487,-1.44700909,0.125799179,-5.69609213,5.78137875,7.63396072,3.97079277,-2.88802147,1.02306747,-5.30120945,2.57475471,-6.08494759,-9.71389198,-1.37839317,-6.65039492,6.8168602,-9.05154133,-9.25797939,1.13674736,5.31416035,-4.91043472,-9.67406273,8.02897072,2.90640354,7.91644096,-8.37282562,-2.07747078,3.94951725,-0.458397865,-4.28783846,-5.70112371,1.21245003,-2.35111141,4.87706947,8.9004612,-9.94820309,0.556635857,-4.61199665,6.1758709,-2.12865591,3.67751217,7.96099854,0.490186691,-1.43410683,-3.03837967,-6.04535532,-4.2829504,-3.54099512,6.49708557,-3.46345234,9.75098228,4.77140045,-7.06441641,8.35140991,2.14462662,4.74284744,-6.96407461,-5.20328951,8.31667519,-1.64147472,-8.25788498,9.72168922,-7.57374954,7.99017906,-9.05989647,-9.6794796,-3.01189613,-0.937195778,8.55758286,7.27556419,0.411952972,3.69782066,9.27991867,7.58401489,4.51426983,-8.67501354,-0.947677612,-7.62432098,-1.96541882,7.21031761,3.81005096,-4.4869833,7.27364159,8.10438728,-9.55314541,0.285683632,1.49342728,0.0475416183,-0.954543114,-3.00519562,-8.33014202,-4.7005682,-2.45184183,-8.10591125,3.95246506,9.08627701,-6.95075417,-1.32107449,-3.30041122,9.9899826,1.62693501,3.90251541,9.56463814,-7.13214302,-9.92810059,-1.59262085,-7.17360735,-6.81822968,6.01524925,-1.69839668,-4.95420265,-5.28546619,7.16849136,0.825839996,-0.0932283401,-6.89132738,-2.54330873,-5.39094496,-5.6074543,-4.48739004,0.439343452,4.04626942,5.65530014,8.64448357,7.83102989,-3.87232685,-2.19520617,5.16944504,2.87642479,4.07497978,8.19401169,-3.25865555,-8.22637367,-0.663520813,8.21105957,3.28209782,2.21143723,7.62585449,7.74407005,-5.41297626,4.11230183,-4.53548479,-7.89170933,4.0427227,6.05092621,-2.10396862,-1.40595531,-9.89303493,7.76742172,7.0398407,-1.39352608,-0.990334511,-4.54541588,5.19672298,1.31179619,7.35342979,9.08952332,7.61985779,6.95279884,-4.29455471,1.41883945,6.43255043,-8.13734245,-4.32166815,5.72457504,-7.05098057,-5.82480955,2.42202282,6.94263268,4.84547424,-2.1262064,4.85000706,-5.93540573,3.63287067,-2.33909178,6.87816429,1.30452919,5.21135426,7.22962189,8.2711277,-7.15806103,-5.52988291,-0.743406296,5.57048988,3.23614597,9.90657043,-0.262066841,-4.55328417,-7.0471611,-1.63277245,-2.00887108,-3.09261608,2.4005127,5.41039371,-7.52454662,-5.05232239,5.61791897,0.367507935,-3.29547119,-6.98585796,8.68338394,1.61774445,9.41311646,6.24180603,6.04985619,-0.0722169876,6.24775696,6.07195091,-8.72445679,8.05015564,-1.03104877,-8.84291649,-2.8942852,-4.24958181,-2.72027922,0.273803711,1.81754684,7.52033234,-5.77287579,-4.72398806,3.93296814,1.40762234,-2.0951376,7.02239037,5.30514717,3.59970093,0.175790787,-5.49324608,-4.98815155,4.12823105,3.17048454,6.3359108,7.67581177,7.34945107,2.22274685,-2.30372381,1.31313705,9.88132095,-4.64881802,7.31558228,-6.98846388,4.88764668,6.67831802,2.47853851,-3.20442629,3.21067715,1.83782578,8.33899117,-6.57446718,2.93219376,1.37990189,-7.97651625,-1.3076992,1.50609779,-7.01432467,-9.75305748,0.367916107,3.55620193,9.08614922,-9.08124828,-8.53776264,5.8187809,-3.74892998,-8.27043343,-1.16718769,3.07921219,-7.68536901,-7.99569798,-3.69275331,-4.10914183,-2.34303427,0.628730774,7.08167648,1.71950531,-0.27209568,6.88315773,5.22559071,6.49832153,-2.68522501,9.42472458,1.3412962,3.17082596,-7.90998459,-3.11159086,3.49443531,-9.02726078,-1.17543316,4.48610783,-1.97594643,-9.73168182,-0.380917549,-2.07751036,3.28505898,-8.0166111,4.82030773,-5.09732389,9.27399445,8.01396942,-9.21084785,-6.7140007,-2.21305847,5.12977123,-3.938375,7.72588348,8.91345787,8.50532913,9.06818199,8.94377136,-2.01681566,3.38561058,1.96589565,0.811084747,-8.1002264,-0.506192207,-7.58043098,-4.30741978,5.20239735,-3.31763363,0.532184601,4.42472839,6.3974514,1.95445633,8.55820084,-2.29689407,-3.90063667,2.00490093,-3.63031197,5.34045219,-3.02423477,-8.31015396,-8.75351143,-0.265040398,5.4614172,-9.96171761,-6.59246159,0.501564026,9.77082443,-1.75154495,1.7964468,-7.12094688,-1.75119209,7.72398186,-3.03096294,-1.39226723,0.160898209,4.2193079,-6.08372641,-9.18767357,2.77857018,-0.571873665,8.51785469,-0.417980194,-4.99999714,5.05169296,3.80709076,5.77315331,9.38412094,-1.07239628,-3.77457428,0.729689598,3.90145493,-8.24723911,8.64657784,3.03122139,5.74513817,-1.4738884,8.34879112,-1.8859005,3.66977692,-2.05831814,5.84651947,2.46037388,-8.50702095,2.49486065,-8.86623478,5.19072628,0.533047676,-1.06768799,-4.63542414,-7.57189655,-0.865253448,-2.32424784,-3.63612366,7.66908455,-5.68194771,3.5020237,-1.49688721,1.82084846,2.98706436,3.57774162,-8.90874004,-9.19806862,8.06192017,-3.30816078,-0.25535965,8.17194748,5.91528988,-1.7198143,-4.90974331,1.94731331,8.49058342,1.24933052,-2.50266552,-2.30199242,-9.58169174,0.500134468,5.75967979,2.94518852,-0.219941139,3.44731426,-0.98022747,5.31951141,5.0273838,-4.76632547,-7.62628031,5.10841942,-2.78742361,-8.22885036,-2.28399563,-7.11553001,9.29076958,9.9828701,2.11264133,7.17036057,-7.74111223,-4.87470913,-9.23579597,-6.01846457,7.66467285,0.172595024,0.804712296,4.80170155,2.20103168,-7.26673174,8.03830719,-0.193833351,2.24726486,9.77230453,3.13427544,-2.23708248,1.34624958,6.41929054,9.01947212,-9.74782753,8.25569344,-6.54428673,-9.82719707,-5.6947875,7.70820427,-8.20651054,-6.82222652,-1.15941715,-6.31856441,3.89275932,5.59421921,2.037714,7.85448456,-9.67955112,-4.21997452,-5.11017323,-6.67995262,-9.95879936,2.46118641,5.15781975,7.47295952,-1.9736824,8.321064,-7.87043095,1.6716404,-4.73551321,-9.77624416,-9.34066296,-8.52793503,-9.00882626,8.65471649,-0.187635422,6.40700531,2.51790047,-1.64158916,9.81166267,4.61086464,-5.1825223,-2.65136147,-1.42667675,1.84762096,-7.03693151,-9.70825768,-6.69388199,-4.07414865,5.78951931,4.4554863,3.36764526,0.0272312164,-2.33263063,-4.52470112,-6.65475464,-6.45893192,4.73016644,-0.0959882736,6.71959114,-3.84421396,-9.7050848,6.6385994,-5.07835817,8.0334053,-2.56652594,4.39630127,8.64409637,1.3227787,-8.06619072,-8.46903706,0.89274025,4.29713726,1.99481392,6.83205986,6.42009163,2.46846104,7.41807365,-4.4465394,7.01541328,8.04891777,-1.84981728,-9.88240051,6.50024986,9.70749092,-6.19317436,-8.67856407,-0.625152588,-6.93571472,-8.5561142,-2.60262251,-2.27332067,-7.69538832,3.60697651,2.44261742,-6.92100239,-1.29058647,9.12219429,-3.28442287,-1.2924118,-1.57094765,-2.92045116,-4.0207839,2.68767929,-8.16144466,-9.3993578,4.99359512,7.34653091,-6.87191153,3.78201008,4.23911285,6.77676773,-2.87375975,0.718931198,3.07491493,0.0960264206,-6.08956766,-7.3638401,-4.06647873,-5.30297852,-7.15902996,-1.81890583,9.65813065,4.21340561,-5.28342628,1.45534515,-0.0165710449,1.48698807,-8.18237877,-1.24223995,1.66680717,-5.96649599,1.10532761,-2.76447058,-2.4581871,5.24665928,0.605530739,-2.84557247,-5.5304327,-9.97977448,9.9344368,8.05910492,9.36688042,9.1550293,8.57337761,-7.22143269,9.3829689,-0.455183029,9.73931122,8.5887413,-9.01526642,0.412586212,-5.67428207,-7.66529512,9.38734245,-6.95258379,7.92270279,-3.13101196,-2.91728687,9.16550064,4.55758858,-0.624978065,-4.00583506,-6.06974459,5.80579567,-2.00993347,-0.952390671,-6.8320303,-5.93485594,-7.12559605,0.111903191,0.754718781,4.55330658,7.42063522,-1.38397694,-0.505153656,9.87691116,1.25205803,3.32197952,-7.50636768,0.476612091,-9.59343243,3.17748642,4.01460838,-6.46486712,4.982934,8.16337204,1.77610874,-8.94858074,1.19875145,7.4296627,-9.65290451,3.63962364,-8.84484196,4.74367905,6.99644661,9.27244377,1.97830009,9.29084778,-8.71513462,4.73907661,9.67176247,-6.70516539,6.28290558,-3.18555832,0.323888779,3.59897232,7.92267036,-3.68511915,4.20731354,-7.69131184,-7.87175274,-0.545386314,-6.31622696,3.17142677,2.1838398,3.804533,2.79057598,1.22088337,-0.613998413,0.527898788,-7.59352207,-4.32904243,1.77961826,-9.95575714,-6.41556072,-6.33322716,-2.55350494,3.24506569,-0.186056137,-7.05268192,5.57278538,1.79071903,-3.37996674,-7.09965658,-3.92739773,-7.77153158,3.86928463,-8.93869019,7.43020821,-0.473198891,6.9420929,-4.25033283,4.65641403,0.34455204,-9.11872768,1.54955006,3.29455757,-8.37480068,4.7305851,6.92848969,7.14595985,2.15666866,7.13432121,6.54486465,-0.450261116,-7.54175806,5.67145252,0.0923967361,-7.09408092,9.7774086,8.90439606,-3.83228731,-9.25517654,8.25305557,9.1063385,-9.74975586,-4.14985704,-6.64836073,0.999936104,5.91497517,-7.00433493,-1.85505295,2.12166023,-1.25149345,6.15528488,-8.12445831,-7.76775265,7.38418388,5.98098564,2.42248344,-5.32757425,-0.542689323,-0.973687172,-4.76069736,6.95429611,0.862838745,1.74655819,-5.5955739,-4.80728245,3.99695873,-3.10852337,-4.95483589,4.07568073,-0.0391998291,1.17506123,9.26344109,-9.36317635,-6.90283585,4.03955841,-7.14897633,7.15037155,-3.695683,6.66221237,-8.18423367,7.59159279,-8.11313629,2.51945972,4.54998112,-8.45729351,-1.72998333,4.17597008,5.53001785,3.00710583,0.419351578,8.04724503,-9.94241333,-2.14218426,-3.69166279,-5.76804543,-3.53652048,1.70129585,-6.33416176,1.74038029,-9.41893578,-4.05874348,4.68957138,-2.37459898,-9.88358784,6.54332161,-6.39076233,-9.54055882,-8.16896343,4.23013592,-4.10248375,9.5543251,-0.476047516,-0.936347008,2.80767822,8.64945984,-8.52950096,4.68502522,1.21045303,4.0912962,2.41057968,-5.37583399,8.36214066,2.50675011,-9.0527668,-9.84774876,8.89294434,3.72042274,9.14949799,-4.37759161,5.82239532,-3.01082611,-2.95799017,5.05677128,9.15803146,-0.985983849,8.56163788,-4.53969765,1.29905796,-6.7262578,-8.2137413,-8.34554863,-3.64178658,-7.51052189,-9.33867264,4.93668079,-9.2112608,6.33978271,-7.26154709,-4.81789017,5.72353745,-4.50800991,-6.12277508,-5.47334576,9.47737312,6.21173668,0.650321007,9.95175552,-0.840969086,5.82779694,7.76879501,-9.84576035,2.30997562,3.76823616,-7.24579334,-0.0443048477,-4.62730312,8.92295647,8.14432335,1.624856,8.9516716,-9.25889587,5.73210526,-0.514242172,-2.8661108,9.27127266,2.27557182,5.53995323,9.99834633,2.20496273,-1.19307899,7.92243767,-7.59752083,8.46702003,5.20812225,-7.07270145,9.11263084,-4.01347256,5.56778145,-2.28812218,3.53125572,9.81189537,8.53234673,3.14160442,0.951377869,9.808424,-9.80040169,4.65296936,2.46714211,5.26115227,4.18295956,3.01196003,2.00643444,2.13503456,3.52355385,0.369070053,2.96215439,4.92411804,-0.348546982,1.98334885,-5.85002136,-1.3088789,1.67814732,4.63017082,-0.724731445,-0.568309784,8.41556358,0.366771698,4.3244648,1.27934551,1.9605217,-9.50693798,-3.11371231,7.84250641,8.99414253,4.56405163,8.02114868,-8.53856468,-7.65071392,-5.54383612,4.74585629,3.60976696,9.35293579,-5.20340729,6.3380127,2.9749279,-0.395442963,-6.20466375,-1.78671265,-9.27130795,-2.87976789,-0.257198334,-2.72921991,-9.99514675,-8.43764877,8.42837906,-4.24685097,3.17683792,-6.89065409,8.78113365,4.52698708,5.06954956,3.90749836,-6.6788106,9.23052025,-2.66682148,-1.26479721,2.55842018,-0.639616013,9.97083855,-0.116827011,-3.50636435,8.53602982,5.04145527,-8.26690769,-1.91358948,-1.69600105,-4.67892408,1.32609749,7.71703911,0.269732475,-6.612782,-1.02256489,-6.24380732,0.328531265,1.62662125,-1.37558842,0.480314255,-7.36143112,-3.57707024,0.182468414,6.75113297,6.29259491,-0.349806786,0.805506706,-1.84322548,0.913475037,-7.23283195,-2.20357704,4.47543144,-1.41800117,7.64630508,-8.53556633,2.73576546,-0.00225925446,2.03436089,-8.49490452,6.13808441,2.79654026,1.45898628,1.17671394,-2.96281052,4.04711819,-0.0717487335,-5.8912797,5.25711823,-3.62673807,5.41566277,1.03755188,-1.85698414,9.65913391,1.04933548,-3.82432842,4.51234436,-1.02578068,-0.28723526,-7.55993366,0.195268631,1.86843967,2.87581253,-6.23078299,-0.765416145,-4.34692192,1.27990913,-8.56174469,2.75450325,-5.0685339,-6.84773493,-9.88135052,4.13869476,-0.94861412,-3.36643696,0.296754837,7.55314827,5.76169586,-3.1636591,8.38707733,1.62244225,8.37805176,9.90905571,1.50867462,-3.70116234,-5.43364811,-3.32167339,-7.36469936,1.4974699,7.98527908,8.59996796,-0.33324337,-0.821964264,5.23585701,-0.959817886,8.33049393,-9.40899277,3.05271053,6.89560699,-5.51717472,-7.15271044,4.39275169,8.98102188,4.04091454,-4.34309292,5.63426495,-4.89891291,3.97363567,4.89024162,-9.71863174,-1.04237938,0.727119446,0.69066143,7.94762039,-4.34621906,-6.90415144,1.92928219,5.44573975,6.55463982,3.81661987,5.93979931,-9.78152847,1.84632397,-8.82476044,2.24333,3.64965916,-0.176409721,-4.92271233,3.97666836,-4.13943338,8.54194069,4.40316105,3.92228985,1.91172123,-9.69713211,0.303124428,-5.39448595,-5.12621021,3.78756046,-2.47541714,-4.34199524,4.09150505,5.92837715,-1.77081966,-2.15763855,-3.43195343,-0.834895134,7.92732239,-5.4929595,-0.166639328,-0.70200634,1.38527679,2.33618546,4.26009083,-0.654219627,4.52901077,-0.90625,8.65691566,-3.21320629,-4.35895967,-1.03423977,-2.47733784,3.38205814,2.25320339,9.57964325,5.08512878,5.75527287,8.88363075,7.16783714,9.83495712,-3.87062979,6.33050156,-3.26957417,8.26686668,1.24881744,8.87627602,3.56285667,0.931696892,-0.966184616,1.33698082,-9.35691929,-1.74648666,6.80709648,6.85688782,3.70691681,2.14894485,-2.67681313,-9.19363689,2.54578972,7.0831089,5.82018375,-0.176532745,-6.97556877,1.61483765,0.584554672,4.61233711,-0.443212509,-9.0722847,2.10888863,4.08763313,0.855873108,4.65890884,2.27886391,0.873166084,-4.6857028,7.39341354,1.10463238,5.5676651,-4.25426245,-1.39188194,6.64285469,6.44620514,1.35622215,-5.97541142,-8.74006081,5.8054266,-8.19010448,8.91782379,1.86924458,-3.59803104,7.89770889,-3.1991725,-8.49692154,-7.75901604,-5.77919769,9.02381516,3.24433517,7.54454422,1.15684605,3.1091795,-4.02109671,-2.57805777,-9.41606331,4.22776318,-3.98816586,-9.10614586,-6.99165678,-8.77667141,-9.51968956,2.56899261,-2.94800711,-7.14884567,9.3514595,9.99185371,-6.89697266,2.57886887,3.04944134,-8.0315733,-6.65267658,8.46295357,-3.13611555,-8.69992828,0.300243378,6.19049835,3.70104599,3.47971725,3.5974865,2.93995953,-8.08940697,1.34622765,6.0495739,-4.82564068,-4.54324818,1.62346268,5.53141785,6.54084015,-8.08245754,-1.86102009,1.83127785,-1.71463108,2.20244312,-3.54798079,9.08980942,-7.5922823,-3.48992586,4.81735134,5.22354507,-7.88229084,2.33448505,-4.30725288,8.00376701,-0.681745529,1.90121078,-6.34705162,5.10241032,-3.79438877,7.70812988,-9.46013832,3.45486832,5.98007393,7.10330582,5.23666954,-7.28824711,6.43108749,7.30413628,0.622161865,-3.32804632,5.52705383,-6.79443026,6.01206017,4.70052242,1.67311764,0.0959911346,-6.682024,-4.7744031,-3.38936853,-5.11796522,2.36109734,2.97068977,8.3806839,-5.84566069,-8.021348,5.20312214,8.87616348,1.66762352,7.74092102,1.64899254,-5.37896538,-4.27113104,-4.90304708,-5.51716709,-7.02294922,5.28927898,-3.08273554,8.46010208,8.93770409,-4.02242565,-4.89917564,-0.44935894,7.62464905,7.48958397,-2.57793474,-7.34943199,-1.90390015,1.15321255,2.04769039,-4.47494555,9.58606911,-6.91833258,3.58612919,-7.93908119,7.85725594,-3.08995771,7.07906342,-2.18767834,-8.30962563,0.128791809,4.60147858,-2.9463172,1.2460041,1.60062218,1.6613102,1.64665794,-4.60707617,8.87335968,-5.45948553,2.42659378,3.75296974,-3.84035301,-4.81258774,-5.16025686,-8.43727207,-5.22474957,7.6378212,8.86892509,0.0203313828,1.69998646,-8.33126831,-3.62848568,-3.96171045,-4.46553326,7.78141212,2.17793941,4.63629532,2.21550369,-4.04086304,5.21839333,5.55195999,-8.2018528,-8.54288101,-0.202408791,-1.88596916,2.51225662,3.5028162,-8.18063259,8.10586166,-4.78143454,-1.56879616,-6.76497316,1.09910107,-7.40537548,-2.14699793,-4.59268475,-9.25332546,-0.639944077,4.46060562,9.38805389,5.01049137,-8.67585278,4.94028187,-8.67163372,-4.14608097,-3.18855858,9.8935833,1.44578075,-0.755639076,-0.0211858749,3.92563438,-1.86270237,-6.44257689,-0.389588356,-7.80873203,-1.36057281,-7.14275646,-8.3071785,1.24775314,-9.01339626,-8.14403725,3.17411804,7.38926125,-8.66964054,9.35578918,2.72887802,4.25998306,-2.4535017,3.99151707,5.43017769,4.99158669,-6.40108728,-3.07589626,3.40849113,6.52425385,-6.86164379,-3.64357424,2.45202923,-8.73880959,6.82220268,0.755419731,-3.66205978,-8.23949051,-1.11402893,-3.48250866,9.47231674,1.23646259,1.22328949,-0.170296669,-2.16733646,-6.41844082,5.26568794,0.411014557,7.91469574,2.28408051,8.55495644,3.13922405,0.947986603,-7.18037844,-0.620056152,-1.2853384,-2.67947674,6.03452301,2.21342564,1.05274773,-6.47050333,-9.7455616,6.34475517,-3.69846296,-0.0693502426,-5.57874775,-2.01144743,-6.39685631,8.03418159,-9.50995064,6.25750542,9.89100838,-1.83513641,-3.13936138,-3.23766947,4.48507881,0.726994514,-1.3972578,-3.70350075,-4.73407459,-5.58634567,-9.71431446,-8.48598862,-4.00807476,-3.71254539,3.24464989,-7.15230799,-8.83790779,1.27549934,-2.6917057,0.502013206,-2.6714077,1.65970993,-5.25601578,2.13844872,0.914631844,-7.76896477,7.01402283,4.68751812,3.11408615,-1.54493904,-5.7975359,0.814505577,9.39400482,5.02382088,-4.6504159,0.464719772,-9.46278095,-0.963846207,0.632711411,-6.01491976,7.23993492,1.60047531,-0.810100555,4.64391804,-9.6557188,-3.66529989,-2.69771576,-0.505265236,8.00406075,4.25935364,6.96837807,-2.48293686,9.27669907,-6.526721,5.4008255,-8.3121376,-2.09478378,-7.02706528,-3.88377237,5.43827248,1.04409409,8.09270287,-5.93960333,-6.9091692,-2.40798569,8.97919846,-6.6215477,-8.3509922,4.87875748,-2.73176765,7.18021202,-2.16832256,-2.99782181,-4.38471508,6.0964756,3.47522831,8.16834641,5.41463852,3.82423592,-6.06822681,-8.68650246,5.94918251,7.91370773,5.67793465,9.0453167,4.65448475,7.92506981,-3.36006403,7.39920807,-1.4929142,8.58697701,1.33469009,-7.86703873,-1.32531166,5.48291588,-8.63624954,-9.45080376,0.335065842,-8.53357315,-3.76487017,3.82308578,-5.39294147,0.837769508,0.39972496,-1.81903553,7.47066116,-0.598380089,3.02902031,8.74347305,-8.45942783,2.39441013,2.84738922,-3.93060493,-1.6786232,7.36908913,-7.72533131,0.359536171,2.72757435,2.34176731,-1.92146397,5.95039177,8.21671867,-1.62282085,5.26004887,5.65371704,2.03701973,-3.81807566,9.60169983,-4.22170877,5.73707104,2.95148087,5.55234337,-1.76122093,-0.835506439,-2.35856152,-0.346404076,-2.01738739,-6.22438765,6.71583557,-6.96403885,-4.59721518,-5.3970108,-7.56532335,9.60832977,7.21655273,8.62563896,-8.87474155,2.22377777,-4.96581125,-0.394034386,-2.53631496,-7.83856535,-2.76803255,-2.32380772,3.76683998,9.26288986,1.39231682,0.661809921,3.03298092,-4.68480492,2.4895401,1.71342659,-2.4384594,-3.1877985,2.67701721,-7.36182165,9.86552811,9.93129539,-4.72412109,1.69306183,-4.70734406,3.66165066,1.35463333,7.32179832,-2.51942587,-3.99337053,3.42478657,0.380496979,-4.97858763,4.87590694,9.37022781,5.39375305,-7.18858194,1.50279617,-2.49905634,-1.64058685,6.66042709,1.79193592,-2.93279409,8.52564621,-9.46263123,1.56313133,-8.44625282,3.83151054,-3.80546856,1.48609161,-3.26801872,-5.59039783,2.18406296,7.55821609,-9.05547428,4.64551449,-2.83772516,6.35030746,9.61142349,-0.790213585,-1.12487698,-5.81359005,-9.00881004,8.93317795,-0.0731334686,-9.15563202,1.28959465,-5.7832818,0.379512787,-1.54168987,8.82410431,6.71475983,-5.05343866,6.8515377,-6.20241356,-3.96124363,3.38181019,-1.90917301,-7.47760153,3.95057201,-2.73088884,1.95608521,-4.08581972,9.62627029,8.71835136,9.3300209,9.66064835,6.52197647,-5.15450287,8.26659966,-3.26840639,7.89571571,3.28299141,-2.75144625,-3.56027412,2.47381687,-2.56850624,-8.88376808,-9.49242496,0.811208725,-6.02216911,5.40731525,0.744718552,-3.52439117,5.55927372,-5.27447987,-8.18131828,-3.41564941,-6.82087135,1.61218739,-3.97018242,-6.86178255,-5.98193645,1.59168816,-8.49697495,-8.66421318,0.560225487,-4.28775072,-4.22992277,7.6858654,-3.66264439,1.92886829,-1.5142498,9.99964333,4.00359249,8.37747955,0.314240456,1.44192314,-5.60196018,7.85062027,5.35594845,-2.56876993,6.67977524,6.9969883,-1.6217308,3.56404877,0.971116066,1.54035568,8.76446152,4.30587006,8.76490784,-8.196311,4.59670448,-3.18554211,0.596089363,-1.51675606,7.87577629,8.16646957,-6.14816999,7.70918846,8.34000015,-9.63053417,-0.387231827,-8.20965195,0.386095047,9.10595322,3.76531506,3.63888741,-1.21833134,3.5006237,-5.01794386,3.41387367,-3.02404833,-5.1827364,-6.25336933,-0.378292084,2.05413342,3.82635212,9.49839401,-0.469798088,4.1116848,5.09222889,5.07766533,0.309218407,-2.96891308,1.4762888,-8.01559639,1.87709713,8.3581562,-4.48681402,-9.88851643,3.70636845,-7.0633173,6.82351875,2.89371395,-5.35149527,-2.57670355,-6.65885925,4.54661369,-5.05649996,-4.59854412,-7.7293992,-8.01303387,4.9335537,-1.7618866,7.96902847,-4.53374434,1.3523016,8.14189911,0.897838593,9.9789772,-3.34664106,-6.99740124,-5.31963253,-7.05910873,-2.44347668,-7.51536179,9.31733322,-3.58740854,6.4240799,9.50162697,-6.16496944,5.36227417,3.74134254,0.748042107,-7.66055012,9.13726234,9.95481682,-9.40466213,-4.15172529,1.95521927,1.37826443,4.49235153,2.95343876,-1.56000042,1.07060337,-6.37479162,-1.12019825,-7.17204046,-0.482967377,2.78008461,4.87446976,5.22071075,4.50239182,-8.30706596,3.13672543,-1.05284977,4.7565279,2.96995926,-3.91031647,-0.680428505,4.0443573,-6.48305845,-0.759504318,-4.97613811,6.05294037,-8.23426056,6.78752518,-2.0764904,0.424337387,-8.15284443,-4.86040545,-8.82741928,-2.44210768,-4.50552273,-4.32401466,6.28405762,-3.84206057,6.49030876,2.60120296,-1.58427048,-6.83647585,-0.646942139,6.8412323,0.585165024,-5.13464928,1.95152283,-0.763890266,1.3007164,1.13467789,-9.47248554,-4.07117319,-4.21015501,-0.0774030685,-0.910446167,-1.87495041,7.71702385,0.0289926529,7.28485489,-3.44227552,5.67813492,-7.59169149,6.44204903,-8.46798325,-1.39837646,-2.51887512,5.26945114,3.65856552,9.50352859,5.7985487,-3.78792572,-3.67438698,4.57882786,-3.64157963,-4.02903986,3.93100548,8.40820503,-3.28657627,2.51767349,-5.45710039,2.5091877,-8.09581089,-6.29483747,2.66505623,-8.40919495,6.65632439,-7.16369915,-0.292032242,-8.17451096,-9.00696564,-0.0801906586,-7.77005005,8.7723217,-3.58908606,-1.77088547,-3.27242661,0.325503349,-9.25698853,-2.19746876,7.14174461,-8.71313953,-1.7371397,3.89500523,3.35613728,6.60399246,-6.69013739,-1.13902664,-3.61015034,4.20549297,1.71149826,5.14550209,0.447491646,0.99301815,9.65676498,1.24489021,2.87744331,1.17998028,-8.07773495,-2.49067879,-0.844047546,-5.90012169,-3.34966898,2.11351204,1.78203583,-9.32140446,-4.85027742,1.38750267,-0.241560936,0.0863647461,-8.46982479,7.6538105,-2.39452934,-4.85610485,3.44190025,8.01662827,-4.51194811,7.68617821,1.57570076,2.80122757,0.240001678,-6.29405785,-4.22906303,2.14007378,8.21676445,-0.825782776,1.06839371,-3.50026989,-9.03354549,-6.80261755,8.40523529,6.80200577,1.31983662,2.49745274,-5.32313395,-5.9096489,-3.47217512,3.15228558,0.477332115,2.51552582,-1.5566988,-3.43089104,-2.98075485,2.4526577,1.81645775,9.20631599,-9.45864201,8.59786224,4.27826309,4.76138878,4.65048695,0.738663673,-5.28691387,2.83818722,1.41157246,4.30534458,-0.0754461288,-8.02028656,3.04896545,3.97144222,8.03539848,-9.05526543,8.15908432,9.73688316,7.80365372,-3.99835014,-0.2666502,-1.58776665,-5.60358667,0.517181396,-7.7383852,0.955570221,0.267036438,8.07567215,7.79920197,1.18281269,-0.475253105,-7.57110023,-7.4807539,-9.02972126,-2.52621222,1.9516983,2.19213009,3.12329769,-6.73512936,2.68234158,2.11439705,-3.32547903,8.67414093,6.29311371,8.37753487,1.22382164,8.76366043,-9.15141487,-7.83104897,3.56428051,4.86786461,-5.7949276,4.65438271,6.20655441,-6.42758465,-8.41743851,8.11111832,3.55698681,2.27655602,2.07613182,-6.43984222,5.57812214,-8.50234032,1.16302013,6.88808823,8.09572601,4.89109993,4.71726322,3.03860664,9.85601425,-9.96800327,7.77237129,-9.74785328,7.83134842,1.47684002,1.25223351,6.2950592,1.06859207,-0.173593521,2.4186821,-9.20436573,2.23031139,4.84394073,-7.88842249,-0.717979431,-7.08658218,-4.17938423,-2.90982676,-5.45465565,3.60044289,-7.35445547,-6.33539772,0.971700668,-8.61657619,1.20985413,-5.99251127,3.86282539,2.50283718,5.18616581,3.88737869,-4.82679892,-4.01306391,-7.56285715,-8.94071293,-6.56534719,-3.79431248,8.99196815,7.99862862,-7.04807806,2.94771385,2.2409296,3.30159569,9.91059685,7.3992424,-0.913450241,7.64481163,6.35274506,-9.4112711,4.76094627,-2.77892876,-5.4528656,-6.30716705,-4.55904484,-3.87155771,-9.27105331,1.41127396,-0.718715668,0.556833267,-1.30081558,-2.81672096,-0.628941536,9.37532616,-8.87619781,-2.25726175,2.20212078,-8.95396709,-9.3219738,5.58746433,8.51795006,1.17578125,1.35518074,-3.48049545,3.31995583,-1.50662041,-1.76717472,-0.906751633,0.236368179,-7.35022545,4.762784,8.11582184,2.59658623,0.814304352,6.00972557,5.45347118,-3.50383949,-9.02532673,-8.67158318,-3.29519844,-2.40023184,-0.695788383,5.88812351,1.6984129,5.2215519,-1.38369083,4.30931568,6.66266632,-0.577941895,6.53713226,9.58739853,-4.59032726,-9.6273222,-6.40328503,-0.00837612152,-0.782999992,0.120922089,-7.66118765,-1.5815773,-1.56906891,8.65816498,-2.19940472,-5.3977952,-0.744146347,-6.87312317,3.41451073,7.66849327,4.37417984,-3.15007973,-3.39505482,-0.690769196,-9.75410271,2.79395962,-1.91631794,-7.55273294,1.22052097,-6.7140274,-2.65493488,-1.49374771,-5.41486645,-7.66056538,8.8752346,6.06966972,-7.07084894,0.241857529,4.90811157,-9.37529373,9.43860054,-5.43728256,-4.40366793,7.55244827,-6.02434587,8.819664,-7.89182854,2.04277229,-7.11545706,-9.48800278,-4.86066723,6.76711655,-5.06305361,5.25861359,1.51672554,-8.3938818,4.03195477,5.07584095,9.65207863,2.46888351,-5.46760082,6.033638,7.36539459,-9.80816174,-5.77566528,8.39715576,-9.00271797,-8.68758106,7.8256588,5.85770416,-9.56667233,-7.06517744,-4.43719101,4.13728905,-4.57783222,0.374357224,-8.17991066,0.247848511,5.57384586,-0.359836578,-7.77730465,6.84656715,-9.74452209,3.81148911,-0.29364109,4.77661705,0.61267662,-2.74633598,2.33600712,1.26775646,7.18786049,6.39012337,-1.19769001,-9.56863594,-0.0685071945,8.60247803,1.82991219,-4.6651454,-7.09977579,-5.93110466,-4.07605171,-6.20530415,7.45453453,8.36208725,1.59591675,2.57944965,-7.19514561,-8.80940819,0.269332886,6.67939377,0.569973946,-0.453353882,0.473462105,-2.51721954,-6.91500664,-0.519351006,-8.73296452,5.05941486,-6.4047842,-5.20944214,4.90842342,-4.1286521,9.74101639,-2.74138927,5.47177124,4.05306339,-0.165015221,6.58948326,9.43706703,8.76731682,-7.69187641,2.63470554,1.48684025,9.31584358,-8.61159801,4.86951447,1.93233395,-3.26978397,4.74202728,-0.740205765,-0.648735046,-3.28355885,-6.77668858,4.19547653,-6.61726952,3.55189705,-3.26174688,-0.17937851,5.19122696,8.96126556,-8.02363682,6.73604774,-7.24482822,-3.82728481,-5.17649126,-1.28892231,-2.91731882,8.6174984,-5.71833801,-8.10963821,1.3119278,9.56829262,-5.71643209,3.92603874,4.94013405,8.83363342,6.86857033,0.0589380264,-9.42246914,-3.43881607,3.81412697,4.03695011,9.00848579,5.61497307,-9.15008736,-5.51180887,3.02850723,0.125699997,-7.34870815,-9.73796558,-5.98587465,-4.59106445,-2.01787376,5.60128212,0.757631302,-6.49885845,-6.31400394,0.534201622,-1.67707539,-6.61152077,0.174373627,-9.29840088,1.78316498,9.64392281,5.41021824,9.54056549,8.2771244,-6.37790394,6.56803513,8.9904995,3.31926918,6.95230293,7.34891701,-6.7390728,-3.59417057,-7.22920275,-1.2117424,-5.75703382,1.53050327,3.1624012,-9.52234459,-2.05007792,4.33725452,-3.76331806,9.91134834,0.0392999649,0.506668091,-4.4235239,-6.1651907,1.64318275,-3.01558256,-2.90106535,1.79676056,-1.85395622,0.549472809,-5.0062871,-0.66518116,0.303165436,-4.68588638,4.3051281,-3.70656872,3.70752716,-7.59631968,8.65623665,5.347929,2.64064598,1.33894539,3.66284466,1.44320107,-4.1143508,-9.890522,9.99224854,-0.285569191,0.44078064,8.20141983,1.25387096,-6.20120049,-3.57480335,-1.72612286,9.05829239,2.7320385,-2.63872671,-9.08397388,5.65418434,9.88326836,8.0760498,-5.83858585,-9.11845016,6.20326614,-1.70585728,9.6618824,7.27202988,0.983201027,4.65733528,-4.17363739,-6.32773399,9.77370453,6.63952255,-9.53644085,1.0346117,8.70650101,-9.82571983,-0.865161896,-0.766643524,-4.98552752,8.24030876,-5.13269234,-5.16238737,-4.23962402,4.64036751,-9.35698509,-2.85156965,-6.32859039,-4.61460638,2.30828857,-4.58497763,0.286077499,8.10655403,6.84776688,-9.56939507,7.18327713,9.33012581,-8.56730461,9.30796814,-0.997451782,-4.17053127,5.88948822,4.63468361,-4.87500477,5.79774761,2.7319355,-4.36068487,9.97187805,-2.62880421,-2.31875849,8.62847519,-1.2387619,0.125089645,2.38825989,-0.501069069,-1.46908188,9.14493942,-1.00698185,-4.33811665,9.27060318,-8.95667648,5.13716602,0.352038383,-3.29137135,1.92313194,2.07740307,-5.08981943,-4.59733486,-7.40760517,0.37690258,-5.39894104,-0.00233745575,0.722349167,0.5102911,-3.53812742,-5.31157494,8.35930634,-5.1412816,-9.52227211,-0.8340168,2.67877579,2.19164467,-5.03115273,1.41264915,2.38504028,5.36894321,-4.16548347,-9.28127766,9.56658936,5.65173531,8.71265221,-6.45847797,-7.635993,1.86256599,4.15085888,3.49446392,-8.54171276,-0.57105732,2.24029732,-7.32176208,3.14772701,3.84700298,-3.42952013,0.0520935059,-4.46759272,-6.83242846,7.37156296,-6.13428307,1.10404205,-4.35711002,-9.9541626,0.386936188,3.23755836,-6.34290266,-5.1671443,-4.19412565,9.3351841,-3.55274248,9.05469513,2.26331711,-0.420501709,-7.37274265,6.31290627,1.03219509,8.0939064,-5.71595192,-8.00309563,-8.03122139,-0.733906746,5.23061562,-9.05515289,-9.95116043,-9.14879131,-3.73524952,1.6625042,1.71049595,8.29736328,-6.21055603,-0.808283806,-4.82823181,-8.09777641,0.678667068,6.35287094,-7.30832577,8.96461868,8.37114525,-6.16241741,8.24952698,9.7743206,-2.983181,1.67836952,8.35552216,-8.73757553,7.56505585,5.87835884,-2.42822075,8.89715576,-5.48333645,1.56575108,-4.41776037,-9.29524422,-5.16860914,-8.81275272,4.06880188,4.34576035,-0.800283432,9.64131355,1.56298542,9.08249283,9.45952606,6.25799561,-1.87956524,-9.85090351,-4.14307308,7.37604713,9.23521805,-3.68858099,6.01669121,2.54628658,-4.56333685,3.99373627,2.72016621,-2.17075872,-3.94663763,8.86167336,-1.84609985,-7.3990159,4.73944855,-4.08170033,-1.13493729,5.11476421,3.83073616,3.16675663,3.68394756,-3.88734436,5.40000153,-2.15933275,8.09665489,0.476374626,6.43781471,0.36511898,-3.44427586,-7.94676495,-1.2831583,-6.04001617,5.45122623,-1.24650478,9.99135208,4.66213131,-3.55639935,7.59734726,8.62814331,-6.77357054,-3.39868498,-1.69559574,2.12563515,5.54061985,1.2083683,9.04043198,2.53411388,-9.14760399,-3.772686,-7.53203487,9.09371185,-1.9841423,-7.47343302,-5.99090052,-9.06654644,-1.44175434,8.43510628,8.82868958,3.77068615,-6.08347368,-4.93983269,-3.77153778,-8.22719955,5.46345711,4.32779694,-2.71202564,-1.01241016,4.42081833,0.690384865,3.30032253,8.5151825,-5.34447098,-4.51905346,8.26016426,8.58979797,8.72351074,-3.92907619,4.01268578,1.20471478,7.64162445,-7.19840384,-3.57286215,-9.09564114,9.5583992,8.00186539,7.35630226,-2.64103127,-7.81025743,-6.99834919,-1.25991154,4.6662693,5.97259521,1.4149456,0.974205971,-6.52057076,8.7724514,-1.42180824,3.6734066,-1.04660416,9.72003555,4.64639664,-8.01959038,-5.263134,2.50425529,9.02356529,-0.948250771,2.75143623,3.385746,4.23350811,-7.43017864,0.985826492,8.78303146,-3.60106373,-3.0727725,-4.09050083,-9.05456829,-0.127188683,2.34439754,2.28938198,-2.34590006,-7.54241514,-5.37358999,6.07350159,-2.66108227,-4.80776978,-4.18707561,7.82641602,-1.44025517,-6.3672719,5.26063919,-4.44608164,-5.29173565,1.80239487,-7.15441895,-4.32172728,4.72859287,-6.5498991,-4.15811253,-5.39376545,6.98400116,0.0994215012,-9.02406597,-7.47386169,6.8039875,-5.38506651,-6.8134737,5.95065498,-7.34541798,5.56456757,3.70194626,-1.37547588,2.37132168,-5.2010603,5.78087807,-0.772656441,-6.02896309,-8.78880405,6.57036209,8.0983963,9.75435257,1.41099167,-5.46086884,-0.819758415,2.32235909,-8.10465622,5.04656601,-2.37485313,5.84994507,0.033493042,2.92389679,1.92652512,-0.900766373,0.819301605,9.99543381,-6.7574296,7.88127518,0.578359604,0.485155106,-5.99160957,-0.978280067,-1.95530796,-2.86527443,3.32790184,-7.9646554,-1.965065,-6.84571171,4.12938976,2.6431179,2.87583542,-5.83414221,5.56968689,9.73080635,5.66859436,-7.91815281,-0.393933296,-0.847384453,-1.98388386,-3.139503,-5.62533855,-5.06332779,0.655299187,-6.3795042,-0.332290649,-4.80263948,2.04214001,2.23786354,-8.23348141,-0.116768837,-2.52634621,-0.302139282,1.93989944,3.90261173,-8.80012035,-3.626688,6.24791908,8.76594353,9.21297836,2.51416206,-4.48263836,0.295545578,7.23683167,9.44821167,-3.90743828,7.682621,1.80618763,-3.39455414,7.73071671,-9.8325491,4.34485435,3.97163773,-8.69458771,-9.93662357,-4.82519579,2.93500423,8.61078835,1.52888203,-4.08510303,1.66823483,-1.9793005,-6.09703684,7.09963036,3.50414753,-5.79205132,-7.00510883,5.13955593,0.517591476,-0.839597702,8.88506317,-8.7535553,-1.00604153,-8.53636456,9.32637787,8.41304779,-1.90047455,-1.2849369,4.06419277,6.88505363,-2.90465117,1.52542114,-2.25271463,-1.37307072,2.80876255,6.87347412,2.47170258,1.90196896,6.38864326,-6.08570051,-2.36568737,-0.105194092,-7.99004221,-8.64040279,0.743146896,-9.92022991,-9.30804062,-0.232540131,-8.30825424,3.17807579,-6.0894165,-4.82402706,2.57653046,3.73618031,-6.01821852,-8.19502068,6.29327965,-8.86773968,-0.105507851,6.72496605,6.52201843,-4.4188242,-7.18131542,3.63187981,1.00811577,3.40330887,-0.587931633,-1.36635017,-4.24279785,-8.70635796,-7.75154972,-0.297141075,5.95018291,4.72036552,-4.81429529,6.13841248,8.29378319,-6.39862251,-1.64497566,-7.11014748,-0.245322227,-3.13927221,-1.75285149,-0.165754318,-5.83127832,-6.29422855,-7.10321903,-3.79724407,-0.281757355,4.49976921,7.62812805,5.9281435,-5.69840431,6.91875839,3.59315681,-9.81709862,4.01689911,-7.97102642,-9.03684044,-2.17151928,3.27697182,-3.94671392,7.57752228,-4.56637859,-7.1202817,9.42580414,-0.530014992,-7.95822954,6.03413391,-4.2920084,4.21248627,-0.726417542,-8.90821934,-0.438326836,-6.95332289,-4.49524021,8.49129677,-6.769907,-1.82581997,-6.56266975,1.21325874,-8.75749016,-7.13870525,-0.215417862,-0.534065247,3.97129822,5.59873676,-2.03022528,-2.00192738,-6.39518929,-3.94804239,5.24857903,-7.13746214,0.671282768,2.25341988,-6.76904106,-7.27519131,5.86229134,7.51617813,4.39477921,3.05374718,4.32461929,3.87550831,-4.32439518,-0.109459877,0.308050156,-2.60949993,2.13543129,-9.79585743,1.02502918,7.66518021,8.67672729,9.76530838,5.5447979,-8.56562042,-2.38655996,9.09016991,-1.51385403,-3.35138702,-6.75311279,0.435004234,-8.87968254,-0.823861122,-6.63562346,-4.92522955,1.66481113,0.485772133,4.37645149,-4.97805977,-6.24867725,-1.5165081,-7.94666481,0.407024384,0.860711098,5.97660637,8.83598518,6.40394402,-8.91198921,-3.80108166,-4.77839708,9.47994995,9.50423813,-2.29003,-8.5358839,-2.59821892,-8.26638985,6.78307152,3.09418488,3.95509911,-6.6473093,-1.3287487,7.71757889,9.36475563,-6.54918051,7.92235947,-8.92549896,9.13512802,-5.90294695,9.17291451,9.16778755,2.99179077,3.03730202,7.94672012,0.517112732,-8.87868786,-4.10016251,8.57159233,2.75144958,3.61271,-1.17063618,5.12416458,1.83965206,-0.967083931,6.21533966,1.22109795,2.98628807,-9.45879936,5.96679306,3.90464401,5.36417198,-4.35086298,-4.95121002,5.01382637,7.37910843,0.671056747,-1.56036949,-5.13320351,6.25130272,5.65300465,-9.9586134,5.58328152,-1.78773499,-6.45191097,2.73694515,-0.172587395,-0.671820641,8.70994186,7.97733879,-4.85402822,-1.65061474,-1.87918282,-3.42968082,-2.64941263,-8.68130398,-6.67754364,-9.4809742,-6.72929287,0.772105217,-3.21773529,-0.477131844,0.853569031,5.94373798,-3.59001112,2.68954468,3.18770409,-4.26592731,2.5600729,7.14196014,-5.08107805,2.31958199,5.21292877,-6.2906394,-6.77646875,7.88905334,-8.67353344,3.92765427,-7.9184866,-6.00935411,0.78962326,-8.8025589,-4.60915804,-6.11818171,-8.27951813,6.14316559,8.18614197,4.49652195,-6.95547676,-0.698459625,0.990904808,-5.86931658,-5.60607195,-1.24949074,-0.190857887,-7.74317551,0.454005241,-9.5295372,-2.93210793,0.0612449646,9.34482384,-1.52827168,-5.67080545,-9.22657871,8.89762688,2.42771339,2.59276295,-3.44597864,3.43110657,6.61031342,-0.488028526,-2.2922368,-5.62113476,5.59266472,-4.08561134,-6.86704683,5.53970718,5.85068321,-7.56124163,-1.78962898,1.69852257,7.07733917,8.85663414,-6.55668592,1.78194809,9.189394,6.13939476,4.80679512,7.81133652,5.13643074,7.9762001,-3.99576187,3.22714424,-1.37620735,-9.92233944,-4.75867558,0.940774918,-8.39988136,3.19450951,-9.87868786,8.88721275,7.40114021,-9.03993511,5.81004715,9.475811,-0.0570030212,1.95668602,6.02412796,7.51023865,4.56145668,4.39743614,7.7225914,-6.38030958,6.13982964,-7.86944485,-1.75727463,5.48483372,3.59665108,8.92966461,0.85452652,2.0347538,-1.89758873,7.23197746,7.85893822,5.17419243,2.64716244,-9.12710285,0.77680397,-4.27001762,-6.19301605,-6.01932049,-6.71549702,-7.35933924,-8.41428852,1.04930496,-4.32098961,-2.87569094,8.26047325,-6.22460699,3.03117943,5.04530334,-3.58290482,2.12088013,5.61930275,3.62340832,-1.38875961,-0.883062363,-1.62260914,8.80836868,2.25610638,-1.62200356,-1.02126408,-4.38820171,7.49418831,-5.17482948,6.63681412,4.95682144,9.30393982,-8.66361427,-9.36379337,2.72221565,-7.71391582,-7.78829098,2.18948936,-1.25628567,5.60644913,7.59072876,-2.63167763,9.39943123,-3.77111626,-1.14402199,-7.57676125,-2.63140297,-5.99662971,-5.35186243,-8.75718784,-2.05015612,3.02367687,-1.0656805,9.11407089,0.20115757,0.853540421,5.46664238,-2.13357544,0.989104271,3.87566185,-1.75671959,-5.191926,-0.697844505,-8.67421818,-7.5893178,6.33399391,-4.57728338,9.60149002,-7.75844526,3.81060982,4.90638161,1.55772686,0.724192619,-8.49180794,-1.82062912,0.688042641,3.93681526,6.05593681,2.12701702,8.77742386,2.16287613,-8.53375816,-6.87820005,-1.90903759,-5.19011021,9.81529045,5.59268188,-3.78335667,-6.87766933,7.01725006,-1.08122158,7.9094677,-5.58585358,-1.43839931,4.8327055,3.28382683,-8.71704483,-7.36781979,9.04968262,-1.97893906,-0.0182962418,-7.50031757,2.157897,7.76541328,-6.69181061,-9.26042271,0.0710058212,-6.61400604,-1.59652424,7.21872139,5.05754471,2.15982056,0.110702515,0.571294785,1.75146294,-3.14477396,5.79080582,6.06628418,-3.96870995,-2.10869837,-0.896352768,-5.00738001,0.967268944,-3.10107136,0.295560837,7.48352051,-4.48070574,-7.22768307,4.33477879,-5.37048864,-1.8010006,-9.42297935,7.98332596,-4.23243332,5.49171638,-0.709105492,2.06742382,7.20251274,-7.35207224,-6.27847481,-2.32102442,-9.45651722,4.31506348,3.28201199,0.770290375,6.25754547,-9.41995907,-1.24826813,0.353204727,-3.68005514,9.31266022,-2.10624123,0.410755157,3.54617214,0.521495819,4.77621269,-6.19141245,0.931407928,-5.81900311,0.0160646439,-9.99300003,7.65271378,-0.846134186,-0.976186752,-6.77781296,5.29260445,-7.20621586,5.12930679,8.24762154,-2.23255539,-2.55232716,3.04061413,3.60300541,-4.28704166,7.69746399,-8.7250042,-1.15161991,4.72991943,-4.2444334,3.79960823,-0.00129699707,-1.79401207,8.03673553,-6.58466339,-8.4358654,-1.59834957,-3.45657587,5.32767391,2.21158409,-9.90836906,-9.96039772,-4.40016508,6.42286682,9.1103344,-2.61046457,5.91950798,9.16862106,-2.97834635,2.93784046,-3.72850037,-4.91039562,-9.01821327,-9.10438347,2.63240337,2.7974968,-2.47833014,6.70234299,6.28835678,8.40487671,0.75097084,1.56355667,-1.31345654,4.74086857,-0.226926804,6.04332352,-9.86318588,9.43283844,-2.29361057,-8.71612358,8.10287666,5.05701637,-6.71434259,-7.9565177,-5.19143581,7.53987885,2.74006939,-7.65138817,3.11685085,4.90612793,-2.7173481,9.52279663,9.65699577,5.13130951,1.91227913,-0.329124451,8.40477562,-0.935925484,9.90869904,-4.48460197,7.29143333,7.12272263,-8.41969776,-9.85976505,6.9317646,2.15907574,7.57708359,8.06509399,-9.94781876,7.01495743,0.370779037,-8.312253,-4.03979301,3.2018261,-6.91844463,1.70748711,-2.26974726,-7.64428329,2.53237534,1.63139439,-1.15076447,-0.899301529,5.44215393,6.29222107,-6.62905884,5.40732384,0.89467144,-3.26037025,2.95724773,2.46204758,-0.361049652,-8.1576395,-5.44602489,8.66016197,-8.65104675,1.85410404,1.91786766,-6.39062309,-7.20094395,-6.2625761,4.88515282,4.76795292,-5.00772381,-4.8168869,2.58122349,2.62613869,-2.4829793,8.56481171,8.7960701,-4.45928049,-7.12813759,-2.6026988,-3.55465364,-3.06206322,-4.09637403,-7.7569809,8.42688751,-9.28857136,6.9776268,-7.01586819,4.30002403,-9.49187088,-9.88057804,-2.86921883,-2.95878506,-8.30737972,-2.13824749,2.47794151,6.76936913,-7.2189579,-9.02833176,0.827987671,-4.02697086,-1.30222702,-6.53703737,-7.98800182,5.65271282,5.13096619,-3.85575533,-3.6789856,7.28231812,-6.08315277,0.454727173,2.5950737,-4.59071636,3.82638931,-9.87079906,1.4759264,5.90065384,-7.70713902,6.11700058,8.41963577,8.82715416,-2.02753162,3.27471542,-1.87549019,-1.37439919,0.472774506,5.91837978,-9.78152275,1.94446659,0.65910244,-2.46592951,-4.8776865,0.724746704,0.825483322,-6.08384466,8.82411575,6.91887093,5.45207596,-6.96165943,-4.60697269,-9.39169216,-6.16261005,5.01441765,-2.68578577,0.00083732605,-5.94016266,3.69026566,2.2931633,1.20249653,-9.64100647,3.60946274,4.24169064,-9.90208721,-4.38580704,7.74677086,-0.022851944,-4.07007122,-5.68466949,-2.24060059,2.22350883,-9.49367905,-0.265987396,9.56058311,4.71411133,-9.92556477,1.02853394,6.57457542,-1.13040733,1.24968433,3.43379116,-8.25893021,-7.83270073,-4.20179892,0.364601135,7.86720085,4.06234932,-4.08764601,-1.07047176,8.57493973,-0.976799011,2.94021606,-3.79194736,8.74569702,8.93199158,-0.0382022858,-2.05318546,-7.88732529,-2.26981878,-8.8431263,-6.42601252,-1.99185944,2.82202721,9.81527138,5.27399254,-0.00208950043,4.8736105,-9.21612167,4.63687038,-8.10860062,-1.24262619,-4.80966997,3.88306046,2.5891037,-4.9216404,1.997509,-7.85921097,-9.75527954,3.02392483,3.10781002,-7.04502296,-5.70472908,0.622891426,8.923666,0.0421247482,8.00114632,-4.72542095,-0.155343056,9.14176369,5.61999798,-4.69964933,-7.0088501,2.25765324,4.37421989,-2.47341204,9.36210823,8.94538689,5.13630295,5.84930611,9.29493141,-0.0752153397,-4.13605928,5.25322151,-9.10715199,-3.9041276,3.32466221,-2.39674091,-2.02008915,8.36263466,-9.19213295,7.81760597,-9.5067091,0.74187088,8.61845589,-9.59993076,-6.03495693,-9.52701187,-0.485012054,8.40901947,-9.62971783,-6.67277241,-9.2819767,-2.18360949,0.0781288147,-6.89387894,-5.42054224,-3.05555391,5.29858112,-6.75414038,3.16314697,3.00642014,8.90269279,7.56123734,1.71386909,5.01568794,-1.33685875,-8.58991051,9.36982727,-1.30687141,-4.5812788,2.45014572,-0.396003723,4.36143017,2.5634594,4.07331848,0.25121212,2.11482525,3.86758041,2.42446804,8.03263855,4.54078293,-3.06361771,9.77263069,8.61445618,3.15293121,-8.69504261,2.41466618,3.29445267,9.85362244,9.83686066,8.10775948,7.10209846,4.96480846,3.53290462,-2.47446108,-8.26757145,6.92381668,8.58752823,-9.4378643,-2.18406248,-7.53833771,3.16145706,-5.40799618,7.80906105,6.87847519,6.54490852,0.283538818,5.44125748,-8.77353859,3.12876606,5.16209793,-0.60928154,-0.192388535,6.5235672,1.57583427,5.05897903,6.26112366,-9.27071095,7.16099358,-5.16727781,-6.43716288,-9.39489746,-0.0380840302,-0.0731143951,-8.82692432,5.87669563,9.64025116,3.68505287,-5.31771803,5.10993004,2.58863926,7.26466942,-2.69941711,-9.1007843,3.12601089,-1.13056278,-1.36463642,4.55104065,9.33924484,4.67723083,-9.76978397,-0.76199913,-6.91639853,-3.90767288,3.74094868,-5.88543224,3.54097557,-6.82172441,7.27600098,7.74025154,-9.57887268,7.87940788,9.22154236,6.44469261,-4.05130339,9.74916077,-5.85803413,4.01715088,-3.74963951,-0.184671402,-3.77283335,9.9851265,0.0458011627,9.78344345,-9.64128494,-1.06929684,8.32118225,-5.87580252,5.39232731,8.83690071,1.79637814,-8.28253651,-4.58970785,0.782061577,4.11645699,5.29435635,2.2384634,1.85737038,-3.18500423,9.63977242,-4.34104538,0.049785614,-3.26008797,7.70534897,3.80735874,-9.72418022,5.70439529,-6.21843147,6.81932259,-7.62328196,-4.4994669,-2.53863859,-6.90451336,-4.16057205,-6.73796988,-5.05866718,-1.02403164,9.09702492,-6.30359459,-4.51044464,-7.03825045,8.12401962,0.413470268,9.18705368,6.80985451,-6.77844906,-5.39007711,8.97447968,-5.91127729,9.16355133,-8.20093346,6.91670227,9.02126503,0.419068336,3.29084778,9.28222084,6.2793045,-3.72283745,-9.72891045,6.20758057,-9.19376278,0.422807693,6.14269638,0.320484161,6.38868141,-5.41638899,6.74595451,-0.73803997,-4.23076057,-6.38626003,6.13276291,-6.66465187,7.20254707,-6.80391312,6.62820625,0.275741577,-5.60127735,-0.667627335,-0.816577911,-4.22479105,-6.05768442,8.50030518,4.64216328,0.838712692,-3.75735569,-9.87449741,-0.675619125,4.86367226,3.74771309,7.82435608,3.95717525,8.24076653,2.56172371,-5.10135221,1.57683849,1.93106556,-4.57519579,4.68287659,5.11539459,-5.55686474,5.77672386,9.38873672,-3.48145914,7.1185894,2.11814404,-0.344650269,7.45515442,-1.22179794,5.23815632,-2.29724121,-9.7345686,-8.89313698,-6.94958305,-1.64088631,1.62165451,-4.86682653,3.24867058,0.3977108,4.33457851,-8.74020958,3.28893661,-2.85050392,-8.41747475,7.50582695,-9.57554817,3.76093769,-9.92507076,9.34201813,-8.72534847,-6.9329586,-2.23418188,-9.89593983,-1.052845,4.84042645,-6.94495296,-3.82126236,-3.95101357,-4.69085741,0.759419441,3.55878258,-7.54637289,8.11041069,-8.32641602,-2.07020473,6.06701851,8.37284851,2.46018028,8.24832344,9.55865288,-7.72071075,-1.98096657,5.89176178,2.83284378,-8.39241409,8.69378471,-3.56918573,-7.30504704,4.07259083,8.02955437,-7.29513931,-9.40355968,-5.62154388,-1.28530502,-2.12458706,-7.93629837,-5.36923027,-0.652898788,6.72662926,-5.53925085,1.80804443,7.80996323,2.0458231,4.14757538,8.28584671,0.223922729,3.47722054,1.65268517,-3.31256962,5.63471603,2.65619373,2.66204071,0.931968689,3.59971905,0.482584,-9.21195126,-5.25952196,3.21340179,7.64619064,9.53601646,-8.17523384,-1.15364838,-9.35814476,-2.34220314,-5.40542603,-8.99689484,9.19274902,2.54231548,8.70763016,9.1352253,-4.26582718,4.24743748,6.6890831,3.42638779,7.2880249,9.82931519,1.30993271,-3.9572134,-8.87798977,7.63156509,3.71601963,-4.87057972,0.160464287,-3.08175516,4.94447136,1.71935844,-2.75649834,-8.47231102,5.87211227,-7.39955473,-4.31706905,3.02061653,7.49832535,4.35510445,-3.76105356,7.97552299,4.5949564,7.43959045,-2.81490374,9.91534233,7.16262436,2.23894596,9.958601,-5.78974152,-8.1791172,-6.41648865,-1.92742443,5.77286339,4.5284853,-9.74691677,3.57142925,5.01484108,4.45201969,5.09437943,1.22578621,1.78358173,-3.33097172,-3.64038849,-4.01012611,1.80854034,-3.85025787,8.71286774,-2.82109451,5.86642361,-3.0078907,6.38617134,-7.60427618,-5.07027531,3.88477421,-8.59389114,2.47581482,-8.98195553,0.272536278,0.523562431,-0.493647575,3.2664957,-0.0029258728,-9.16658211,-2.74653912,-1.08693409,-8.09926605,-4.35585403,-8.83157444,7.72335434,6.44163132,4.49814606,0.329906464,4.75385571,-1.95011425,4.43161392,2.12440681,4.92017269,-6.66356468,5.47383213,-1.31447029,7.70129776,-4.29927158,2.13584042,-2.93040991,8.60354424,-0.234084129,5.74545383,3.84131241,0.922229767,-0.0873851776,-8.67962837,1.48329735,9.78832245,-7.65897083,-4.3232069,-0.144079208,-1.53288555,-3.20836735,-3.03202629,0.737470627,-5.33228016,0.362928391,-0.275952339,2.06845379,4.51005936,0.574139595,9.55524063,-5.07328367,-6.67701435,-0.581922531,-0.371906281,9.35976028,9.50127029,7.83784103,-9.41402435,-1.50494862,6.32495117,3.46076584,5.09196186,0.606303215,-9.85990334,4.59840965,5.48291779,-8.59367466,6.11476326,-9.17198086,6.52314377,-5.51109886,-5.03894043,-9.47022915,-6.13817024,-4.22782707,2.91031837,-6.27803755,5.02668381,3.48050308,-3.18424654,2.37186623,3.96346188,-6.09996128,-2.05247211,4.10251617,-9.00913906,3.39836979,-3.59690857,6.7605114,3.91629791,1.2264204,-7.55705929,8.50572395,-4.30366516,8.29655075,0.130552292,-5.81766319,2.53926086,-2.65401411,-6.0147543,-9.97747707,8.54567146,7.10615349,-6.88817692,-9.59212971,5.08380699,3.54513264,3.05616951,5.04819298,4.97157669,-2.70299196,-9.18601227,-9.30414486,5.24145603,-6.84945011,1.29460144,-1.64276886,9.9860611,-4.28330326,-9.47259998,-5.99254704,3.26285553,-1.18400192,0.48216629,3.76826477,-6.76321936,-9.4242878,5.99686432,9.29009247,-1.42781925,2.64828491,9.72270775,9.53954506,-8.851511,-7.3502779,3.87198639,-3.51522541,-0.401185989,-2.74371147,6.44276237,3.51888466,1.87794304,2.59259987,-6.18849516,9.95938492,7.39330864,-0.667256355,5.41242981,6.70079231,0.218250275,8.14030457,-5.91358042,-9.5448885,-0.947310448,-1.44634151,-8.66621399,6.93955231,-6.94881201,-8.68511486,9.27614594,4.18353558,-7.32294369,3.28252316,9.3716259,8.91747093,-4.05875969,4.41971779,2.20246506,-3.15509701,-7.71322727,3.79489136,0.746697426,9.73266983,-3.02530193,-6.24255705,1.34327126,-3.62767982,9.58714294,-8.87745571,-3.39691114,8.11332321,0.622358322,-0.0203094482,-1.34216499,2.23894215,9.90381622,-6.55425835,2.5836277,3.03258801,8.70191383,-6.94144011,-4.78382826,-1.79993439,8.49658775,2.16456985,-0.0625228882,9.17977524,4.46836376,-0.221191406,2.43758297,8.45825768,-2.05581474,7.92123795,-7.75981331,0.817205429,-5.22291565,-1.54256248,-5.84439039,-6.66929102,9.22748947,6.42828178,0.13053894,-6.02662706,-9.51968288,2.68388271,8.02672195,5.13728333,2.33539677,-8.98509979,7.42388153,-6.80616474,8.78348541,4.03966427,-5.3609643,-1.72654915,1.89622688,9.87135315,7.81882668,-8.99269962,-0.300115585,-4.04732513,-3.39314079,-8.51828671,-6.8453598,-9.95966721,7.87298965,1.35147667,-5.73550606,3.35341454,0.845872879,-3.41456223,-8.55209064,5.0095377,-4.69079542,1.79516029,-8.73033524,9.26196671,5.86886978,-1.91021729,-5.01148605,-8.0484724,9.32947922,0.546527863,5.50617123,2.22358799,-8.15803146,7.97293854,1.16486931,-2.05437422,-7.8688283,8.60327148,-4.79122257,-6.0778265,9.9743042,-1.87658691,0.20561409,-4.23464346,8.34416962,0.440984726,-8.37016106,2.69734383,-5.73375988,-7.29801321,2.28989792,6.3194561,-8.90338326,0.839143753,3.49956703,-2.7758193,6.80333328,3.6119976,6.84093094,-4.45971251,5.60711384,-1.23916435,-6.63892746,-0.460519791,0.043170929,5.56790257,-0.267666817,1.32664204,-3.11812639,-6.3495965,2.33161449,7.45491982,-5.15345287,5.91490555,-8.18689919,2.78515816,-9.84252357,-3.28642654,5.02571201,7.14248848,3.79073715,-9.07453442,4.29406357,-9.67409325,7.50851631,-4.35650826,0.16251564,-8.6065979,8.9012413,3.16362572,-8.92537594,-8.79151058,1.08788872,4.13486958,-5.23926401,3.68832684,9.70494461,-8.99355316,5.35790539,-9.67485332,-5.25816965,5.94196129,6.53673744,2.9522028,-2.32711506,8.18052101,-9.98512936,-0.0722541809,5.61883068,-4.30470467,-9.16814899,-9.07444572,5.79375267,-4.40312958,-3.3996439,2.18177032,9.02054787,8.35268593,3.59060097,7.22067261,-2.14808941,-2.93879032,7.75597763,-5.29991436,4.34035778,8.39614677,-5.97654772,-7.84250593,-8.99711704,5.45158863,4.84882832,-5.74848604,5.19916344,2.33934498,-2.62281036,-1.5783596,-7.48557043,-9.97989368,7.93119812,-0.35314846,4.62861061,-6.9327383,1.47129059,7.98523521,7.84300232,-2.66811275,-2.96872711,4.59509754,9.79297829,-9.40200901,0.435726166,3.25729465,5.34723473,-9.01406956,0.526353836,6.44124603,-1.98725414,0.226384163,4.84756565,-6.96843386,1.53265953,-0.594934464,0.928499222,5.30015564,-0.285829544,-3.92962027,-5.13023567,-3.87014961,-5.60786915,8.54448128,7.08504868,-1.59629345,-8.90315533,4.66232491,-0.290925026,-9.57592678,-2.60722256,0.40747261,8.40345192,-3.16469193,-8.97869587,-4.94491339,-9.15926075,0.304334641,-5.0590744,-7.86052227,8.20832634,-2.66463804,-4.57368183,-9.87547493,2.89557934,6.00031281,7.27957535,7.81342697,0.283088684,-2.12480593,8.38515091,9.23958588,9.73356247,-8.00837708,3.20382023,6.61128616,-4.10055065,2.05160046,1.25090408,3.93089676,6.57746124,7.39402199,-8.67929459,7.10404015,-2.40298843,-7.02867699,9.02853775,2.63048553,-9.42444801,3.29410553,4.03033447,-2.1697855,-7.58827353,3.88493919,-5.8258605,4.76072502,-6.49160194,-4.34880495,9.64009094,0.991373062,2.0063591,0.870137215,4.38623428,-0.563102722,-4.0721674,-0.91679287,-8.53224087,-1.36752319,-3.96556139,-9.19398975,-3.38769436,3.02440643,-8.79878521,-1.18754864,0.871059418,-0.102684021,-5.82078218,-9.8841095,-2.2203331,2.85558701,-6.15613937,-6.24068642,-7.21162844,-5.8409667,-9.12512875,-6.03140831,-9.87974739,-8.90948009,-1.63683033,9.79371262,2.92906189,8.74396896,-0.109161377,5.32209206,8.38985252,8.2411499,8.99766159,3.68334961,6.05749321,8.28055191,-8.7651825,3.58016205,-8.21490669,-7.94559479,-1.6169014,4.74478626,5.61694336,3.97799492,-1.83913326,9.68471909,-8.90388298,-7.56481075,-1.77734089,8.22920799,8.29167366,-1.84753609,8.46665192,-0.968604088,0.67414093,-9.71975231,0.129411697,-4.99132872,-9.25715637,-5.02075291,-3.79995108,-5.77706814,4.81427097,-6.55821848,-3.98073864,-4.27085972,-0.348100662,9.47553253,-4.72543192,-0.333940506,7.4494381,2.70654583,8.90434074,-4.75720787,5.60902119,-9.18392181,5.83374882,7.81812668,-0.746497154,-6.38110542,-7.23230362,6.66573334,-9.01077747,-4.13057089,-2.50519037,-4.73609686,0.42326355,-6.22048759,-7.73660088,-9.05002594,-3.79066086,-9.63912296,-4.74320412,0.964849472,-3.77283382,9.9796505,7.96934891,0.859719276,9.3036232,5.99363708,-4.95024729,1.19296646,-9.81297493,-6.67058277,7.51135063,3.26600933,-8.1811676,-0.893680573,-0.0840206146,7.87121201,-8.55167198,-7.94719887,-8.57373428,1.24881744,8.86938858,7.80960274,-4.0009861,-4.57830048,-7.49818802,-2.0410037,-3.14574814,9.4061451,9.0760498,1.17716789,4.66711807,0.236779213,-0.443141937,-7.8776679,0.0368700027,-0.315986633,9.21200943,6.2500267,4.20906544,1.76338577,-2.77532005,-4.80319929,-7.3717308,3.32477379,-0.539230347,-2.84145117,3.72980499,6.83017731,-5.20626736,-1.73342609,6.31108284,-9.62964153,-5.39096928,-6.02303505,-9.14393997,-2.20326471,9.72426414,-4.28500557,1.9116888,9.76190948,8.4112072,7.16564369,-7.02332878,-1.08388996,3.06562328,3.93413162,0.962275505,-7.03919458,-7.74378681,-9.8212347,-5.4915905,2.84038162,-1.69695759,-0.761173248,6.95599747,9.45256805,9.28664589,0.64640522,4.12463284,2.71522522,-5.20086718,9.02819633,-3.1135993,9.73132133,-5.6760664,2.35251045,-1.35601234,9.5065136,-4.04068518,8.20384216,1.95662498,5.00435066,8.13644218,9.18797493,2.28524685,8.15155792,3.23771286,-3.77366257,-3.94205284,5.92104435,-4.9995079,-6.7240448,8.97638321,6.06992912,-2.7112484,-7.94863462,7.29678726,-2.90580702,2.10052872,3.58786964,1.32934761,2.35433102,9.2455616,-9.84957981,-1.89458275,-2.2613306,-6.17905855,8.56044579,-4.59148169,-9.03718758,-8.01014709,-6.54373932,-0.629178047,5.40610504,0.419167519,4.94753361,-6.79878521,-7.18609285,3.33708763,6.43990517,-4.51185751,9.21059799,2.50607491,-0.394114494,-3.8873024,6.10844421,4.64125061,5.49041939,-2.51368284,-7.47185421,0.550665855,-4.96561623,2.8874054,8.62749863,2.36092472,0.0592803955,-3.67650509,8.97448349,-5.87042379,-4.20919466,-3.94115162,1.0703907,-9.93375492,3.38602161,8.86374474,-7.04395771,-7.79345655,-4.62592077,-7.84806538,-2.43895721,8.44534302,0.889225006,5.21243191,5.35549355,9.78846741,-5.2318573,8.17565155,8.17844009,-4.95397329,-1.43270111,0.590838432,-9.78614902,4.1937151,3.76430511,6.68493652,-6.26727486,5.91536522,-0.452724457,-8.94184303,-5.55102348,3.94694233,-3.73493242,6.98960114,-5.77862692,-1.3840313,-1.41176033,-7.46046686,-8.06846619,-6.70930386,-3.26314974,-3.75553322,0.758224487,3.48868465,-5.68104315,-1.28993225,0.102276802,-1.02916908,2.75041485,6.21813583,8.20294952,6.95926666,4.40244484,-8.11826706,-3.71382523,1.73888397,5.42116547,-6.4785552,-5.07600832,7.52729797,-8.68773079,5.30948162,-3.54118395,3.32224083,-3.08259058,-9.10401917,8.75888443,-9.42194557,5.36788368,-1.97438622,-3.51819754,9.65593338,7.27654266,-3.13607931,-8.08696747,2.33981133,5.19933224,5.17937756,9.8097496,-7.51904106,7.47430229,0.595218658,3.84073257,-8.80281639,-8.94293213,-3.85298777,2.82936954,-6.7808857,-6.34390211,-1.96331596,2.55874062,4.75322151,7.3991375,-2.71351528,-6.04646111,-2.87135983,1.0583868,8.29634094,-3.39178371,-5.71459484,-5.19204664,-2.73238754,-3.23762417,5.25112343,-4.35430145,-2.74832058,8.97141266,2.52312469,6.13881302,-4.98727989,-1.20750141,5.52412891,4.02810955,0.427995682,-6.67780972,6.05016899,5.19367695,-9.86686802,7.55693626,9.43030548,-4.84182358,3.4678793,4.65665722,4.44181252,-6.45587873,-3.95217419,-4.18837786,5.92932892,-5.75618935,-4.27402878,6.40253448,7.4110527,-2.44079542,-2.44752693,4.40884399,-0.563761711,4.86275578],"expected":[-112.856949,-55.5293045,-140.318832,63.0039101,-189.907608,-76.8495483,1.80805969,-45.2085609,78.6021881,100.344742,-44.6945877,0.765014648,-48.6807556,-80.4312363,-49.0026131,-83.3079681,99.3900604,327.618347,-223.426575,-83.9789734,-143.182648,47.7072601,121.821716,83.4197845,22.3813286,25.5414429,-102.079773,81.7437897,48.1642761,57.2190399,-49.4466286,24.04422,147.229736,98.7927551,-236.029327,35.9465561,108.365868,-66.6285324,128.819763,38.9909973,-120.262756,165.953262,94.1154861,51.5363159,172.525284,-84.1165009,207.681076,64.2587585,127.706207,-93.8143463,29.2941494,31.034462,-93.7648468,46.3515396,-198.630402,-49.30056,108.118057,-164.854523,81.7167511,-106.569176,4.55410004,-119.829269,-98.7602615,-179.729645,-131.881729,-79.2169037,-26.2778702,101.875671,74.3487244,-85.0055695,-81.5922241,29.6179771,117.089691,34.1715851,64.9358826,133.971436,258.842407,19.4302139,-96.6779251,-173.488068,-89.2007675,-54.8572998,126.252716,72.0821152,169.748596,-33.3933563,113.595985,-133.913391,37.1881485,-91.0372772,210.771774,-19.2149353,-36.638504,37.9729996,91.7081909,2.40584564,86.0333099,-33.1295395,63.9284134,56.8335266,-82.3158264,74.4777603,77.4247131,9.92100143,225.216553,142.81424,-172.532135,97.1530304,31.483675,70.8142471,19.487566,-193.038803,168.358383,11.0731544,-123.9673,-69.5873337,31.3921928,25.7437801,-7.20926285,273.058075,54.5888672,-304.456421,123.779282,-113.095192,-25.6418343,-201.572952,51.3606644,75.2820282,38.9061203,134.710617,1.89910126,60.3201408,-31.3432236,14.4864616,-173.107254,207.76973,-148.108948,-178.869843,90.8014297,120.543716,-74.112793,-132.68045,17.8789654,-28.8656139,92.7794189,103.910126,-50.7037811,214.867401,179.982864,296.343475,106.458549,-63.278244,-63.2011452,-129.279785,89.3012772,131.644135,-7.7409277,126.668648,-55.7634048,62.1186752,30.5748596,231.781631,1.72458267,-47.7830811,-36.1086121,-132.066559,-41.8734322,68.4317627,85.2125854,-160.004791,-137.437622,54.9773026,-65.7589645,87.4997025,-15.7546606,-2.85097504,98.7376175,-17.2906265,51.4262505,121.273102,-5.81306458,-11.4447403,-47.8512878,29.2784138,-53.415947,178.190552,170.909851,225.423462,20.8739471,1.37009048,155.300522,-91.0294113,-7.2443161,-207.536346,66.2606812,87.2290955,-68.0475922,69.3256226,-142.31456,-294.57547,9.44015121,-177.943665,-67.7778015,27.6022606,141.361984,147.091003,58.3998566,114.540894,-10.7647629,88.2603455,124.969162,-28.9568405,-28.0103455,119.112488,113.487259,-166.747406,26.4519081,119.123009,225.103668,33.5334167,-74.4672089,50.6695061,-56.1982269,144.330658,-93.3096924,-34.9402771,-29.6449928,-111.541306,-132.114594,15.0092468,-90.4300385,61.8518791,93.0257874,-23.9102707,-152.088013,-181.050171,-6.64117765,-59.1674194,-19.5060005,-242.564117,-122.583542,-145.829193,-14.2737846,234.107056,200.998474,111.347412,-115.206375,-119.79837,14.8052597,119.462311,25.7862625,20.0867062,149.226868,-6.77980042,-253.742828,-92.8216705,225.892563,69.0695038,-100.221115,61.2200012,95.7289505,-143.505096,7.61669254,-4.76618767,19.0118408,-6.95696259,-81.6770477,79.5344696,-9.128479,-254.95755,-120.832901,-4.61908913,-112.769775,-25.4595184,127.171921,-40.514534,81.120163,-84.028038,-17.5073795,128.177002,19.5221863,11.0980911,95.0975418,-28.6073074,146.841339,62.2168961,-11.1435165,94.2102966,-31.063858,29.032608,4.96457863,-37.7642822,-38.2535057,192.502563,-27.719923,37.2665215,-85.720459,53.166687,14.9285965,26.3270416,65.6779709,62.2008247,-122.497849,169.38678,152.305817,145.148056,119.136803,176.846634,89.9137192,-212.853561,-73.57901,-87.1284409,79.4618683,163.481445,-42.651722,19.6048203,145.009918,21.0180607,-110.266342,-18.4303036,-120.828003,126.690857,80.8730621,-114.532333,160.330154,-66.5881729,21.9191227,23.9730186,-202.143097,52.954277,-1.16074562,15.8987312,-186.194824,156.61795,-148.963257,79.6774902,-108.069946,115.12326,-108.756866,141.685013,-17.3971558,-60.3280144,29.4584198,-133.418182,50.5652695,47.052372,133.023453,-27.7119789,285.802155,3.08449554,54.5221252,203.14209,124.871498,-155.130966,-26.8005028,-61.7326317,-180.41748,99.5745697,203.946106,92.562912,366.010925,3.30330849,-99.401123,45.689045,94.5630188,129.89502,38.5146408,11.9028053,44.9614868,101.640625,-10.7187624,7.34986877,242.194397,-80.8413162,-126.327652,110.659676,-101.954498,-12.3144436,-228.322739,21.326416,72.5722885,133.023193,-65.5223389,75.586647,-54.205925,127.659798,-1.32355428,-122.909821,-48.1611824,183.359009,-110.292419,-37.854187,-244.334808,-187.98909,26.7694798,81.7271347,313.313354,-223.796448,6.39081001,-2.79714966,95.7016907,-110.872314,42.959446,-276.376373,-21.5885258,63.3018112,87.6520615,40.2537613,-5.37653732,-180.624481,-39.8206444,-28.034565,92.9824066,147.360138,20.1180363,-58.8951836,-24.6231461,13.1196976,59.9049377,280.355347,100.067841,-9.53503418,256.511597,2.18882942,100.202225,-121.346649,-97.2783661,80.2613449,179.943878,63.9404564,96.1597595,2.06233597,-70.0059204,22.7310486,18.8494301,-41.687912,-8.04408264,107.949921,94.1820221,124.178452,-14.8727913,19.7407646,-98.6124573,-64.1195145,45.5274124,7.5177269,171.787979,3.61948967,180.984787,-92.3920135,-0.924507141,-28.9671326,-31.9299011,-201.921417,-76.7736664,118.579361,-17.1932755,-115.43531,31.7849026,-66.4212341,-47.945118,29.520195,-42.7248039,-60.6286697,0.963191986,-5.67601013,112.948097,-121.902191,-38.0022278,-171.564056,-112.890686,-49.4135895,-14.0462036,2.87104034,40.6501465,-19.281496,-108.253067,-6.17446899,-79.2150192,-97.9264069,292.751373,29.1528854,-23.1839638,-107.984787,-132.478851,81.6014938,0.557530165,25.5414677,15.4247036,-117.242607,-66.3376923,-151.144592,290.866455,-21.9197254,82.5712738,-52.451149,5.06863785,-95.2631607,28.4555779,41.2048416,29.5807114,-48.208786,11.0138731,-42.6683922,-1.4779911,-122.768074,3.11923981,79.1062164,-8.14195251,-21.5459232,138.248444,66.4386139,86.6188812,-82.375351,191.664734,-161.3461,62.6480484,-200.907059,-30.7892113,2.40901947,76.568779,-227.811157,25.7517929,-95.6379089,137.456177,-106.261902,-109.544067,-103.828232,-52.2590332,16.994236,266.388977,205.940048,75.5434113,-90.2907867,-176.477661,-125.554321,-26.4033051,96.0686874,-214.089722,79.9881287,70.9939804,-39.2123337,20.197031,-44.9318962,73.7623291,118.135574,-124.239365,-38.5176773,135.089691,-2.29903412,202.594086,-83.9259033,-20.1910095,289.691406,-194.710526,155.253433,-67.9482727,94.5041885,-29.7177048,-152.895554,11.4313316,-67.5862579,-126.665367,139.067535,-33.0907288,-38.5029907,177.736206,88.4662018,-194.42131,-2.81501198,95.6019745,160.491989,68.5826797,22.0729065,103.293282,138.911789,42.9631195,-16.9949207,86.3970566,78.8657074,-205.68045,117.244743,193.264908,73.6998901,33.4252472,51.7355804,82.2820282,-124.118378,-106.584785,42.4613571,167.113739,-31.9764023,79.9675598,55.8431702,97.6530609,-112.678032,308.800842,-40.7642632,178.344147,97.4023895,-119.483444,64.7909698,18.3715477,-66.3887787,-88.5479889,15.8519382,133.996735,8.99583435,-77.9593887,28.3796787,-40.1197357,-10.1951504,-43.7268524,72.1923141,-290.636749,-235.821945,248.390549,-183.011658,78.5238419,-155.969696,-97.0492859,68.5576019,130.515915,42.7673492,-45.4561653,41.8872299,-71.9718628,-86.4376602,-118.336632,135.307968,-21.2366257,-22.7454872,-46.3830948,58.6296349,-9.89070129,42.0191193,-124.534012,-76.0669098,58.5532036,80.4729462,-49.9842072,45.574646,-79.9761276,101.6521,-93.6730118,-246.067566,118.089493,-135.394455,-19.1555367,-122.400284,-36.9568977,110.351349,-107.666229,-44.0441475,-22.1671944,22.7762756,-9.91511154,-84.1125488,154.627441,226.707291,-13.9397593,-58.2022324,36.9107361,148.529297,-68.5881729,173.100525,-42.2134933,11.3479767,19.3522587,16.2773285,-47.8830376,-140.957642,68.8430939,132.019684,-145.442947,146.201538,206.367706,3.21870422,-46.8575363,143.741135,-176.966431,-80.762085,-194.126709,297.912231,-154.1548,-3.78814697,-19.7661324,-43.8016281,67.4684143,78.7491455,216.433868,-40.3367462,177.429245,-119.232948,-16.9868469,19.895731,10.6871662,83.7873306,135.522827,171.599411,110.749367,-61.1776962,-42.3977509,54.9636421,56.3670807,16.3296986,51.7034035,-141.004303,176.712265,82.0914764,15.9253845,-127.021873,29.3154907,76.0388947,-55.0943604,115.038536,199.720337,195.477661,-194.898346,169.042023,101.107964,7.06803894,-261.757935,250.971344,46.0450592,96.8749619,34.7883148,4.65539932,-17.3735657,23.6077328,-149.902313,-94.0138092,-98.6457214,116.061966,-138.21698,-115.483238,-12.188858,51.4621429,-137.127762,-24.2278404,-66.906662,223.760956,26.9916763,19.5047379,7.37975979,1.07913208,32.8543015,32.9217224,-100.800095,-152.399734,-105.397026,129.483078,17.5712318,-80.6281586,-2.47068787,1.31076813,234.06662,-51.3271179,48.0734787,-188.583191,0.749290466,181.820816,142.81218,-34.2863922,10.5052843,83.0052643,3.33022237,-12.0312233,15.1323071,89.4307098,-29.7551746,-61.7492943,2.71515656,-6.91501284,-49.6544838,-24.1338425,-52.3448715,15.9320097,11.6533546,-24.2444916,-32.7483292,-107.966133,47.2987251,-1.06017447,79.6498947,14.1618824,-11.8295507,-21.3367882,0.0444478989,-39.1356926,40.6302338,-102.886887,-66.5189819,-23.6799221,15.7835302,-16.8763046,100.55014,-13.2811956,19.0801487,2.21679115,14.4923763,-70.0059814,-36.0232887,60.9125748,-24.6533146,-64.8434372,-41.8963966,-45.3400383,16.8805923,-24.350584,-72.6404724,-0.718111992,6.63541842,8.6340065,-100.986015,74.9060898,-118.507477,-59.2046967,22.5287743,-15.400074,-17.379015,-22.8426533,-15.5484161,-26.5167007,-89.0123672,63.9859886,-45.0819016,23.1630993,-46.6070862,-22.903492,89.118515,15.4566088,-69.9193268,-50.425766,-0.325320363,-1.73237705,39.1801987,-33.5043335,-44.2547989,6.8689537,-113.334213,91.8362885,91.9870682,17.3822861,30.7203197,-95.0476837,-52.2674522,53.3712196,-3.48032856,-29.2090969,41.9206657,-50.9808083,3.80050397,-95.6060028,41.4685783,-50.5324478,17.3336391,23.3321304,-32.9318161,40.2281113,36.1848221,5.11484718,20.2107277,6.28076077,20.1776791,-99.7365799,45.1428032,-133.91745,18.4185963,-127.177307,-24.8449936,51.394146,-78.7238007,-22.3275719,-42.4923782,-61.6126518,27.9884262,27.0415764,-90.8395157,105.823006,-42.5898857,6.37138176,-6.74416351,41.7604294,20.8864174,-0.498315811,40.9632988,28.0373516,29.1598949,2.6302681,3.64320707,14.6036654,0.361239046,-37.2698593,-18.2525635,-65.9810028,16.3754768,35.2675781,57.4310837,-29.0954533,-26.1438408,-15.2896709,-9.88309383,-3.74302101,3.36607075,-59.5328598,-79.7623901,58.9015274,81.2987442,-13.1981421,-52.4200287,53.5034409,-58.8879967,-76.8811646,129.383148,-14.6455584,-70.5158539,8.64664936,227.192413,-116.495438,15.2665405,-77.8456802,59.1774635,75.9757843,-106.161232,144.849518,39.8137665,-66.4444504,19.8549042,-49.5390091,27.9503155,5.48558664,199.846252,-245.547363,-263.979523,154.801514,-72.2066727,50.2523842,-83.8274612,96.7225266,85.7558441,168.690536,-29.6994991,74.4318085,-49.0950012,37.4659195,118.722816,-65.8149567,40.4696922,-9.73881245,-136.913147,345.019165,3.91945958,109.111977,57.5506668,107.404312,7.35094309,-54.0549431,-211.134415,-96.6030807,-130.450073,-170.510071,-3.56348443,43.8339539,-111.050644,-11.1978636,12.039217,-76.7899551,-81.3872223,-128.865005,61.3175583,-0.259785891,47.5876274,-62.0415039,34.1488724,-77.5065384,19.2741776,0.990054011,62.0557709,119.238808,55.7804871,-15.2119656,-152.805969,-173.480789,-69.3365707,125.856056,-116.559555,49.5075455,25.3062096,17.8006725,116.394554,-86.3674088,-174.047958,220.245102,-210.010788,8.00606251,12.0506945,64.8628998,-6.74253273,40.835083,-98.2523346,-45.6877289,-20.821331,41.7844162,-234.902298,-139.596237,42.7837601,79.059433,169.581573,-67.5833969,88.3156815,-53.2987595,-152.72258,-12.7907047,27.5287838,56.3214378,155.151459,-22.2365475,-63.9907646,-54.6819687,6.47202587,-3.27653646,-47.92799,79.8886795,-145.90744,-13.555953,-201.626312,4.36077833,36.4647827,-51.4826202,-24.3665524,6.9670577,109.488274,-109.644211,-32.974884,84.1304245,22.0723267,59.154213,-73.9590759,-87.1774063,135.49028,84.5364227,2.07321286,121.535912,14.9719257,54.4556084,-247.872803,-83.6932373,18.8056297,7.22504234,-128.096176,-5.42273903,22.71175,190.23761,121.041519,49.0249939,-71.9555206,4.60975647,43.4687996,-235.456085,82.0419083,95.8809814,91.1217804,9.79544163,140.342255,-26.9591007,-31.1061974,14.3054571,26.9826698,-28.6978455,18.0444298,30.5438309,77.9300308,-88.3357544,-22.4503498,95.4517822,32.0212517,42.3203964,-69.4602585,-55.8790169,-135.947601,-59.5767593,45.5884438,35.8797722,207.329956,106.875862,217.292801,180.352768,-42.6599922,79.7149734,-52.9231453,-78.7847443,-113.324852,-32.3110428,188.581741,-12.6833229,49.1787109,60.1712875,-62.2691193,-40.7878876,84.0206451,-69.3796234,23.3450565,-12.0908022,-50.1741104,82.7237015,-21.9070492,-67.3439331,98.131134,1.98706985,103.218613,-33.0224228,-86.84935,175.929306,-119.271126,-151.366516,-46.2184258,-184.382538,151.211807,-5.13707304,86.595993,-20.901268,22.7641888,68.9437714,117.193016,-187.156952,9.12468529,152.08786,-0.916615963,-55.2323799,-32.6140709,70.5495834,-141.642731,-5.00381041,163.519714,-167.623993,-83.6859055,71.3630066,87.8612061,55.3440056,-47.9842873,124.408371,23.8286057,-47.5142288,-6.55959797,-90.213707,-131.431198,-119.415901,155.950867,49.2903099,129.041153,-10.9158125,119.821136,164.964081,81.8750992,-119.341499,-75.900528,-174.480606,85.1156158,10.7262096,189.123215,-48.8594971,106.883041,-145.570404,85.0186844,5.99299002,32.1959572,22.2501965,131.984909,-117.899651,86.2524643,-216.927475,-182.642761,-121.327042,118.932693,-161.124573,11.9681149,88.4443665,-112.511017,-160.519424,109.403854,64.825943,-73.2752457,-34.8779678,-96.9967499,-220.885605,126.260216,75.8662262,94.4560776,-45.2542229,99.4393082,-162.439362,-40.5667458,1.98616433,160.96019,49.0644455,116.587074,-86.1999588,-53.5535393,-269.583191,98.5509949,-111.971977,-41.7413292,119.723175,-21.8208885,6.75747967,-95.1223526,-137.449905,-149.09024,-54.0309181,106.293312,135.82254,270.891205,-50.3634567,-15.6688194,156.606186,-22.2177544,162.897064,43.5108566,149.04187,5.98739576,54.2397919,45.4323349,-2.40174389,-135.839844,134.464066,79.3523178,108.960587,-0.334917545,-24.8770313,78.3116455,-52.1300125,-201.859268,222.079285,145.274628,-59.7708931,-22.7099419,93.9426498,-114.050797,-104.103539,78.8762665,25.0355473,-16.2211342,-31.08815,-20.7064362,-48.3012543,-93.0707321,-39.2691307,-55.4826355,-9.72268963,-84.4586182,25.5362835,31.6290703,-134.750092,-18.6727982,17.522541,-53.5979538,-53.5110703,8.3948288,-181.930298,-0.923877716,162.208374,48.7347717,56.3872299,222.976501,183.204193,-44.7483521,156.302689,-2.68619061,-45.9589539,-30.6905174,91.8899155,-105.667419,57.6875153,69.3105316,-24.0327721,-141.936737,-144.412186,-287.495087,24.3640957,-162.068893,185.659744,99.2345734,59.7150269,199.796005,34.2858391,81.9968491,197.132309,156.554642,-38.4503326,189.581833,26.9680195,111.329254,-98.1156464,22.6595364,-86.0216064,-63.9820251,135.71405,-118.620239,-2.26996589,141.948883,-58.6659737,65.5317535,34.251152,89.7303085,15.7376623,-63.0785484,-78.1338959,136.897125,-28.300642,24.3588257,-191.61174,102.895325,-32.9852371,41.9970398,-30.2800751,-186.875656,-18.6213589,13.0034037,301.826447,-140.745621,-188.120056,119.626038,172.27832,-449.986694,135.347321,98.5499573,-130.839767,127.575821,-133.179108,-193.004532,44.4576149,18.0597401,1.38431275,-69.0098953,-241.465729,-155.213043,-173.493851,-28.7769852,-141.305435,69.2503967,-36.1140594,1.72243595,-81.5673599,-91.5654755,-128.988007,-25.5138836,50.4040718,41.8978958,-146.654724,-98.2421417,-53.4056664,33.9726219,-207.264816,-307.48877,-67.0658646,105.931702,-177.416672,60.9788132,-107.374611,-6.92543793,-31.0584393,82.8738861,-69.1182632,14.5840349,132.221558,98.1009064,1.77458024,-16.7109489,-70.6353989,-130.312347,-40.1436081,89.2035522,44.4527283,-76.752861,-228.556046,132.597351,158.700699,134.835938,71.5736618,155.953415,25.5096169,-2.50382566,-81.4653473,-185.179504,113.070305,-153.267822,14.446414,-49.3453217,-53.9341774,2.98083878,122.668068,259.293304,-108.852211,-97.6502457,-4.14921618,25.9477272,106.094254,73.7226562,-153.255997,-50.0428047,-107.395393,-38.2041016,142.832474,-131.571381,-160.667053,117.018509,146.017944,66.8686142,34.3014259,-160.996643,-42.6726341,55.1674004,12.1554556,252.36618,153.510635,-23.403019,-198.238205,101.962662,-39.6744461,111.072197,19.7147465,-83.3485031,33.6389885,-50.0951843,-78.6309204,147.845779,257.778107,-18.7099762,33.8288193,-105.568771,70.4304504,0.750827789,-168.289185,42.1828918,-65.5792084,-123.377701,87.4645691,102.051414,-25.2092419,-50.9316521,39.4498711,31.6990891,76.2306213,-44.2501602,-91.1594315,157.879974,25.3660717,184.738464,-137.475693,-73.0718536,-129.831161,-143.547272,-25.4020672,-58.0246391,-47.0834122,-62.7557411,34.5981827,-9.90840149,54.9829788,-123.488899,127.232697,55.0243416,81.6758652,8.24009037,-173.422668,-14.2468882,-238.858734,-241.035904,-88.5087738,66.3280716,6.34255552,101.70668,-66.0553589,14.5296516,-68.2106781,156.265549,-4.34557104,17.3795567,99.8061676,-29.9390068,-5.05677223,-39.0269356,95.1271667,33.6016922,-143.2052,101.804291,118.861305,68.5685959,-90.8539047,-30.748209,-110.907196,-52.0165176,184.895355,-183.989655,-210.081421,342.897186,21.867918,37.9443626,-30.3282337,-150.485458,3.66301608,-83.0447693,151.995544,0.0073299408,74.3703079,-164.81015,-79.1628494,28.2990074,171.15773,77.8049545,181.586563,-20.6211853,-105.255219,-21.1257515,51.3967438,185.681,109.931641,67.711525,135.730667,-120.319748,54.5725822,-82.7249298,9.96377182,312.359924,-161.820358,-3.82367039,-163.775757,40.4082947,-172.44838,-39.0710983,-115.120773,-31.2931938,-40.3697853,114.245903,46.480751,174.715698,64.0484085,-166.330093,-36.1603699,-38.0788345,102.257057,-102.601776,-8.22392654,83.8992233,173.505249,129.532669,-128.698242,-101.922913,-158.919754,-51.8582191,-46.4174881,42.5823898,137.514282,-210.594818,92.9703674,177.276703,91.2355576,-241.788284,-93.9515915,-88.8744965,34.5664024,39.3949509,-27.0689507,-25.9411907,42.3273582,-206.172394,-186.472397,82.4360886,3.74820995,-0.980319977,-69.9935226,-7.62696743,-49.0061874,-190.770508,4.74535131,-49.8050232,311.717865,75.3241119,-19.0743523,-116.874107,-34.4158974,151.857361,39.2966347,-140.975449,112.167519,-328.112152,86.7907257,-107.601158,-49.3197441,58.9605026,-43.4467888,39.3739738,29.1441383,69.2571182,214.342453,169.593475,11.6291971,152.740356,26.2091198,68.5140686,-0.214507937,-321.384277,-185.166473,183.213272,-108.155289,-26.5368023,-123.397682,-60.0214233,8.56068707,-77.532341,-147.517822,11.0047865,-133.100952,58.8732185,114.124588,66.1681213,-134.180862,67.4820099,42.5999832,111.57692,116.559639,-50.325489,56.779007,57.5038528,190.272415,269.784851,38.2100563,-29.4955349,211.22551,-133.354248,9.56516171,91.3048935,79.5298233,-70.7503815,88.8847046,56.6217499,79.3128662,-108.15242,228.971603,78.3910522,44.3872108,-120.3564,110.749878,89.4081116,3.90732002,68.4526367,-103.647202,140.36084,-60.8801727,-29.8374557,58.0567513,-152.738647,-72.2993698,68.7568436,56.5349808,-180.932404,-110.778656,-53.3003387,77.7091293,33.12714,274.483765,-8.08725166,91.6365662,42.5374718,20.9235992,22.5390434,150.179626,96.5417557,-72.5598145,50.6467972,-82.0422058,-66.0829849,-0.144188881,140.90979,138.635117,73.4943161,19.7701111,1.05244446,-251.895279,-106.41581,-43.4092369,273.506653,-311.495697,27.2747345,27.0240059,139.688889,-92.8700714,36.5585938,-53.9029808,171.340759,-168.19455,-132.545578,115.539963,126.875496,8.17430115,-40.966732,83.4153595,-47.9862595,-22.4027939,106.849678,7.61006927,-54.5617561,-3.93763733,109.813293,17.2680302,207.143829,-41.2528381,-171.612335,149.765289,23.6789398,63.7920303,73.1439209,35.7470512,-27.0071793,146.174347,-189.887344,118.615601,89.8135223,3.3265543,138.76651,-100.614502,98.7998657,0.29598999,-42.1246338,114.067993,-119.939301,89.8682938,65.5826263,-38.4241829,61.4254646,53.0582275,291.386169,-100.531425,-133.100739,24.1115913,-39.1934776,-4.24992371,-56.3797531,-112.744316,-55.722271,-55.6748199,95.7510223,-62.3708038,60.8941002,-194.110718,-17.5454865,-18.3483906,183.116913,45.5843277,-136.386185,-22.3300343,-107.830841,-164.962097,2.26032257,-37.8157616,34.3593521,-4.46808624,-39.5438538,-22.9168129,-97.1388092,-59.6366806,160.773727,-115.218384,193.050079,88.722641,23.4601727,15.0016327,65.9454041,-56.493515,19.6682625,121.553886,-3.19368744,-7.57991695,-24.2347717,5.60040474,38.7508965,-243.765778,-118.837379,89.1017532,-44.1528587,-115.705032,-112.099052,-4.58984661,-126.534752,44.6056976,1.8563385,-2.66750813,264.144073,-106.063889,23.8220787,-128.16394,172.289703,-37.6574287,15.0168056,-116.556389,139.114197,0.110340118,36.1283913,93.8759003,-67.9837036,-239.915436,-62.2296829,178.24942,124.830345,-68.625885,111.463951,203.588211,27.5145016,-81.6608429,-113.467285,-16.5682774,-82.6852646,-188.187241,-132.120392,-238.022385,214.884735,-76.6955109,52.9580536,87.178688,-68.9633026,-34.1576157,-43.7154961,78.0161591,102.839066,-2.03275681,6.13022041,-13.1764908,-114.243591,52.6628685,-43.8435402,29.9059067,92.5523987,8.80932617,5.329319,22.8943176,31.7929916,120.268204,-15.7860794,-26.7487373,-111.422211,81.8778992,-94.5504074,-48.3643723,-127.343124,63.1093826,-8.40141296,-7.37809563,-84.4001694,-35.9856644,68.1526031,90.4122238,-54.2947998,-143.155518,-8.5446682,-71.8193054,125.805992,2.15275192,5.43016052,205.35614,107.716736,-13.3259506,31.2592773,-62.5349236,-155.827484,-146.827332,124.801483,86.85849,32.5718117,-96.1253357,-34.9737854,-24.4145298,-70.0020981,-37.3752136,-164.388992,29.8439198,-151.140518,71.1557846,-189.30806,-9.96179199,21.2074394,-143.22197,-53.4121094,73.0935745,17.0157356,275.825623,-30.4844971,92.0600281,28.5994873,21.356987,132.367859,181.69693,-242.260849,-89.686554,-42.6650543,-13.9589005,-13.7715378,101.939957,-104.667343,-79.0231171,104.103348,150.65004,89.1887436,0.0475597382,-63.461647,-157.972656,190.005768,51.2083206,-59.8446274,-73.8022919,-218.458923,-108.79493,214.777115,-1.50218964,101.257416,20.7719307,5.93263626,13.6831264,31.301445,32.193058,3.99691772,14.0406532,-37.3341675,27.6188984,53.4741287,-145.068039,-74.0988693,-28.0958748,-100.926056,33.9846115,-112.245811,108.544464,58.2970848,-69.9993362,-39.8585663,157.79248,95.3005447,18.6793823,-12.9808121,23.3867874,-305.327209,-67.2410583,83.5594101,28.5054703,-5.93418121,37.401535,-75.2462387,-193.621368,-151.238647,-70.8266068,89.037796,117.709518,57.2443085,50.8796349,25.2662811,-83.1661835,-105.63504,35.4869499,-57.445652,71.8439331,-104.834595,-169.60994,20.6791229,142.109009,-61.7515144,-24.1304169,99.1974564,115.166748,138.98378,-78.4639206,243.839142,-0.576343536,46.2316971,149.274307,65.2440948,-93.0161133,-268.355835,23.0184288,-219.166382,-120.183632,165.96225,139.766113,0.0109405518,-10.3868198,-137.316742,-49.8543777,-21.5315228,-29.7760887,5.00261307,-74.0645447,-22.2245693,-67.1171265,125.52227,-193.302582,237.055222,72.5289993,65.5621643,4.53380585,105.14093,204.385956,143.77243,-130.853394,129.628525,-107.426697,-82.6597977,29.72966,166.881714,104.19043,124.605698,-149.208557,148.437408,48.0660095,178.708984,-49.881897,163.987305,-99.1835632,-132.191101,127.8563,-85.6735077,-60.2846107,-4.2654686,-21.2407417,265.212219,-9.7445488,-36.5072632,-81.3126526,-148.19194,183.998856,10.0780106,-177.65976,-76.3701401,13.0775452,198.946533,-19.468399,-3.14253998,-91.337265,-17.7116241,17.7899742,-7.60545301,65.7735291,118.69738,-129.469833,-120.258652,42.2677269,-137.13826,-222.194031,-156.845184,0.0391235352,-31.5954742,-76.4176788,-11.9951458,118.001541,76.2583237,-120.788132,108.49202,9.94262886,-52.9775696,-79.9478302,117.52932,18.1570587,-75.0981598,58.19561,-132.273621,-104.509979,-13.1966095,-74.2567596,-68.9212036,28.1593552,86.4152756,-22.7673969,-19.0340424,-21.3769302,-51.5903854,19.3899841,104.480537,21.0258656,31.4824677,-88.2833099,18.6316872,34.047287,-11.1255035,45.9327164,-118.653854,-71.5412292,106.632118,-55.4775848,78.3031311,242.004089,13.9244823,68.2321167,109.888,133.199265,7.7952652,-63.0225067,196.393646,-18.7480392,11.4730453,31.5606632,22.8840199,-57.7204819,92.40979,16.1440296,-13.3788986,129.47139,-157.531281,-10.2327719,0.89629364,-68.9277344,-94.1936798,-8.41659927,-17.4379921,133.043777,-53.6843948,9.76143074,70.4140472,-1.23656082,99.5841217,29.0791321,-11.7337456,137.964905,-166.685135,163.647064,-62.990387,21.9925461,93.5877838,2.20516586,-3.04876709,133.851471,-27.7144508,-197.025696,19.4384079,57.86903,39.0150757,96.6447678,22.8554764,56.3669662,-41.0865173,-9.63312626,-39.1585388,109.138916,104.885994,155.15947,-204.239685,-5.40586662,-55.0367966,-81.1900177,205.941208,80.4608612,90.4864502,-29.9706192,-84.9831238,-138.000046,107.068359,-9.48373032,-19.6200485,-163.235168,-78.071106,69.4829254,100.723785,-122.195389,-34.3800774,83.4491501,11.6257553,71.8836899,165.153198,-102.077293,245.161179,34.1377716,2.03739929,-214.572052,-68.5456467,-96.9247055,8.96395874,-99.9992447,-150.937439,15.7552757,44.2690353,10.381897,32.7969437,-60.3718185,-55.1755066,98.2136993,-31.6393127,-81.949646,131.648895,187.025299,85.1403351,80.4511414,-31.5977459,110.450653,68.7256165,-55.2601395,-34.7177963,10.7504272,-35.272995,-103.800934,-66.5327835,3.05055332,-171.255737,112.053749,71.4502869,-105.629143,83.6679153,88.7098541,-1.18436813,-41.9115524,-18.2502098,-30.3464355,-6.80831528,50.4958305,-40.3740921,-2.23503113,-13.6052399,-27.9550552,-121.042114,-176.403595,-10.9067612,-27.0143929,42.5696526,36.7118073,-2.86596107,39.8799667,-139.850464,-36.4150085,209.156021,-81.2660065,69.3682022,46.6113815,84.9535828,-6.76487064,58.2532578,-69.5596619,20.9794388,-18.5801678,46.0403519,83.6028824,62.3244858,34.6644707,-34.8042297,-119.602531,-148.601013,48.7628937,-246.083832,183.676895,9.13807487,-13.2012367,47.7499809,94.9250717,151.483307,28.0402374,103.993561,-43.3609123,81.5244598,-24.3263607,23.8164864,-9.7363987,113.779472,139.418854,126.550179,-14.1901636,21.5584774,-113.710945,-138.855225,208.496094,23.2282143,132.869537,125.471054,-53.604393,120.632515,-28.6732941,-93.9729843,129.796173,101.87999,158.501236,-29.4337845,-25.9107094,123.256355,-23.017643,55.6405296,229.422348,-181.034866,-56.4457016,-42.901783,43.1163063,-73.3946762,-209.08075,-114.180008,100.397308,-62.1993446,-156.141998,96.9692917,71.8161697,-256.969696,198.605438,-93.3923264,133.98494,-114.909996,-127.344299,-190.568665,-58.2638016,125.480682,73.4951782,67.5199661,-293.051605,-63.7781029,33.0715179,-34.5513268,-39.0969391,69.8047333,-111.024902,215.069946,-8.44023418,82.1222,-122.565201,69.5262146,33.9353485,-60.5840378,79.9419327,-34.236042,97.7447891,-222.673096,98.2085419,17.804636,62.4822121,40.4966278,-59.2672462,-109.963058,58.973732,-133.764893,-108.262115,63.2894859,-114.338272,142.910431,45.576149,-5.76300716,5.59503841,102.713593,-133.782257,285.079529,44.5835457,-107.771484,1.445158,-37.2096214,-40.749054,16.6586685,-52.3530426,98.5278015,-23.2061768,-157.184082,-124.53231,77.600769,82.5859451,-34.5990295,-1.72308826,-46.5858994,268.942871,24.7181129,60.7512283,-149.162674,-83.9342194,-24.6343517,-1.24316502,-180.079636,-331.572266,10.0967102,48.2918587,-1.95537543,-129.511719,136.657394,7.19337368,350.43161,48.0585403,51.9526558,-27.3889732,-75.5286713,-223.734528,126.66449,149.1978,92.1940613,-74.2635117,-104.982094,-158.656342,-4.33642769,-166.715042,-35.2099533,59.3089256,-53.176075,-51.0960236,-84.7950592,31.112999,99.7599182,264.465973,-50.6631737,-122.369492,-140.888779,198.753586,215.851578,35.3899612,-58.1456604,49.5247002,-370.611542,-78.3160934,-5.67210293,149.546463,205.674271,-38.1668167,201.963638,84.0944366,-298.146362,-43.515213,218.715347,48.905159,-45.9593582,72.403923,85.0659561,54.5364799,-103.076775,63.5595093,46.05439,81.9256134,23.9895706,-96.8547134,-117.942711,17.7365074,62.7161064,-122.387466,77.1587296,-191.102829,-26.5089874,31.2887726,-62.4883537,179.601746,-107.952835,-17.2687321,41.1831055,85.0235825,-56.4682121,-17.6809254,106.097908,126.359184,-90.2695389,77.9416199,-145.957932,-15.3096619,-34.1406326,137.390823,131.989792,48.7136917,-12.1091471,-104.128128,-201.708817,-47.4719696,100.382973,209.976105,-42.6650391,106.744522,-67.0572891,122.381615,279.97348,-102.635582,-86.6817093,63.4339561,-193.466736,133.386276,-29.7386475,-24.2278957,-130.86264,-125.849899,-141.614456,-25.3536186,-71.785675,99.4132538,-169.595139,-58.2687721,-92.0876923,86.5122757,140.257141,18.0966911,-17.9664936,54.6450615,-87.5917511,76.3885651,-158.075745,48.9562378,-15.2870874,36.9816093,-157.069824,297.095703,191.393768,220.319977,47.5822945,-91.2602005,-69.2073441,45.8985901,157.341141,133.943207,-100.328606,53.753273,-25.6916065,-119.087082,-24.6852512,0.642548561,30.6694164,231.442581,-19.3916206,-11.0326595,-180.788101,36.475174,-146.273026,-157.082474,51.7279358,-99.0840759,40.2347031,26.7827225,-185.914429,97.5314178,-114.254517,200.739014,26.7174988,-42.0272598,-120.293137,10.3432417,171.986847,-53.6394272,-53.5292435,124.793655,45.7839966,161.098129,-155.573318,-72.3242493,43.9830132,88.9305573,-88.3739777,46.7637024,87.3669128,134.304428,-68.7401352,-72.2249985,90.9814148,115.877594,70.9716263,-67.4296112,93.0723419,106.687218,47.2773056,125.208664,-237.596268,81.8491135,-1.12055576,-84.7400055,101.746033,-114.444237,14.9147797,-38.6820793,64.0620346,-61.4005699,-15.6567841,72.0411301,-169.658722,-63.7936592,41.6896973,-21.6347523,121.134369,-8.97284794,-81.3686523,-137.395569,62.724205,-39.8756409,-3.55199623,105.906296,260.75061,-10.0484543,-40.0630836,-17.6478577,78.5635529,-207.129395,67.2544632,88.9239807,-15.9883776,-5.66120815,-26.8538456,-181.980499,29.7892056,-132.891388,38.4927101,-165.76474,132.061981,-63.8806076,34.98283,142.997238,155.985672,125.230553,-199.177994,73.3755035,-8.6515789,84.0525208,58.528183,18.7630501,-162.669754,-138.897766,-9.64556694,-3.71290112,-111.185768,118.401855,19.6850319,11.0086308,32.8670082,60.1835098,-168.515305,-61.3213997,-60.9177895,-29.0949097,-242.777771,-58.2037697,128.185516,143.169022,-178.410843,169.372269,-5.80478525,-40.7662735,43.7717018,1.38135719,-110.8078,-3.42355537,-253.356415,-8.57774734,17.6202507,48.6853561,6.76281548,-107.241524,35.5984917,237.109421,305.856323,141.315445,144.832397,-34.8975143,-99.1883545,82.0731659,60.8806496,-64.7398834,-137.803391,-31.8171291,-57.8019562,92.6289291,156.392654,-145.531342,-136.199707,116.990326,153.68869,-156.676743,-172.205688,-116.10582,-30.5836391,-59.8138618,8.45006657,-45.5995598,39.8950233,-169.17569,-36.7681465,-93.5676041,-224.863968,114.717186,-32.8201942,-40.3429565,9.40423203,92.7431335,-150.084518,223.153366,-165.461624,-162.464539,105.899529,-125.236496,225.029343,3.84696484,37.0122375,-154.547745,99.4215851,-18.1144753,71.267189,72.9909515,-25.4542084,38.1861,230.024261,67.0121918,40.1565857,55.9056396,-8.25699234,134.425064,139.390472,90.1337051,-124.016808,98.8390961,203.183411,249.731781,-91.3287125,9.15237045,60.4717865,-72.3484802,-71.0113678,-15.0865593,51.5428696,-36.0425529,-25.3554745,-1.89524651,-65.568634,-257.550751,-49.3022156,-115.051933,-90.6016312,-139.259033,34.8469391,-78.404686,-77.5220718,93.6066132,132.572006,-199.270401,174.311234,23.9732475,-338.495178,-128.819153,137.03186,85.6547699,29.1154041,227.317841,109.366333,26.6675339,33.2777214,-16.1391659,32.1768799,-60.1919441,2.51436138,120.050934,-49.7753983,-112.388939,-24.083477,-169.584717,-7.46378946,236.320129,122.219612,-66.1513214,33.0863609,28.0351219,12.7021694,27.6668243,5.47065735,37.9356956,-133.771271,4.68065166,66.4518967,167.445374,-98.8805771,-29.6230202,57.9133873,187.620575,17.4023838,-123.277702,-134.895599,-173.371567,128.780334,152.546783,54.7392502,85.8648682,105.260918,45.6827011,26.2530804,12.3836746,94.6100616,-109.84066,214.307419,255.9897,109.752052,-26.1126385,-249.55603,-62.4020348,-74.0317154,-31.5450287,-87.5717621,-266.220215,-197.172134,11.1422367,-126.559891,-26.9104595,17.243557,-2.5331049,109.339294,32.8720665,56.2464867,-46.606926,-160.925049,-56.1752319,-146.88446,188.047943,-70.0001678,-163.300217,-49.8250046,58.5662498,-98.1897888,22.1521034,195.073639,-22.1575241,-19.7100163,-34.2974777,-208.357941,241.623199,23.7403793,-66.5637512,96.9429169,73.5937042,-176.340759,82.917511,172.923325,85.1360245,31.8455124,126.946228,-43.3610001,-80.6846313,-63.6359291,-1.68027329,-116.035187,179.690002,184.972321,48.072979,29.0239677,118.638069,-86.4703903,-8.20693874,-31.9813576,144.071838,-92.9321518,-252.866791,59.9315224,79.8670044,-79.7285919,55.4188271,-16.4708862,23.2824383,-0.575989723,-25.8934975,182.283905,104.312042,225.76445,-187.85083,-16.4731102,-80.5264435,-216.912384,32.2321091,225.320129,-46.4248848,61.215744,81.8681793,49.2526283,108.833412,-122.415756,18.3887062,249.085052,64.0116959,7.71804476,86.8567581,181.49913,146.024857,-175.891891,-30.1294422,199.800415,51.7558289,38.9418983,-82.3809052,-51.2107315,-31.1699963,-35.9132767,67.7173767,44.580143,233.450531,151.87532,68.2608109,-91.3675385,-115.633675,-80.5210953,280.651672,52.3836823,-178.329239,230.692413,-43.5396042,-135.457336,-142.887238,-148.464035,60.2067184,56.5331268,-60.0961533,-126.871056,-171.400513,-67.3584595,119.347115,-218.887375,-78.774559,32.41642,-109.02475,-159.547806,28.9556885,84.1194229,124.866562,-187.352844,102.523186,64.4187927,-72.7393036,255.430801,48.7089233,-243.075348,32.3736153,-168.126801,-172.423538,35.4358292,81.2389069,-55.0545387,51.1340637,-112.935402,85.8525848,59.3086166,75.1764755,17.0583782,-225.010986,-31.4352207,9.81448174,76.12146,112.66655,122.226837,79.0885468,143.25351,107.115997,-60.1583672,66.3625793,131.778,-121.537247,44.5115089,-69.7353287,74.9421844,70.8671646,-190.04213,-42.4674721,131.190826,127.533562,0.215829611,-62.5456543,58.8091736,-24.3189735,160.624985,-99.6485138,221.139984,5.72883034,183.36911,-24.3656883,-184.434082,96.4564514,220.179794,-134.727768,86.5182953,54.5315704,-25.4923019,106.59848,-192.232788,-74.2909775,-151.923462,5.02392435,78.5176163,54.9360962,205.754074,-32.2992859,24.8165188,77.3077164,-17.166069,113.503143,-18.1986065,-65.8242111,-110.9702,-74.2200546,-155.533875,-97.5622406,-7.58574581,302.551758,59.7463799,-20.7214127,431.557281,-164.815048,-54.3056908,-16.7546043,26.8899956,-19.668745,48.2940674,2.48963714,159.978714,5.2474699,-59.6723824,-89.0897827,148.536484,108.715195,-47.7043953,-52.4995422,82.7444153,-36.5507088,-87.9969559,111.447548,-58.6820793,60.3803253,-104.173378,-90.8983383,10.3013401,-29.8060455,-71.4748001,-99.3716888,-64.4553986,-87.4297028,-87.8786316,106.00531,157.453308,113.235222,54.7767639,101.772499,189.05722,1.70064342,-102.485855,-82.9730682,21.0749168,-21.9610519,43.81744,-80.9290314,-18.3163681,-59.0641823,-176.988068,58.9698715,71.2771912,-276.480804,-107.731598,-148.63736,-81.774971,-73.172142,198.488358,78.4051285,125.761307,-24.3011951,34.6264801,61.4859772,151.307648,-189.915268,112.501488,-125.623077,-58.5736961,85.9653625,14.3009424,51.7676811,109.608643,-117.001045,40.5648537,-172.461044,41.0818176,-13.2677383,22.5024147,-205.290802,38.2853317,24.2983894,-22.284359,108.04232,146.459686,-133.224533,-88.0882721,78.2826462,-220.740829,-118.307838,64.8685913,245.982727,150.225922,65.968338,-150.323029,102.068954,254.524445,-96.7048645,60.2180138,185.782394,-27.2477531,-121.361328,20.1669655,31.5649529,35.9649048,53.62323,121.015335,-237.487839,12.7771683,-79.182785,205.918015,-35.5764923,20.1769104,-44.5223312,42.5353203,-164.047623,-99.3937531,-132.833267,-57.9311829,139.264252,-140.97908,-49.3409958,-73.1923523,48.0802612,115.062485,193.149628,-126.580246,36.2203293,-109.613449,-95.6506653,186.943039,-68.8704987,-6.59451008,137.961075,-34.8881454,67.9534607,174.732712,120.214294,-218.142136,283.704895,61.6222763,-94.4135132,34.780838,138.308655,151.38028,32.324913,-86.5330353,-178.637573,266.942566,-174.659546,-22.301136,88.4172821,16.5802956,-32.3771362,85.6201706,83.5925827,113.627213,58.5422096,-74.9727554,82.9914246,22.7201996,44.0936127,-237.07132,22.4363022,-94.2679825,-53.5426941,-64.1110077,84.0934219,58.496994,39.187149,-125.862701,-126.040367,-18.0473003,271.535339,114.796036,-164.289398,-131.763382,-33.7841988,21.283493,-13.0956783,189.474182,-170.959991,-30.1624298,62.2362823,-36.20681,184.594681,-29.165596,-69.5176468,199.121704,50.4519653,38.7389069,-74.7788467,94.3821793,5.6256094,-112.619286,-68.7297211,-55.4392319,55.2474747,-90.6612854,-198.851425,9.93055725,-73.7972336,-323.920624,-7.83912659,42.6357079,-41.2719116,55.7852592,-20.3856773,-2.82200241,67.2492828,76.3985596,-171.368896,-39.4228821,30.6430359,-246.054825,7.86838531,67.7750015,-152.788147,97.934494,72.8637085,9.10648727,33.4338379,6.3613472,41.7642975,14.7569103,30.7603722,78.6134415,-191.69339,141.500763,-11.2603531,-191.521591,-203.900879,-60.1863022,-5.31875992,135.817032,18.7425022,151.566147,68.9372559,-63.6765823,28.0921059,13.8590698,-43.0828133,-7.58263397,-226.798309,192.106628,-41.7679901,-71.5447769,32.7275848,-277.989014,-130.899689,-49.1898346,74.9573669,-34.313385,58.2836533,195.607895,75.3606873,-257.202454,-151.621689,-53.3711014,-12.0927429,-91.7379303,-92.2344589,-74.7930374,-155.789276,4.88941956,25.2741585,114.828758,199.118896,-24.0137291,73.8295135,-219.391418,34.9267807,175.752563,145.288467,-66.0986328,36.7223473,-16.5107002,-80.287323,-85.6334,14.018671,110.631409,115.352798,120.705559,40.8577652,-205.697159,2.07081985,-108.310585,-8.44625473,68.7921829,-131.088837,59.6183853,-82.0541992,-55.0853195,-14.3757782,249.416336,11.1005974,101.809525,61.8871002,-103.145813,97.0361633,-64.8774719,-171.774338,-245.511658,44.3279457,-63.2642326,108.930374,-208.74585,-3.40062332,156.177643,230.185196,-8.98561859,79.0192566,137.553955,41.7536087,21.2906151,38.8977661,138.751938,147.359558,167.516037,125.675896,-115.29808,51.9982681,-206.171768,-138.901642,-193.956177,133.995392,181.876495,15.8109398,-39.081192,-70.7790222,5.48468399,98.5444641,-46.0085602,155.506393,-102.339874,-196.819427,-29.1327133,-48.3724136,78.9596634,58.7534714,-342.096252,-45.1913795,-57.8668365,-99.8371887,-20.7659836,151.5979,181.037628,-81.9285278,240.357025,35.6509933,101.54686,-179.753204,-8.23490524,-58.0621986,140.397308,42.2694092,75.1399994,-249.067307,124.158844,87.6843948,-93.5716476,-135.243164,-95.6721725,195.371918,247.838257,92.4384079,-2.79642487,-86.7497025,-62.8502159,67.675415,-3.72350311,180.756653,-45.6118622,106.250145,15.6899109,-11.6316376,-20.240448,90.9919891,3.19914627,135.347443,30.9669304,-61.6654892,-52.6252289,159.541214,-4.46431732,17.4284382,52.9747162,-71.0944519,-15.0925446,-73.647995,-22.3748131,-160.947113,36.9245148,113.22541,-189.687897,-106.678482,50.3312454,33.3983154,-220.271469,48.4809494,55.2587318,-144.919159,-238.834885,-52.7941742,-0.638633728,75.2198639,112.921997,-70.2501526,131.771484,-214.968658,129.916748,-64.8786621,52.6013527,57.2073975,5.35124779,-72.50914,201.860382,-13.1798706,169.420898,-194.583618,-197.177368,153.108337,78.0960693,-46.0824432,-27.9851723,-37.72686,46.6501465,-104.625801,-41.912529,252.043182,-133.65683,56.4121704,227.399597,-122.592651,376.397461,146.611115,140.612473,-102.523956,12.14328,-21.880825,35.9459915,-244.109512,-5.22000885,-74.3576202,64.7929306,-52.1846619,-64.7702332,-58.7820129,4.90535736,-11.5238914,-9.10871124,-43.0613098,-76.4900665,-131.726761,-36.1910362,-148.027191,3.70476151,117.248322,165.669128,-21.2529335,178.427612,70.4052734,57.7728271,-1.53203583,-37.4046288,-136.588989,-131.918579,-93.039093,41.3171959,166.022354,17.5754032,57.2541504,17.854887,-22.9668503,-24.9709511,-56.5025368,-32.4812737,148.220551,38.4400635,-8.36461639,-5.42901802,38.1761742,-62.9986572,-108.413467,-7.42473793,-177.420319,202.912231,192.779114,-118.201065,-20.0683365,45.1312561,299.64502,51.3269196,128.028198,-25.9591904,-84.7274933,38.4887161,71.5306549,14.9237156,-92.3822632,35.0049057,94.9867706,-66.9127655,-46.4398117,33.3526154,13.4703274,31.5499191,-74.0757217,-93.302948,-0.698921204,-44.6725006,205.770752,220.139038,87.4951935,156.90242,-102.542755,49.3540573,62.1591225,-43.7337265,-105.479019,3.20492554,64.0138626,74.1641235,-99.0978165,-139.439789,-17.9762497,77.5981445,60.8423996,48.7449265,79.6921005,-94.7060242,-59.7561798,-130.851242,-129.642868,109.922112,22.780632,-143.450729,92.1907196,192.906586,-2.40516663,1.80691147,-111.89447,23.4497585,-42.126339,-5.47943497,-48.5558777,39.6348991,77.1225891,57.7389145,-77.7320251,22.0996056,-73.0908508,54.8384361,-135.777451,26.5560627,-66.8716888,58.1180153,163.522705,66.986969,245.652649,-125.226089,-4.22663498,-34.0102921,161.795288,134.206711,-13.7877464,-79.328125,-68.9456329,-139.76178,10.8090973,-16.3358841,-81.1109543,-125.651367,-175.350464,-59.7038536,92.8933334,193.285645,-14.3203831,93.9196854,-63.5706367,-126.649391,-10.488369,-5.75431824,-19.8511925,-99.10186,-9.51670456,-27.9566345,157.709961,154.740356,90.8052063,166.681,-62.359642,91.123291,-33.0021744,-62.4494743,96.6817551,-56.4846954,70.8903351,-56.3782349,262.933228,48.4631424,82.2661285,157.709991,-5.61808777,138.19487,39.2696304,13.3992043,-9.50535583,45.0042114,98.0978317,-143.337341,-137.137756,48.3268814,-127.045074,-9.86556053,169.70015,30.2275105,108.052795,-14.9071331,-53.2447433,120.216049,-111.682312,-64.6766968,58.853344,72.9273376,27.2663269,-7.02695656,93.8894348,-72.5217896,165.108017,-74.6424561,206.735413,-69.6442719,8.57137299,137.396591,124.309166,-86.4454956,-188.110107,-149.327484,-96.2022552,67.3835449,-209.703888,28.2884712,116.575134,-27.3676605,-172.843826,237.029358,242.113037,-162.3078,21.3793221,76.6795807,-200.828857,-96.1647415,-160.710175,48.3855743,156.191467,47.7697678,44.7734833,-129.854034,-3.69973373,200.281754,-18.3779716,250.953552,263.761993,126.182556,-53.9679985,-33.4585152,-188.561127,2.24852753,-152.021759,-32.4706802,24.5549393,-22.9973564,147.762451,79.4287872,69.2291031,-130.864105,23.9236984,-75.3848038,-124.787437,76.0267334,142.961426,-37.3180389,-158.287003,128.794632,-14.9199276,-104.639046,4.75497055,-237.159912,-161.562836,-14.2007027,16.1771011,148.760925,114.997971,-85.9719696,-108.366745,-27.7423363,30.6388168,35.5203552,-125.125038,-26.443428,-171.659851,-47.0310898,27.5322609,203.83342,-90.4782791,-73.4824219,4.26283264,200.867538,45.2687378,44.9878387,75.9330139,111.364113,44.0722809,-251.598099,-31.1032562,53.6187782,116.73568,-102.921204,23.172821,3.29007244,21.4048424,-61.59478,207.113968,-104.556976,-125.714882,195.905823,-20.4238663,96.4189453,-3.80561829,-189.43988,33.7774811,172.10437,74.006752,41.7648697,-86.541832,62.7108231,259.71228,-25.2439232,3.58652496,251.038956,56.8582916,-93.7698441,39.1295929,-24.30373,114.454498,-28.2214241,70.3279648,80.974823,-13.0780258,-104.357147,44.2265282,-23.4241562,164.501312,188.499039,301.665009,53.1156769,-100.059341,37.2826385,186.252106,180.080963,-91.6973495,-100.201019,79.7471619,41.8028717,47.8517914,-54.3559608,-25.2914429,90.5682678,-39.6575279,-109.851036,22.8613625,45.0821304,-96.6435242,-55.0961761,97.8050003,62.5456047,50.5249481,258.661224,56.2996597,94.6833038,-70.3060379,3.14960861,-115.471695,-46.0532875,49.0941544,-231.743927,107.151855,-62.7339821,-75.1362762,136.54129,41.8805122,39.9560051,-62.1845245,29.315918,122.535187,-79.8675842,211.550125,-143.384827,-186.193726,125.372482,88.1552124,-166.12001,18.7351646,-41.1116333,-201.697983,91.8488083,90.4049072,-239.434937,9.64920807,19.3117294,-57.5650063,49.1840057,-83.4681396,90.7641983,-24.1027908,74.5721893,138.913437,84.302742,-5.14200401,13.3076506,-186.319977,-60.1689911,-85.0943909,-77.798645,20.7097015,35.5296097,134.935699,-57.5625038,-60.2832756,93.413353,-24.3165665,65.3498383,64.7232513,147.809357,59.9306412,46.6922302,98.4881821,-142.443237,-287.41806,22.9645004,-194.532516,181.630173,-28.1851768,-35.4584198,-166.30072,-106.16246,-201.883209,53.5507355,-226.524628,122.841118,308.625244,-70.4093399,-40.7266464,-50.1819534,101.825714,17.5290661,4.10329056,10.3947678,-54.4657631,-16.9500885,19.887413,-112.496109,-72.3404465,-175.497101,47.7716331,98.5418243,-289.915619,6.86277008,-69.8444061,242.391388,139.564606,28.457365,72.1395416,-113.888626,53.4136658,86.9355774,139.798676,78.7603302,161.877655,-98.944313,-189.147705,-195.168991,10.3145981,-8.13510132,-221.387604,50.2243996,92.1758423,56.1887321,-73.6529236,-40.0772057,10.667942,168.265503,-75.5783005,-159.34671,66.1485977,-131.454758,88.9457779,-143.276001,-14.8516998,-183.078217,-130.780182,-129.49411,-21.6962013,21.3217545,-11.7129812,-36.1109772,-94.2842026,1.17194366,322.288574,79.2612534,-64.8589706,-123.998451,92.404068,-31.2276764,-252.237106,7.92819977,171.972656,181.293533,48.2650452,68.7219162,124.433075,-123.695419,20.416748,55.260788,-83.2782593,-98.9807129,148.871292,121.600204,-59.4281693,-17.5657806,-118.945335,-36.8203964,-4.63005066,-53.8262711,100.875359,-131.645096,-129.153641,-312.281403,-49.4207458,-16.0129051,28.9911766,-171.092041,-59.454628,98.7423096,-149.129089,78.7061615,-124.824417,-242.508713,31.5871048,-110.209991,14.375679,254.285736,126.886208,48.997612,-90.8940735,-88.4495621,-185.71405,-69.1569977,57.0372925,-80.1894073,-102.392456,33.7816925,-22.9684486,19.5351906,-146.827621,136.344894,-22.9277782,-54.8638496,133.463196,-165.539413,-117.664024,-242.288834,27.6159439,45.6492805,82.8898621,152.826035,-92.363472,53.1685638,-139.389221,78.5351105,108.0047,-116.229019,-41.7220039,-352.4263,104.643364,186.080429,21.1336975,-63.4315262,2.14340591,162.253006,-132.090378,264.242249,225.036255,66.2803345,-46.644928,105.368515,31.9552498,18.9691658,-47.5963402,83.308075,-41.0995712,-32.6910095,-25.5120964,-69.2928772,42.1976395,48.4995384,10.0780029,23.3505249,106.663513,103.720894,107.055061,65.568306,-56.4070206,-61.8403511,25.7928562,-216.656342,-35.8199387,111.80986,-62.9505081,192.484131,45.4696541,88.7109833,-14.9000111,-34.1082306,57.8987885,22.3198166,-54.9162064,9.65304565,-103.626801,-20.869688,-185.715286,86.5665588,138.916138,-55.6929092,20.2776756,17.360836,55.1707077,21.1789474,-39.0934067,-273.765198,103.91008,58.6941757,39.8989563,96.8148041,-69.8091431,39.2485161,-98.9161224,64.5241089,67.798111,-21.0601845,36.104599,69.1378708,74.2084885,94.7341003,-75.009613,-56.3089485,-111.602585,13.3120956,-60.5443268,142.693451,-100.960243,-11.0541611,-71.8977356,-117.745255,87.8550797,-11.1972504,-142.743164,-76.915863,-7.99422455,-28.0836525,76.2313538,48.8082695,0.521534443,-70.28479,-133.775879,-145.930206,-141.838791,-57.5974655,-85.3297806,-17.5595093,-57.9548492,-11.2363243,10.0822678,-35.9248199,46.2274094,-128.52832,-103.303665,-11.1664639,-45.3326378,75.1802368,141.221512,-48.8379517,-86.716095,-32.021801,111.886536,-66.8942413,8.5824337,-2.5545845,175.136734,153.964127,137.232788,20.7053375,-66.7243652,142.365158,-90.173584,77.4465332,75.8154297,-25.1823006,-19.6986351,-57.8584671,31.5090256,-111.031982,-105.459076,-27.5525932,-163.944778,-104.851059,34.0103607,11.6465073,-49.4068298,105.839371,-111.906921,-58.3731613,86.9438171,100.06601,-20.6522102,1.41173077,106.117233,-32.2464867,-130.349289,-8.82036591,-176.32428,33.997612,63.6463852,88.5118866,-23.8371277,53.2542191,121.898323,-51.1695061,99.3646164,85.7315369,-99.0866394,9.43270683,14.2816048,257.629242,90.5409012,-75.3417206,151.937149,70.3296051,-56.3661652,5.1372757,0.226093292,126.888367,71.2080765,128.963608,48.0049667,-63.1738205,78.7835541,64.5298767,143.03334,14.0754576,-1.14710617,55.735611,80.8231354,14.4370117,85.4303284,-86.6603241,13.9682732,10.5697479,46.5791702,121.307388,148.31691,-15.0859909,-4.8096981,5.33478165,43.6994591,1.24208856,51.2893181,32.6959229,48.4020309,68.2799606,83.8036041,-100.960907,-8.32649803,107.669693,28.3582077,-74.3994751,26.3281956,45.7537651,-7.2220974,-105.030617,4.84082031,-69.3985443,-107.775406,-44.8482056,102.987076,-69.6597977,69.9538269,-12.4070625,-2.56867599,82.3200226,-112.595444,30.1354866,25.2907753,-111.442589,-33.63517,106.044327,-105.074799,-110.532944,-179.128372,31.886879,106.989227,62.9783897,-37.750351,54.8348236,40.7128677,-122.372955,40.2207565,241.824615,-8.57076073,77.8291397,44.9684601,26.197237,9.34305382,4.22199154,14.1665764,-23.7071877,-115.366074,-164.207458,-56.0437927,-49.7759552,-84.0467682,-74.577713,27.0620136,92.7878265,-42.0776176,-119.492813,21.633606,74.8889771,-101.052383,-18.6151161,100.777435,14.1116333,-52.2617607,106.689552,-0.249629974,-4.96286011,-177.095398,-3.44585037,-121.117882,113.118561,-120.37999,68.3324432,-4.59133339,-89.7116241,58.1204987,-131.344147,-113.663048,-62.5696106,93.5527649,169.721008,-114.220154,-129.391266,50.1639175,30.7951145,-26.7859268,108.9785,107.901367,120.748405,-8.62261963,-136.874695,-60.3915482,-88.7010803,-26.6087036,25.5331612,-107.380829,18.3071136,-42.1933861,-33.1523438,45.6493835,-135.012741,-7.19189072,70.1203156,-42.8857269,-69.7666016,-51.0567627,51.1218452,-48.8647614,-45.9250793,-168.170776,-66.7546921,76.3110657,-19.2044334,-54.6650124,16.6638451,7.81911087,-89.1406097,-209.52533,102.614517,28.1242027,-1.24577332,-38.6956253,64.4883881,69.8442841,32.7127037,-30.2823963,34.5659523,148.99469,-5.75734901,-36.0691528,2.07379913,-198.878067,4.91949654,-68.3330307,-117.256859,76.1776581,58.1392899,13.7546024,66.4090576,155.932617,83.4214859,16.6331329,-110.288567,-80.4039688,27.8468513,-122.582687,-218.262299,-33.8533936,-31.7269325,9.52638245,1.58618259,-13.4794312,70.4958801,-88.752388,141.829102,-89.1572266,19.4495087,98.4756088,163.049133,-94.2428131,49.8540039,4.34793854,22.0747108,-80.0246124,-69.4195862,-112.758957,44.0651817,22.7705708,-11.8904057,-32.6594391,-17.6464119,-94.7210541,55.4495201,-59.0137367,-37.7871284,-15.8506508,-135.819809,-137.433014,101.000008,-19.0112019,-98.0515213,50.1317711,49.9033585,11.4920807,55.5666389,-83.6908035,4.02560997,36.2425804,-86.152832,-27.846405,70.1863708,63.6480217,28.518219,-15.9497948,-108.790596,31.7606602,20.1239891,-46.1043549,17.1504059,42.6693802,-23.179985,-172.901154,-83.9274445,48.9363022,-85.8165207,-66.2933884,-25.1746712,50.3698349,40.6561203,81.6748886,84.0204697,86.9368973,110.553696,9.61400986,78.421524,-85.6150055,4.86723328,131.384796,-156.316895,26.263958,-112.315079,-21.4874973,-25.5300865,-7.81387711,77.4789734,107.468155,-180.657166,-67.1572418,113.048668,-55.7812424,-131.112,95.5935135,24.176281,53.3791351,114.971825,169.333893,-129.572708,-215.023956,58.344593,-206.498474,145.801102,-139.630219,-2.13629532,118.816528,-109.363968,179.232376,83.4480972,-4.31847382,-49.1576614,-145.388733,-30.0092621,170.543091,-3.41678619,-142.569702,50.0537643,32.5898438,4.84637642,228.134354,12.044899,21.6797943,170.684906,151.123505,129.320496,42.2736511,-13.0276947,111.250259,99.5929871,104.349518,-110.583389,86.3491516,66.245079,-274.77179,-0.734054565,25.7005501,171.343994,-192.713898,74.6840363,-72.2289124,47.6871262,-146.507874,-33.9877167,207.601593,197.461136,157.993073,-8.45364761,147.200867,-53.7357216,-24.387188,99.2829285,-227.382935,17.7261047,-120.545822,-94.0789032,-32.7245941,-65.8087234,70.9090118,195.520477,-12.5911179,-33.3168755,-15.3007164,112.724503,-129.67038,-187.203308,-61.2398758,-34.244236,66.5157928,21.1106987,-50.3146019,110.762726,162.826996,-252.724335,119.241768,-266.981812,-117.457031,-68.2989655,-102.988358,151.889038,-226.733368,74.4274216,-12.9760513,2.94577026,-30.5557537,-8.64557648,130.283661,-63.9534531,-7.11019897,-5.17707825,-15.1799088,-28.4769745,149.079437,100.19825,-322.099823,96.154541,-80.955246,18.8125153,-166.102448,67.1297913,35.2567062,134.99173,206.716644,112.908234,5.48068237,212.710358,162.130569,-73.9587631,12.2835426,1.0350647,62.4277496,39.4011917,15.630024,80.2200241,125.535492,-117.795959,2.95751953,-57.5843658,-174.444595,-215.078323,48.6347923,120.399124,-146.805374,61.0123558,66.8318481,-272.772644,-178.403336,-44.9445648,-163.762512,67.6380463,17.9156704,-46.352169,-33.0736122,47.4409637,-179.89682,49.3923264,-74.9978943,54.9518814,-141.007233,70.7808228,-81.9565811,5.66471863,128.288895,93.5167999,50.7997818,-37.9245529,38.3311615,113.719467,-179.635529,-210.984772,-120.629166,-66.5530548,174.11937,135.451843,118.932404,78.4079971,-86.6090393,-89.2629852,-57.8091698,-60.7064133,-79.6365433,30.662941,-130.079865,212.543304,-9.56154251,9.7766304,-33.5891418,209.013748,53.008091,147.27066,-183.334915,131.847,-10.849617,-88.9423981,75.4298019,78.7850647,-27.9642258,38.8222427,38.4769402,91.5730362,29.4205322,96.8414459,59.8431511,105.34417,-21.6866684,120.752533,37.6680527,-32.1833267,134.171326,180.355865,-265.208618,12.5061131,67.1329575,-81.9220123,96.3342514,251.623428,-134.42009,67.8102951,-62.3215218,26.7355309,-47.1506195,-4.55267906,129.492798,183.731216,168.681946,-35.1043358,17.0181465,19.0772095,-34.2357101,91.8489532,82.1764832,-10.4939728,22.0040588,33.9281311,110.687752,12.1658573,-149.819336,42.7368393,-19.4192848,31.6337547,-6.22963333,209.071091,22.7309265,-98.6192932,81.9937592,-69.9113312,-147.930481,156.851166,75.137291,30.5237045,-38.4729004,-1.29391098,-48.2051697,368.266266,170.50473,95.0753174,-88.1991425,-262.29599,-60.2370338,25.3190002,194.744171,118.105072,177.31955,30.7551384,-56.0320129,-19.6305008,89.6751709,138.288879,-58.3458633,18.4445572,-75.3801117,91.8389511,-129.132385,32.2737122,135.811981,163.299088,124.72773,-114.209915,5.95602131,155.566238,-141.465164,-159.874481,109.290962,-195.624313,181.004623,75.9096375,-154.058655,-3.88274002,95.9315796,-170.049438,-70.961731,243.761658,92.5131607,168.901917,-251.73349,-101.079742,53.1737976,-190.059875,-226.619629,-118.741669,189.601715,-64.7666016,-90.699585,106.938522,38.6505318,160.808685,194.032669,127.646698,-78.6822205,-65.6152496,-217.82872,-44.3526001,7.31093979,16.5494633,142.224045,-4.75901031,-40.8485413,-85.1536331,-69.5724258,49.1450043,264.807129,14.6982651,-83.1700821,-27.1081619,-98.3775024,173.346054,-27.4429455,133.313553,-68.672226,-94.7944412,-45.361618,69.8924026,159.811279,108.881645,114.46254,-101.171432,30.2905617,21.9001808,-337.68158,134.020721,176.426956,-23.2850456,64.6389542,7.45301437,6.07611084,131.099365,34.6925049,97.4248581,-62.4026337,97.9008789,-193.619278,-59.6248055,104.705139,71.6458206,67.934906,-129.123749,-49.4551582,-77.768837,117.244293,-78.6715393,31.4795494,2.34745789,68.9919281,196.853699,6.43717575,-217.913818,184.712555,260.180298,-111.116379,18.6817245,-154.968842,70.5288162,169.638763,-7.37617302,-0.680557251,-142.829437,-27.2145653,-123.673248,-156.279312,60.1659698,-103.433929,-73.146019,184.97438,53.0295258,144.680847,18.4924812,-118.045197,-101.153412,33.1522293,-10.5892868,-178.613342,13.691433,-265.500305,-121.518433,-189.871887,13.7825928,37.4420547,-212.558929,-49.8499641,-119.982788,51.2828331,73.8829651,8.23976898,73.6403046,66.3109283,-3.51378632,32.0223465,-45.1147003,-22.9179726,28.686718,27.4649696,-290.38678,-55.0942154,-75.2586517,-2.58389282,-100.087135,-126.22467,35.4203835,-78.266983,-197.578735,79.9778824,-218.614441,72.1151428,96.3659973,-80.9596252,-89.736084,-88.7141953,156.786438,113.94886,139.55838,7.26159286,198.209717,86.4258423,-49.3086853,199.04245,-99.6738739,-72.7718353,-201.796387,-35.0428619,191.370636,-11.312233,-26.5856171,96.3568802,-33.6191864,-24.8526764,80.4271393,280.742706,3.15188217,-28.584507,-186.227142,4.34476757,50.311676,-176.293121,121.726822,130.532074,54.2957611,-29.338913,81.5691528,-77.8893127,26.9321594,47.0197067,-53.431385,-40.2215004,70.5546722,204.146301,26.1521244,-127.816658,-59.784832,-149.440277,-227.804962,152.333878,100.291,-70.8232651,-22.8951588,85.897728,-8.88215065,305.553619,-42.6792068,-98.9975281,108.438698,-21.4198265,-84.8714294,-9.05487061,83.0965805,-48.630043,-12.3304863,-5.73380661,54.2446518,74.1086807,-135.021118,-42.4546394,23.4055138,128.060333,122.057968,120.982765,117.346024,35.8474121,-141.284332,93.3589325,158.801041,-84.9985046,56.2000084,57.1560516,211.661926,123.652756,40.6446152,120.714584,-113.710594,32.5451431,82.8463898,-104.374985,48.4255753,76.3236847,142.94194,-44.3458862,135.781158,-140.963684,-132.310089,-166.827744,97.4409637,232.688675,184.976715,97.8960419,90.805397,91.1336136,51.0751305,-26.139061,41.3552094,-14.3268127,-64.5427551,192.946167,-100.004105,-37.9403992,-9.56150055,58.5726013,121.320786,-8.22247314,77.7288208,16.1602917,40.1974792,-67.6332474,-203.405334,56.9680595,73.7348938,-136.587921,-4.54920197,82.6773224,-30.4756546,122.82692,316.370056,39.0244827,83.776062,33.3862152,121.127838,34.5109558,-67.7348022,47.7810364,171.270844,47.0370178,61.7422523,111.904594,275.334625,-248.865784,119.312698,-79.0208664,168.999969,-32.3366699,131.560791,236.639587,162.798004,93.3577728,51.8198357,-175.338104,277.520935,-317.212036,-272.973236,-221.638718,48.058403,-114.793312,-231.749313,-124.832794,-78.0855408,-245.767715,90.1723557,66.8293076,-45.6864433,78.7349091,-94.9569473,36.5560112,-222.248596,91.514473,-24.0985413,-1.90901279,-108.85199,352.669556,-86.5659332,-4.58747101,-12.5357018,-28.1430206,-9.77709198,44.1266479,-26.701067,-41.6813202,-89.3650208,97.4095764,-86.8588028,-11.0434303,187.146118,-321.192017,40.329834,-45.344162,61.4523125,-239.701248,-45.1027298,-8.20040894,-49.3325195,98.1500168,-66.6432266,30.8593674,-24.0582199,-30.1096344,237.79718,-99.2708282,-64.3587418,-65.2761841,-110.225784,100.045609,154.290344,73.7282944,-145.612946,18.8329277,41.4474182,133.736084,-40.2231598,46.6664047,-172.4646,36.4942322,160.652954,6.63309479,-37.5736542,91.0003662,152.688919,208.059708,-204.95047,120.46537,-196.021774,-314.276306,-227.603363,-28.3575745,-64.343338,206.094727,73.5348358,-29.4816589,235.249161,84.3550568,-57.2270393,89.0827713,-6.16269684,69.2585602,82.8131561,84.3892059,16.6584549,34.0008736,-114.939705,-122.244499,-157.018677,115.916809,21.7205009,-5.41970634,30.2931499,107.72261,-88.1367264,-10.584136,-5.71375275,-5.38228798,-86.791214,-85.2735672,-81.4597168,-229.389114,-92.3096008,11.8284836,-103.915352,29.336916,128.204193,-0.347657204,32.3257904,75.4888153,126.078812,-58.8125305,-57.4765778,180.827942,-56.7448959,-127.219582,-26.7862549,-27.4493484,128.396133,19.111042,68.4703751,-253.461716,-8.07096481,-104.181664,22.7621613,57.2111969,-279.853271,90.3599548,27.2987766,28.8406296,4.09702301,-107.581482,24.0509491,84.4702148,-146.188965,3.65180206,135.626755,-137.183853,204.245453,6.45281219,294.619354,-57.4300613,124.464172,-18.2311859,166.872635,56.4300919,-31.887785,-72.4057388,-5.2735672,112.651337,134.237427,-67.4235458,-109.934433,40.6783447,-69.9728775,-58.588295,-31.4554138,48.0008049,97.8787613,-133.162766,21.7705975,112.546089,15.1311493,-88.4060135,-167.722961,-115.564049,-78.9435577,39.5405121,-156.281219,245.061203,-171.340332,-16.2395782,-89.0368118,102.179855,-89.865509,87.8677368,1.83035088,40.5702133,-79.1967392,-222.643799,-78.2442627,278.600098,-87.2249451,-45.1122513,-55.6942596,-13.105957,-131.095032,25.9666824,136.84021,-162.991211,0.93094635,-26.8700371,-28.1118965,-44.9880409,-49.1700211,69.6752548,35.9336243,130.98024,81.8375702,80.5600281,17.321846,42.3690262,-70.3329697,7.96427917,-56.9895477,88.8075409,-70.9294891,8.28992462,-56.8414612,-10.1222038,20.1623268,-108.518074,87.5923538,-15.0625935,48.1839294,69.7510452,15.0106812,-49.9152527,-99.7419281,-153.863647,63.9502716,-49.0259399,-67.4833221,-114.608536,114.859283,19.5475559,170.267136,-51.6755676,-107.71376,293.603333,21.440731,25.0589142,36.81353,-63.4398651,110.782852,7.62892914,-26.3135681,52.3470192,-42.8305435,87.5189285,-6.6552124,-60.2742767,69.41922,154.89328,64.0632629,-37.7530212,-99.5799408,-196.594482,-19.072567,201.42041,-92.6069641,-130.406265,-110.432587,-239.202271,-17.9667435,59.2659378,-70.5174255,234.076859,22.6601448,96.412796,36.6875916,-136.806381,-34.1081467,38.6332741,-114.998245,-18.8126316,-48.0015411,-178.585251,72.8866272,-62.0026474,156.662964,113.089539,-127.799294,-107.94368,149.115021,-43.1839752,155.573639,24.0824394,196.723846,-91.2450409,-138.203766,-72.4349442,-95.8710632,-98.0546646,-29.9248657,139.992981,160.967255,-178.173111,-59.0515213,68.6352386,-48.5166168,-112.277176,-21.0381355,107.720581,-184.474152,-149.742035,86.1293182,79.9235687,154.977798,-223.29715,-218.081787,105.69194,-89.3091965,30.7283192,71.578598,42.068779,138.001343,-37.0997772,-116.473343,14.3889389,27.7825756,-9.86271667,-70.8953476,-50.2714043,-10.0450783,154.29834,26.4139595,148.427551,187.344086,79.082489,4.51232719,-91.6151123,27.423233,-194.067139,-25.4552765,-181.616241,-54.5895233,108.423576,-288.907654,191.916504,-103.193398,-78.8448944,-114.111298,172.31633,40.2328949,-12.2851257,96.818161,153.257401,-112.054146,19.7743073,13.3036346,107.045547,-46.0742607,-15.8745117,-35.8331146,-181.24617,21.9306412,-97.9623413,-15.9924698,-43.905323,151.206146,6.87294006,19.7779312,27.1642799,-58.4540939,-197.619034,-47.5680618,18.3336601,-71.7954865,-6.7634964,125.701515,166.158295,76.2690887,-219.866913,-52.8218231,188.782135,-9.52339935,-74.8321381,-173.040344,-51.7277412,10.4277649,24.8735504,-39.3375816,-53.159832,-94.4844666,53.2175674,68.0791168,261.028931,74.5917892,158.079742,168.015045,27.2662373,55.7309875,-44.5617599,-17.7140141,-180.682068,-78.9494476,103.17662,215.10672,-123.018585,178.177673,133.805649,-188.062866,-47.8531799,64.2548828,20.4647808,10.4363422,-45.9361343,-168.003555,-185.572937,63.8991127,1.4946785,-101.061974,-21.3483753,173.559494,-1.59678078,-217.305573,-128.652069,99.9947052,-155.369736,-68.0626068,-181.742615,-108.392899,-85.8099976,-78.3679581,-31.1964931,47.4959564,138.586105,116.398415,11.9983826,-141.435165,-90.9014587,-1.60027313,53.907341,75.4494553,-117.485077,-151.705521,115.389748,-2.06171799,85.0502472,-28.9877167,-112.399849,-13.7812061,-3.65836334,-129.672333,38.7075577,-170.53981,-35.6617889,252.249405,-124.169022,32.0603943,-182.395233,109.279404,-6.79563141,80.4393311,8.56706047,218.909958,46.6618195,-96.8176041,-129.203415,-93.6410217,34.0746613,-71.704361,275.776611,-122.550262,3.85979652,185.922485,177.227142,-27.1582527,28.022995,39.749939,-64.6020813,61.263195,43.5832672,30.0558624,-68.5331573,2.20484161,-31.5862236,-79.4274139,-7.15577316,-39.9173126,-10.9838867,42.9599762,-35.3761139,-16.8937798,188.154755,-27.9445057,33.7961845,72.603508,-151.790497,-152.535034,-59.0306778,138.004105,-203.102905,-81.5836334,3.25305939,-153.477753,-84.0071564,-121.625153,-60.2306976,-52.2965851,-78.3383484,27.6567707,222.475677,-104.45311,-73.9082184,22.6166382,-177.137848,-28.3982887,54.1194801,-69.3842773,72.5320129,206.381012,74.3160553,163.381073,32.2770996,66.1947327,40.433754,4.26029587,150.468384,-188.005615,-94.599411,-85.2491455,11.575386,165.082367,55.1747437,-23.5682049,-76.9216766,48.807518,-120.84684,-54.6716156,132.978851,42.3906898,-32.4452286,75.4934616,145.921906,-49.0392647,20.2372341,-20.5079918,-42.1180649,142.453262,-79.4241943,-92.6814804,-17.5329323,-62.6751862,-4.61222839,-125.573265,-50.6033783,-15.0399704,115.411606,-227.995651,-13.230526,-106.737396,-28.0838509,4.32794571,12.8727779,-63.8979492,124.85289,148.20929,164.956848,-7.79959488,120.736214,6.94741821,-81.487236,22.0516357,7.55468369,-38.0641174,-158.779816,4.51037979,-66.5747986,164.723236,65.2055817,47.983284,-2.45677376,-156.560303,27.3587494,-12.2688446,150.291336,-84.0512085,-134.648499,240.435089,-102.247047,-110.474197,-164.387115,105.026764,73.5528336,-72.9721832,-223.172623,59.8312378,211.959564,-3.95033264,127.513374,48.2846298,33.256691,-55.1179428,-55.5083618,-76.2074127,-38.453064,90.0313263,59.8498917,60.0268021,-18.5647125,27.6055374,126.020767,41.7546921,97.5145874,70.9068298,-105.723663,-14.3165436,221.661728,151.635437,30.7920036,132.332428,-79.4380112,1.793396,-11.9212646,55.497345,74.747879,175.703217,-89.8414917,130.09433,117.450226,-17.1156693,-214.458176,127.178482,98.6647873,-175.358826,109.117638,128.743118,77.7277832,-102.886047,133.072037,-19.0081253,206.037537,128.269913,31.7108326,34.833828,133.506882,234.118637,29.7329121,-245.781555,-186.783386,-50.8277473,-85.909668,-24.9206696,104.93924,-64.3091278,-1.83804321,28.223423,151.913361,-69.1676559,77.06073,-123.095085,-20.0530052,-9.6249733,-114.811508,-65.2383499,155.594421,208.921997,365.205658,-69.2764587,93.7383728,-138.188492,-71.3631287,78.3995132,313.885284,-30.5902138,-84.8413162,110.630005,-121.98539,47.7470856,30.6845341,-148.185242,84.8771744,-89.2539062,73.0707855,-126.20002,-153.191772,-109.852417,-62.556282,-48.8918266,180.673126,-100.381348,-224.913956,-138.866867,-43.5895081,-176.937866,2.13151169,17.835865,22.6652107,8.05203247,144.113861,54.355217,-138.674896,-124.490158,10.994606,144.744751,-11.9719086,107.229607,-24.9798241,-214.841309,156.031372,83.2188263,252.396652,124.66877,-144.055038,-25.0666924,66.3347244,7.79392242,-230.712036,53.3386574,-119.607056,26.8810768,134.45694,110.508141,135.966476,139.319458,57.3907166,-194.83168,-55.7139435,179.435333,-5.03397369,-31.0271111,11.4514542,-100.037033,106.058891,-55.6517448,66.1548996,164.226288,107.157852,19.8946877,-113.635818,169.368942,-1.89368629,40.861824,76.7691498,-82.2160416,-44.9769325,178.664215,143.339203,-103.931549,-104.004517,44.9786835,-0.287834167,-240.867126,-69.8692245,108.542496,-63.2009506,-12.2985497,-5.88997269,-94.150177,75.7600937,-153.420212,76.0229645,-0.8712883,50.1702385,291.08783,-5.98429108,66.6460724,-34.4695358,-114.964241,-216.827469,16.1521988,0.549999237,-75.8041534,90.3656006,-36.8045731,41.6806717,142.274277,54.5394287,108.424545,-163.246002,59.6781425,88.8510742,180.503571,105.677498,1.61063004,123.902153,-220.936234,120.570129,76.7446289,-88.9255524,-34.3304977,-102.808464,182.183075,58.2043915,-28.6124992,69.3880997,-7.5260849,131.303894,-50.5441017,-179.522156,0.670333862,40.5017052,116.248878,181.362793,-7.93743896,23.0319862,-260.201935,45.2619247,4.14422131,-9.81757736,203.281952,-146.50824,27.5881042,146.220215,45.7171936,212.54921,105.888992,110.194336,78.9667206,230.19519,23.365387,114.380157,62.9811554,242.466034,-106.877853,-26.816391,227.911041,-122.526657,-34.6987076,8.05609131,-31.7040272,41.6877899,-22.5972023,-79.1650238,47.8625336,15.2490044,-72.186676,-156.19545,-146.67865,52.9980774,-116.06958,60.3252411,-10.5282593,91.4104919,-5.34921646,-291.488403,130.135864,187.213257,124.7948,47.1610565,14.368309,176.002487,-220.332367,-37.5107574,-72.7509918,-142.995377,-97.2337341,-224.721481,122.695717,-67.1842728,119.463394,92.5568008,-48.2384834,120.730194,42.3659477,-95.9424744,65.0812683,151.101532,133.940659,94.9618454,151.941605,-84.4478912,213.918427,-90.6496964,23.7335644,102.61026,-41.56707,46.575676,52.0528679,-170.734344,-77.0136566,-80.9632339,-224.067017,153.703369,94.8820877,-97.2340851,-146.669724,-115.359039,-70.214241,-25.7036037,167.513168,-131.916168,240.651855,29.1502991,-182.089493,-187.149399,84.8409576,280.953217,-40.3127441,19.2399311,104.362762,65.7630386,-122.094559,-25.6491356,-134.189911,230.337219,-73.8384399,-68.3879471,34.6211395,-37.6601257,53.4683075,24.5199814,11.0405388,-179.827408,-216.617767,64.2629395,89.6152344,58.4203072,-110.435699,-8.47493744,-50.7079468,-50.4447327,-66.7598953,-72.1031265,-157.57193,229.102142,-49.5805588,-57.3717041,82.271431,33.2364197,-85.8859406,69.9181366,31.4813957,19.8497086,-78.1162872,66.8995209,-252.672485,114.482742,-90.2321854,85.1356583,119.787926,73.3835449,69.9512177,11.4514999,-103.508682,196.658478,-93.317421,-45.417202,-12.8075981,95.2493134,-32.8022995,-86.6598358,29.1844864,-149.066895,-58.9613266,74.6677094,-219.134674,3.81147766,-135.622986,-176.024368,-64.2605591,202.924713,174.359421,137.014496,101.832321,-97.8663177,-31.5322037,186.720261,-81.6597672,276.900452,66.5834045,-9.10331726,113.784103,21.7612648,-35.646637,-14.06884,76.4683151,-235.260834,-48.1923294,35.4747849,82.3332672,-163.435974,88.7862625,-69.068985,-37.0787201,104.506195,66.3161011,-196.798889,-36.8251877,-20.6403275,140.912048,15.5739479,-70.978775,-173.596451,-134.252701,-175.737762,82.0125275,-139.076859,-131.21579,171.789581,158.216553,-1.91209984,124.760727,-87.5224609,242.841003,-38.7850037,-333.233521,81.5038757,11.2685089,-136.626831,27.8497162,41.8730659,-68.9212341,69.437088,-104.180984,-191.390305,-100.401779,-159.876297,-48.8561325,-53.290741,-4.57067871,71.4068832,61.139183,-12.2314968,122.876938,-68.0839386,102.584663,59.438839,-40.026947,76.7051315,-96.8556213,-129.621704,57.6703835,94.0757751,-22.0958328,97.4119644,70.5439529,-115.809937,1.66064453,109.672157,-30.5579224,-79.6108246,27.3170319,-35.0855713,-103.192802,193.670059,77.6853485,133.060089,59.384285,-4.55899239,-38.3452835,-13.863987,-122.32045,62.682663,21.452301,-35.4369545,20.5238037,83.9397659,-40.9885979,-235.032196,27.2352982,266.14856,-114.366852,41.2928467,187.966599,-7.96694946,-61.5642509,-169.885742,127.348862,7.10516739,-125.503799,26.0613251,211.646027,-47.1328659,-57.5880127,0.539110184,-75.6642609,45.0598831,-123.71521,13.3585205,-259.477264,26.4004498,101.221207,-203.127197,-86.7720795,-1.79998016,-1.58457184,-342.208801,-125.852081,77.9793701,-137.581848,70.0781097,29.8764343,-10.3566885,-124.153633,-41.0084152,193.115814,113.443901,269.356689,-166.699951,90.542572,125.464149,-189.738358,-53.735405,111.4216,-79.2101974,26.4461708,106.46225,-188.155365,17.1264591,76.8485718,14.0993729,-265.41626,86.4827118,113.105972,-73.5694733,24.3464203,131.727661,-52.4255295,-45.2740135,281.87677,114.956223,-38.8786392,41.6573639,-33.0520859,-154.07988,5.86539459,-140.935379,-14.01297,-176.624481,-7.30149651,341.94751,-76.6879883,46.9958954,236.306213,-117.822403,-153.02533,-174.797714,-67.1800919,-142.544098,-165.537964,118.675362,92.3709793,-122.326218,-67.316925,34.2579956,-70.6636429,123.209564,-66.5814209,-13.1884956,270.385559,-79.9535446,144.800308,36.1520004,-101.187363,79.466835,246.788055,1.82484818,71.5669937,5.87322807,-20.2684326,-135.426559,-52.607132,-251.499481,91.9616089,-19.0059052,210.822968,-103.124672,-94.8659439,-43.5676384,81.5441971,85.4356461,94.4857635,-111.523514,46.664238,50.6476517,-35.1273041,25.8391933,-91.0944366,-139.9711,24.4534302,-126.49585,-86.2209625,84.0971222,-29.6152344,-69.1325836,143.11615,22.7270145,-111.587303,44.8775635,84.1783981,-177.470078,30.8349953,-156.655655,106.209305,-95.4793625,46.973175,20.533287,-34.532608,40.5870895,26.8738022,58.1527901,119.153366,60.7098351,-76.067749,-80.4443665,-44.4148865,-114.165497,-146.486877,165.739227,-114.911736,125.781456,46.1737251,14.5425377,48.798912,-203.117981,104.11512,212.169022,14.9608574,-219.168777,123.837646,-317.062439,-118.573769,195.01947,-131.274918,15.4457893,155.203674,-67.5795364,-200.595367,-38.21064,25.6849613,-97.3246536,48.3792953,31.2359314,53.0442619,-88.8317642,43.8379669,93.3997269,111.095474,-30.8817043,-30.0290184,-11.7695007,-169.007629,60.0068512,106.768593,-88.7746964,133.20108,186.82341,56.3148079,180.924408,206.567139,111.004044,-51.6472321,-207.400742,-77.2260513,105.829407,3.714674,-163.498337,-96.5015106,-11.074604,63.9723206,234.524078,-135.106598,-106.442741,381.180786,-12.4472122,180.800446,43.9137268,-71.3566208,-101.007294,-105.303154,-53.4615097,113.396835,-67.2559052,18.0871887,-121.312347,194.474655,44.2413788,-39.9481659,70.480957,73.9080276,238.262756,-86.1162338,98.7700424,87.0409088,115.8284,-203.313446,-58.2007866,-114.747208,68.5882645,55.5849876,50.8056107,5.02243042,-47.6356812,93.2563171,-217.774643,71.9994278,-68.3802032,-33.4762917,92.4211121,-14.6528187,50.5824471,-4.05728149,-52.6394501,89.2595215,-138.009644,166.926117,-62.3272171,153.248169,-113.403839,-143.786087,-2.01561737,53.4383011,141.407043,143.724503,-33.6230698,58.1093521,91.9668274,93.4481506,-11.2714539,13.7389603,178.776855,-64.3781586,155.987244,62.6660461,5.51347351,-2.31170368,-88.482048,96.6293259,130.4104,-1.08858109,-23.4903183,16.8284588,-121.451141,72.4075928,-2.2575531,-98.1653748,118.905228,285.636841,23.6135941,93.0531464,33.8090591,-126.963669,-94.2791672,75.092041,-66.2634964,276.719727,50.7857056,18.4212723,106.498779,-48.4501648,-132.34787,-22.75383,241.556488,10.7931519,6.34033203,-187.466339,-123.704666,-323.629089,169.721909,-86.5606842,159.253403,53.2607269,135.955841,-54.1922073,-54.9146652,-39.9765434,122.160934,127.285339,156.048035,170.411011,-127.251923,55.6171989,123.310402,150.915009,-259.825378,174.436539,-45.5901756,156.19754,-6.40151978,-11.2610626,135.522339,146.85437,-68.2019272,33.3852158,247.55896,-65.3208389,-56.44981,-139.196167,61.815876,-68.8572998,-26.2367725,-13.4369736,-217.240494,104.858063,109.541756,-102.168594,153.70636,26.7365379,-177.930817,82.6068497,235.095703,-59.9563065,-195.934784,22.6990204,-35.9344444,255.306763,-14.7188492,-76.1487045,111.562881,42.3398056,-32.6746979,-302.291321,-119.415817,-62.5382996,12.0920725,-78.6499481,-18.9906845,157.919479,146.681213,117.422691,-25.5022507,-30.871273,86.3448868,-1.16126251,-163.46106,-104.488663,36.6406059,342.209778,-50.1957626,-30.8655014,-214.436356,-133.422485,-253.065887,228.04541,28.0792427,182.448364,56.5426102,96.9135208,58.5210876,-134.710327,-98.7030869,-8.36855412,7.87329865,54.4132652,103.925529,25.0848808,-106.443443,98.4673767,-106.721481,-11.3863068,-63.3977814,-225.38707,-93.8509293,133.478668,-148.883209,84.6344147,160.524658,-66.0578079,36.349678,-19.5413818,202.782227,-248.733398,-129.173401,22.6405334,94.1609039,-227.956848,-192.841583,-20.9247208,12.4942322,43.5677948,-108.915413,-12.3553391,105.019073,-102.489578,135.561005,-319.609131,130.940674,-181.044281,-23.7514381,-121.023926,5.6856308,62.3898544,-119.586876,-155.881271,39.5012436,-49.2766304,131.708542,62.7168655,85.0848846,-58.5010834,239.215225,168.901917,-51.5238113,-181.159454,-100.481705,-118.633362,-61.4514771,-73.5401306,-66.1876831,296.911896,147.63736,163.45401,-58.9532089,17.5750732,163.326935,-136.491028,95.3489838,119.015884,-68.0303802,-49.6325722,67.579628,-3.50564194,23.2044258,197.083557,153.632019,-163.197662,-139.341705,-124.030937,-50.3003769,39.4448318,286.895447,-136.954697,-72.4360352,2.60617828,119.99321,308.466431,35.3269272,-79.1136856,-137.974609,-28.4251976,-116.139519,-59.6685448,21.718277,-115.457153,-47.9001846,-32.5952263,-150.705597,-128.445221,-185.96907,-11.9303055,53.7892914,134.673279,-169.679398,42.9812927,97.8615265,33.4410934,153.129028,-403.087158,-18.0114975,221.043182,40.241272,169.036469,-48.1810608,72.8712234,-156.262604,-5.87103271,-40.1697159,-73.3053131,184.923096,-377.861023,76.1722183,-51.3302002,1.64555359,74.4202423,24.9224014,-38.1998444,75.9438477,66.7397614,57.7103195,45.2841263,-144.621063,23.7349968,50.7709274,-1.13367462,-40.3456268,28.9382172,313.054565,260.022705,-9.02973175,102.943832,120.311874,-178.462708,-28.6750145,51.7060738,10.4403305,13.4883347,-65.9599457,51.6991158,107.071877,-36.3493271,-93.8383484,86.3594513,57.0945663,-99.1138153,15.8941307,101.762886,-209.463638,116.45813,-14.3054161,216.853912,-42.5487633,-33.8740997,9.58546448,33.5859795,-138.680862,-73.1228714,-130.095337,155.61496,-237.092773,-45.8197021,26.0791702,77.4824524,15.9614601,116.716049,146.722198,8.78044891,5.64876556,-32.6501541,42.7833939,248.869171,-39.0957642,-138.453125,144.577271,-14.8143005,213.76123,47.4640656,-135.155502,40.5424194,-130.614929,24.5322113,-82.1889801,-26.2186966,-128.281403,-101.503929,-7.44988251,149.443756,-112.772911,147.624893,121.482697,-110.729118,-108.073456,-81.039032,72.4943848,-23.6839905,157.722656,-5.5260334,109.612778,-26.2502308,-7.68678284,-146.477966,-106.260643,-131.854675,-22.6594696,-86.0718994,-190.373077,63.2541771,-54.0863342,125.055412,165.790558,-67.4530411,-28.8874187,40.5383797,-17.7409134,-40.5118866,55.8111954,112.798691,24.8146362,88.9927521,87.8389969,-84.3846664,-1.93251038,17.6013813,93.1759872,60.5779037,21.8792458,167.207489,18.4854813,166.771042,-128.363281,-83.5189133,-141.867722,2.1043663,168.699936,-37.3789711,-219.62204,58.1394272,81.8502655,-52.4462738,-49.9906693,96.6766205,107.188873,74.2681046,-207.647278,251.934753,-47.099617,134.066162,10.0756645,76.7583466,16.6848412,6.82134247,152.876923,-271.765198,-146.998505,-43.6131897,11.7360153,41.3757706,243.680222,-25.6545715,-128.699387,-135.625397,24.0104961,-174.704285,24.6511936,75.444191,1.40034485,9.25041962,28.7335854,-99.7172852,-192.530457,148.73848,-11.2071304,34.9904671,-35.4221039,130.316772,-126.74511,-184.41713,99.5692902,-88.7763748,-41.2948227,-44.9329491,21.499485,78.7550583,63.1653061,-50.7483139,140.702042,279.049652,161.989288,-130.172455,2.37376404,275.714844,36.70681,172.236786,-116.254868,-30.8658543,-142.269165,265.468903,88.6437836,82.0591736,-109.885536,-297.055115,-30.02071,148.741501,111.89534,84.2601624,162.477722,-114.747108,1.76651001,-34.070034,56.0231247,-85.9769058,88.008606,82.1146698,-17.1205597,28.6556797,-222.67131,65.6231995,-58.156723,68.2808914,-63.6844025,-96.4871826,-26.5696793,-34.2276535,126.03569,316.866058,55.7646027,-192.245056,18.8349571,-93.4608078,-27.1816864,122.709969,-46.5200157,-52.5831299,49.8607483,44.2352676,86.5514374,29.3820572,70.5063477,104.485046,-89.9483719,51.9483185,28.9459705,-117.346283,-30.0374336,-110.401772,-198.626556,35.4000435,19.0071335,-33.3414612,-33.8479538,-31.7650909,-178.525574,96.0592194,-71.6850357,14.3362122,-221.539368,-19.1776657,-3.95892429,138.791016,85.6884308,11.0513039,-72.9547729,-36.4796181,-82.9056396,109.861893,47.8577499,-232.9776,176.866089,-95.2974396,58.9650269,-110.566238,-246.520691,-24.2973709,-127.483467,98.9691162,57.4128799,165.694443,15.3196049,-15.8120422,-280.865479,277.081512,77.8610992,71.8031006,73.8648758,26.3729248,238.202301,-23.460125,48.7936096,87.4568939,-220.711853,38.7758293,-28.5858688,-174.450134,19.3386917,48.6705513,26.8883553,43.7333679,251.927383,-52.7403412,135.28685,47.5894356,44.5268173,36.0602722,65.0865173,236.366394,-66.1695404,-51.0752296,91.4721146,96.5043106,129.458466,-72.8623047,72.3814011,138.600433,68.672699]}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/test/fixtures/c/fftpack/medium.json b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/test/fixtures/c/fftpack/medium.json
new file mode 100644
index 000000000000..0c40e435bdc1
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/test/fixtures/c/fftpack/medium.json
@@ -0,0 +1 @@
+{"lengths":[111,107,111,21,74,69,55,116,17,40],"offsets":[0,111,218,329,350,424,493,548,664,681],"input":[-3.99042845,-7.12602139,-7.04343319,1.01653099,4.83143711,1.9510231,-9.15845394,-6.1308465,-1.13390827,2.39601231,9.78997803,0.166588783,-0.132754326,8.79424095,4.80014896,-3.88316154,-4.29932213,1.28417492,3.12748432,3.63238335,9.45855904,-9.98532104,-3.29734421,1.52709389,5.85412502,-9.71451187,8.20236206,-2.90774918,9.45141983,-9.97217083,-2.28114653,0.771988869,-5.18340635,2.49199867,3.02084732,-8.62339592,6.59064102,8.9003067,7.46189499,-7.92821598,-9.52521706,9.67421532,-5.46286058,5.70357323,-0.0433998108,-9.42191982,5.79927349,8.3884964,5.44716263,-9.54879475,-6.59333038,5.8942709,5.01227856,1.36300468,8.01722145,5.45180225,8.44426155,2.71138668,-9.71582031,6.20994949,-9.35394382,8.27183914,4.81111908,0.471036911,-3.29996061,-2.43675327,5.48300934,-7.0514102,6.95129585,-9.58718872,8.11814117,1.60070515,3.05831814,1.14184284,-9.05706406,-2.07809258,-6.50760746,6.64135361,1.21696377,-6.48839188,9.59585381,-2.47833157,6.68356133,-9.40233517,-5.04789734,-0.0093460083,2.92218685,-6.8155036,-8.16621017,-9.50224686,-4.26805067,6.87386322,9.0278511,-8.89290333,-3.03295517,5.12981224,-3.25090694,2.00519371,1.28496075,-3.66708279,7.34231758,2.31869888,-9.61772728,-5.13765907,-8.63781548,4.23506355,-1.27774048,5.02792931,4.41557121,-7.49323082,1.27241898,5.54734993,-5.70591831,0.633403778,5.62821293,-6.62339926,0.526198387,3.8181591,-8.1923275,-8.45340252,3.66934967,-9.23572445,-4.8282299,-8.06850529,-7.37000561,-7.68322468,8.04316711,1.51408768,7.27850151,9.78444672,7.2035675,-9.6571207,-7.23175049,-4.02386093,-9.02724648,-0.927181244,-3.13525152,5.82487297,-1.3494978,-1.00414658,3.3078804,-4.45971489,5.5722084,-7.89769936,3.3613348,-6.0401082,3.90129185,9.00993156,9.91334534,-6.4099946,7.21990395,4.92008781,-8.0876503,-9.14209938,8.74110413,-8.27670765,-6.62579155,0.322296143,-3.16877604,2.37966347,-5.0080905,9.02610779,1.80329132,7.91916847,-2.54176378,0.579139709,-6.3958149,5.54114342,9.99910164,-5.08517027,-6.45589018,-4.14642429,-8.95627975,-8.194767,-9.4524641,-7.55686092,-8.16446877,-0.236321449,8.13693237,-2.58432007,5.33116722,0.914674759,-7.0515995,3.76768494,3.47135067,2.98517799,-8.09995842,4.00148296,-7.07597256,-5.86604786,9.33237839,9.30042648,-7.73485804,0.241882324,5.31977749,9.51236343,-5.72145176,-0.440342903,-0.846980095,4.8056488,8.52246857,-2.89622784,3.09911823,6.88909912,5.09381866,-8.18683243,3.91653824,5.26013184,7.01894951,7.48878288,3.97432804,-3.46928692,-8.30481529,0.977534294,9.41433334,6.71355438,-5.29618645,6.99326134,-4.25616455,6.64553833,-8.42241096,4.5345726,-7.43654776,-6.06231308,-9.29865646,-2.52540827,-4.53920603,9.56824303,-6.53006124,9.25758362,-7.78916168,7.56591797,0.386568069,-2.9380722,-0.180770874,1.78521729,4.15977573,-6.63651276,0.132509232,7.08893204,3.69253159,0.371580124,5.15692806,-7.5063982,-0.0386772156,9.95859528,-5.8769269,6.48992348,-3.85977793,8.7101059,-9.25416088,5.32315063,6.17605972,1.01848412,-2.34711885,-8.02684116,-7.11876392,-5.07259893,4.82962608,-8.46428299,0.79699707,-4.87028027,5.20440197,-9.60805225,-2.53748131,-7.4436202,-4.92733097,6.34409332,5.18637085,7.33317184,8.63056374,-6.10180759,6.91722679,-2.18142509,-3.21479082,9.00931549,-0.450489044,8.62018967,-0.459853172,-8.75760841,-9.11877632,0.724182129,-8.68058014,5.48792076,-4.51232862,1.29563332,-4.28982973,0.831442833,-5.93871927,7.94590569,6.83693314,8.32914925,8.02085495,6.4869957,6.93114281,-8.286623,6.72200584,-3.24633217,-1.10589409,-6.7614727,-0.0760288239,2.1793766,8.79989815,-0.125116348,-2.83279848,9.15470314,3.0867815,-0.472432137,-0.172103882,7.45633316,-1.40480518,9.44075775,-9.1730175,9.09147263,0.373369217,-4.77306557,-0.909062386,1.39394188,7.97646332,0.436624527,-1.66191864,8.14196396,1.99337387,2.6385603,6.28635979,-5.15193415,-8.56173897,2.84779358,2.86190033,-0.0322942734,-2.77177811,-5.27583504,9.04488754,-2.59461164,-7.63582039,4.76630592,7.30101585,8.18110466,-0.169766426,6.7293663,0.477608681,7.17174721,-4.46502018,-3.60050392,6.32873154,6.99288368,9.39477158,-2.06971407,-5.68398857,9.20155144,-9.53022671,5.48737049,6.22688484,-4.73832083,3.04452324,9.30334091,1.24459648,-2.08009243,-0.116540909,1.28697395,-9.83024502,3.07708645,-3.40710926,-3.29136372,2.04725838,8.26672363,-1.18940926,9.59375763,2.28077984,-6.93040228,0.728672028,6.7920723,-5.63665485,4.73962021,-1.19517899,-7.3679142,7.46969604,3.17239189,-1.62074089,0.21104908,7.10800743,4.28487778,-4.0589323,1.53053474,3.71259499,-2.41583824,-2.99592781,7.44152832,9.77347183,2.74214745,7.27581978,4.69626427,-9.88619328,2.74539471,1.83923149,-8.04462624,-6.03723335,-7.78386974,-3.5010128,-1.52693558,-3.20458651,0.517310143,-5.57658577,-5.67658901,-6.4308672,-3.58488941,8.7655201,2.0892601,-5.81136179,8.44099236,7.77246666,-8.15800476,8.41763306,-4.85800934,-8.55996704,-7.36833239,0.437703133,-3.53025532,6.99726677,3.06751633,-4.25480747,9.45596313,6.35339928,1.58242989,-4.10804939,-3.98284149,0.387448311,-8.1687746,7.40999031,-0.299160957,-8.00326824,9.07255363,2.39221382,5.92508316,2.87702751,-5.79503679,2.81471634,6.9340744,0.985380173,1.28255081,-4.15570831,-4.98935175,3.96906853,8.13578606,-1.85299778,-3.33399773,5.4993248,7.15060234,0.173830986,1.57542706,-1.8008337,-6.61018276,2.66438484,0.320363045,4.34913063,-4.16397953,-4.00100946,-4.96241856,-3.37282944,-7.15021658,6.3057766,1.19013309,2.55918503,-7.77259541,5.98681355,0.369181633,4.82952595,9.84037018,7.08132935,-4.09517384,-7.58717489,2.35297966,6.52357674,1.75161457,-0.602298737,-2.84333801,-7.98874807,-6.88685322,-7.34395313,-9.81508255,-2.09335613,-3.04080868,-6.87067127,4.62973595,-8.03158665,-6.87807608,0.174654961,-4.56939507,2.17627144,-3.39619398,0.165931702,8.81609917,-7.8241291,-0.1390028,3.78455734,7.05076218,2.15471268,-5.75239515,-0.502423286,-4.23833799,6.25789452,-3.57084322,4.83307838,9.54680061,-6.91746092,-1.76478672,-0.768746376,-0.324871063,-0.119029045,-0.516637802,-3.14107656,7.92122078,-8.04876328,4.44206715,-2.17141104,5.0945673,4.38920403,9.35754967,-7.65974045,2.74293518,0.507235527,5.11165524,-8.41638374,5.83142662,8.78614426,8.73496246,8.53183174,-5.51623774,8.58862305,8.97680092,-6.92234039,-3.77574492,1.05685806,2.62491131,-3.12142849,-1.84403324,7.33722878,-3.20316792,4.35611725,-6.73541307,-2.08939552,3.52496624,4.10957813,9.68870735,-1.89153576,8.96162987,-1.878685,4.94578552,3.82994652,9.91029549,2.34763527,-3.29418468,-5.36645222,6.03859329,-9.35233116,-4.63546085,-8.19691086,-5.47301483,-4.96527863,8.56434059,0.877505302,8.23743248,6.5189724,4.3668232,-6.79012251,-1.58760643,-2.89816761,-9.50021362,9.9093914,7.1331749,7.2456646,-2.11279917,-9.81786537,-8.86186028,-1.29368305,-2.93083143,1.51739216,2.82177544,5.57463169,-7.16113472,2.81013107,9.88612938,-3.81604147,3.79135132,1.23654938,2.69918633,5.22579193,9.88432312,5.82343674,-5.48868132,-8.26562786,-0.411579132,2.59238815,-9.72883129,7.52554131,1.76976013,4.35906601,2.82491302,-1.67673492,-0.884340286,-3.10301876,7.56427574,-7.22329664,-1.94708347,-4.63641071,-4.15018129,7.89963341,9.14595985,-3.86457205,8.14076424,1.83201981,-9.2267189,6.52795982,-4.58377934,0.413308144,6.46707726,-7.8330369,-9.85212421,-4.65692568,-8.95121002,-2.98689365,-0.72236824,-0.844633102,4.24381828,5.852211,-1.89294243,5.32489872,-4.4141674,-8.9119873,-3.77948093,-1.73410225,-5.04936171,-4.62139893,8.14754486,-4.20852947,7.24492264,5.4002285,1.64115143,2.84657669,2.42083359,6.94187737,-7.86439371,3.13660526,-3.08113146,-4.5766468,0.294657707,-7.67850494,7.36232376,-1.4183712,1.43420315,4.66047287,8.56732559,-8.95797157,3.36733723,-5.15946054,4.94441128,0.716173172,-3.27018261,-1.96251011,-3.90179682,2.49595451,9.49442673,-7.15828991,-9.38108253,-7.85819578,7.303545,-9.32077122,5.80438519,-5.69847488,5.73196888,-2.79703712,-9.80815697,-5.68910551,3.20509338,7.99214554,3.98287773,0.231305122,7.5463047,-9.2532177,1.17859077,8.5810585,1.84071922,-3.04485512,5.11943245,2.29681778,2.61538982,-3.14046955,-1.87569809,-4.8651166,-8.01149368,-9.16742516,3.08663559,-2.89876366,0.482816696,-5.30565357,7.88129616,0.941815376,9.10003662,4.31955338,-1.26615334,-0.244802475,5.59933758,8.07987785,-1.48720455,4.56002235,0.292376518,-6.034132,4.33943653,-7.09349155,-0.305329323,8.32801819,9.0077858,-6.15400791,9.58561516,5.42888737,3.30612659,6.06476974,-9.41474056,6.44995499,4.40748787,-3.35430527],"expected":[-6.12224197,-51.7829132,-45.3267746,28.2748585,-20.7160225,-42.3434677,-5.11889362,-30.9558105,14.2602997,-56.02211,3.25111198,20.586956,1.38675308,9.41810703,-1.33979511,31.5325546,69.760437,-14.1033993,32.4541321,7.41510916,-19.7695656,-10.5016651,5.07366371,19.9490929,59.4939651,-58.6792603,-76.1294937,-54.2713127,30.0507507,-114.900085,-22.4120903,-32.3662643,-9.72992706,3.59725475,-18.5952168,25.0465927,37.4451141,-29.5591393,-27.7141571,-50.4521484,18.450861,13.8420334,13.9647484,44.3804321,-42.6057968,57.6672516,200.255997,70.1195602,10.096489,-43.1420898,-33.4727707,25.504509,-21.2178726,-1.98060417,-14.4081249,21.7658138,1.78633404,14.0692062,-35.8617325,37.3634644,19.9051437,-55.4327736,-25.762455,11.9175148,67.0126724,102.346069,-27.5971794,34.5323486,-34.6087341,10.8657999,32.3215675,4.14568329,-0.653198242,-83.6131439,38.2028084,-25.4236774,-24.9083767,35.6829529,4.7331543,26.940834,-5.09881783,26.0923119,27.1988411,-47.6657143,31.5876255,80.5983505,103.618958,-4.92656898,-22.3429909,-93.1325989,33.1604691,40.7370377,-31.3916168,20.4646931,37.9747086,-125.320442,-33.1422958,47.2130585,-45.4093552,-64.0445175,65.7915649,30.8988342,-22.8125458,-9.08909607,-45.4522247,-44.9263191,-64.9597473,5.80293465,64.9986572,17.4560661,59.076004,-12.9233475,41.9466515,42.8539696,-23.7779617,108.941811,-1.4671129,5.13581419,26.0793343,40.0918655,-35.9869347,15.5530949,130.815567,26.2460518,-30.8542652,-45.7446098,58.4441376,-58.6917763,-17.7878914,-19.2618103,-97.7910004,14.1355648,49.346344,80.6431122,49.0131721,24.4186287,61.4397469,-2.63509178,-41.9338722,38.2905922,-39.094841,-23.024641,-70.3616486,33.8742523,-23.7382908,35.5251579,-37.1908188,-43.0268936,39.8480721,-31.4675636,-36.1680794,27.5470791,19.4864712,-61.4653206,29.968792,-28.9297962,73.0048218,-12.6230059,31.2288475,59.2156372,-18.0538578,-40.2222099,-55.7281494,-17.1634789,54.3808479,-23.7112808,40.7055969,29.0984631,8.40892124,90.6246109,41.1672401,-12.7621088,-48.7982597,0.45181036,30.496006,153.786118,-79.3876266,23.1663647,25.6716309,26.1579609,103.123047,52.8016853,30.4631081,-14.0912895,27.2992115,41.6169014,45.0364075,-11.3200769,-24.5735035,12.7484379,19.3382111,7.99461651,-5.92693472,-9.0499258,15.78827,-29.6014061,-8.00288963,27.9653034,-55.7231865,26.3955784,72.9441376,-32.9222183,-16.034296,-12.5407209,-6.70425558,35.4833374,-10.1488094,44.7664528,43.267601,54.096035,-51.4412079,-89.1919327,-6.58618355,0.52614069,39.7473488,-42.216362,-61.9530373,-1.69278955,42.6778679,6.60142517,56.1592789,-51.5850525,-6.56748962,-53.426796,28.556509,22.127491,72.3048248,-53.131237,-49.6721954,44.8059464,86.6785126,-58.3383408,26.5155506,-0.330645561,-32.3856544,39.7486534,8.3820467,14.349884,23.6914768,40.9915581,-66.16539,19.7950745,-44.8755989,54.9609718,43.8852501,-26.7219162,-80.8485565,35.5868301,48.1782455,-2.63887691,-62.0949516,26.4936867,-22.6909542,-40.5112534,-1.45276451,15.4761944,26.4149742,47.6205025,-0.591796875,-7.33251667,9.73534203,-16.4109268,54.8704147,-2.87476349,-8.67402458,-11.6507568,72.5572357,19.4048691,52.2451096,-13.7293987,-15.37887,-25.8305779,-70.6298828,45.8237534,7.08259296,4.02763271,32.1930313,-24.5226727,30.8913078,-19.4951668,25.2173042,-12.9309816,41.0675659,17.624485,-11.5049362,-21.2240086,-52.1582756,-82.3986816,7.84441566,-22.1458626,-18.1160355,55.1960983,-23.5371666,-26.48592,-1.09637737,8.2414093,-36.6644821,-65.0271301,-39.2551308,69.3830109,-58.7028961,14.4078341,-6.39322853,73.8398895,-72.8624115,-64.0428543,-16.2777557,-27.3170242,42.4258347,-69.7408676,-7.36877918,-4.38228703,-18.5548782,-40.3570938,-21.8166637,-7.11789227,35.2223587,123.045654,-30.7889748,41.2864189,-26.7260532,-158.105927,-15.81217,25.6507072,-73.6298599,-68.5904999,-63.0034943,-45.6479645,-37.2247047,41.2906418,-16.6365891,6.09223461,-4.94145775,23.3408489,-0.96893692,-21.9869518,9.7496767,-10.547596,6.30305958,51.5287704,16.1690884,24.1109505,16.914526,4.53365183,-12.9148674,6.07532597,-23.0067101,-23.5730972,-11.6521997,14.7796974,21.8211021,5.66123247,-49.1977272,44.4521484,36.3737106,-28.6522026,-9.23587227,73.6943817,-21.0323505,27.3871155,26.5090752,-13.2023325,-14.7824116,-72.0423355,52.1398392,-45.7608032,-22.2404327,-4.35680962,16.5417023,13.1036472,-6.22154045,-19.7794628,-8.38044643,12.639576,-10.889307,3.61030293,65.7800293,-12.9506302,-6.88434601,-13.3947239,-18.1011925,-35.9505844,-6.02060413,9.07024193,3.54012299,-48.2012177,-35.5070267,-35.9409943,-36.9733124,25.9063587,-43.0828667,-61.696701,11.4776182,-5.65708017,-21.2414055,-131.355072,-50.6763382,-20.8106117,-17.4140263,55.0979729,33.7691422,55.4890747,-20.3418274,-33.9642868,40.9557419,-38.7958603,5.37913895,26.5934925,-7.25609827,-30.9163055,17.4271641,6.37648296,30.0880642,-4.42464542,30.1154938,-30.8325157,26.6737728,-11.245594,7.43612099,-3.5006218,-41.584053,-6.9209094,-39.1068153,-24.5172157,-35.7179527,-27.6134796,-57.7392082,-3.09934998,-63.9357376,42.9059868,37.9215469,-55.2713509,9.82875061,-17.8563614,18.2088909,-1.57081985,13.6051903,23.1295586,9.95948887,-24.413414,32.6020737,-33.9721069,26.0597687,5.06972408,-55.2371521,12.2548447,45.0723648,-37.8902054,-51.3801079,-27.4138203,5.17930031,-12.9155111,75.4747849,10.0752506,7.65971327,4.63230848,-21.8434944,-7.91522598,9.11687469,-31.2990208,-10.8274021,32.1078796,-58.779911,-40.9833412,-12.2968149,4.07060814,-24.4827137,27.4883423,-14.9828615,-36.95755,-32.3920555,-62.9487,-7.89427662,-44.7054138,-24.8000126,-17.1790581,-13.6930456,38.9893723,23.5767326,31.3835125,2.42673922,45.3690948,32.4368553,16.7154655,11.5592499,24.2702961,-6.96731806,10.2553549,22.4276199,20.5200062,-43.561203,10.8983784,32.4219856,78.2199173,-8.45405769,17.6065826,43.8892784,-4.76095009,8.26872635,29.8528843,-23.2881527,8.96922302,36.7895813,20.9284267,-23.5998268,6.96064091,19.7949066,-35.4480667,-9.83627129,-46.5384674,3.8356266,-16.6225243,2.41905165,1.38337898,-6.2012825,-0.600792885,14.9752617,31.0998211,-65.9020386,-45.9816284,16.4352589,-4.65354347,-36.9623184,38.2940292,2.4222784,3.15143108,23.0579967,-23.2573891,16.5072613,30.4241028,-18.7416821,-31.5314827,-18.7844582,15.8650627,-7.9534483,42.1804886,58.7374611,-11.058609,30.1572571,47.051445,-19.1597557,15.865324,-4.05460739,4.188447,-72.4897614,-36.1897125,-4.7947979,46.2894249,-8.26321602,-1.07704353,-26.8880081,-25.9609108,54.6557693,-17.0815353,-14.2769756,17.1669197,-15.5634737,-47.8424454,51.3098145,28.2854633,42.7131424,17.9900017,2.08999252,54.1436119,-88.6256104,85.7471008,90.2710724,-0.209478378,-13.1662207,4.69022751,-41.9507256,59.8982964,-50.0789757,-106.141472,-92.3088684,-47.6354713,-12.74049,-6.85464096,77.0527115,27.3919678,-6.8131485,30.9409409,38.6956482,14.9319687,-78.4443665,-60.5800133,-0.542259216,-25.2147026,-1.07163811,27.36479,-1.13475227,4.03180122,-72.6580811,-20.5667572,-61.6143875,50.4918289,-42.4765625,-27.2510796,-70.0178528,29.6087666,-13.2345638,37.5895767,-51.0213089,34.6802292,-35.262764,-7.84908676,-20.4902439,-16.7720318,-40.45755,-27.7571049,7.54646111,40.9232445,-35.0599136,35.7669792,-99.7583923,16.099741,12.839529,15.2701025,2.46679497,-2.34652519,-79.2028656,-39.7606201,3.2113018,12.0563889,45.1301422,-73.0886841,54.1305389,92.8358383,-67.8603516,-8.67662716,35.7812653,52.8518066,-30.2434464,52.8025322,56.3193893,-20.2711296,1.98929167,11.3277512,105.906311,5.24424362,-7.81784439,-6.21656418,-28.5706806,13.3301258,-41.9842072,-4.87728882,29.2435608,-20.4480019,55.6264343,-33.2952652,-81.2079773,25.4768124,-0.0440921783,105.056587,-33.9944992,0.429865837,-14.4900331,4.60502625,-19.3516674,-48.3292961,22.5718441,-58.2561874,19.5148926,-56.8044052,1.13231516,1.20899653,18.3688965,-5.12891531,-21.0397758,14.4704304,28.1114273,5.18638563,-8.65221596,-12.9564209,23.4682198,-17.8851528,-2.19219732,-22.6919537,-38.4676285,-29.564188,-22.602047,39.4705658,-16.9593849,37.1665192,24.0821667,39.6648636,-4.15951538,-40.3312263,2.56429529,-32.9907227,-7.31682682,14.6007862,-18.6213226,-11.0835037,2.48906517,30.3432884,8.19106674,4.66789579,-50.3063889,7.16557693,-20.7344131,-16.6608181,6.77978134,0.72263813,27.1233521,4.13520002,-37.2197571,-16.7143059,24.1012344,-38.6535378,34.976387,7.90440941,15.4898014,16.9573917,39.3502502,31.4030933,-32.0994797,8.16485023,-5.21979618,15.7710667,49.1371765]}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/test/fixtures/c/fftpack/runner.c b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/test/fixtures/c/fftpack/runner.c
new file mode 100644
index 000000000000..e84cbc794543
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/test/fixtures/c/fftpack/runner.c
@@ -0,0 +1,318 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+/**
+* Generate FFTPACK test fixtures.
+*
+* ## Notes
+*
+* - Run this script from the directory in which fixtures should be written.
+*
+*/
+
+#include
+#include
+#include
+
+/**
+* Define prototypes for external functions.
+*/
+extern void rffti( int n, float *wsave );
+extern void rfftf( int n, float *r, float *wsave );
+
+/**
+* Generates a random number on the interval [0,1].
+*
+* @return random number
+*/
+float rand_float( void ) {
+ int r = rand();
+ return (float)r / ( (float)RAND_MAX + 1.0f );
+}
+
+/**
+* Generates an array of pseudorandom integers drawn from a uniform distribution.
+*
+* ## Notes
+*
+* - WARNING: the method used here is not particularly robust, as some integer values may be sampled more frequently than others.
+*
+*
+* @param out output array
+* @param len array length
+* @param a lower bound (inclusive)
+* @param b upper bound (exclusive)
+*/
+void rand_array_i32( int *out, const unsigned int len, const int a, const int b ) {
+ unsigned int i;
+ unsigned int r;
+ float delta;
+
+ delta = (float)b - (float)a;
+
+ for ( i = 0; i < len; i++ ) {
+ r = (unsigned int)( delta * rand_float() ); // truncation
+ out[ i ] = (int)( a + r );
+ }
+}
+
+/**
+* Generates an array of pseudorandom numbers drawn from a uniform distribution.
+*
+* @param out output array
+* @param len array length
+* @param a lower bound (inclusive)
+* @param b upper bound (exclusive)
+*/
+void rand_array_f32( float *out, const unsigned int len, const float a, const float b ) {
+ unsigned int i;
+ float delta;
+
+ delta = b - a;
+
+ for ( i = 0; i < len; i++ ) {
+ out[ i ] = a + ( rand_float()*delta );
+ }
+}
+
+/**
+* Writes an array of floats to a file as a series of comma-separated values.
+*
+* @param f file to write to
+* @param x array of floats
+* @param len array length
+*/
+void write_array_f32( FILE *f, const float *x, const unsigned int len ) {
+ unsigned int i;
+
+ for ( i = 0; i < len; i++ ) {
+ fprintf( f, "%.9g", x[ i ] );
+ if ( i < len-1 ) {
+ fprintf( f, "," );
+ }
+ }
+}
+
+/**
+* Writes an array of integers to a file as a series of comma-separated values.
+*
+* @param f file to write to
+* @param x array of integers
+* @param len array length
+*/
+void write_array_i32( FILE *f, const int *x, const unsigned int len ) {
+ unsigned int i;
+
+ for ( i = 0; i < len; i++ ) {
+ fprintf( f, "%d", x[ i ] );
+ if ( i < len-1 ) {
+ fprintf( f, "," );
+ }
+ }
+}
+
+/**
+* Writes a named array of floats to a file as JSON.
+*
+* @param f file to write to
+* @param name array name
+* @param x data
+* @param len array length
+*/
+void write_named_array_f32( FILE *f, const char *name, const float *x, const unsigned int len ) {
+ fprintf( f, "\"%s\":[", name );
+ write_array_f32( f, x, len );
+ fprintf( f, "]" );
+}
+
+/**
+* Writes a named array of integers to a file as JSON.
+*
+* @param f file to write to
+* @param name array name
+* @param x data
+* @param len array length
+*/
+void write_named_array_i32( FILE *f, const char *name, const int *x, const unsigned int len ) {
+ fprintf( f, "\"%s\":[", name );
+ write_array_i32( f, x, len );
+ fprintf( f, "]" );
+}
+
+/**
+* Writes data to a file as JSON.
+*
+* ## Notes
+*
+* - This function SHOULD be tailored to the input data (e.g., input types, output types, number of arguments, etc) and may vary from use case to use case.
+*
+*
+* @param f file to write to
+* @param lengths sequence lengths
+* @param offsets offsets
+* @param input input values
+* @param expected results
+* @param num number of sequence lengths
+* @param total total array length
+*/
+void write_data_as_json( FILE *f, const int *lengths, const int *offsets, const float *input, const float *expected, const unsigned int num, const unsigned int total ) {
+ fprintf( f, "{" );
+ write_named_array_i32( f, "lengths", lengths, num );
+ fprintf( f, "," );
+ write_named_array_i32( f, "offsets", offsets, num );
+ fprintf( f, "," );
+ write_named_array_f32( f, "input", input, total );
+ fprintf( f, "," );
+ write_named_array_f32( f, "expected", expected, total );
+ fprintf( f, "}\n" );
+}
+
+/**
+* Generates test fixtures.
+*
+* @param lengths sequence lengths
+* @param offsets input offsets into flat arrays
+* @param num number of sequence lengths
+* @param total total number of input and output values
+* @param name output filename
+*/
+void generate( const int *lengths, const int *offsets, const unsigned int num, const unsigned int total, const char *name ) {
+ unsigned int i;
+ unsigned int j;
+ float *expected;
+ float *input;
+ float *wsave;
+ FILE *f;
+ int off;
+ int n;
+
+ // Allocate output arrays:
+ input = (float*) malloc( total * sizeof(float) );
+ if ( input == NULL ) {
+ printf( "Error allocating memory.\n" );
+ exit( 1 );
+ }
+ expected = (float*) malloc( total * sizeof(float) );
+ if ( expected == NULL ) {
+ printf( "Error allocating memory.\n" );
+ exit( 1 );
+ }
+
+ // Generate fixture data:
+ for ( i = 0; i < num; i++ ) {
+ n = lengths[ i ];
+ off = offsets[ i ];
+
+ rand_array_f32( input + off, (unsigned int)n, -10.0, 10.0 );
+ for ( j = 0; j < (unsigned int)n; j++ ) {
+ expected[ off + j ] = input[ off + j ];
+ }
+
+ wsave = (float*) calloc( 2*n + 15, sizeof(float) );
+ if ( wsave == NULL ) {
+ printf( "Error allocating memory.\n" );
+ exit( 1 );
+ }
+ rffti( n, wsave );
+ rfftf( n, expected + off, wsave );
+ free( wsave );
+ }
+ // Open a new file:
+ f = fopen( name, "w" );
+ if ( f == NULL ) {
+ printf( "Error opening file.\n" );
+ exit( 1 );
+ }
+
+ // Write data as JSON:
+ write_data_as_json( f, lengths, offsets, input, expected, num, total );
+
+ // Close the file:
+ fclose( f );
+
+ // Free allocated memory:
+ free( input );
+ free( expected );
+}
+
+/**
+* Computes offsets into flat input and output arrays for each sequence length.
+*
+* @param offsets output array of offsets
+* @param lengths sequence lengths
+* @param num number of sequence lengths
+* @return total number of values
+*/
+unsigned int compute_offsets( int *offsets, const int *lengths, const unsigned int num ) {
+ unsigned int total;
+ unsigned int i;
+
+ total = 0;
+ for ( i = 0; i < num; i++ ) {
+ offsets[ i ] = total;
+ total += lengths[ i ];
+ }
+ return total;
+}
+
+/**
+* Main execution sequence.
+*/
+int main( void ) {
+ unsigned int total;
+ unsigned int num;
+ int *lengths;
+ int *offsets;
+
+ // Use the current time to seed the random number generator:
+ srand( time( NULL ) );
+
+ // Define the number of sequence lengths per range:
+ num = 10;
+
+ // Allocate arrays:
+ lengths = (int*) malloc( num * sizeof(int) );
+ if ( lengths == NULL ) {
+ printf( "Error allocating memory.\n" );
+ exit( 1 );
+ }
+ offsets = (int*) malloc( num * sizeof(int) );
+ if ( offsets == NULL ) {
+ printf( "Error allocating memory.\n" );
+ exit( 1 );
+ }
+
+ // Generate fixture data:
+ rand_array_i32( lengths, num, 2, 16 );
+ total = compute_offsets( offsets, lengths, num );
+ generate( lengths, offsets, num, total, "small.json" );
+
+ rand_array_i32( lengths, num, 16, 128 );
+ total = compute_offsets( offsets, lengths, num );
+ generate( lengths, offsets, num, total, "medium.json" );
+
+ rand_array_i32( lengths, num, 128, 1024 );
+ total = compute_offsets( offsets, lengths, num );
+ generate( lengths, offsets, num, total, "large.json" );
+
+ // Free allocated memory:
+ free( lengths );
+ free( offsets );
+
+ return 0;
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/test/fixtures/c/fftpack/small.json b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/test/fixtures/c/fftpack/small.json
new file mode 100644
index 000000000000..ba31bd726d64
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/test/fixtures/c/fftpack/small.json
@@ -0,0 +1 @@
+{"lengths":[10,6,15,8,6,12,7,14,4,3],"offsets":[0,10,16,31,39,45,57,64,78,82],"input":[-7.55408096,-1.4333744,9.26592445,-7.59634781,8.18039131,7.85041046,1.83705711,-4.58907509,-8.58518982,8.72467232,-4.42701626,-4.86530781,8.77077293,-9.61364269,3.5144701,7.68599701,-1.43917274,-8.18552017,5.95778561,-7.4978776,3.1757412,-5.3176837,5.6897068,6.90798569,2.50693798,-5.89764404,-1.70383644,3.6225338,3.93460655,8.93358994,6.82878494,-8.61102486,-5.48886824,8.59505844,-2.84915924,-5.81445026,-3.46974897,3.9312706,-7.13906002,-6.1773901,-3.39031649,-1.05104351,-4.89875984,6.54365921,-0.730888367,-4.04292965,-9.51205826,-9.16745949,2.50826836,-3.54130745,1.249506,0.449598312,-3.61754894,-0.142053604,-7.49710131,-3.78302336,-1.27054501,5.95018768,4.79581261,3.20998192,-9.82628155,9.68105507,9.47754669,9.12158012,6.39995384,4.01054764,5.27807999,8.68666649,-3.20572758,1.34254837,4.21170807,6.1719265,-8.42708206,6.02810669,-5.62016773,1.83864212,2.05501652,-1.33923435,-8.51644707,4.08210373,7.91773796,-6.57529163,9.07779884,-9.44342422,4.37002754],"expected":[6.10038757,-13.6341324,-11.8751001,14.9525146,3.43349314,-24.9710045,12.3529968,-17.2618847,29.5367737,0.18781662,1.06527328,0.454350471,6.31765747,-21.5936241,15.4218407,14.6511803,17.5159378,-0.0562601089,15.0393858,4.37691879,30.4248638,-23.6248817,-4.72328281,-0.775098801,16.833313,-16.5735397,3.87147808,-6.28481913,13.9801197,23.3859177,18.0720634,-20.8459816,-7.25772572,-6.26947308,-26.9518051,-1.02960205,1.66457653,3.05810285,17.0476913,-9.70473862,-6.08554077,8.88033772,-11.7618561,-4.27407265,8.33518982,-38.3666534,-16.4133129,-0.711241245,3.13709974,13.0715714,4.77459431,13.3798275,6.31008101,9.63313293,-1.83886576,-15.9250393,-2.08769798,32.4098816,11.9351425,17.9563599,-8.66833973,-13.7535315,1.35391164,15.9949455,27.4309845,10.7153492,-15.6917601,6.80616331,-3.93522072,-10.2709789,-9.66131973,0.727410316,14.0039959,13.3774376,-19.5086918,22.7525158,5.02336597,-26.0474243,-3.09189701,-16.434185,-10.6573954,1.8944788,4.00440216,11.6144972,11.9628]}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/test/test.js b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/test/test.js
new file mode 100644
index 000000000000..7e73cbf679fe
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/float32/rfftf/test/test.js
@@ -0,0 +1,387 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+// MODULES //
+
+var tape = require( 'tape' );
+var Float32Array = require( '@stdlib/array/float32' );
+var isAlmostSameValue = require( '@stdlib/number/float32/base/assert/is-almost-same-value' );
+var rffti = require( '@stdlib/fft/base/fftpack/float32/rffti' );
+var rfftf = require( './../lib' );
+
+
+// FIXTURES //
+
+var small = require( './fixtures/c/fftpack/small.json' );
+var medium = require( './fixtures/c/fftpack/medium.json' );
+var large = require( './fixtures/c/fftpack/large.json' );
+
+
+// TESTS //
+
+tape( 'main export is a function', function test( t ) {
+ t.ok( true, __filename );
+ t.strictEqual( typeof rfftf, 'function', 'main export is a function' );
+ t.end();
+});
+
+tape( 'the function has an arity of 7', function test( t ) {
+ t.strictEqual( rfftf.length, 7, 'returns expected value' );
+ t.end();
+});
+
+tape( 'the function returns a reference to the input array', function test( t ) {
+ var out;
+ var w;
+ var N;
+ var r;
+
+ N = 4;
+ r = new Float32Array( [ 1.0, 2.0, 3.0, 4.0 ] );
+ w = new Float32Array( ( 2*N ) + 34 );
+
+ rffti( N, w, 1, 0 );
+ out = rfftf( N, r, 1, 0, w, 1, 0 );
+
+ t.strictEqual( out, r, 'same reference' );
+ t.end();
+});
+
+tape( 'the function returns all zeros for a zero sequence', function test( t ) {
+ var expected;
+ var w;
+ var N;
+ var r;
+
+ N = 4;
+ r = new Float32Array( [ 0.0, 0.0, 0.0, 0.0 ] );
+ expected = new Float32Array( [ 0.0, 0.0, 0.0, 0.0 ] );
+ w = new Float32Array( ( 2*N ) + 34 );
+
+ rffti( N, w, 1, 0 );
+ rfftf( N, r, 1, 0, w, 1, 0 );
+
+ t.deepEqual( r, expected, 'returns expected value' );
+ t.end();
+});
+
+tape( 'the function returns only a zero-frequency term for a constant sequence', function test( t ) {
+ var expected;
+ var w;
+ var N;
+ var r;
+
+ N = 4;
+ r = new Float32Array( [ 1.0, 1.0, 1.0, 1.0 ] );
+ expected = new Float32Array( [ 4.0, 0.0, 0.0, 0.0 ] );
+ w = new Float32Array( ( 2*N ) + 34 );
+
+ rffti( N, w, 1, 0 );
+ rfftf( N, r, 1, 0, w, 1, 0 );
+
+ t.deepEqual( r, expected, 'returns expected value' );
+ t.end();
+});
+
+tape( 'the function computes the exact two-point real FFT', function test( t ) {
+ var expected;
+ var w;
+ var N;
+ var r;
+
+ N = 2;
+ r = new Float32Array( [ 3.0, -1.0 ] );
+
+ // For [ a, b ], output is [ a+b, a-b ]...
+ expected = new Float32Array( [ 2.0, 4.0 ] );
+ w = new Float32Array( ( 2*N ) + 34 );
+
+ rffti( N, w, 1, 0 );
+ rfftf( N, r, 1, 0, w, 1, 0 );
+
+ t.deepEqual( r, expected, 'returns expected value' );
+ t.end();
+});
+
+tape( 'the function computes a forward real-valued FFT (small sequence lengths)', function test( t ) {
+ var expected;
+ var lengths;
+ var offsets;
+ var input;
+ var ulps;
+ var off;
+ var w;
+ var y;
+ var e;
+ var N;
+ var i;
+ var k;
+ var r;
+
+ lengths = small.lengths;
+ offsets = small.offsets;
+ input = small.input;
+ expected = small.expected;
+
+ ulps = 1;
+ for ( k = 0; k < lengths.length; k++ ) {
+ N = lengths[ k ];
+ off = offsets[ k ];
+ r = new Float32Array( N );
+ for ( i = 0; i < N; i++ ) {
+ r[ i ] = input[ off+i ];
+ }
+ w = new Float32Array( ( 2*N ) + 34 );
+
+ rffti( N, w, 1, 0 );
+ rfftf( N, r, 1, 0, w, 1, 0 );
+
+ for ( i = 0; i < N; i++ ) {
+ y = r[ i ];
+ e = expected[ off+i ];
+ t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within tolerance. N: '+N+'. index: '+i+'. y: '+y+'. E: '+e+'.' );
+ }
+ }
+ t.end();
+});
+
+tape( 'the function computes a forward real-valued FFT (medium sequence lengths)', function test( t ) {
+ var expected;
+ var lengths;
+ var offsets;
+ var input;
+ var ulps;
+ var off;
+ var w;
+ var y;
+ var e;
+ var N;
+ var i;
+ var k;
+ var r;
+
+ lengths = medium.lengths;
+ offsets = medium.offsets;
+ input = medium.input;
+ expected = medium.expected;
+
+ ulps = 1;
+ for ( k = 0; k < lengths.length; k++ ) {
+ N = lengths[ k ];
+ off = offsets[ k ];
+ r = new Float32Array( N );
+ for ( i = 0; i < N; i++ ) {
+ r[ i ] = input[ off+i ];
+ }
+ w = new Float32Array( ( 2*N ) + 34 );
+
+ rffti( N, w, 1, 0 );
+ rfftf( N, r, 1, 0, w, 1, 0 );
+
+ for ( i = 0; i < N; i++ ) {
+ y = r[ i ];
+ e = expected[ off+i ];
+ t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within tolerance. N: '+N+'. index: '+i+'. y: '+y+'. E: '+e+'.' );
+ }
+ }
+ t.end();
+});
+
+tape( 'the function computes a forward real-valued FFT (large sequence lengths)', function test( t ) {
+ var expected;
+ var lengths;
+ var offsets;
+ var input;
+ var ulps;
+ var off;
+ var w;
+ var y;
+ var e;
+ var N;
+ var i;
+ var k;
+ var r;
+
+ lengths = large.lengths;
+ offsets = large.offsets;
+ input = large.input;
+ expected = large.expected;
+
+ ulps = 1;
+ for ( k = 0; k < lengths.length; k++ ) {
+ N = lengths[ k ];
+ off = offsets[ k ];
+ r = new Float32Array( N );
+ for ( i = 0; i < N; i++ ) {
+ r[ i ] = input[ off+i ];
+ }
+ w = new Float32Array( ( 2*N ) + 34 );
+
+ rffti( N, w, 1, 0 );
+ rfftf( N, r, 1, 0, w, 1, 0 );
+
+ for ( i = 0; i < N; i++ ) {
+ y = r[ i ];
+ e = expected[ off+i ];
+ t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within tolerance. N: '+N+'. index: '+i+'. y: '+y+'. E: '+e+'.' );
+ }
+ }
+ t.end();
+});
+
+tape( 'the function leaves a length-one sequence unchanged', function test( t ) {
+ var out;
+ var N;
+ var w;
+ var r;
+
+ N = 1;
+ r = new Float32Array( [ 5.0 ] );
+ w = new Float32Array( ( 2*N ) + 34 );
+
+ rffti( N, w, 1, 0 );
+ out = rfftf( N, r, 1, 0, w, 1, 0 );
+ t.strictEqual( out, r, 'same reference' );
+ t.strictEqual( r[ 0 ], 5.0, 'returns expected value' );
+ t.end();
+});
+
+tape( 'the function supports specifying a stride', function test( t ) {
+ var expected;
+ var w;
+ var v;
+ var i;
+ var N;
+ var r;
+
+ N = 4;
+ r = new Float32Array([
+ 1.0, // 0
+ -999.0,
+ 2.0, // 1
+ -999.0,
+ 3.0, // 2
+ -999.0,
+ 4.0, // 3
+ -999.0
+ ]);
+ expected = new Float32Array([
+ 10.0, // 0
+ -999.0,
+ -2.0, // 1
+ -999.0,
+ 2.0, // 2
+ -999.0,
+ -2.0, // 3
+ -999.0
+ ]);
+
+ w = new Float32Array( ( ( 2*N ) + 34 ) * 2 );
+ rffti( N, w, 2, 0 );
+ rfftf( N, r, 2, 0, w, 2, 0 );
+
+ for ( i = 0; i < r.length; i++ ) {
+ v = r[ i ];
+ t.strictEqual( isAlmostSameValue( v, expected[ i ], 1 ), true, 'within tolerance. index: '+i+'. y: '+v+'. E: '+expected[ i ]+'.' );
+ }
+ t.end();
+});
+
+tape( 'the function supports specifying a negative stride', function test( t ) {
+ var expected;
+ var w;
+ var v;
+ var i;
+ var N;
+ var r;
+
+ N = 4;
+ r = new Float32Array([
+ 4.0, // 3
+ -999.0,
+ 3.0, // 2
+ -999.0,
+ 2.0, // 1
+ -999.0,
+ 1.0 // 0
+ ]);
+ expected = new Float32Array([
+ -2.0, // 3
+ -999.0,
+ 2.0, // 2
+ -999.0,
+ -2.0, // 1
+ -999.0,
+ 10.0 // 0
+ ]);
+
+ w = new Float32Array( ( 2*N ) + 34 );
+ rffti( N, w, -1, w.length-1 );
+ rfftf( N, r, -2, r.length-1, w, -1, w.length-1 );
+
+ for ( i = 0; i < r.length; i++ ) {
+ v = r[ i ];
+ t.strictEqual( isAlmostSameValue( v, expected[ i ], 1 ), true, 'within tolerance. index: '+i+'. y: '+v+'. E: '+expected[ i ]+'.' );
+ }
+ t.end();
+});
+
+tape( 'the function supports an offset parameter', function test( t ) {
+ var expected;
+ var w;
+ var v;
+ var i;
+ var N;
+ var r;
+
+ N = 4;
+ r = new Float32Array([
+ -999.0,
+ 1.0, // 0
+ -999.0,
+ 2.0, // 1
+ -999.0,
+ 3.0, // 2
+ -999.0,
+ 4.0, // 3
+ -999.0
+ ]);
+ expected = new Float32Array([
+ -999.0,
+ 10.0, // 0
+ -999.0,
+ -2.0, // 1
+ -999.0,
+ 2.0, // 2
+ -999.0,
+ -2.0, // 3
+ -999.0
+ ]);
+
+ w = new Float32Array( 3 + ( ( ( 2*N ) + 34 ) * 2 ) );
+ rffti( N, w, 2, 3 );
+ rfftf( N, r, 2, 1, w, 2, 3 );
+
+ for ( i = 0; i < r.length; i++ ) {
+ v = r[ i ];
+ t.strictEqual( isAlmostSameValue( v, expected[ i ], 1 ), true, 'within tolerance. index: '+i+'. y: '+v+'. E: '+expected[ i ]+'.' );
+ }
+ t.end();
+});