diff --git a/cmake/onnxruntime_rocm_hipify.cmake b/cmake/onnxruntime_rocm_hipify.cmake index 23ea67951961b..238f09f0ae297 100644 --- a/cmake/onnxruntime_rocm_hipify.cmake +++ b/cmake/onnxruntime_rocm_hipify.cmake @@ -9,6 +9,8 @@ set(contrib_ops_excluded_files "bert/attention.h" "bert/attention_impl.cu" "bert/attention_softmax.h" + "bert/cross_attention.cc" + "bert/cross_attention.h" "bert/embed_layer_norm.cc" "bert/embed_layer_norm.h" "bert/embed_layer_norm_impl.cu" diff --git a/docs/ContribOperators.md b/docs/ContribOperators.md index e44cf96021155..507b1b259d388 100644 --- a/docs/ContribOperators.md +++ b/docs/ContribOperators.md @@ -17,6 +17,7 @@ Do not modify directly.* * com.microsoft.ComplexMulConj * com.microsoft.ConvTransposeWithDynamicPads * com.microsoft.CropAndResize + * com.microsoft.CrossAttention * com.microsoft.DecoderAttention * com.microsoft.DequantizeBFP * com.microsoft.DequantizeLinear @@ -106,10 +107,6 @@ Do not modify directly.* When unidirectional is 1, each token only attends to previous tokens. Both past and present state are optional. They shall be used together, and not allowed to use only one of them. - - When weights is not provided, key and value are required. In this situation, MatMul for input projection is excluded, - and input is the query after projection. The bias is included for performance consideration. - The qkv_hidden_sizes is required only when K and V have different hidden sizes. When there is past state, hidden dimension for Q, K and V shall be the same. @@ -135,27 +132,23 @@ This version of the operator has been available since version 1 of the 'com.micr
Whether every token can only attend to previous tokens. Default value is 0.
-#### Inputs (3 - 9) +#### Inputs (3 - 7)
-
input (optional) : T
-
Input tensor with shape (batch_size, sequence_length, input_hidden_size) when weights is available, or query tensor with shape (batch_size, sequence_length, hidden_size) when weights is not available.
-
weights (optional) : T
+
input : T
+
Input tensor with shape (batch_size, sequence_length, input_hidden_size)
+
weights : T
Merged Q/K/V weights with shape (input_hidden_size, hidden_size + hidden_size + v_hidden_size)
bias : T
Bias tensor with shape (hidden_size + hidden_size + v_hidden_size) for input projection
mask_index (optional) : M
-
Attention mask with shape (batch_size, 1, max_sequence_length, max_sequence_length), (batch_size, total_sequence_length) or (batch_size, sequence_length, total_sequence_length), or index with shape (batch_size) or (2 * batch_size).
+
Attention mask with shape (batch_size, 1, max_sequence_length, max_sequence_length), (batch_size, total_sequence_length) or (batch_size, sequence_length, total_sequence_length), or index with shape (batch_size) or (2 * batch_size)
past (optional) : T
past state for key and value with shape (2, batch_size, num_heads, past_sequence_length, head_size)When past_present_share_buffer is set, its shape is (2, batch_size, num_heads, max_sequence_length, head_size)
extra_add (optional) : T
additional add to QxK' with shape (batch_size, num_heads, sequence_length, total_sequence_length)
-
key (optional) : T
-
Input for key with shape (batch_size, kv_sequence_length, hidden_size). Required when weights is not available.
-
value (optional) : T
-
Input for key with shape (batch_size, kv_sequence_length, v_hidden_size). Required when weights is not available.
past_sequence_length (optional) : M
-
When past_present_share_buffer, specify past_sequence_length for effective past sequence lenght (could be 0).Needed when past_present_share_buffer is not zero.
+
When past_present_share_buffer is used, it is required to specify past_sequence_length (could be 0).
#### Outputs (1 - 2) @@ -164,7 +157,7 @@ This version of the operator has been available since version 1 of the 'com.micr
output : T
3D output tensor with shape (batch_size, sequence_length, v_hidden_size)
present (optional) : T
-
past state for key and value with shape (2, batch_size, num_heads, total_sequence_length, head_size)If past_present_share_buffer, it should be exactly same as past tensor, of shape (2, batch_size, num_heads, max_sequence_length, head_size),while effective_seq_length = (past_sequence_length + kv_sequence_length)
+
past state for key and value with shape (2, batch_size, num_heads, total_sequence_length, head_size). If past_present_share_buffer is set, its shape is (2, batch_size, num_heads, max_sequence_length, head_size), while effective_seq_length = (past_sequence_length + kv_sequence_length).
#### Type Constraints @@ -961,6 +954,57 @@ This version of the operator has been available since version 1 of the 'com.micr +### **com.microsoft.CrossAttention** + + Multi-Head Cross Attention. Bias from input projection is included. + + The key padding mask is optional. When its shape is (batch_size, kv_sequence_length), value 0 + means padding or 1 otherwise. When key has right-side padding, its shape could be (batch_size): it is actual length of + each key sequence excluding paddings. + +#### Version + +This version of the operator has been available since version 1 of the 'com.microsoft' operator set. + +#### Attributes + +
+
num_heads : int (required)
+
Number of attention heads
+
+ +#### Inputs (4 - 5) + +
+
query : T
+
Query with shape (batch_size, sequence_length, hidden_size) when weights is not available.
+
key : T
+
Key with shape (batch_size, kv_sequence_length, hidden_size)
+
value : T
+
Value with shape (batch_size, kv_sequence_length, v_hidden_size)
+
bias : T
+
Bias tensor with shape (hidden_size + hidden_size + v_hidden_size) from input projection
+
key_padding_mask (optional) : M
+
Key padding mask with shape (batch_size) or (batch_size, kv_sequence_length)
+
+ +#### Outputs + +
+
output : T
+
3D output tensor with shape (batch_size, sequence_length, v_hidden_size)
+
+ +#### Type Constraints + +
+
T : tensor(float), tensor(float16)
+
Constrain input and output to float tensors.
+
M : tensor(int32)
+
Constrain mask to integer types
+
+ + ### **com.microsoft.DecoderAttention** This DecoderAttention supports self attention and cross attention, key and value cache, and key_padding_mask. The attention mask is not support at the moment. diff --git a/docs/OperatorKernels.md b/docs/OperatorKernels.md index 93b8d8fc53a2e..d343d132aab79 100644 --- a/docs/OperatorKernels.md +++ b/docs/OperatorKernels.md @@ -395,7 +395,7 @@ Do not modify directly.* | | | | |**Operator Domain:** *com.microsoft*|||| -|Attention|*in* input:**T**
*in* weights:**T**
*in* bias:**T**
*in* mask_index:**M**
*in* past:**T**
*in* extra_add:**T**
*in* key:**T**
*in* value:**T**
*in* past_sequence_length:**M**
*out* output:**T**
*out* present:**T**|1+|**T** = tensor(float)| +|Attention|*in* input:**T**
*in* weights:**T**
*in* bias:**T**
*in* mask_index:**M**
*in* past:**T**
*in* extra_add:**T**
*in* past_sequence_length:**M**
*out* output:**T**
*out* present:**T**|1+|**T** = tensor(float)| |AttnLSTM|*in* X:**T**
*in* W:**T**
*in* R:**T**
*in* B:**T**
*in* sequence_lens:**T1**
*in* initial_h:**T**
*in* initial_c:**T**
*in* P:**T**
*in* QW:**T**
*in* MW:**T**
*in* V:**T**
*in* M:**T**
*in* memory_seq_lens:**T1**
*in* AW:**T**
*out* Y:**T**
*out* Y_h:**T**
*out* Y_c:**T**|1+|**T** = tensor(double), tensor(float)
**T1** = tensor(int32)| |BeamSearch|*in* input_ids:**I**
*in* max_length:**I**
*in* min_length:**I**
*in* num_beams:**I**
*in* num_return_sequences:**I**
*in* length_penalty:**T**
*in* repetition_penalty:**T**
*in* vocab_mask:**M**
*in* prefix_vocab_mask:**M**
*in* attention_mask:**I**
*out* sequences:**I**
*out* sequences_scores:**T**
*out* scores:**T**|1+|**T** = tensor(float)| |BiasGelu|*in* A:**T**
*in* B:**T**
*out* C:**T**|1+|**T** = tensor(float)| @@ -762,7 +762,7 @@ Do not modify directly.* | | | | |**Operator Domain:** *com.microsoft*|||| -|Attention|*in* input:**T**
*in* weights:**T**
*in* bias:**T**
*in* mask_index:**M**
*in* past:**T**
*in* extra_add:**T**
*in* key:**T**
*in* value:**T**
*in* past_sequence_length:**M**
*out* output:**T**
*out* present:**T**|1+|**T** = tensor(float), tensor(float16)| +|Attention|*in* input:**T**
*in* weights:**T**
*in* bias:**T**
*in* mask_index:**M**
*in* past:**T**
*in* extra_add:**T**
*in* past_sequence_length:**M**
*out* output:**T**
*out* present:**T**|1+|**T** = tensor(float), tensor(float16)| |BeamSearch|*in* input_ids:**I**
*in* max_length:**I**
*in* min_length:**I**
*in* num_beams:**I**
*in* num_return_sequences:**I**
*in* length_penalty:**T**
*in* repetition_penalty:**T**
*in* vocab_mask:**M**
*in* prefix_vocab_mask:**M**
*in* attention_mask:**I**
*out* sequences:**I**
*out* sequences_scores:**T**
*out* scores:**T**|1+|**T** = tensor(float), tensor(float16)| |BiasDropout|*in* data:**T**
*in* bias:**T**
*in* residual:**T**
*in* ratio:**T1**
*in* training_mode:**T2**
*out* output:**T**
*out* mask:**T2**|1+|**T** = tensor(bfloat16), tensor(double), tensor(float), tensor(float16)
**T1** = tensor(bfloat16), tensor(double), tensor(float), tensor(float16)
**T2** = tensor(bool)| |BiasGelu|*in* A:**T**
*in* B:**T**
*out* C:**T**|1+|**T** = tensor(bfloat16), tensor(double), tensor(float), tensor(float16)| @@ -772,6 +772,7 @@ Do not modify directly.* |ComplexMul|*in* A:**T**
*in* B:**T**
*out* C:**T**|1+|**T** = tensor(float), tensor(float16)| |ComplexMulConj|*in* A:**T**
*in* B:**T**
*out* C:**T**|1+|**T** = tensor(float), tensor(float16)| |ConvTransposeWithDynamicPads|*in* X:**T**
*in* W:**T**
*in* Pads:**tensor(int64)**
*in* B:**T**
*out* Y:**T**|1+|**T** = tensor(float)| +|CrossAttention|*in* query:**T**
*in* key:**T**
*in* value:**T**
*in* bias:**T**
*in* key_padding_mask:**M**
*out* output:**T**|1+|**T** = tensor(float), tensor(float16)| |DecoderAttention|*in* query:**T**
*in* key:**T**
*in* q_weight:**T**
*in* kv_weight:**T**
*in* bias:**T**
*in* key_padding_mask:**B**
*in* key_cache:**T**
*in* value_cache:**T**
*in* static_kv:**B**
*in* use_past:**B**
*in* has_layer_state:**B**
*in* has_key_padding_mask:**B**
*out* output:**T**
*out* new_key_cache:**T**
*out* new_value_cache:**T**|1+|**T** = tensor(float), tensor(float16)| |DequantizeLinear|*in* x:**T1**
*in* x_scale:**T2**
*in* x_zero_point:**T1**
*out* y:**T2**|1+|**T1** = tensor(int8), tensor(uint8)
**T2** = tensor(float16)| |DequantizeWithOrder|*in* input:**Q**
*in* scale_input:**S**
*out* output:**F**|1+|**F** = tensor(float), tensor(float16)
**Q** = tensor(int8)
**S** = tensor(float)| @@ -1128,7 +1129,7 @@ Do not modify directly.* | | | | |**Operator Domain:** *com.microsoft*|||| -|Attention|*in* input:**T**
*in* weights:**T**
*in* bias:**T**
*in* mask_index:**M**
*in* past:**T**
*in* extra_add:**T**
*in* key:**T**
*in* value:**T**
*in* past_sequence_length:**M**
*out* output:**T**
*out* present:**T**|1+|**M** = tensor(int32)
**T** = tensor(float), tensor(float16)| +|Attention|*in* input:**T**
*in* weights:**T**
*in* bias:**T**
*in* mask_index:**M**
*in* past:**T**
*in* extra_add:**T**
*in* past_sequence_length:**M**
*out* output:**T**
*out* present:**T**|1+|**M** = tensor(int32)
**T** = tensor(float), tensor(float16)| |BiasGelu|*in* A:**T**
*in* B:**T**
*out* C:**T**|1+|**T** = tensor(float), tensor(float16)| |ConvTransposeWithDynamicPads|*in* X:**T**
*in* W:**T**
*in* Pads:**tensor(int64)**
*in* B:**T**
*out* Y:**T**|1+|**T** = tensor(float), tensor(float16)| |DequantizeLinear|*in* x:**T1**
*in* x_scale:**T2**
*in* x_zero_point:**T1**
*out* y:**T2**|1+|**T1** = tensor(float)
**T2** = tensor(uint8)| diff --git a/onnxruntime/contrib_ops/cpu/bert/attention.cc b/onnxruntime/contrib_ops/cpu/bert/attention.cc index d60d7f64eef54..47db3fe558ce8 100644 --- a/onnxruntime/contrib_ops/cpu/bert/attention.cc +++ b/onnxruntime/contrib_ops/cpu/bert/attention.cc @@ -10,8 +10,8 @@ #include "core/common/safeint.h" #include "core/platform/threadpool.h" -using onnxruntime::concurrency::ThreadPool; using onnxruntime::narrow; +using onnxruntime::concurrency::ThreadPool; namespace onnxruntime { namespace contrib { @@ -59,7 +59,7 @@ ONNX_OPERATOR_TYPED_KERNEL_EX( Attention); template -Attention::Attention(const OpKernelInfo& info) : OpKernel(info), AttentionCPUBase(info, false, true) { +Attention::Attention(const OpKernelInfo& info) : OpKernel(info), AttentionCPUBase(info, false) { } template @@ -200,20 +200,15 @@ Status Attention::Compute(OpKernelContext* context) const { const Tensor* past = context->Input(4); const Tensor* extra_add_qk = context->Input(5); - const Tensor* key = context->Input(6); - const Tensor* value = context->Input(7); - const TensorShape& weights_shape = (weights ? weights->Shape() : weight_shape_); AttentionParameters parameters; ORT_RETURN_IF_ERROR(CheckInputs(input->Shape(), - (nullptr != weights || is_prepack_) ? &weights_shape : nullptr, + weights_shape, bias->Shape(), mask_index, past, extra_add_qk, - key, - value, ¶meters)); const int batch_size = parameters.batch_size; diff --git a/onnxruntime/contrib_ops/cpu/bert/attention_base.cc b/onnxruntime/contrib_ops/cpu/bert/attention_base.cc index 1a129b04c9182..2558c52df3e19 100644 --- a/onnxruntime/contrib_ops/cpu/bert/attention_base.cc +++ b/onnxruntime/contrib_ops/cpu/bert/attention_base.cc @@ -8,13 +8,11 @@ namespace onnxruntime { namespace contrib { Status AttentionBase::CheckInputs(const TensorShape& input_shape, - const TensorShape* weights_shape, + const TensorShape& weights_shape, const TensorShape& bias_shape, const Tensor*& mask_index, const Tensor* past, const Tensor* extra_add_qk, - const Tensor* key, - const Tensor* value, void* parameters, const Tensor* past_seq_len) const { // Abbreviation and Meanings: @@ -33,25 +31,13 @@ Status AttentionBase::CheckInputs(const TensorShape& input_shape, // When past state is used, Q, K and V should have same hidden size (unless we split it into past_key and past_value). - // Input shapes with weights: + // Input shapes: // input (Q/K/V) : (B, S, D_i) // weights (Q/K/V) : (D_i, D + D + D_v) // bias (Q/K/V) : (D + D + D_v) // mask_index : see below // past (K/V) : (2, B, N, P, H) or NULL // extra_add_qk : (B, N, S, T) or NULL - // key : NULL - // value : NULL - - // Input shapes without weights (only bias is provided): - // input (Q) : (B, S, D) - // weights : NULL - // bias (Q/K/V) : (D + D + D_v) - // mask_index : see below - // past (K/V) : (2, B, N, P, H) or NULL - // extra_add_qk : (B, N, S, T) or NULL - // key (K) : (B, L, D) - // value (V) : (B, L, D_v) // For mask_index, the following shapes are supported: // NULL, (B, 1), (1, 1) @@ -84,21 +70,19 @@ Status AttentionBase::CheckInputs(const TensorShape& input_shape, bias_dims.size()); } - if (weights_shape != nullptr) { - const auto& weights_dims = weights_shape->GetDims(); - if (weights_dims.size() != 2) { - return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Input 'weights' is expected to have 2 dimensions, got ", - weights_dims.size()); - } - if (weights_dims[0] != input_hidden_size) { - return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, - "Input 1 dimension 0 should have same length as dimension 2 of input 0"); - } + const auto& weights_dims = weights_shape.GetDims(); + if (weights_dims.size() != 2) { + return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Input 'weights' is expected to have 2 dimensions, got ", + weights_dims.size()); + } + if (weights_dims[0] != input_hidden_size) { + return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, + "Input 1 dimension 0 should have same length as dimension 2 of input 0"); + } - if (bias_dims[0] != weights_dims[1]) { - return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, - "Input 'bias' dimension 0 should have same length as dimension 1 of input 'weights'"); - } + if (bias_dims[0] != weights_dims[1]) { + return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, + "Input 'bias' dimension 0 should have same length as dimension 1 of input 'weights'"); } int64_t q_hidden_size = bias_dims[0] / static_cast(3); @@ -123,60 +107,6 @@ Status AttentionBase::CheckInputs(const TensorShape& input_shape, } int64_t kv_sequence_length = sequence_length; - if (weights_shape == nullptr) { // no weights - if (this->require_weights_) { - return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "This operator requires weights"); - } - - if (key == nullptr || value == nullptr) { - return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, - "When weights is not provided, key and value are required"); - } - - const auto& key_dims = key->Shape().GetDims(); - if (key_dims.size() != 3) { - return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Input 'key' is expected to have 3 dimensions, got ", - key_dims.size()); - } - if (key_dims[0] != batch_size) { - return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, - "Input 'key' dimension 0 should have same length as dimension 0 of input 0"); - } - - const auto& value_dims = value->Shape().GetDims(); - if (value_dims.size() != 3) { - return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Input 'value' is expected to have 3 dimensions, got ", - value_dims.size()); - } - if (value_dims[0] != batch_size) { - return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, - "Input 'value' dimension 0 should have same length as dimension 0 of input 0"); - } - - if (value_dims[1] != key_dims[1]) { - return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, - "Input 'key' and 'value' dimension 1 should have same length"); - } - - q_hidden_size = dims[2]; - k_hidden_size = key_dims[2]; - v_hidden_size = value_dims[2]; - kv_sequence_length = key_dims[1]; - - if (qkv_hidden_sizes_.size() != 0 && - (q_hidden_size != qkv_hidden_sizes_[0] || - k_hidden_size != qkv_hidden_sizes_[1] || - v_hidden_size != qkv_hidden_sizes_[2])) { - return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, - "qkv_hidden_sizes does not match with query, key and value input shape", - " q_hidden_size=", q_hidden_size, - " k_hidden_size=", k_hidden_size, - " v_hidden_size=", v_hidden_size, - "qkv_hidden_sizes[0]=", qkv_hidden_sizes_[0], - "qkv_hidden_sizes[1]=", qkv_hidden_sizes_[1], - "qkv_hidden_sizes[2]=", qkv_hidden_sizes_[2]); - } - } if (q_hidden_size != k_hidden_size) { return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, @@ -246,15 +176,18 @@ Status AttentionBase::CheckInputs(const TensorShape& input_shape, } int64_t max_sequence_length = -1; + AttentionMaskType mask_type = AttentionMaskType::MASK_NONE; if (mask_index != nullptr) { // mask_index is optional - bool is_dummy = false; - auto status = this->CheckMask(mask_index, is_dummy, + mask_type = AttentionMaskType::MASK_UNKNOWN; + auto status = this->CheckMask(mask_index, mask_type, max_sequence_length, batch_size, sequence_length, total_sequence_length); if (status != Status::OK()) { return status; } - if (is_dummy) { + + if (mask_type == AttentionMaskType::MASK_2D_DUMMY) { mask_index = nullptr; + mask_type = AttentionMaskType::MASK_NONE; } } @@ -315,30 +248,33 @@ Status AttentionBase::CheckInputs(const TensorShape& input_shape, output_parameters->num_heads = num_heads_; output_parameters->is_unidirectional = is_unidirectional_; output_parameters->past_present_share_buffer = (past_present_share_buffer_ != 0); + output_parameters->mask_type = mask_type; } return Status::OK(); } Status AttentionBase::CheckMask(const Tensor* mask_index, - bool& is_dummy, + AttentionMaskType& mask_type, int64_t& max_sequence_length, int64_t batch_size, int64_t sequence_length, int64_t total_sequence_length) const { - is_dummy = false; const auto& mask_dims = mask_index->Shape().GetDims(); if (mask_dims.size() == 1) { if (mask_dims[0] != batch_size && mask_dims[0] != 2 * batch_size) { return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Inputs 'mask_index' with 1D data shall have length of batch_size or 2 * batch_size"); } + mask_type = (mask_dims[0] == batch_size ? AttentionMaskType::MASK_1D_KEY_SEQ_LEN : AttentionMaskType::MASK_1D_END_START); } else if (mask_dims.size() == 2) { - if (mask_dims[0] != batch_size || mask_dims[1] != total_sequence_length) { + if (mask_dims[0] == batch_size && mask_dims[1] == total_sequence_length) { + mask_type = AttentionMaskType::MASK_2D_KEY_PADDING; + } else { // Add operator supports broadcasting. Here we handle a case with only one element in the 2nd dimension. if ((mask_dims[0] == batch_size || mask_dims[0] == 1) && mask_dims[1] == 1) { // Mask will have same value after propagation, which has same effect as no mask. - is_dummy = true; + mask_type = AttentionMaskType::MASK_2D_DUMMY; } else { return ORT_MAKE_STATUS( ONNXRUNTIME, INVALID_ARGUMENT, @@ -353,6 +289,7 @@ Status AttentionBase::CheckMask(const Tensor* mask_index, "Inputs 'mask_index' with 3D data shall have shape " "batch_size x sequence_length x total_sequence_length"); } + mask_type = AttentionMaskType::MASK_3D_ATTENTION; } else if (mask_dims.size() == 4) { if (mask_dims[0] != batch_size || mask_dims[1] != 1 || mask_dims[2] != mask_dims[3] || mask_dims[2] < total_sequence_length) { @@ -362,10 +299,10 @@ Status AttentionBase::CheckMask(const Tensor* mask_index, "batch_size x 1 x max_sequence_length x max_sequence_length)"); } max_sequence_length = mask_dims[3]; - - if (is_unidirectional_ == true) { + mask_type = AttentionMaskType::MASK_4D_MEGATRON; + if (this->is_unidirectional_) { return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, - "Inputs 'mask_index' with 4D data shall have is_unidirectional_ set to false"); + "Inputs 'mask_index' with 4D data shall have is_unidirectional set to false"); } } else { return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, @@ -377,13 +314,11 @@ Status AttentionBase::CheckMask(const Tensor* mask_index, } Status AttentionBase::CheckInputs(const TensorShape& input_shape, - const TensorShape* weights_shape, + const TensorShape& weights_shape, const TensorShape& bias_shape, const Tensor*& mask_index, const Tensor* past, const Tensor* extra_add_qk, - const Tensor* key, - const Tensor* value, void* parameters, const int max_threads_per_block, const Tensor* past_seq_len) const { @@ -391,7 +326,7 @@ Status AttentionBase::CheckInputs(const TensorShape& input_shape, return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "num_heads should be no larger than ", max_threads_per_block); } - return CheckInputs(input_shape, weights_shape, bias_shape, mask_index, past, extra_add_qk, key, value, parameters, past_seq_len); + return CheckInputs(input_shape, weights_shape, bias_shape, mask_index, past, extra_add_qk, parameters, past_seq_len); } Tensor* AttentionBase::GetPresent(OpKernelContext* context, diff --git a/onnxruntime/contrib_ops/cpu/bert/attention_base.h b/onnxruntime/contrib_ops/cpu/bert/attention_base.h index 9eb93daa12e8a..71a4ed8c6dda1 100644 --- a/onnxruntime/contrib_ops/cpu/bert/attention_base.h +++ b/onnxruntime/contrib_ops/cpu/bert/attention_base.h @@ -13,17 +13,14 @@ namespace contrib { class AttentionBase { public: - // This check function is specifically used in cuda Status CheckInputs(const TensorShape& input_shape, - const TensorShape* weights_shape, + const TensorShape& weights_shape, const TensorShape& bias_shape, const Tensor*& mask_index, // Dummy mask of shape (1 or batch_size, 1) will be updated to nullptr. const Tensor* past, const Tensor* extra_add_qk, - const Tensor* key, - const Tensor* value, void* parameters, - const int max_threads_per_block, + const int max_threads_per_block, // for CUDA const Tensor* past_seq_len = nullptr) const; Tensor* GetPresent(OpKernelContext* context, @@ -34,7 +31,7 @@ class AttentionBase { int& past_sequence_length) const; protected: - AttentionBase(const OpKernelInfo& info, bool require_same_hidden_size, bool require_weights) { + AttentionBase(const OpKernelInfo& info, bool require_same_hidden_size) { int64_t num_heads = 0; ORT_ENFORCE(info.GetAttr("num_heads", &num_heads).IsOK() && num_heads > 0); num_heads_ = static_cast(num_heads); @@ -48,24 +45,21 @@ class AttentionBase { past_present_share_buffer_ = info.GetAttrOrDefault("past_present_share_buffer", 0LL); require_same_hidden_size_ = require_same_hidden_size; - require_weights_ = require_weights; } Status CheckMask(const Tensor* mask_index, - bool& is_dummy, // output: whether the mask is dummy with shape (1 or batch_size, 1) + AttentionMaskType& mask_type, int64_t& max_sequence_length, // output: max_sequence_length when mask_index is 4D tensor int64_t batch_size, int64_t sequence_length, int64_t total_sequence_length) const; Status CheckInputs(const TensorShape& input_shape, - const TensorShape* weights_shape, + const TensorShape& weights_shape, const TensorShape& bias_shape, const Tensor*& mask_index, // Dummy mask of shape (1 or batch_size, 1) will be updated to nullptr. const Tensor* past, const Tensor* extra_add_qk, - const Tensor* key, - const Tensor* value, void* parameters, const Tensor* past_seq_len = nullptr) const; @@ -73,7 +67,6 @@ class AttentionBase { bool is_unidirectional_; // whether every token can only attend to previous tokens. std::vector qkv_hidden_sizes_; // Q, K, V hidden sizes parsed from the qkv_hidden_sizes attribute. bool require_same_hidden_size_; // whether the implementation supports different hidden sizes of Q/K/V. - bool require_weights_; // whether the implementation requires weights for Q/K/V. bool past_present_share_buffer_; // whether or not the past (if used) and present tensor share the same buffer }; diff --git a/onnxruntime/contrib_ops/cpu/bert/attention_common.h b/onnxruntime/contrib_ops/cpu/bert/attention_common.h index 649c18248c883..c313e4d2847a4 100644 --- a/onnxruntime/contrib_ops/cpu/bert/attention_common.h +++ b/onnxruntime/contrib_ops/cpu/bert/attention_common.h @@ -6,6 +6,17 @@ namespace onnxruntime { namespace contrib { +enum AttentionMaskType { + MASK_NONE, // No mask + MASK_1D_KEY_SEQ_LEN, // [batch_size], key sequence length + MASK_1D_END_START, // [2 * batch_size] with end positions and start positions + MASK_2D_DUMMY, // dummy mask with shape [1, 1] or [batch_size, 1]. It has same effect as no mask. + MASK_2D_KEY_PADDING, // [batch_size, total_sequence_length] + MASK_3D_ATTENTION, // [batch_size, sequence_length, total_sequence_length] + MASK_4D_MEGATRON, // Megatron causal mask with shape [batch_size, 1, max_sequence_length, max_sequence_length] + MASK_UNKNOWN +}; + struct AttentionParameters { int batch_size; int sequence_length; @@ -21,6 +32,7 @@ struct AttentionParameters { int num_heads; bool is_unidirectional; bool past_present_share_buffer; + AttentionMaskType mask_type; }; namespace attention { diff --git a/onnxruntime/contrib_ops/cpu/bert/attention_cpu_base.h b/onnxruntime/contrib_ops/cpu/bert/attention_cpu_base.h index b47a18bd61d1f..2b01d1ce14aa4 100644 --- a/onnxruntime/contrib_ops/cpu/bert/attention_cpu_base.h +++ b/onnxruntime/contrib_ops/cpu/bert/attention_cpu_base.h @@ -15,8 +15,8 @@ namespace contrib { class AttentionCPUBase : public AttentionBase { protected: - AttentionCPUBase(const OpKernelInfo& info, bool require_same_hidden_size, bool require_weights) - : AttentionBase(info, require_same_hidden_size, require_weights) {} + AttentionCPUBase(const OpKernelInfo& info, bool require_same_hidden_size) + : AttentionBase(info, require_same_hidden_size) {} template Status ApplyAttention(const T* Q, // Q data with shape BxNxSxH diff --git a/onnxruntime/contrib_ops/cpu/bert/cross_attention_helper.h b/onnxruntime/contrib_ops/cpu/bert/cross_attention_helper.h new file mode 100644 index 0000000000000..78ebd23d989f3 --- /dev/null +++ b/onnxruntime/contrib_ops/cpu/bert/cross_attention_helper.h @@ -0,0 +1,119 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#pragma once + +#include "core/common/common.h" +#include "core/providers/common.h" +#include "contrib_ops/cpu/bert/attention_common.h" + +namespace onnxruntime { +namespace contrib { +namespace cross_attention_helper { + +template +Status CheckInputs(const T* query, + const T* key, + const T* value, + const T* bias, + const T* key_padding_mask, + void* parameters, + int num_heads, + int max_threads_per_block) { + // query (Q) : (B, S, D) + // key (K) : (B, L, D) + // value (V) : (B, L, D_v) + // bias (Q/K/V) : (D + D + D_v) + // key_padding_mask (K/V) : (B, L) or (L) + + const auto& query_dims = query->Shape().GetDims(); + if (query_dims.size() != 3) { + return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Input 'query' is expected to have 3 dimensions, got ", + query_dims.size()); + } + + const auto& key_dims = key->Shape().GetDims(); + if (key_dims.size() != 3) { + return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Input 'key' is expected to have 3 dimensions, got ", + key_dims.size()); + } + + const auto& bias_dims = bias->Shape().GetDims(); + if (bias_dims.size() != 1) { + return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Input 'bias' is expected to have 1 dimension, got ", + bias_dims.size()); + } + + AttentionMaskType mask_type = AttentionMaskType::MASK_NONE; + if (key_padding_mask != nullptr) { + mask_type = AttentionMaskType::MASK_UNKNOWN; + const auto& mask_dims = key_padding_mask->Shape().GetDims(); + if (mask_dims.size() == 1 && mask_dims[0] == key_dims[0]) { + mask_type = AttentionMaskType::MASK_1D_KEY_SEQ_LEN; + } else if (mask_dims.size() == 2 && mask_dims[0] == key_dims[0] && mask_dims[1] == key_dims[1]) { + mask_type = AttentionMaskType::MASK_2D_KEY_PADDING; + } + + if (mask_type == AttentionMaskType::MASK_UNKNOWN) { + return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, + "Input 'key_padding_mask' shape shall be (batch_size) or (batch_size, kv_sequence_length)"); + } + } + + if (query_dims[0] != key_dims[0]) { + return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, + "Input 'query' and 'key' shall have same dim 0 (batch size)"); + } + + int64_t batch_size = query_dims[0]; + int64_t sequence_length = query_dims[1]; + int64_t kv_sequence_length = key_dims[1]; + int64_t q_hidden_size = query_dims[2]; + int64_t v_hidden_size = 0; + + const auto& value_dims = value->Shape().GetDims(); + if (value_dims.size() != 3) { + return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Input 'value' is expected to have 3 dimensions, got ", + value_dims.size()); + } + + if (query_dims[0] != value_dims[0]) { + return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, + "Input 'query' and 'value' shall have same dim 0 (batch_size)"); + } + + if (key_dims[1] != value_dims[1]) { + return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, + "Input 'key' and 'value' shall have same same dim 1 (sequence_length)"); + } + v_hidden_size = value_dims[2]; + + if (parameters != nullptr) { + AttentionParameters* output_parameters = reinterpret_cast(parameters); + output_parameters->batch_size = static_cast(batch_size); + output_parameters->sequence_length = static_cast(sequence_length); + output_parameters->past_sequence_length = 0; + output_parameters->kv_sequence_length = static_cast(kv_sequence_length); + output_parameters->total_sequence_length = static_cast(kv_sequence_length); + output_parameters->max_sequence_length = 0; + output_parameters->input_hidden_size = 0; + output_parameters->hidden_size = static_cast(q_hidden_size); + output_parameters->v_hidden_size = static_cast(v_hidden_size); + output_parameters->head_size = static_cast(q_hidden_size) / num_heads; + output_parameters->v_head_size = static_cast(v_hidden_size) / num_heads; + output_parameters->num_heads = num_heads; + output_parameters->is_unidirectional = false; + output_parameters->past_present_share_buffer = false; + output_parameters->mask_type = mask_type; + } + + if (max_threads_per_block > 0 && num_heads > max_threads_per_block) { + return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "num_heads should be no larger than ", max_threads_per_block); + } + + return Status::OK(); +} + +} // namespace cross_attention_helper +} // namespace contrib +} // namespace onnxruntime diff --git a/onnxruntime/contrib_ops/cpu/quantization/attention_quant.cc b/onnxruntime/contrib_ops/cpu/quantization/attention_quant.cc index f7beaa8560574..64c17b7767e4f 100644 --- a/onnxruntime/contrib_ops/cpu/quantization/attention_quant.cc +++ b/onnxruntime/contrib_ops/cpu/quantization/attention_quant.cc @@ -53,7 +53,7 @@ ONNX_OPERATOR_TYPED_KERNEL_EX( QAttention); template -QAttention::QAttention(const OpKernelInfo& info) : OpKernel(info), AttentionCPUBase(info, true, true) { +QAttention::QAttention(const OpKernelInfo& info) : OpKernel(info), AttentionCPUBase(info, true) { } template @@ -156,13 +156,11 @@ Status QAttention::Compute(OpKernelContext* context) const { const TensorShape& weights_shape = (packed_weights_ ? weight_shape_ : weights->Shape()); ORT_RETURN_IF_ERROR(AttentionBase::CheckInputs(input->Shape(), - &weights_shape, + weights_shape, bias->Shape(), mask_index, past_tensor, nullptr, // extra_add_qk - nullptr, // key - nullptr, // value nullptr // parameters )); diff --git a/onnxruntime/contrib_ops/cuda/bert/attention.cc b/onnxruntime/contrib_ops/cuda/bert/attention.cc index d60d7be9fc3ca..bba941f1e40e5 100644 --- a/onnxruntime/contrib_ops/cuda/bert/attention.cc +++ b/onnxruntime/contrib_ops/cuda/bert/attention.cc @@ -16,26 +16,28 @@ namespace onnxruntime { namespace contrib { namespace cuda { -#define PastSequenceLength 8 -#define REGISTER_KERNEL_TYPED(T) \ - ONNX_OPERATOR_TYPED_KERNEL_EX( \ - Attention, \ - kMSDomain, \ - 1, \ - T, \ - kCudaExecutionProvider, \ - (*KernelDefBuilder::Create()) \ - .MayInplace(4, 1) \ - .TypeConstraint("T", DataTypeImpl::GetTensorType()) \ - .InputMemoryType(OrtMemTypeCPUInput, PastSequenceLength)\ - , \ +constexpr int kPastSequenceLengthInputIndex = 6; +constexpr int kPastInputIndex = 4; +constexpr int kPresentOutputIndex = 1; + +#define REGISTER_KERNEL_TYPED(T) \ + ONNX_OPERATOR_TYPED_KERNEL_EX( \ + Attention, \ + kMSDomain, \ + 1, \ + T, \ + kCudaExecutionProvider, \ + (*KernelDefBuilder::Create()) \ + .MayInplace(kPastInputIndex, kPresentOutputIndex) \ + .TypeConstraint("T", DataTypeImpl::GetTensorType()) \ + .InputMemoryType(OrtMemTypeCPUInput, kPastSequenceLengthInputIndex), \ Attention); REGISTER_KERNEL_TYPED(float) REGISTER_KERNEL_TYPED(MLFloat16) template -Attention::Attention(const OpKernelInfo& info) : CudaKernel(info), AttentionBase(info, false, false) { +Attention::Attention(const OpKernelInfo& info) : CudaKernel(info), AttentionBase(info, false) { disable_fused_runner_ = sizeof(T) != 2 || ParseEnvironmentVariableWithDefault(attention::kDisableFusedAttention, false); @@ -49,22 +51,18 @@ Status Attention::ComputeInternal(OpKernelContext* context) const { const Tensor* weights = context->Input(1); const Tensor* bias = context->Input(2); const Tensor* mask_index = context->Input(3); - const Tensor* past = context->Input(4); + const Tensor* past = context->Input(kPastInputIndex); const Tensor* extra_add_qk = context->Input(5); - const Tensor* key = context->Input(6); - const Tensor* value = context->Input(7); - const Tensor* past_seq_len = context->Input(8); + const Tensor* past_seq_len = context->Input(kPastSequenceLengthInputIndex); auto& device_prop = GetDeviceProp(); AttentionParameters parameters; ORT_RETURN_IF_ERROR(CheckInputs(input->Shape(), - nullptr == weights ? nullptr : &(weights->Shape()), + weights->Shape(), bias->Shape(), mask_index, past, extra_add_qk, - key, - value, ¶meters, device_prop.maxThreadsPerBlock, past_seq_len)); @@ -79,25 +77,25 @@ Status Attention::ComputeInternal(OpKernelContext* context) const { Tensor* output = context->Output(0, output_shape); std::vector present_dims{ - 2, parameters.batch_size, parameters.num_heads, - past_present_share_buffer_ ? parameters.max_sequence_length : parameters.total_sequence_length, - parameters.head_size}; + 2, parameters.batch_size, parameters.num_heads, + past_present_share_buffer_ ? parameters.max_sequence_length : parameters.total_sequence_length, + parameters.head_size}; TensorShape present_shape(present_dims); - Tensor* present = context->Output(1, present_shape); + Tensor* present = context->Output(kPresentOutputIndex, present_shape); MHARunner* fused_runner = nullptr; #ifndef ENABLE_TRAINING // Only enable fused kernel on non-training builds // Check whether we can use fused kernel int sm = device_prop.major * 10 + device_prop.minor; - bool is_1d_mask = nullptr != mask_index && mask_index->Shape().NumDimensions() == 1; + bool is_mask_1d_seq_len = parameters.mask_type == AttentionMaskType::MASK_1D_KEY_SEQ_LEN; if (is_unidirectional_) { // GPT // Fused kernels requires left side padding (The mask shall be sequence lengths or no mask) // Fused kernels don't support different sequence lengths of q and kv, so only apply to the first token // where past state is empty. bool use_causal_fused_runner = !disable_fused_runner_ && - (nullptr == mask_index || is_1d_mask) && + (nullptr == mask_index || is_mask_1d_seq_len) && nullptr == extra_add_qk && parameters.past_sequence_length == 0 && parameters.hidden_size == parameters.v_hidden_size && @@ -115,7 +113,7 @@ Status Attention::ComputeInternal(OpKernelContext* context) const { } } else { // BERT bool use_fused_runner = !disable_fused_runner_ && - (nullptr == mask_index || is_1d_mask) && + (nullptr == mask_index || is_mask_1d_seq_len) && nullptr == past && nullptr == present && nullptr == extra_add_qk && @@ -145,23 +143,21 @@ Status Attention::ComputeInternal(OpKernelContext* context) const { typedef typename ToCudaType::MappedType CudaT; IAllocatorUniquePtr gemm_buffer; - if (weights != nullptr) { - int m = batch_size * sequence_length; - int n = (parameters.hidden_size + parameters.hidden_size + parameters.v_hidden_size); - int k = parameters.input_hidden_size; - gemm_buffer = GetScratchBuffer(static_cast(m) * n, context->GetComputeStream()); - - CudaT one = ToCudaType::FromFloat(1.0f); - CudaT zero = ToCudaType::FromFloat(0.0f); - - // Gemm, note that CUDA assumes col-major, so result(N, M) = 1 * weights x input + 1 x bias - // The bias part is not included here since we fuse bias, transpose and output 3 matrice into one cuda kernel. - CUBLAS_RETURN_IF_ERROR(cublasGemmHelper( - cublas, CUBLAS_OP_N, CUBLAS_OP_N, n, m, k, &one, - reinterpret_cast(weights->Data()), n, - reinterpret_cast(input->Data()), k, - &zero, reinterpret_cast(gemm_buffer.get()), n, device_prop)); - } + int m = batch_size * sequence_length; + int n = (parameters.hidden_size + parameters.hidden_size + parameters.v_hidden_size); + int k = parameters.input_hidden_size; + gemm_buffer = GetScratchBuffer(static_cast(m) * n, context->GetComputeStream()); + + CudaT one = ToCudaType::FromFloat(1.0f); + CudaT zero = ToCudaType::FromFloat(0.0f); + + // Gemm, note that CUDA assumes col-major, so result(N, M) = 1 * weights x input + 1 x bias + // The bias part is not included here since we fuse bias, transpose and output 3 matrice into one cuda kernel. + CUBLAS_RETURN_IF_ERROR(cublasGemmHelper( + cublas, CUBLAS_OP_N, CUBLAS_OP_N, n, m, k, &one, + reinterpret_cast(weights->Data()), n, + reinterpret_cast(input->Data()), k, + &zero, reinterpret_cast(gemm_buffer.get()), n, device_prop)); constexpr size_t element_size = sizeof(T); size_t workSpaceSize = GetAttentionWorkspaceSize(element_size, @@ -177,11 +173,11 @@ Status Attention::ComputeInternal(OpKernelContext* context) const { typedef typename ToCudaType::MappedType CudaT; AttentionData data; - data.gemm_buffer = (nullptr == weights) ? nullptr : reinterpret_cast(gemm_buffer.get()); + data.gemm_buffer = reinterpret_cast(gemm_buffer.get()); data.bias = reinterpret_cast(bias->Data()); - data.query = (nullptr != weights) ? nullptr : reinterpret_cast(input->Data()); - data.key = (nullptr == key) ? nullptr : reinterpret_cast(key->Data()); - data.value = (nullptr == value) ? nullptr : reinterpret_cast(value->Data()); + data.query = nullptr; + data.key = nullptr; + data.value = nullptr; data.mask_index = (nullptr == mask_index) ? nullptr : mask_index->Data(); data.mask_index_dims = (nullptr == mask_index) ? gsl::span() : mask_index->Shape().GetDims(); data.past = (nullptr == past) ? nullptr : reinterpret_cast(past->Data()); @@ -191,7 +187,7 @@ Status Attention::ComputeInternal(OpKernelContext* context) const { data.present = (nullptr == present) ? nullptr : reinterpret_cast(present->MutableData()); return QkvToContext( - device_prop, cublas, Stream(context), parameters, data, reinterpret_cast(fused_runner), past_present_share_buffer_); + device_prop, cublas, Stream(context), parameters, data, reinterpret_cast(fused_runner), past_present_share_buffer_); } } // namespace cuda diff --git a/onnxruntime/contrib_ops/cuda/bert/cross_attention.cc b/onnxruntime/contrib_ops/cuda/bert/cross_attention.cc new file mode 100644 index 0000000000000..8fcb041f9f0b6 --- /dev/null +++ b/onnxruntime/contrib_ops/cuda/bert/cross_attention.cc @@ -0,0 +1,136 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#include "core/providers/cuda/cuda_common.h" +#include "core/platform/env_var_utils.h" +#include "contrib_ops/cuda/bert/attention_impl.h" +#include "contrib_ops/cuda/bert/cross_attention.h" +#include "contrib_ops/cpu/bert/cross_attention_helper.h" + +using namespace onnxruntime::cuda; +using namespace ::onnxruntime::common; +using namespace ONNX_NAMESPACE; + +namespace onnxruntime { +namespace contrib { +namespace cuda { + +#define REGISTER_KERNEL_TYPED(T) \ + ONNX_OPERATOR_TYPED_KERNEL_EX( \ + CrossAttention, \ + kMSDomain, \ + 1, \ + T, \ + kCudaExecutionProvider, \ + (*KernelDefBuilder::Create()) \ + .TypeConstraint("T", DataTypeImpl::GetTensorType()), \ + CrossAttention); + +REGISTER_KERNEL_TYPED(float) +REGISTER_KERNEL_TYPED(MLFloat16) + +template +CrossAttention::CrossAttention(const OpKernelInfo& info) : CudaKernel(info) { + int64_t num_heads = 0; + ORT_ENFORCE(info.GetAttr("num_heads", &num_heads).IsOK() && num_heads > 0); + num_heads_ = static_cast(num_heads); + + disable_fused_runner_ = sizeof(T) != 2 || + ParseEnvironmentVariableWithDefault(attention::kDisableFusedAttention, false); + + enable_flash_attention_ = sizeof(T) == 2 && + ParseEnvironmentVariableWithDefault(attention::kEnableFlashAttention, true); +} + +template +Status CrossAttention::ComputeInternal(OpKernelContext* context) const { + const Tensor* query = context->Input(0); + const Tensor* key = context->Input(1); + const Tensor* value = context->Input(2); + const Tensor* bias = context->Input(3); + const Tensor* key_padding_mask = context->Input(4); + + auto& device_prop = GetDeviceProp(); + AttentionParameters parameters; + ORT_RETURN_IF_ERROR(cross_attention_helper::CheckInputs(query, + key, + value, + bias, + key_padding_mask, + ¶meters, + num_heads_, + device_prop.maxThreadsPerBlock)); + + int sequence_length = parameters.sequence_length; + + TensorShapeVector output_shape(3); + output_shape[0] = static_cast(parameters.batch_size); + output_shape[1] = static_cast(sequence_length); + output_shape[2] = static_cast(parameters.v_hidden_size); + Tensor* output = context->Output(0, output_shape); + + MHARunner* fused_runner = nullptr; +#ifndef ENABLE_TRAINING // Only enable fused kernel on non-training builds + // Check whether we can use fused kernel + int sm = device_prop.major * 10 + device_prop.minor; + + bool is_mask_1d_seq_len = parameters.mask_type == AttentionMaskType::MASK_1D_KEY_SEQ_LEN; + + bool use_fused_runner = !disable_fused_runner_ && + (nullptr == key_padding_mask || is_mask_1d_seq_len) && + parameters.hidden_size == parameters.v_hidden_size && + parameters.sequence_length == parameters.kv_sequence_length && + FusedMHARunnerFP16v2::is_supported(sm, parameters.head_size, sequence_length, + enable_flash_attention_, false); + + if (use_fused_runner) { + // Here we assume that num_heads and head_size does not change for an CrossAttention node. + if (nullptr == fused_fp16_runner_.get()) { + constexpr bool is_unidirectional = false; + fused_fp16_runner_.reset(new FusedMHARunnerFP16v2( + num_heads_, parameters.head_size, sm, is_unidirectional, enable_flash_attention_)); + } + + // In case some kernel not loaded due to shared memory limit, we need to double check here. + const int S = fused_fp16_runner_->getSFromMaxSeqLen(sequence_length); + if (fused_fp16_runner_->isValid(S)) { + fused_runner = fused_fp16_runner_.get(); + } + } +#endif + + constexpr size_t element_size = sizeof(T); + size_t workSpaceSize = GetAttentionWorkspaceSize(element_size, + parameters.batch_size, + parameters.num_heads, + parameters.head_size, + parameters.v_head_size, + parameters.sequence_length, + parameters.kv_sequence_length, + parameters.total_sequence_length, + fused_runner); + auto work_space = GetScratchBuffer(workSpaceSize, context->GetComputeStream()); + + typedef typename ToCudaType::MappedType CudaT; + AttentionData data; + data.gemm_buffer = nullptr; + data.bias = reinterpret_cast(bias->Data()); + data.query = reinterpret_cast(query->Data()); + data.key = reinterpret_cast(key->Data()); + data.value = reinterpret_cast(value->Data()); + data.mask_index = (nullptr == key_padding_mask) ? nullptr : key_padding_mask->Data(); + data.mask_index_dims = (nullptr == key_padding_mask) ? gsl::span() : key_padding_mask->Shape().GetDims(); + data.past = nullptr; + data.extra_add_qk = nullptr; + data.workspace = reinterpret_cast(work_space.get()); + data.output = reinterpret_cast(output->MutableData()); + data.present = nullptr; + + cublasHandle_t cublas = GetCublasHandle(context); + return QkvToContext( + device_prop, cublas, Stream(context), parameters, data, reinterpret_cast(fused_runner), false); +} + +} // namespace cuda +} // namespace contrib +} // namespace onnxruntime diff --git a/onnxruntime/contrib_ops/cuda/bert/cross_attention.h b/onnxruntime/contrib_ops/cuda/bert/cross_attention.h new file mode 100644 index 0000000000000..53019f03e61f1 --- /dev/null +++ b/onnxruntime/contrib_ops/cuda/bert/cross_attention.h @@ -0,0 +1,31 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#pragma once + +#include +#include "core/providers/cuda/cuda_kernel.h" +#include "contrib_ops/cuda/bert/tensorrt_fused_multihead_attention/mha_runner.h" + +namespace onnxruntime { +namespace contrib { +namespace cuda { + +using namespace onnxruntime::cuda; + +template +class CrossAttention final : public CudaKernel { + public: + CrossAttention(const OpKernelInfo& info); + Status ComputeInternal(OpKernelContext* context) const override; + + protected: + int num_heads_; // number of attention heads + bool disable_fused_runner_; + bool enable_flash_attention_; + mutable std::unique_ptr fused_fp16_runner_; +}; + +} // namespace cuda +} // namespace contrib +} // namespace onnxruntime diff --git a/onnxruntime/contrib_ops/cuda/cuda_contrib_kernels.cc b/onnxruntime/contrib_ops/cuda/cuda_contrib_kernels.cc index aea82ee0889af..97995dc178e7b 100644 --- a/onnxruntime/contrib_ops/cuda/cuda_contrib_kernels.cc +++ b/onnxruntime/contrib_ops/cuda/cuda_contrib_kernels.cc @@ -60,6 +60,8 @@ class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1 class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kOnnxDomain, 1, float, Crop); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kOnnxDomain, 1, double, Crop); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kOnnxDomain, 1, MLFloat16, Crop); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1, float, CrossAttention); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1, MLFloat16, CrossAttention); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1, float, DecoderAttention); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1, MLFloat16, DecoderAttention); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kOnnxDomain, 1, int32_t, DynamicSlice); @@ -177,6 +179,8 @@ Status RegisterCudaContribKernels(KernelRegistry& kernel_registry) { BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, @@ -192,7 +196,7 @@ Status RegisterCudaContribKernels(KernelRegistry& kernel_registry) { BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, - BuildKernelCreateInfo, + BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, diff --git a/onnxruntime/contrib_ops/cuda/quantization/attention_quantization.cc b/onnxruntime/contrib_ops/cuda/quantization/attention_quantization.cc index 5757c4b388f82..8b7b6e3e1cceb 100644 --- a/onnxruntime/contrib_ops/cuda/quantization/attention_quantization.cc +++ b/onnxruntime/contrib_ops/cuda/quantization/attention_quantization.cc @@ -50,12 +50,9 @@ Status QAttention::CheckInputs(const Tensor* input, const Tensor* past_tensor, void* parameters) const { auto& device_prop = GetDeviceProp(); - auto& weights_shape = weights->Shape(); - ORT_RETURN_IF_ERROR(AttentionBase::CheckInputs(input->Shape(), &weights_shape, bias->Shape(), + ORT_RETURN_IF_ERROR(AttentionBase::CheckInputs(input->Shape(), weights->Shape(), bias->Shape(), mask_index, past_tensor, nullptr, // extra_add_qk - nullptr, // key - nullptr, // value parameters, device_prop.maxThreadsPerBlock)); diff --git a/onnxruntime/contrib_ops/cuda/quantization/attention_quantization.h b/onnxruntime/contrib_ops/cuda/quantization/attention_quantization.h index 722db2b302bd5..2c602481903fd 100644 --- a/onnxruntime/contrib_ops/cuda/quantization/attention_quantization.h +++ b/onnxruntime/contrib_ops/cuda/quantization/attention_quantization.h @@ -22,7 +22,7 @@ class QAttention final : public CudaKernel, public AttentionBase { public: QAttention(const OpKernelInfo& info) : CudaKernel(info), - AttentionBase(info, true, true) { + AttentionBase(info, true) { } Status ComputeInternal(OpKernelContext* context) const override; diff --git a/onnxruntime/contrib_ops/cuda/quantization/qordered_ops/qordered_attention.cc b/onnxruntime/contrib_ops/cuda/quantization/qordered_ops/qordered_attention.cc index f636e0ec3d137..204c786cc2c5d 100644 --- a/onnxruntime/contrib_ops/cuda/quantization/qordered_ops/qordered_attention.cc +++ b/onnxruntime/contrib_ops/cuda/quantization/qordered_ops/qordered_attention.cc @@ -157,7 +157,7 @@ inline void debug_print([[maybe_unused]] const T* arr, #endif -QOrderedAttention::QOrderedAttention(const OpKernelInfo& info) : CudaKernel(info), AttentionBase(info, true, true) { +QOrderedAttention::QOrderedAttention(const OpKernelInfo& info) : CudaKernel(info), AttentionBase(info, true) { #if defined(CUDA_VERSION) && CUDA_VERSION >= 11040 input_hidden_size_ = 0; int cuda_runtime_version = 0; @@ -209,12 +209,10 @@ Status QOrderedAttention::ComputeInternal(OpKernelContext* context) const { const Tensor* mask_index = context->Input(InputIds::Mask_Index); auto& device_prop = GetDeviceProp(); - ORT_RETURN_IF_ERROR(CheckInputs(input->Shape(), &merged_weights_shape, merged_bias_shape, + ORT_RETURN_IF_ERROR(CheckInputs(input->Shape(), merged_weights_shape, merged_bias_shape, mask_index, nullptr, // past nullptr, // extra_add_qk - nullptr, // key - nullptr, // value nullptr, // parameters device_prop.maxThreadsPerBlock)); diff --git a/onnxruntime/contrib_ops/rocm/bert/attention.cc b/onnxruntime/contrib_ops/rocm/bert/attention.cc index 2236b16ccdd77..db08029548d80 100644 --- a/onnxruntime/contrib_ops/rocm/bert/attention.cc +++ b/onnxruntime/contrib_ops/rocm/bert/attention.cc @@ -29,7 +29,7 @@ REGISTER_KERNEL_TYPED(float) REGISTER_KERNEL_TYPED(MLFloat16) template -Attention::Attention(const OpKernelInfo& info) : RocmKernel(info), AttentionBase(info, true, true) {} +Attention::Attention(const OpKernelInfo& info) : RocmKernel(info), AttentionBase(info, true) {} template Status Attention::ComputeInternal(OpKernelContext* context) const { @@ -40,18 +40,13 @@ Status Attention::ComputeInternal(OpKernelContext* context) const { const Tensor* past = context->Input(4); const Tensor* extra_add_qk = context->Input(5); - const Tensor* key = context->Input(6); - const Tensor* value = context->Input(7); - auto& device_prop = GetDeviceProp(); ORT_RETURN_IF_ERROR(CheckInputs(input->Shape(), - weights == nullptr ? nullptr : &(weights->Shape()), + weights->Shape(), bias->Shape(), mask_index, past, extra_add_qk, - key, - value, nullptr, device_prop.maxThreadsPerBlock)); diff --git a/onnxruntime/core/graph/contrib_ops/bert_defs.cc b/onnxruntime/core/graph/contrib_ops/bert_defs.cc index af08a6f7e7db5..1fa9142aafad3 100644 --- a/onnxruntime/core/graph/contrib_ops/bert_defs.cc +++ b/onnxruntime/core/graph/contrib_ops/bert_defs.cc @@ -125,6 +125,37 @@ void RestorePaddingTypeAndShapeInference(ONNX_NAMESPACE::InferenceContext& ctx) } } +void CrossAttentionTypeAndShapeInference(ONNX_NAMESPACE::InferenceContext& ctx) { + // Input 0 (query) has shape (batch_size, sequence_length, hidden_size) + // Input 1 (key) has shape (batch_size, kv_sequence_length, hidden_size) + // Input 2 (value) has shape (batch_size, kv_sequence_length, v_hidden_size) + // Output 0 has shape (batch_size, sequence_length, v_hidden_size) + + // Type inference + ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); + + // Shape inference + if (hasInputShape(ctx, 0) && hasInputShape(ctx, 2)) { + auto& query_shape = getInputShape(ctx, 0); + auto& query_dims = query_shape.dim(); + if (query_dims.size() != 3) { + fail_shape_inference("Inputs 0 (query) shall be 3 dimensions"); + } + + auto& value_shape = getInputShape(ctx, 2); + auto& value_dims = value_shape.dim(); + if (value_dims.size() != 3) { + fail_shape_inference("Inputs 2 (value) shall be 3 dimensions"); + } + + ONNX_NAMESPACE::TensorShapeProto output_shape; + *output_shape.add_dim() = query_dims[0]; + *output_shape.add_dim() = query_dims[1]; + *output_shape.add_dim() = value_dims[2]; + updateOutputShape(ctx, 0, output_shape); + } +} + constexpr const char* Attention_ver1_doc = R"DOC( Multi-Head Attention that can be either unidirectional (like GPT-2) or bidirectional (like BERT). @@ -141,10 +172,6 @@ shape (2 * batch_size), where the values are the exclusive end positions followe When unidirectional is 1, each token only attends to previous tokens. Both past and present state are optional. They shall be used together, and not allowed to use only one of them. - -When weights is not provided, key and value are required. In this situation, MatMul for input projection is excluded, -and input is the query after projection. The bias is included for performance consideration. - The qkv_hidden_sizes is required only when K and V have different hidden sizes. When there is past state, hidden dimension for Q, K and V shall be the same. @@ -174,15 +201,12 @@ ONNX_MS_OPERATOR_SET_SCHEMA( static_cast(0)) .Input(0, "input", - "Input tensor with shape (batch_size, sequence_length, input_hidden_size) when weights is available, " - "or query tensor with shape (batch_size, sequence_length, hidden_size) when weights is not available.", - "T", - OpSchema::Optional) + "Input tensor with shape (batch_size, sequence_length, input_hidden_size)", + "T") .Input(1, "weights", "Merged Q/K/V weights with shape (input_hidden_size, hidden_size + hidden_size + v_hidden_size)", - "T", - OpSchema::Optional) + "T") .Input(2, "bias", "Bias tensor with shape (hidden_size + hidden_size + v_hidden_size) for input projection", @@ -191,13 +215,14 @@ ONNX_MS_OPERATOR_SET_SCHEMA( "mask_index", "Attention mask with shape (batch_size, 1, max_sequence_length, max_sequence_length), " "(batch_size, total_sequence_length) or (batch_size, sequence_length, total_sequence_length), " - "or index with shape (batch_size) or (2 * batch_size).", + "or index with shape (batch_size) or (2 * batch_size)", "M", OpSchema::Optional) .Input(4, "past", "past state for key and value with shape (2, batch_size, num_heads, past_sequence_length, head_size)" - "When past_present_share_buffer is set, its shape is (2, batch_size, num_heads, max_sequence_length, head_size)", + "When past_present_share_buffer is set, " + "its shape is (2, batch_size, num_heads, max_sequence_length, head_size)", "T", OpSchema::Optional) .Input(5, @@ -206,21 +231,8 @@ ONNX_MS_OPERATOR_SET_SCHEMA( "T", OpSchema::Optional) .Input(6, - "key", - "Input for key with shape (batch_size, kv_sequence_length, hidden_size). " - "Required when weights is not available.", - "T", - OpSchema::Optional) - .Input(7, - "value", - "Input for key with shape (batch_size, kv_sequence_length, v_hidden_size). " - "Required when weights is not available.", - "T", - OpSchema::Optional) - .Input(8, "past_sequence_length", - "When past_present_share_buffer, specify past_sequence_length for effective past sequence lenght (could be 0)." - "Needed when past_present_share_buffer is not zero.", + "When past_present_share_buffer is used, it is required to specify past_sequence_length (could be 0).", "M", OpSchema::Optional) .Output(0, @@ -229,10 +241,10 @@ ONNX_MS_OPERATOR_SET_SCHEMA( "T") .Output(1, "present", - "past state for key and value with shape (2, batch_size, num_heads, total_sequence_length, head_size)" - "If past_present_share_buffer, it should be exactly same as past tensor, of shape " - "(2, batch_size, num_heads, max_sequence_length, head_size)," - "while effective_seq_length = (past_sequence_length + kv_sequence_length)", + "past state for key and value with shape (2, batch_size, num_heads, total_sequence_length, head_size). " + "If past_present_share_buffer is set, " + "its shape is (2, batch_size, num_heads, max_sequence_length, head_size), " + "while effective_seq_length = (past_sequence_length + kv_sequence_length).", "T", OpSchema::Optional) .TypeConstraint("T", @@ -246,6 +258,50 @@ ONNX_MS_OPERATOR_SET_SCHEMA( AttentionTypeAndShapeInference(ctx, past_input_index); })); +constexpr const char* CrossAttention_ver1_doc = R"DOC( +Multi-Head Cross Attention. Bias from input projection is included. + +The key padding mask is optional. When its shape is (batch_size, kv_sequence_length), value 0 +means padding or 1 otherwise. When key has right-side padding, its shape could be (batch_size): it is actual length of +each key sequence excluding paddings. +)DOC"; + +ONNX_MS_OPERATOR_SET_SCHEMA( + CrossAttention, 1, + OpSchema() + .SetDoc(CrossAttention_ver1_doc) + .Attr("num_heads", "Number of attention heads", AttributeProto::INT) + .Input(0, + "query", + "Query with shape (batch_size, sequence_length, hidden_size) when weights is not available.", + "T") + .Input(1, + "key", + "Key with shape (batch_size, kv_sequence_length, hidden_size)", + "T") + .Input(2, + "value", + "Value with shape (batch_size, kv_sequence_length, v_hidden_size)", + "T") + .Input(3, + "bias", + "Bias tensor with shape (hidden_size + hidden_size + v_hidden_size) from input projection", + "T") + .Input(4, + "key_padding_mask", + "Key padding mask with shape (batch_size) or (batch_size, kv_sequence_length)", + "M", + OpSchema::Optional) + .Output(0, + "output", + "3D output tensor with shape (batch_size, sequence_length, v_hidden_size)", + "T") + .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output to float tensors.") + .TypeConstraint("M", {"tensor(int32)"}, "Constrain mask to integer types") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + CrossAttentionTypeAndShapeInference(ctx); + })); + constexpr const char* Longformer_Attention_doc = R"DOC( Longformer Self Attention with a local context and a global context. Tokens attend locally: Each token attends to its W previous tokens and W succeeding tokens with W being the window length. A selected few tokens @@ -257,54 +313,56 @@ Mask value < 0 (like -10000.0) means the token is masked, 0 otherwise. Global attention flags have value 1 for the tokens attend globally and 0 otherwise. )DOC"; -ONNX_MS_OPERATOR_SET_SCHEMA(LongformerAttention, 1, - OpSchema() - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(Longformer_Attention_doc) - .Attr("num_heads", "Number of attention heads", AttributeProto::INT) - .Attr("window", "One sided attention windows length W, or half of total window length", AttributeProto::INT) - .Input(0, "input", "3D input tensor with shape (batch_size, sequence_length, hidden_size), hidden_size = num_heads * head_size", "T") - .Input(1, "weight", "2D input tensor with shape (hidden_size, 3 * hidden_size)", "T") - .Input(2, "bias", "1D input tensor with shape (3 * hidden_size)", "T") - .Input(3, "mask", "Attention mask with shape (batch_size, sequence_length)", "T") - .Input(4, "global_weight", "2D input tensor with shape (hidden_size, 3 * hidden_size)", "T") - .Input(5, "global_bias", "1D input tensor with shape (3 * hidden_size)", "T") - .Input(6, "global", "Global attention flags with shape (batch_size, sequence_length)", "G") - .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T") - .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float tensors.") - .TypeConstraint("G", {"tensor(int32)"}, "Constrain to integer types") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); +ONNX_MS_OPERATOR_SET_SCHEMA( + LongformerAttention, 1, + OpSchema() + .SetDomain(kMSDomain) + .SinceVersion(1) + .SetDoc(Longformer_Attention_doc) + .Attr("num_heads", "Number of attention heads", AttributeProto::INT) + .Attr("window", "One sided attention windows length W, or half of total window length", AttributeProto::INT) + .Input(0, "input", "3D input tensor with shape (batch_size, sequence_length, hidden_size), hidden_size = num_heads * head_size", "T") + .Input(1, "weight", "2D input tensor with shape (hidden_size, 3 * hidden_size)", "T") + .Input(2, "bias", "1D input tensor with shape (3 * hidden_size)", "T") + .Input(3, "mask", "Attention mask with shape (batch_size, sequence_length)", "T") + .Input(4, "global_weight", "2D input tensor with shape (hidden_size, 3 * hidden_size)", "T") + .Input(5, "global_bias", "1D input tensor with shape (3 * hidden_size)", "T") + .Input(6, "global", "Global attention flags with shape (batch_size, sequence_length)", "G") + .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T") + .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float tensors.") + .TypeConstraint("G", {"tensor(int32)"}, "Constrain to integer types") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); constexpr const char* Decoder_Attention_doc = R"DOC( This DecoderAttention supports self attention and cross attention, key and value cache, and key_padding_mask. The attention mask is not support at the moment. Some boolean parameters are passed by runtime input for generic purpose )DOC"; -ONNX_MS_OPERATOR_SET_SCHEMA(DecoderAttention, 1, - OpSchema() - .SetDoc(Decoder_Attention_doc) - .Attr("num_heads", "Number of attention heads", AttributeProto::INT) - .Input(0, "query", "3D input tensor with shape (sequence_length, batch_size, hidden_size), hidden_size = num_heads * head_size", "T") - .Input(1, "key", "3D input tensor with shape (total_sequence_length, batch_size, hidden_size)", "T") - .Input(2, "q_weight", "2D input tensor with shape (hidden_size, hidden_size)", "T") - .Input(3, "kv_weight", "2D input tensor with shape (hidden_size, 2 * hidden_size)", "T") - .Input(4, "bias", "1D input tensor with shape (3 * hidden_size)", "T") - .Input(5, "key_padding_mask", "2D input tensor with shape (batch_size, total_sequence_length)", "B", OpSchema::Optional) - .Input(6, "key_cache", "input tensor with shape (batch_size, num_heads, sequence_length or total_sequence_length, head_size)", "T", OpSchema::Optional) // self & cross - .Input(7, "value_cache", "input tensor with shape (batch_size, num_heads, sequence_length or total_sequence_length, head_size)", "T", OpSchema::Optional) // self & cross - .Input(8, "static_kv", "If static_kv = true, cross-attention; else self-attention", "B") - .Input(9, "use_past", "If use_past = true, use cache; else no cache", "B") - .Input(10, "has_layer_state", "If has_layer_state = true, layer_state = {} or [a,b]; else layer_state = None", "B") - .Input(11, "has_key_padding_mask", "has_key_padding_mask or not", "B") - .Output(0, "output", "3D output tensor with shape (sequence_length, batch_size, hidden_size)", "T") - .Output(1, "new_key_cache", "output tensor with shape (batch_size, num_heads, new sequence_length, head_size)", "T", OpSchema::Optional) // self & cross - .Output(2, "new_value_cache", "output tensor with shape (batch_size, num_heads, new sequence_length, head_size)", "T", OpSchema::Optional) // self & cross - .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float and float16 tensors.") - .TypeConstraint("B", {"tensor(bool)"}, "Constrain key_padding_mask to bool tensors.") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - DecoderAttentionTypeAndShapeInference(ctx); - })); +ONNX_MS_OPERATOR_SET_SCHEMA( + DecoderAttention, 1, + OpSchema() + .SetDoc(Decoder_Attention_doc) + .Attr("num_heads", "Number of attention heads", AttributeProto::INT) + .Input(0, "query", "3D input tensor with shape (sequence_length, batch_size, hidden_size), hidden_size = num_heads * head_size", "T") + .Input(1, "key", "3D input tensor with shape (total_sequence_length, batch_size, hidden_size)", "T") + .Input(2, "q_weight", "2D input tensor with shape (hidden_size, hidden_size)", "T") + .Input(3, "kv_weight", "2D input tensor with shape (hidden_size, 2 * hidden_size)", "T") + .Input(4, "bias", "1D input tensor with shape (3 * hidden_size)", "T") + .Input(5, "key_padding_mask", "2D input tensor with shape (batch_size, total_sequence_length)", "B", OpSchema::Optional) + .Input(6, "key_cache", "input tensor with shape (batch_size, num_heads, sequence_length or total_sequence_length, head_size)", "T", OpSchema::Optional) // self & cross + .Input(7, "value_cache", "input tensor with shape (batch_size, num_heads, sequence_length or total_sequence_length, head_size)", "T", OpSchema::Optional) // self & cross + .Input(8, "static_kv", "If static_kv = true, cross-attention; else self-attention", "B") + .Input(9, "use_past", "If use_past = true, use cache; else no cache", "B") + .Input(10, "has_layer_state", "If has_layer_state = true, layer_state = {} or [a,b]; else layer_state = None", "B") + .Input(11, "has_key_padding_mask", "has_key_padding_mask or not", "B") + .Output(0, "output", "3D output tensor with shape (sequence_length, batch_size, hidden_size)", "T") + .Output(1, "new_key_cache", "output tensor with shape (batch_size, num_heads, new sequence_length, head_size)", "T", OpSchema::Optional) // self & cross + .Output(2, "new_value_cache", "output tensor with shape (batch_size, num_heads, new sequence_length, head_size)", "T", OpSchema::Optional) // self & cross + .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float and float16 tensors.") + .TypeConstraint("B", {"tensor(bool)"}, "Constrain key_padding_mask to bool tensors.") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + DecoderAttentionTypeAndShapeInference(ctx); + })); constexpr const char* EmbedLayerNormalization_ver1_doc = R"DOC( EmbedLayerNormalization is the fusion of embedding layer in BERT model, with optional mask processing. @@ -313,56 +371,58 @@ and segment_emedding; the embeddings are added then applied layer normalization The last input mask is optional. If mask is provided, mask index (that is position of first 0 in mask, or number of words) will be calculated.)DOC"; -ONNX_MS_OPERATOR_SET_SCHEMA(EmbedLayerNormalization, 1, - OpSchema() - .SetDoc(EmbedLayerNormalization_ver1_doc) - .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultEmbedLayerNormEpsilon) - .Input(0, "input_ids", "2D words IDs with shape (batch_size, sequence_length)", "T1") - .Input(1, "segment_ids", "2D segment IDs with shape (batch_size, sequence_length)", "T1", OpSchema::Optional) - .Input(2, "word_embedding", "2D with shape (,hidden_size)", "T") - .Input(3, "position_embedding", "2D with shape (, hidden_size)", "T") - .Input(4, "segment_embedding", "2D with shape (, hidden_size)", "T", OpSchema::Optional) - .Input(5, "gamma", "1D gamma tensor for layer normalization with shape (hidden_size)", "T") - .Input(6, "beta", "1D beta tensor for layer normalization with shape (hidden_size)", "T") - .Input(7, "mask", "2D attention mask with shape (batch_size, sequence_length)", "T1", OpSchema::Optional) - .Input(8, "position_ids", "2D position ids with shape (batch_size, sequence_length) or (1, sequence_length)", "T1", OpSchema::Optional) - .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T") - .Output(1, "mask_index", "1D mask_index tensor with shape (batch_size)", "T1") - .Output(2, "embedding_sum", "sum of word_embedding and position_embedding without layer normalization", "T", OpSchema::Optional) - .TypeConstraint("T1", {"tensor(int32)"}, "Constrain input and output integer tensors types") - .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output float tensors types.") - .TypeAndShapeInferenceFunction(EmbedLayerNormalizationShapeInference)); +ONNX_MS_OPERATOR_SET_SCHEMA( + EmbedLayerNormalization, 1, + OpSchema() + .SetDoc(EmbedLayerNormalization_ver1_doc) + .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultEmbedLayerNormEpsilon) + .Input(0, "input_ids", "2D words IDs with shape (batch_size, sequence_length)", "T1") + .Input(1, "segment_ids", "2D segment IDs with shape (batch_size, sequence_length)", "T1", OpSchema::Optional) + .Input(2, "word_embedding", "2D with shape (,hidden_size)", "T") + .Input(3, "position_embedding", "2D with shape (, hidden_size)", "T") + .Input(4, "segment_embedding", "2D with shape (, hidden_size)", "T", OpSchema::Optional) + .Input(5, "gamma", "1D gamma tensor for layer normalization with shape (hidden_size)", "T") + .Input(6, "beta", "1D beta tensor for layer normalization with shape (hidden_size)", "T") + .Input(7, "mask", "2D attention mask with shape (batch_size, sequence_length)", "T1", OpSchema::Optional) + .Input(8, "position_ids", "2D position ids with shape (batch_size, sequence_length) or (1, sequence_length)", "T1", OpSchema::Optional) + .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T") + .Output(1, "mask_index", "1D mask_index tensor with shape (batch_size)", "T1") + .Output(2, "embedding_sum", "sum of word_embedding and position_embedding without layer normalization", "T", OpSchema::Optional) + .TypeConstraint("T1", {"tensor(int32)"}, "Constrain input and output integer tensors types") + .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output float tensors types.") + .TypeAndShapeInferenceFunction(EmbedLayerNormalizationShapeInference)); constexpr const char* FastGelu_ver1_doc = R"DOC( GELU (Gaussian Error Linear Unit) approximation: Y=0.5*X*(1+tanh(0.797885*X+0.035677*X*X*X)) with an optional input of bias that will be added to X before GELU.)DOC"; -ONNX_MS_OPERATOR_SET_SCHEMA(FastGelu, 1, - OpSchema() - .SetDoc(FastGelu_ver1_doc) - .Input(0, "X", "input tensor", "T") - .Input(1, "bias", "bias tensor", "T", OpSchema::Optional) - .Output(0, "Y", "output tensor", "T") - .TypeConstraint("T", {"tensor(float)", "tensor(float16)", "tensor(bfloat16)"}, "Constrain input and output types to float or half tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput) - .SetContextDependentFunctionBodyBuilder([](const FunctionBodyBuildContext& ctx, const OpSchema& schema, FunctionProto& functionProto) { - // fastgelu(x) = - auto* tp = ctx.getInputType(0); - if ((tp == nullptr) || (!tp->has_tensor_type())) - return false; - auto elem_type = (TensorProto_DataType)(tp->tensor_type().elem_type()); - - // Optional input 1 indicates a bias to be added to input 0. - auto hasBias = ctx.hasInput(1); - - FunctionBuilder builder(functionProto); - builder - .AddOpset("", 13) - .Const("a", ToTensor(0.5, elem_type)) - .Const("b", ToTensor(0.797885, elem_type)) - .Const("c", ToTensor(0.035677, elem_type)) - .Const("one", ToTensor(1.0, elem_type)) - .Add(hasBias ? "X_bias = Add (X, bias)" : "X_bias = Identity (X)") - .Add(R"( +ONNX_MS_OPERATOR_SET_SCHEMA( + FastGelu, 1, + OpSchema() + .SetDoc(FastGelu_ver1_doc) + .Input(0, "X", "input tensor", "T") + .Input(1, "bias", "bias tensor", "T", OpSchema::Optional) + .Output(0, "Y", "output tensor", "T") + .TypeConstraint("T", {"tensor(float)", "tensor(float16)", "tensor(bfloat16)"}, "Constrain input and output types to float or half tensors.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput) + .SetContextDependentFunctionBodyBuilder([](const FunctionBodyBuildContext& ctx, const OpSchema& schema, FunctionProto& functionProto) { + // fastgelu(x) = + auto* tp = ctx.getInputType(0); + if ((tp == nullptr) || (!tp->has_tensor_type())) + return false; + auto elem_type = (TensorProto_DataType)(tp->tensor_type().elem_type()); + + // Optional input 1 indicates a bias to be added to input 0. + auto hasBias = ctx.hasInput(1); + + FunctionBuilder builder(functionProto); + builder + .AddOpset("", 13) + .Const("a", ToTensor(0.5, elem_type)) + .Const("b", ToTensor(0.797885, elem_type)) + .Const("c", ToTensor(0.035677, elem_type)) + .Const("one", ToTensor(1.0, elem_type)) + .Add(hasBias ? "X_bias = Add (X, bias)" : "X_bias = Identity (X)") + .Add(R"( T1 = Mul (X_bias, X_bias) T2 = Mul (c, T1) T3 = Add (b, T2) @@ -373,55 +433,58 @@ ONNX_MS_OPERATOR_SET_SCHEMA(FastGelu, 1, Y = Mul (a, T7) )"); - schema.BuildFunction(functionProto); - return true; - })); - -ONNX_MS_OPERATOR_SET_SCHEMA(SkipLayerNormalization, 1, - OpSchema() - .SetDoc("Skip and Layer Normalization Fusion") - .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultSkipLayerNormEpsilon) - .Input(0, "input", "3D input tensor with shape (batch_size, sequence_length, hidden_size)", "T") - .Input(1, "skip", "3D skip tensor with shape (batch_size, sequence_length, hidden_size)", "T") - .Input(2, "gamma", "1D input tensor with shape (hidden_size)", "T") - .Input(3, "beta", "1D skip tensor with shape (hidden_size", "T", OpSchema::Optional) - .Input(4, "bias", "1D bias tensor with shape (hidden_size", "T", OpSchema::Optional) - .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T") - .Output(1, "mean", "Saved mean used during training to speed up gradient computation", "U", OpSchema::Optional) - .Output(2, "inv_std_var", "Saved inverse standard variance used during training to speed up gradient computation.", "U", OpSchema::Optional) - .Output(3, "input_skip_bias_sum", "Sum of the input and skip inputs (and bias if it exists) with shape (batch_size, sequence_length, hidden_size).", "T", OpSchema::Optional) - .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float or half tensors.") - .TypeConstraint("U", {"tensor(float)"}, "Constrain mean and inv_std_var to float tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); - -ONNX_MS_OPERATOR_SET_SCHEMA(SkipSimplifiedLayerNormalization, 1, - OpSchema() - .SetDoc("Skip and Root Mean Square Layer Normalization") - .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultSkipLayerNormEpsilon) - .Input(0, "input", "3D input tensor with shape (batch_size, sequence_length, hidden_size)", "T") - .Input(1, "skip", "3D skip tensor with shape (batch_size, sequence_length, hidden_size)", "T") - .Input(2, "gamma", "1D input tensor with shape (hidden_size)", "T") - .Input(3, "bias", "1D bias tensor with shape (hidden_size", "T", OpSchema::Optional) - .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T") - .Output(1, "mean", "Saved mean used during training to speed up gradient computation", "U", OpSchema::Optional) - .Output(2, "inv_std_var", "Saved inverse standard variance used during training to speed up gradient computation.", "U", OpSchema::Optional) - .Output(3, "input_skip_bias_sum", "Sum of the input and skip inputs (and bias if it exists) with shape (batch_size, sequence_length, hidden_size).", "T", OpSchema::Optional) - .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float or half tensors.") - .TypeConstraint("U", {"tensor(float)"}, "Constrain mean and inv_std_var to float tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); + schema.BuildFunction(functionProto); + return true; + })); + +ONNX_MS_OPERATOR_SET_SCHEMA( + SkipLayerNormalization, 1, + OpSchema() + .SetDoc("Skip and Layer Normalization Fusion") + .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultSkipLayerNormEpsilon) + .Input(0, "input", "3D input tensor with shape (batch_size, sequence_length, hidden_size)", "T") + .Input(1, "skip", "3D skip tensor with shape (batch_size, sequence_length, hidden_size)", "T") + .Input(2, "gamma", "1D input tensor with shape (hidden_size)", "T") + .Input(3, "beta", "1D skip tensor with shape (hidden_size", "T", OpSchema::Optional) + .Input(4, "bias", "1D bias tensor with shape (hidden_size", "T", OpSchema::Optional) + .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T") + .Output(1, "mean", "Saved mean used during training to speed up gradient computation", "U", OpSchema::Optional) + .Output(2, "inv_std_var", "Saved inverse standard variance used during training to speed up gradient computation.", "U", OpSchema::Optional) + .Output(3, "input_skip_bias_sum", "Sum of the input and skip inputs (and bias if it exists) with shape (batch_size, sequence_length, hidden_size).", "T", OpSchema::Optional) + .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float or half tensors.") + .TypeConstraint("U", {"tensor(float)"}, "Constrain mean and inv_std_var to float tensors.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); + +ONNX_MS_OPERATOR_SET_SCHEMA( + SkipSimplifiedLayerNormalization, 1, + OpSchema() + .SetDoc("Skip and Root Mean Square Layer Normalization") + .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultSkipLayerNormEpsilon) + .Input(0, "input", "3D input tensor with shape (batch_size, sequence_length, hidden_size)", "T") + .Input(1, "skip", "3D skip tensor with shape (batch_size, sequence_length, hidden_size)", "T") + .Input(2, "gamma", "1D input tensor with shape (hidden_size)", "T") + .Input(3, "bias", "1D bias tensor with shape (hidden_size", "T", OpSchema::Optional) + .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T") + .Output(1, "mean", "Saved mean used during training to speed up gradient computation", "U", OpSchema::Optional) + .Output(2, "inv_std_var", "Saved inverse standard variance used during training to speed up gradient computation.", "U", OpSchema::Optional) + .Output(3, "input_skip_bias_sum", "Sum of the input and skip inputs (and bias if it exists) with shape (batch_size, sequence_length, hidden_size).", "T", OpSchema::Optional) + .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float or half tensors.") + .TypeConstraint("U", {"tensor(float)"}, "Constrain mean and inv_std_var to float tensors.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); constexpr const char* NGramRepeatBlock_ver1_doc = R"DOC( Enforce no repetition of n-grams. Scores are set to `-inf` for tokens that form a repeated n-gram if added to the back of the input_ids. )DOC"; -ONNX_MS_OPERATOR_SET_SCHEMA(NGramRepeatBlock, 1, - OpSchema().SetDoc(NGramRepeatBlock_ver1_doc).Attr("ngram_size", "The NGram size.", AttributeProto::INT).Input(0, "input_ids", "2D input tensor with shape (batch_size, sequence_length)", "Tid").Input(1, "scores", "2D input tensor with shape (batch_size, vocab_size)", "T").Output(0, "scores_out", "2D output tensor with shape (batch_size, vocab_size)", "T").TypeConstraint("Tid", {"tensor(int64)"}, "Constrain indices to integer types").TypeConstraint("T", {"tensor(float)"}, "Constrain scores input and output types to float tensors.").TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - propagateElemTypeFromInputToOutput(ctx, 1, 0); - if (!hasInputShape(ctx, 1)) { - return; - } - propagateShapeFromInputToOutput(ctx, 1, 0); - })); +ONNX_MS_OPERATOR_SET_SCHEMA( + NGramRepeatBlock, 1, + OpSchema().SetDoc(NGramRepeatBlock_ver1_doc).Attr("ngram_size", "The NGram size.", AttributeProto::INT).Input(0, "input_ids", "2D input tensor with shape (batch_size, sequence_length)", "Tid").Input(1, "scores", "2D input tensor with shape (batch_size, vocab_size)", "T").Output(0, "scores_out", "2D output tensor with shape (batch_size, vocab_size)", "T").TypeConstraint("Tid", {"tensor(int64)"}, "Constrain indices to integer types").TypeConstraint("T", {"tensor(float)"}, "Constrain scores input and output types to float tensors.").TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + propagateElemTypeFromInputToOutput(ctx, 1, 0); + if (!hasInputShape(ctx, 1)) { + return; + } + propagateShapeFromInputToOutput(ctx, 1, 0); + })); constexpr const char* BifurcationDetector_ver1_doc = R"DOC( Component for aggressive decoding. Find the bifurcation index of predicted tokens, between source tokens, @@ -436,45 +499,47 @@ Return the index of the start of the n-gram in source tokens. No matching if found if src tokens contain multiple or zero matching n-grams. Return -1. )DOC"; -ONNX_MS_OPERATOR_SET_SCHEMA(BifurcationDetector, 1, - OpSchema() - .SetDoc(BifurcationDetector_ver1_doc) - .Attr("min_ngram_size", "The minimum NGram size for suffix matching.", AttributeProto::INT, static_cast(1)) - .Attr("max_ngram_size", "The maximum NGram size for suffix matching.", AttributeProto::INT, static_cast(3)) - .Input(0, "src_tokens", "Encoder input ids.", "T") - .Input(1, "cur_tokens", "Decoder input ids.", "T") - .Input(2, "prev_suffix_match_idx", "Previous suffix match index", "T") - .Input(3, "pred_tokens", "Predicted token ids from aggressive decoding", "T", OpSchema::Optional) - .Output(0, "tokens", "Decoder input ids after merging predicted tokens", "T") - .Output(1, "suffix_match_idx", "new suffix match index", "T") - .TypeConstraint("T", {"tensor(int64)"}, "Constrain to integer types.") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - propagateElemTypeFromInputToOutput(ctx, 1, 0); - propagateElemTypeFromInputToOutput(ctx, 2, 1); - if (hasInputShape(ctx, 2)) { - propagateShapeFromInputToOutput(ctx, 2, 1); - } - // output tokens lengths is dynamic as it depends on the bifurcation index of predicted tokens and source tokens, - // and current tokens length. - // tokens_length = cur_tokens_length + bifurcation_index + 1. - })); +ONNX_MS_OPERATOR_SET_SCHEMA( + BifurcationDetector, 1, + OpSchema() + .SetDoc(BifurcationDetector_ver1_doc) + .Attr("min_ngram_size", "The minimum NGram size for suffix matching.", AttributeProto::INT, static_cast(1)) + .Attr("max_ngram_size", "The maximum NGram size for suffix matching.", AttributeProto::INT, static_cast(3)) + .Input(0, "src_tokens", "Encoder input ids.", "T") + .Input(1, "cur_tokens", "Decoder input ids.", "T") + .Input(2, "prev_suffix_match_idx", "Previous suffix match index", "T") + .Input(3, "pred_tokens", "Predicted token ids from aggressive decoding", "T", OpSchema::Optional) + .Output(0, "tokens", "Decoder input ids after merging predicted tokens", "T") + .Output(1, "suffix_match_idx", "new suffix match index", "T") + .TypeConstraint("T", {"tensor(int64)"}, "Constrain to integer types.") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + propagateElemTypeFromInputToOutput(ctx, 1, 0); + propagateElemTypeFromInputToOutput(ctx, 2, 1); + if (hasInputShape(ctx, 2)) { + propagateShapeFromInputToOutput(ctx, 2, 1); + } + // output tokens lengths is dynamic as it depends on the bifurcation index of predicted tokens and source tokens, + // and current tokens length. + // tokens_length = cur_tokens_length + bifurcation_index + 1. + })); constexpr const char* GemmFastGelu_ver1_doc = R"DOC( It's a fusion of MatMul and FastGelu.)DOC"; -ONNX_MS_OPERATOR_SET_SCHEMA(GemmFastGelu, 1, - OpSchema() - .SetDoc(GemmFastGelu_ver1_doc) - .Input(0, "X", "input tensor", "T") - .Input(1, "W", "input tensor", "T") - .Input(2, "bias", "bias tensor", "T", OpSchema::Optional) - .Output(0, "Y", "output tensor", "T") - .TypeConstraint("T", {"tensor(float)", "tensor(float16)", "tensor(bfloat16)"}, - "Constrain input and output types to float or half tensors.") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); - ONNX_NAMESPACE::matmulShapeInference(ctx, 0, 1); - })); +ONNX_MS_OPERATOR_SET_SCHEMA( + GemmFastGelu, 1, + OpSchema() + .SetDoc(GemmFastGelu_ver1_doc) + .Input(0, "X", "input tensor", "T") + .Input(1, "W", "input tensor", "T") + .Input(2, "bias", "bias tensor", "T", OpSchema::Optional) + .Output(0, "Y", "output tensor", "T") + .TypeConstraint("T", {"tensor(float)", "tensor(float16)", "tensor(bfloat16)"}, + "Constrain input and output types to float or half tensors.") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); + ONNX_NAMESPACE::matmulShapeInference(ctx, 0, 1); + })); constexpr const char* RemovePadding_ver1_doc = R"DOC( Compress transformer input by removing paddings. It assumes padding is on the right side of sequence. diff --git a/onnxruntime/core/graph/contrib_ops/ms_opset.h b/onnxruntime/core/graph/contrib_ops/ms_opset.h index 5b818f6da61f0..df30bdc6a319e 100644 --- a/onnxruntime/core/graph/contrib_ops/ms_opset.h +++ b/onnxruntime/core/graph/contrib_ops/ms_opset.h @@ -56,6 +56,7 @@ class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, ComplexMul); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, ComplexMulConj); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, ConvTransposeWithDynamicPads); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, CropAndResize); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, CrossAttention); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, DecoderAttention); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, EmbedLayerNormalization); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, ExpandDims); @@ -140,6 +141,7 @@ class OpSet_Microsoft_ver1 { fn(GetOpSchema()); fn(GetOpSchema()); fn(GetOpSchema()); + fn(GetOpSchema()); fn(GetOpSchema()); fn(GetOpSchema()); fn(GetOpSchema()); diff --git a/onnxruntime/core/graph/contrib_ops/shape_inference_functions.cc b/onnxruntime/core/graph/contrib_ops/shape_inference_functions.cc index 7588c37fa5f87..c7bc516191d24 100644 --- a/onnxruntime/core/graph/contrib_ops/shape_inference_functions.cc +++ b/onnxruntime/core/graph/contrib_ops/shape_inference_functions.cc @@ -113,16 +113,10 @@ void AttentionTypeAndShapeInference(ONNX_NAMESPACE::InferenceContext& ctx, int p // The other inputs may vary in Attention and QAttention. For example, past_input_index is 4 for Attention, // and 8 for QAttention. // - // When weights is avaiable: - // Input 0 has 3D shape (batch_size, sequence_length, input_hidden_size) - // INput 1 has 2D shape (input_hidden_size, hidden_size + hidden_size + v_hidden_size) - // Input 2 has 1D shape (hidden_size + hidden_size + v_hidden_size) - // When weights is not avaiable (supported by Attention but not in QAttention): - // Input 0 (query) has 3D shape (batch_size, sequence_length, hidden_size) - // Input 2 (bias) has 1D shape (hidden_size + hidden_size + v_hidden_size) - // Input 4 (past) has shape (2, batch_size, num_heads, past_sequence_length, head_size) - // Input 6 (value) has shape (batch_size, kv_sequence_length, v_hidden_size) - // + // Input 0 has 3D shape (batch_size, sequence_length, input_hidden_size) + // INput 1 has 2D shape (input_hidden_size, hidden_size + hidden_size + v_hidden_size) + // Input 2 has 1D shape (hidden_size + hidden_size + v_hidden_size) + // Input 4 or 8 (past) has shape (2, batch_size, num_heads, past_sequence_length, head_size) // Output 0 and 1 are output and present // Type inference @@ -178,22 +172,8 @@ void AttentionTypeAndShapeInference(ONNX_NAMESPACE::InferenceContext& ctx, int p if (past_present_share_buffer) { propagateElemTypeFromInputToOutput(ctx, past_input_index, 1); } else { - int64_t total_sequence_length = -1; - if (!hasInputShape(ctx, 1)) { // no weights - if (hasInputShape(ctx, 6)) { - auto& key_shape = getInputShape(ctx, 6); - auto& key_dims = key_shape.dim(); - if (key_dims.size() == 3 && key_dims[1].has_dim_value()) { - total_sequence_length = key_dims[1].dim_value(); // kv_sequence_length - } - } - } else { - if (input_dims[1].has_dim_value()) { - total_sequence_length = input_dims[1].dim_value(); - } - } - - if (total_sequence_length >= 0 && past_dims[3].has_dim_value()) { + if (input_dims[1].has_dim_value() && past_dims[3].has_dim_value()) { + int64_t total_sequence_length = input_dims[1].dim_value(); total_sequence_length += past_shape.dim(3).dim_value(); ONNX_NAMESPACE::TensorShapeProto present_shape; diff --git a/onnxruntime/core/providers/cpu/cpu_provider_shared.cc b/onnxruntime/core/providers/cpu/cpu_provider_shared.cc index 4013a8f156d57..6afcaa821a8f0 100644 --- a/onnxruntime/core/providers/cpu/cpu_provider_shared.cc +++ b/onnxruntime/core/providers/cpu/cpu_provider_shared.cc @@ -193,19 +193,17 @@ struct ProviderHostCPUImpl : ProviderHostCPU { Status AttentionBase__CheckInputs(const contrib::AttentionBase* p, const TensorShape& input_shape, - const TensorShape* weights_shape, + const TensorShape& weights_shape, const TensorShape& bias_shape, const Tensor*& mask_index, const Tensor* past, const Tensor* extra_add_qk, - const Tensor* key, - const Tensor* value, void* parameters, const int max_threads_per_block, const Tensor* past_seq_len) override { return p->contrib::AttentionBase::CheckInputs(input_shape, weights_shape, bias_shape, mask_index, past, extra_add_qk, - key, value, parameters, + parameters, max_threads_per_block, past_seq_len); } @@ -253,7 +251,6 @@ struct ProviderHostCPUImpl : ProviderHostCPU { Status Sampling__Compute(const contrib::transformers::Sampling* p, OpKernelContext* ctx) override { return p->contrib::transformers::Sampling::Compute(ctx); } Status Sampling__SetupSubgraphExecutionInfo(contrib::transformers::Sampling* p, const SessionState& session_state, const std::string& attribute_name, const SessionState& subgraph_session_state) override { return p->contrib::transformers::Sampling::SetupSubgraphExecutionInfo(session_state, attribute_name, subgraph_session_state); } - #ifdef ENABLE_ATEN Status ATen__Compute(const contrib::ATen* p, OpKernelContext* p_ctx) override { return p->ATen::Compute(p_ctx); } #endif diff --git a/onnxruntime/core/providers/cpu/cpu_provider_shared.h b/onnxruntime/core/providers/cpu/cpu_provider_shared.h index 7bdb101da15f1..28400e9d932ec 100644 --- a/onnxruntime/core/providers/cpu/cpu_provider_shared.h +++ b/onnxruntime/core/providers/cpu/cpu_provider_shared.h @@ -10,7 +10,7 @@ namespace transformers { class BeamSearch; class GreedySearch; class Sampling; -} +} // namespace transformers } // namespace contrib class GatherBase__Prepare; @@ -130,23 +130,21 @@ struct ProviderHostCPU { virtual Status bias_gelu_helper__CheckInputs(const OpKernelContext* context) = 0; virtual Status LongformerAttentionBase__CheckInputs(const contrib::LongformerAttentionBase* p, - const TensorShape& input_shape, - const TensorShape& weights_shape, - const TensorShape& bias_shape, - const TensorShape& mask_shape, - const TensorShape& global_weights_shape, - const TensorShape& global_bias_shape, - const TensorShape& global_shape) = 0; + const TensorShape& input_shape, + const TensorShape& weights_shape, + const TensorShape& bias_shape, + const TensorShape& mask_shape, + const TensorShape& global_weights_shape, + const TensorShape& global_bias_shape, + const TensorShape& global_shape) = 0; virtual Status AttentionBase__CheckInputs(const contrib::AttentionBase* p, const TensorShape& input_shape, - const TensorShape* weights_shape, + const TensorShape& weights_shape, const TensorShape& bias_shape, const Tensor*& mask_index, const Tensor* past, const Tensor* extra_add_qk, - const Tensor* key, - const Tensor* value, void* parameters, const int max_threads_per_block, const Tensor* past_seq_len) = 0; @@ -268,7 +266,7 @@ inline void VerifyLogitWeightAndLabelShape(const TensorShape& logit_shape, const inline void GetNDCFromLogitAndLabelShape(const TensorShape& logit_shape, const TensorShape& label_shape, int64_t& N_D, int64_t& C) { g_host_cpu.contrib__GetNDCFromLogitAndLabelShape(logit_shape, label_shape, N_D, C); } inline void GetPermutationAndShape(bool ncd_to_ndc, const TensorShape& tensor_shape, TensorShapeVector& new_shape, std::vector& permutations) { g_host_cpu.contrib__GetPermutationAndShape(ncd_to_ndc, tensor_shape, new_shape, permutations); } inline Status PrepareForTrainingCompute(const TensorShape& input_shape, int num_outputs, int64_t& axis, int& before_dims, int& after_dims_including_split_axis, int& after_dims_excluding_split, std::vector& split_sizes) { return g_host_cpu.contrib__PrepareForTrainingCompute(input_shape, num_outputs, axis, before_dims, after_dims_including_split_axis, after_dims_excluding_split, split_sizes); } -} // namespace contrib +} // namespace contrib #endif #ifdef ENABLE_TRAINING diff --git a/onnxruntime/core/providers/shared_library/provider_bridge_provider.cc b/onnxruntime/core/providers/shared_library/provider_bridge_provider.cc index 3c27719cf599f..d2f797153ed50 100644 --- a/onnxruntime/core/providers/shared_library/provider_bridge_provider.cc +++ b/onnxruntime/core/providers/shared_library/provider_bridge_provider.cc @@ -562,19 +562,16 @@ Status LongformerAttentionBase::CheckInputs(const TensorShape& input_shape, } Status AttentionBase::CheckInputs(const TensorShape& input_shape, - const TensorShape* weights_shape, + const TensorShape& weights_shape, const TensorShape& bias_shape, const Tensor*& mask_index, const Tensor* past, const Tensor* extra_add_qk, - const Tensor* key, - const Tensor* value, void* parameters, const int max_threads_per_block, const Tensor* past_seq_len) const { return g_host_cpu.AttentionBase__CheckInputs(this, input_shape, weights_shape, bias_shape, - mask_index, past, extra_add_qk, - key, value, parameters, + mask_index, past, extra_add_qk, parameters, max_threads_per_block, past_seq_len); } Tensor* AttentionBase::GetPresent(OpKernelContext* context, const Tensor* past, int batch_size, int head_size, diff --git a/onnxruntime/python/tools/symbolic_shape_infer.py b/onnxruntime/python/tools/symbolic_shape_infer.py index 210084895ff0f..dd8143913cf2d 100755 --- a/onnxruntime/python/tools/symbolic_shape_infer.py +++ b/onnxruntime/python/tools/symbolic_shape_infer.py @@ -190,6 +190,7 @@ def __init__(self, int_max, auto_merge, guess_output_rank, verbose, prefix=""): # contrib ops: "Attention": self._infer_Attention, "BiasGelu": self._infer_BiasGelu, + "CrossAttention": self._infer_CrossAttention, "EmbedLayerNormalization": self._infer_EmbedLayerNormalization, "FastGelu": self._infer_FastGelu, "Gelu": self._infer_Gelu, @@ -1993,6 +1994,22 @@ def _infer_Attention(self, node): def _infer_BiasGelu(self, node): self._propagate_shape_and_type(node) + def _infer_CrossAttention(self, node): + # Input 0 (query) has shape (batch_size, sequence_length, hidden_size) + # Input 1 (key) has shape (batch_size, kv_sequence_length, hidden_size) + # Input 2 (value) has shape (batch_size, kv_sequence_length, v_hidden_size) + # Output 0 has shape (batch_size, sequence_length, v_hidden_size) + query_shape = self._get_shape(node, 0) + value_shape = self._get_shape(node, 2) + + assert len(query_shape) == 3 and len(value_shape) == 3 + output_shape = query_shape + output_shape[2] = value_shape[2] + + output_dtype = self.known_vi_[node.input[0]].type.tensor_type.elem_type + vi = self.known_vi_[node.output[0]] + vi.CopyFrom(helper.make_tensor_value_info(node.output[0], output_dtype, output_shape)) + def _infer_FastGelu(self, node): self._propagate_shape_and_type(node) diff --git a/onnxruntime/test/contrib_ops/attention_op_test.cc b/onnxruntime/test/contrib_ops/attention_op_test.cc index 29f425dc28fd3..41a2310cdbe71 100644 --- a/onnxruntime/test/contrib_ops/attention_op_test.cc +++ b/onnxruntime/test/contrib_ops/attention_op_test.cc @@ -10,15 +10,8 @@ #include "contrib_ops/cpu/bert/attention_common.h" namespace onnxruntime { +using contrib::AttentionMaskType; namespace test { -enum MaskIndexType { - kMaskIndexEnd = 0, // [batch_size] - kMaskIndexEndAndStart, // [2 * batch_size] - kMaskRaw, // [batch_size, total_sequence_length] - kMask3D, // [batch_size, sequence_length, total_sequence_length] - kMaskDummy, // Dummy mask with shape [1, 1] or [batch_size, 1] - kMask4D // Megatron causal mask with shape [batch_size, 1, max_sequence_length, max_sequence_length] -}; template std::vector ReorderToKvCache( @@ -58,7 +51,7 @@ static void RunAttentionTest( int past_sequence_length = 0, const std::vector* past_data = nullptr, const std::vector* present_data = nullptr, - MaskIndexType mask_index_type = kMaskIndexEnd, + AttentionMaskType mask_type = AttentionMaskType::MASK_1D_KEY_SEQ_LEN, int input_hidden_size = 0, int max_sequence_length = 0, const bool disable_cpu = false, @@ -67,8 +60,6 @@ static void RunAttentionTest( std::vector qkv_sizes = {}, const std::vector& extra_add_data = {}, int kv_sequence_length = 0, - const std::vector* key_data = nullptr, - const std::vector* value_data = nullptr, bool past_present_share_buffer = false) { input_hidden_size = (input_hidden_size == 0 ? hidden_size : input_hidden_size); // By default, no pruning. kv_sequence_length = (kv_sequence_length == 0 ? sequence_length : kv_sequence_length); @@ -106,12 +97,7 @@ static void RunAttentionTest( std::vector output_dims = {batch_size, sequence_length, v_hidden_size}; if (use_float16) { tester.AddInput("input", input_dims, ToFloat16(input_data)); - - if (weights_data.empty()) { - tester.AddOptionalInputEdge(); - } else { - tester.AddInput("weight", weights_dims, ToFloat16(weights_data), is_weights_constant); - } + tester.AddInput("weight", weights_dims, ToFloat16(weights_data), is_weights_constant); if (bias_data.size()) { tester.AddInput("bias", bias_dims, ToFloat16(bias_data)); } else { @@ -120,11 +106,7 @@ static void RunAttentionTest( tester.AddOutput("output", output_dims, ToFloat16(output_data)); } else { tester.AddInput("input", input_dims, input_data); - if (weights_data.empty()) { - tester.AddOptionalInputEdge(); - } else { - tester.AddInput("weight", weights_dims, weights_data, is_weights_constant); - } + tester.AddInput("weight", weights_dims, weights_data, is_weights_constant); if (bias_data.size()) { tester.AddInput("bias", bias_dims, bias_data); } else { @@ -140,23 +122,23 @@ static void RunAttentionTest( std::vector mask_index_dims_5 = {batch_size, sequence_length, total_sequence_length}; std::vector mask_index_dims_6 = {batch_size, 1, max_sequence_length, max_sequence_length}; std::vector mask_index_dims; - switch (mask_index_type) { - case kMaskIndexEnd: + switch (mask_type) { + case AttentionMaskType::MASK_1D_KEY_SEQ_LEN: mask_index_dims = mask_index_dims_1; break; - case kMaskIndexEndAndStart: + case AttentionMaskType::MASK_1D_END_START: mask_index_dims = mask_index_dims_2; break; - case kMaskRaw: + case AttentionMaskType::MASK_2D_KEY_PADDING: mask_index_dims = mask_index_dims_3; break; - case kMaskDummy: + case AttentionMaskType::MASK_2D_DUMMY: mask_index_dims = mask_index_dims_4; break; - case kMask3D: + case AttentionMaskType::MASK_3D_ATTENTION: mask_index_dims = mask_index_dims_5; break; - case kMask4D: + case AttentionMaskType::MASK_4D_MEGATRON: mask_index_dims = mask_index_dims_6; break; default: @@ -184,7 +166,7 @@ static void RunAttentionTest( } tester.AddOutput("present", present_dims, *present_data); } - } else { // past_present_share_buffer + } else { // past_present_share_buffer std::vector cache_dims = {2, batch_size, number_of_heads, max_sequence_length, head_size}; if (use_float16) { auto past_cache = ReorderToKvCache(ToFloat16(*past_data).data(), batch_size, past_sequence_length, @@ -226,37 +208,11 @@ static void RunAttentionTest( } } - std::vector key_dims = {batch_size, kv_sequence_length, hidden_size}; - std::vector value_dims = {batch_size, kv_sequence_length, v_hidden_size}; - if (use_float16) { - if (key_data != nullptr) { - tester.AddInput("key", key_dims, ToFloat16(*key_data)); - } else { - tester.AddOptionalInputEdge(); - } - if (value_data != nullptr) { - tester.AddInput("value", value_dims, ToFloat16(*value_data)); - } else { - tester.AddOptionalInputEdge(); - } - } else { - if (key_data != nullptr) { - tester.AddInput("key", key_dims, *key_data); - } else { - tester.AddOptionalInputEdge(); - } - if (value_data != nullptr) { - tester.AddInput("value", value_dims, *value_data); - } else { - tester.AddOptionalInputEdge(); - } - } - if (past_present_share_buffer) { - std::vector arr_past_sequence_len(1, past_sequence_length); - tester.AddInput("past_sequence_length", {1}, arr_past_sequence_len); + std::vector arr_past_sequence_len(1, past_sequence_length); + tester.AddInput("past_sequence_length", {1}, arr_past_sequence_len); } else { - tester.AddOptionalInputEdge(); + tester.AddOptionalInputEdge(); } if (enable_cuda) { @@ -295,7 +251,7 @@ static void RunAttentionTest( int past_sequence_length = 0, const std::vector* past_data = nullptr, const std::vector* present_data = nullptr, - MaskIndexType mask_index_type = kMaskIndexEnd, + AttentionMaskType mask_type = AttentionMaskType::MASK_1D_KEY_SEQ_LEN, int input_hidden_size = 0, int max_sequence_length = 0, const bool disable_cpu = false, @@ -304,21 +260,19 @@ static void RunAttentionTest( const std::vector qkv_sizes = {}, const std::vector& extra_add_data = {}, int kv_sequence_length = 0, - const std::vector* key_data = nullptr, - const std::vector* value_data = nullptr, bool past_present_share_buffer = false) { RunAttentionTest(input_data, weights_data, false, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, use_float16, is_unidirectional, use_past_state, past_sequence_length, - past_data, present_data, mask_index_type, input_hidden_size, max_sequence_length, + past_data, present_data, mask_type, input_hidden_size, max_sequence_length, disable_cpu, disable_cuda, disable_rocm, qkv_sizes, extra_add_data, - kv_sequence_length, key_data, value_data, past_present_share_buffer); + kv_sequence_length, past_present_share_buffer); RunAttentionTest(input_data, weights_data, true, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, use_float16, is_unidirectional, use_past_state, past_sequence_length, - past_data, present_data, mask_index_type, input_hidden_size, max_sequence_length, + past_data, present_data, mask_type, input_hidden_size, max_sequence_length, disable_cpu, disable_cuda, disable_rocm, qkv_sizes, extra_add_data, - kv_sequence_length, key_data, value_data, past_present_share_buffer); + kv_sequence_length, past_present_share_buffer); } TEST(AttentionTest, AttentionBatch1) { @@ -387,7 +341,7 @@ TEST(AttentionTest, AttentionBatch1WithQKVAttr1) { constexpr bool disable_rocm = true; RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - false, false, false, 0, nullptr, nullptr, kMaskIndexEnd, 0, + false, false, false, 0, nullptr, nullptr, AttentionMaskType::MASK_1D_KEY_SEQ_LEN, 0, 0, false, false, disable_rocm, qkv_sizes); } @@ -425,7 +379,7 @@ TEST(AttentionTest, AttentionBatch1WithQKVAttr2) { constexpr bool disable_rocm = true; RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - false, false, false, 0, nullptr, nullptr, kMaskIndexEnd, 0, + false, false, false, 0, nullptr, nullptr, AttentionMaskType::MASK_1D_KEY_SEQ_LEN, 0, 0, false, false, disable_rocm, qkv_sizes); } @@ -465,7 +419,7 @@ TEST(AttentionTest, AttentionBatch1ExtraAdd) { constexpr bool disable_rocm = false; RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - false, false, false, 0, nullptr, nullptr, kMaskIndexEnd, 0, + false, false, false, 0, nullptr, nullptr, AttentionMaskType::MASK_1D_KEY_SEQ_LEN, 0, 0, disable_cpu, disable_cuda, disable_rocm, qkv_sizes, extra_add_qk); } @@ -510,7 +464,7 @@ TEST(AttentionTest, AttentionBatch2ExtraAdd) { constexpr bool disable_rocm = false; RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - false, false, false, 0, nullptr, nullptr, kMaskIndexEnd, 0, + false, false, false, 0, nullptr, nullptr, AttentionMaskType::MASK_1D_KEY_SEQ_LEN, 0, 0, disable_cpu, disable_cuda, disable_rocm, qkv_sizes, extra_add_qk); } @@ -848,1410 +802,1410 @@ void RawAttentionEmptyPastState(bool past_present_share_buffer) { if (!past_present_share_buffer) { RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, - batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional, - use_past_state, past_sequence_length, &past_data, &present_data); + batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional, + use_past_state, past_sequence_length, &past_data, &present_data); } else { RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, - batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional, - use_past_state, past_sequence_length, &past_data, &present_data, - kMaskIndexEnd, 0, sequence_length, true, false, true, {}, {}, 0, nullptr, nullptr, - true); + batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional, + use_past_state, past_sequence_length, &past_data, &present_data, + AttentionMaskType::MASK_1D_KEY_SEQ_LEN, 0, sequence_length, true, false, true, {}, {}, 0, + true); } } -#ifndef ENABLE_TRAINING // TRT fused attention is enabled only on non-training builds -static void GetWeightAndBiasForHiddenSize64(std::vector &weight_data, std::vector& bias_data){ +#ifndef ENABLE_TRAINING // TRT fused attention is enabled only on non-training builds +static void GetWeightAndBiasForHiddenSize64(std::vector& weight_data, std::vector& bias_data) { weight_data = { - -0.004707f, -0.006775f, 0.0009236f, 0.003067f, -0.00806f, 0.00779f, 0.0004425f, 0.00846f, 0.00048f, - 0.00999f, 0.00115f, 0.00226f, -0.00705f, 0.004467f, 0.001455f, -0.006073f, 0.00465f, -0.00861f, - -0.002779f, 0.00883f, -0.002996f, 0.008354f, -0.003141f, -0.007374f, 0.001634f, -0.009544f, 0.00198f, - 0.005894f, 0.001434f, 0.001589f, 0.00921f, -0.00507f, 0.00448f, 0.0002687f, -0.003147f, 0.001627f, - -0.005608f, 0.006516f, 0.00935f, -0.004715f, 0.00833f, -0.00563f, 0.00281f, -0.005875f, 0.000629f, - 0.00993f, -0.002695f, 0.004486f, -0.00528f, -0.003807f, 0.00521f, 0.00010276f, 0.003307f, 0.000701f, - 0.0001151f, 0.00649f, 0.00934f, -0.001063f, 0.002327f, -0.0002892f, 0.003317f, -0.003506f, 0.004875f, - 0.0006566f, 0.000953f, -0.005898f, 0.00326f, 0.00877f, 0.00923f, -0.00622f, -0.006588f, 0.007748f, - -0.001789f, 0.00002104f, 0.002937f, 0.00816f, 0.005833f, -0.006634f, 0.006985f, 0.00951f, 0.002947f, - 0.001871f, -0.009445f, 0.0004554f, -0.006294f, -0.00649f, 0.00917f, -0.004158f, -0.00462f, -0.001531f, - -0.00658f, -0.00364f, -0.00462f, 0.003723f, 0.009636f, 0.003305f, -0.00984f, 0.006126f, -0.0010395f, - -0.00852f, 0.006287f, -0.002949f, -0.004f, -0.002415f, 0.0009527f, 0.001624f, 0.00364f, 0.007088f, - -0.00717f, -0.009224f, -0.00997f, 0.001726f, -0.00877f, -0.000602f, 0.0089f, 0.009026f, -0.009514f, - 0.00852f, 0.0003986f, -0.006855f, -0.00583f, 0.003622f, -0.00526f, 0.001879f, -0.007053f, 0.00006664f, - 0.00972f, -0.000457f, -0.00759f, -0.007107f, 0.002337f, -0.004204f, -0.005676f, 0.00985f, 0.00978f, - -0.004486f, 0.005093f, -0.009285f, 0.004093f, -0.00682f, 0.00963f, -0.006954f, -0.003674f, -0.003822f, - 0.00202f, -0.004635f, -0.0009174f, -0.001202f, 0.00639f, -0.004356f, -0.00741f, -0.00586f, -0.00319f, - -0.002506f, 0.005047f, 0.007156f, -0.00765f, 0.00702f, 0.007477f, 0.000626f, -0.001587f, -0.005455f, - 0.005814f, -0.002127f, 0.00834f, 0.001279f, 0.007996f, -0.005787f, -0.006924f, -0.004063f, -0.00435f, - -0.00427f, 0.0002115f, 0.00981f, -0.00138f, -0.007965f, -0.004536f, -0.003431f, 0.00416f, 0.005894f, - 0.006054f, 0.00907f, 0.00388f, -0.006763f, 0.001692f, -0.00797f, -0.00691f, 0.00798f, 0.00867f, - -0.00788f, 0.002062f, -0.003761f, 0.009834f, -0.002445f, -0.00613f, 0.0096f, -0.005466f, -0.0008426f, - 0.0002431f, -0.009995f, 0.003736f, -0.0071f, -0.003593f, 0.006386f, 0.005997f, -0.003328f, 0.007515f, - -0.008675f, 0.00547f, -0.00388f, 0.00473f, 0.00362f, -0.00469f, 0.006958f, -0.001264f, -0.003887f, - -0.004276f, -0.000396f, 0.00453f, -0.00465f, -0.007343f, -0.005787f, -0.00927f, -0.006058f, -0.004566f, - -0.009056f, -0.00891f, 0.007633f, 0.001098f, -0.003368f, -0.007214f, -0.00905f, -0.00898f, -0.008736f, - -0.00948f, 0.003162f, 0.004402f, -0.006245f, -0.00515f, -0.00378f, -0.003248f, -0.00304f, 0.001834f, - -0.002672f, 0.005234f, -0.007706f, 0.0084f, 0.00832f, -0.00904f, -0.00596f, 0.009926f, -0.00869f, - 0.001513f, 0.00728f, 0.001057f, 0.001452f, 0.00785f, 0.001203f, -0.004528f, 0.006573f, 0.003656f, - 0.005966f, -0.006985f, 0.002844f, 0.00883f, 0.0004826f, 0.003279f, 0.006916f, 0.00263f, -0.002415f, - -0.001928f, -0.0004041f, -0.004593f, -0.00204f, 0.007965f, -0.008224f, -0.00591f, -0.002144f, 0.000688f, - 0.001676f, -0.00949f, -0.003304f, -0.007637f, 0.00973f, -0.008224f, -0.001211f, -0.003345f, 0.002115f, - -0.00615f, -0.004955f, -0.00803f, 0.00807f, -0.0006227f, 0.00845f, -0.006916f, 0.004353f, -0.000934f, - 0.005604f, -0.00825f, -0.004402f, -0.00441f, 0.00257f, -0.008415f, 0.006542f, 0.001357f, -0.004974f, - -0.00993f, 0.0001058f, 0.002855f, -0.0081f, 0.001513f, -0.00191f, 0.0004003f, 0.003874f, -0.0015545f, - -0.00736f, 0.006718f, 0.005135f, 0.003859f, -0.0054f, 0.00993f, 0.000952f, 0.00228f, 0.001163f, - 0.00918f, 0.00582f, 0.00308f, 0.008415f, 0.00889f, 0.00011665f, -0.007362f, -0.009926f, -0.00784f, - 0.005817f, -0.002918f, 0.005043f, -0.003029f, 0.0085f, -0.007362f, -0.00857f, 0.006832f, -0.00055f, - 0.008835f, -0.00522f, -0.002085f, 0.00353f, -0.007706f, 0.006283f, 0.004414f, -0.002405f, -0.003002f, - -0.00946f, -0.001164f, -0.004177f, 0.00834f, -0.001576f, 0.00855f, 0.004025f, 0.000285f, -0.004486f, - -0.00703f, -0.003061f, 0.003452f, 0.001276f, 0.008446f, -0.001302f, 0.004333f, -0.00898f, -0.002445f, - -0.006523f, 0.0004334f, -0.003206f, -0.00349f, -0.005497f, -0.007786f, 0.007397f, 0.00925f, 0.002077f, - 0.004074f, 0.006626f, -0.001693f, -0.0005975f, -0.005074f, 0.00324f, 0.00925f, -0.009735f, -0.007133f, - -0.0064f, -0.00455f, -0.003153f, 0.0056f, -0.006073f, -0.00274f, -0.00587f, -0.005066f, 0.003595f, - -0.00932f, -0.005f, 0.00569f, 0.008415f, 0.006866f, 0.003952f, -0.009285f, -0.008064f, 0.00824f, - 0.0000188f, -0.001233f, 0.005726f, -0.0007806f, -0.008385f, -0.001798f, -0.008095f, 0.00986f, 0.006924f, - 0.00712f, -0.00964f, -0.00797f, 0.00943f, -0.007416f, 0.007904f, 0.006893f, 0.00799f, -0.007164f, - 0.007214f, 0.00931f, 0.000645f, -0.0058f, 0.009254f, -0.002079f, 0.000969f, 0.009636f, -0.002365f, - -0.002348f, 0.007053f, -0.002796f, -0.007652f, -0.001554f, 0.00402f, -0.002838f, -0.006958f, 0.000331f, - 0.006435f, -0.004036f, 0.007595f, 0.00812f, 0.00637f, 0.007732f, -0.006916f, 0.003952f, -0.008064f, - -0.00928f, 0.00468f, -0.000512f, -0.006287f, 0.00607f, -0.001904f, -0.00458f, 0.003412f, 0.000382f, - -0.00822f, -0.00486f, 0.0008364f, 0.0004992f, 0.003582f, 0.0088f, 0.002453f, -0.00856f, 0.00886f, - 0.0077f, 0.0004592f, -0.001417f, -0.005142f, 0.004696f, -0.003576f, 0.004807f, -0.00851f, -0.006245f, - -0.003649f, -0.0001528f, 0.004017f, -0.006123f, -0.004158f, -0.00445f, 0.004864f, -0.0005493f, 0.00399f, - -0.007244f, 0.003246f, 0.00407f, 0.00929f, -0.006706f, 0.0084f, -0.003496f, 0.00843f, 0.00514f, - 0.002714f, -0.0001633f, -0.00866f, 0.004837f, -0.003016f, 0.00593f, -0.00849f, 0.001287f, -0.007706f, - 0.001479f, -0.002241f, 0.00843f, -0.001236f, -0.007572f, -0.004448f, -0.001927f, 0.001139f, 0.004982f, - -0.00673f, -0.000568f, 0.009346f, 0.000487f, 0.001392f, -0.009605f, 0.00944f, 0.002022f, 0.00617f, - 0.00472f, 0.009575f, -0.006416f, 0.004265f, 0.002005f, 0.000578f, 0.002592f, 0.002707f, -0.005333f, - -0.00928f, -0.00935f, -0.00833f, -0.00205f, -0.005795f, -0.001061f, -0.003605f, 0.003078f, 0.00592f, - 0.0006485f, -0.00504f, 0.002682f, 0.00826f, -0.003983f, -0.00493f, 0.00406f, -0.00838f, 0.0032f, - 0.0009565f, 0.00471f, 0.00504f, 0.004612f, -0.002768f, 0.00791f, -0.002892f, 0.00471f, 0.00588f, - 0.005978f, -0.005203f, -0.009995f, 0.009346f, -0.00802f, 0.003807f, 0.001364f, -0.00736f, 0.009285f, - -0.001995f, 0.002632f, -0.00904f, 0.007042f, -0.00326f, 0.006516f, 0.00492f, 0.00734f, -0.00867f, - -0.002512f, -0.003729f, 0.0027f, -0.002659f, -0.009514f, -0.005634f, -0.001473f, -0.00545f, 0.003551f, - 0.001995f, -0.003704f, 0.006386f, 0.003313f, -0.002823f, 0.00105f, 0.00993f, 0.00951f, -0.007275f, - -0.002213f, -0.003418f, 0.00599f, 0.00948f, 0.007572f, -0.00944f, -0.00924f, 0.00011665f, 0.0069f, - -0.00544f, 0.007515f, -0.006832f, -0.007774f, 0.00853f, -0.0007486f, -0.00643f, -0.0001878f, -0.00849f, - -0.007603f, 0.0016985f, -0.00986f, 0.003975f, -0.002176f, -0.009796f, 0.004795f, -0.00699f, -0.006725f, - 0.00109f, 0.004498f, -0.00569f, -0.00584f, 0.004047f, -0.001022f, 0.001479f, -0.00751f, -0.002579f, - -0.004086f, 0.007603f, -0.0000106f, 0.007366f, 0.0029f, -0.003498f, 0.007385f, -0.00759f, -0.005886f, - 0.00476f, -0.0003812f, -0.00008225f, 0.00998f, 0.002716f, -0.00925f, -0.00439f, -0.000902f, -0.00296f, - -0.007347f, -0.005882f, -0.001428f, -0.002855f, -0.003311f, -0.000793f, -0.00403f, -0.00829f, -0.00999f, - -0.00838f, 0.008804f, 0.004124f, -0.005882f, 0.001305f, 0.00511f, 0.00799f, -0.00953f, -0.008575f, - -0.00556f, -0.00858f, 0.00565f, 0.00908f, 0.00591f, 0.0007925f, -0.00912f, -0.005894f, -0.002588f, - -0.00957f, -0.00682f, 0.002174f, 0.00706f, 0.00528f, 0.0069f, -0.004517f, -0.002382f, 0.005596f, - 0.00645f, 0.00956f, 0.00796f, 0.007706f, 0.004818f, 0.002308f, 0.001367f, -0.004177f, 0.00842f, - 0.007416f, -0.00404f, -0.009094f, 0.00447f, -0.00284f, -0.002499f, -0.0001582f, 0.001681f, 0.004993f, - -0.0059f, 0.007282f, -0.00809f, 0.00927f, 0.004948f, 0.009766f, -0.00618f, -0.001559f, -0.00461f, - 0.001866f, 0.00827f, -0.00785f, -0.003101f, 0.00977f, -0.00444f, -0.00916f, -0.0008535f, 0.004913f, - 0.005627f, 0.007965f, 0.000532f, -0.00878f, 0.004047f, -0.005302f, 0.00201f, 0.002964f, -0.00895f, - 0.005768f, 0.00388f, 0.007526f, -0.00783f, 0.003794f, 0.005363f, 0.003454f, -0.002235f, -0.003494f, - -0.001541f, -0.00003624f, -0.0007634f, -0.0014f, -0.003124f, 0.00829f, -0.00298f, -0.00868f, -0.001243f, - -0.005383f, -0.009964f, 0.004433f, -0.002045f, -0.00753f, 0.002361f, -0.007473f, -0.002419f, -0.000931f, - 0.00585f, 0.007114f, -0.002247f, 0.00472f, -0.003033f, -0.001974f, 0.001622f, -0.007473f, -0.005375f, - -0.005013f, 0.00436f, 0.00662f, -0.0053f, 0.000606f, -0.00849f, -0.007004f, 0.006794f, -0.0005445f, - -0.001269f, 0.00391f, 0.006294f, 0.007088f, -0.009026f, -0.001965f, -0.008545f, 0.002115f, 0.003534f, - -0.00857f, 0.00412f, -0.00722f, -0.006386f, 0.00595f, -0.003778f, -0.00886f, -0.0002267f, 0.00249f, - -0.002825f, 0.0003204f, 0.0002894f, -0.004147f, -0.003632f, 0.001764f, -0.002983f, 0.006584f, -0.004402f, - 0.006493f, 0.002014f, -0.0061f, 0.00816f, 0.005585f, -0.008125f, 0.006546f, -0.00956f, 0.004185f, - 0.001067f, 0.001277f, 0.007835f, -0.003933f, 0.00979f, -0.003376f, 0.006573f, -0.00501f, 0.0007577f, - 0.00133f, -0.00737f, 0.00885f, -0.00599f, -0.001151f, -0.001389f, -0.00987f, -0.003214f, -0.00649f, - 0.005424f, 0.0004575f, 0.002352f, 0.005722f, -0.001995f, -0.007717f, 0.001034f, -0.006557f, 0.0088f, - -0.003183f, -0.00663f, 0.00634f, -0.003008f, -0.004925f, 0.00539f, -0.00432f, -0.00651f, 0.009895f, - 0.00532f, -0.0003607f, 0.003397f, 0.006145f, 0.00531f, -0.006275f, 0.00985f, -0.00471f, 0.00817f, - -0.00927f, 0.007217f, 0.005924f, 0.003187f, 0.001192f, -0.003986f, -0.0000217f, -0.0012245f, -0.003933f, - -0.00617f, -0.002232f, 0.00444f, 0.002008f, 0.0006056f, -0.002827f, -0.007366f, 0.002996f, -0.006752f, - -0.004143f, 0.001662f, -0.00793f, 0.002161f, 0.0001992f, 0.00803f, -0.0000725f, 0.001066f, 0.004745f, - -0.005367f, -0.00641f, 0.00431f, -0.004715f, 0.008575f, -0.007202f, 0.003786f, -0.00247f, 0.006382f, - -0.006832f, 0.00505f, -0.001084f, 0.009674f, 0.00458f, -0.00473f, -0.00656f, -0.00011283f, 0.004417f, - -0.001419f, -0.0005164f, 0.0000397f, -0.00395f, 0.00417f, -0.005512f, 0.0088f, 0.00568f, -0.0005984f, - 0.003128f, -0.006283f, -0.0000904f, -0.004738f, 0.00687f, 0.00592f, -0.005768f, -0.00859f, 0.003523f, - 0.001169f, -0.004498f, 0.00541f, 0.002956f, 0.00896f, -0.002571f, 0.0006533f, 0.002089f, -0.00473f, - -0.002241f, 0.005016f, 0.001295f, 0.005993f, -0.008064f, 0.000595f, -0.007744f, -0.00201f, 0.0075f, - -0.00942f, 0.0002023f, -0.00979f, -0.002243f, 0.002829f, -0.004322f, 0.009125f, 0.00704f, 0.007282f, - 0.00807f, 0.005447f, 0.00518f, -0.0010195f, -0.004803f, -0.001293f, -0.001305f, 0.00975f, -0.00564f, - -0.005215f, -0.009445f, 0.00999f, 0.00959f, -0.009224f, -0.0053f, -0.002106f, -0.00839f, 0.001516f, - 0.003109f, 0.004414f, -0.00921f, -0.00868f, 0.00833f, 0.00809f, 0.004654f, 0.00678f, 0.002237f, - 0.007195f, -0.004875f, -0.001252f, 0.0073f, 0.007275f, 0.00825f, -0.005936f, 0.00594f, -0.00381f, - -0.002117f, 0.009f, -0.003998f, -0.00104f, -0.00421f, 0.00526f, 0.001031f, 0.00902f, 0.006794f, - -0.00912f, -0.0002892f, 0.002966f, 0.00478f, 0.00581f, 0.007217f, 0.008156f, -0.0000639f, -0.003164f, - 0.00859f, -0.00897f, 0.00409f, 0.0008936f, -0.00991f, -0.008316f, -0.004055f, 0.001252f, -0.00473f, - -0.002f, -0.003933f, 0.000755f, -0.00992f, 0.003569f, -0.00812f, -0.004215f, -0.00774f, 0.00907f, - 0.00653f, -0.00992f, -0.006252f, -0.00468f, -0.001105f, -0.007717f, 0.005302f, 0.003773f, -0.001262f, - -0.006207f, -0.005707f, 0.0053f, 0.00415f, 0.002441f, 0.0009265f, -0.006744f, 0.00994f, -0.0004816f, - -0.002108f, -0.003267f, 0.0000461f, 0.004364f, -0.00596f, -0.008675f, 0.005703f, 0.002748f, 0.00961f, - 0.006767f, -0.0000575f, -0.00845f, -0.003597f, 0.003616f, 0.00423f, 0.009705f, -0.00976f, -0.0085f, - 0.00307f, -0.004032f, -0.00784f, -0.00901f, -0.00873f, 0.00543f, 0.00744f, -0.006588f, -0.004765f, - -0.007202f, 0.006306f, -0.007484f, 0.007442f, -0.00008386f, 0.006374f, 0.00879f, 0.002039f, -0.003298f, - 0.003407f, 0.004673f, 0.0068f, 0.0001981f, 0.002296f, 0.008194f, -0.00805f, -0.007637f, -0.00903f, - -0.004025f, 0.001553f, 0.00881f, 0.001311f, -0.005016f, -0.006916f, -0.009926f, -0.00801f, 0.00945f, - 0.0001532f, 0.00234f, -0.002968f, -0.002174f, 0.004585f, -0.00658f, 0.000132f, 0.0004494f, -0.00954f, - -0.00848f, 0.009964f, -0.0006323f, -0.005016f, 0.001238f, 0.00433f, 0.001477f, 0.00578f, 0.00794f, - -0.00512f, -0.00207f, -0.00145f, -0.001166f, 0.008644f, -0.00915f, 0.007187f, -0.00415f, 0.006035f, - -0.004177f, 0.00817f, -0.00432f, 0.001062f, -0.005272f, -0.0004163f, 0.005154f, 0.005688f, -0.002985f, - -0.004f, -0.003176f, 0.00137f, 0.0002158f, 0.003798f, 0.0002009f, -0.01f, 0.00311f, -0.004234f, - 0.00681f, -0.005657f, -0.00963f, 0.00916f, 0.00847f, -0.002085f, -0.00211f, 0.006813f, -0.00473f, - 0.00873f, 0.0008483f, 0.004253f, 0.00865f, -0.007156f, -0.00996f, 0.005413f, -0.004253f, 0.00847f, - 0.004482f, 0.000647f, -0.006702f, 0.00845f, -0.009254f, -0.0001926f, 0.003868f, -0.00788f, 0.00951f, - -0.0005136f, -0.007698f, 0.00889f, -0.00953f, 0.007965f, 0.004982f, -0.004345f, 0.00841f, 0.007034f, - 0.006092f, 0.004166f, 0.00682f, -0.004635f, 0.003433f, -0.006527f, -0.0002658f, 0.005455f, 0.001926f, - -0.003582f, -0.0065f, 0.002348f, -0.001918f, -0.00488f, -0.006416f, -0.000873f, -0.00942f, 0.005177f, - -0.00194f, 0.006374f, 0.003983f, 0.00963f, 0.00697f, -0.00809f, -0.00791f, -0.003254f, -0.00669f, - -0.001487f, 0.002129f, -0.000799f, -0.003944f, 0.002693f, 0.00667f, 0.00892f, 0.002377f, 0.001005f, - -0.00792f, 0.002398f, -0.001093f, 0.0006456f, -0.002361f, 0.00533f, 0.0064f, 0.004524f, -0.0066f, - 0.004406f, 0.007538f, 0.00611f, 0.006294f, 0.0004857f, -0.00859f, 0.00928f, -0.005505f, -0.001135f, - -0.00712f, -0.00923f, 0.007534f, 0.00258f, 0.00685f, -0.00873f, 0.001684f, -0.001002f, -0.0005627f, - 0.00352f, -0.007324f, 0.00838f, 0.00731f, 0.006733f, -0.003832f, -0.00522f, 0.00299f, 0.000935f, - -0.005245f, 0.000987f, 0.007515f, 0.00704f, 0.0086f, 0.00133f, 0.0038f, 0.00622f, -0.0085f, - 0.00988f, 0.00625f, 0.00835f, -0.006023f, 0.007084f, -0.002728f, 0.009995f, 0.0008073f, 0.00341f, - -0.004547f, 0.005917f, -0.00818f, -0.009705f, 0.00907f, -0.008965f, 0.003483f, -0.00556f, -0.001769f, - 0.0068f, 0.007442f, 0.00497f, -0.001922f, 0.002583f, -0.00834f, 0.004417f, 0.005028f, 0.006336f, - 0.00402f, -0.00773f, 0.00672f, 0.00324f, 0.003595f, -0.00852f, 0.00503f, -0.00794f, -0.009766f, - -0.000813f, -0.006924f, -0.006622f, 0.0008802f, 0.004177f, 0.007427f, -0.001697f, 0.008575f, 0.00414f, - 0.00728f, 0.001138f, 0.000674f, -0.00209f, 0.004883f, -0.003029f, 0.0084f, -0.00798f, -0.003302f, - 0.007866f, 0.0006804f, 0.00306f, 0.006325f, 0.000508f, -0.002022f, 0.00473f, 0.00958f, -0.001912f, - -0.002256f, 0.001385f, 0.001143f, 0.007668f, -0.002575f, 0.004364f, 0.00919f, -0.00924f, 0.00558f, - -0.00447f, -0.004196f, -0.00547f, 0.00868f, -0.001469f, -0.00849f, 0.006397f, -0.00529f, 0.002329f, - 0.00847f, -0.009705f, 0.00233f, 0.000902f, 0.006073f, -0.00536f, 0.000875f, 0.002682f, -0.003347f, - 0.00905f, -0.00399f, -0.005783f, -0.00942f, 0.00671f, -0.008095f, -0.004467f, -0.008415f, 0.007996f, - -0.00848f, -0.00531f, 0.002605f, -0.00632f, -0.007652f, 0.009605f, 0.00929f, 0.007782f, -0.006844f, - -0.00115f, -0.006626f, -0.007526f, -0.001129f, 0.00943f, 0.004242f, -0.00486f, 0.00963f, -0.006386f, - -0.004513f, 0.00185f, -0.001695f, 0.00976f, -0.001186f, 0.001484f, 0.00429f, 0.000502f, -0.009285f, - 0.005882f, -0.00674f, 0.00882f, 0.00816f, -0.008705f, -0.003618f, 0.00406f, 0.007607f, -0.001528f, - -0.006336f, 0.006943f, 0.00753f, -0.004963f, -0.00602f, 0.002424f, -0.009476f, 0.007385f, 0.00988f, - -0.00359f, -0.005722f, 0.006863f, -0.00398f, -0.005486f, -0.004898f, -0.0000809f, -0.001511f, 0.00307f, - 0.002613f, 0.0004046f, 0.005634f, 0.00449f, 0.008606f, -0.002146f, 0.002882f, -0.007065f, -0.00796f, - -0.001136f, -0.001323f, 0.004715f, -0.007004f, -0.007565f, -0.002895f, 0.007523f, 0.007027f, 0.001487f, - -0.003323f, 0.004665f, 0.007706f, 0.009186f, 0.00814f, -0.003918f, -0.002062f, 0.00514f, 0.00858f, - 0.00251f, 0.007576f, -0.008736f, 0.001245f, -0.007298f, -0.006157f, 0.00719f, -0.008446f, -0.00864f, - 0.006535f, -0.00002605f, 0.003567f, 0.002258f, 0.003443f, -0.006207f, 0.00934f, 0.007515f, -0.00916f, - 0.00861f, -0.00939f, 0.008644f, 0.00656f, 0.001708f, 0.007935f, -0.001997f, 0.002934f, 0.001758f, - 0.004932f, 0.005432f, 0.007812f, 0.00046f, -0.00562f, 0.009186f, 0.002731f, -0.00234f, 0.00913f, - 0.006542f, -0.001783f, 0.001575f, 0.003267f, 0.00676f, 0.00647f, -0.002998f, 0.00408f, -0.002005f, - 0.002071f, 0.0001754f, -0.003132f, 0.009705f, -0.003107f, 0.00847f, -0.006504f, -0.0005784f, -0.004715f, - -0.008415f, -0.005634f, -0.00926f, -0.006958f, 0.004932f, 0.0076f, 0.008896f, 0.006042f, 0.001687f, - 0.000543f, 0.005047f, -0.002184f, 0.003963f, 0.00716f, 0.003468f, -0.003925f, 0.0073f, 0.00385f, - 0.002712f, -0.00893f, -0.00004303f, -0.00814f, 0.00937f, 0.0017395f, 0.00555f, 0.005833f, -0.001491f, - -0.00863f, 0.00947f, 0.001972f, -0.00984f, 0.004642f, 0.003994f, 0.00923f, -0.00984f, 0.0049f, - -0.00987f, -0.009834f, -0.0005865f, -0.006485f, -0.0005198f, 0.00919f, 0.0004432f, 0.001068f, 0.009254f, - -0.00881f, -0.003483f, 0.00565f, -0.007793f, -0.00989f, -0.00908f, 0.00276f, -0.002663f, -0.006893f, - 0.006332f, -0.004177f, 0.006104f, -0.00004715f, -0.003693f, 0.003576f, 0.00255f, -0.00928f, -0.002916f, - -0.007755f, -0.00729f, -0.0061f, 0.006523f, 0.00254f, 0.0008516f, -0.0003228f, -0.004017f, -0.007374f, - -0.005207f, 0.009056f, -0.002869f, 0.004906f, 0.007675f, 0.003086f, -0.008026f, -0.00861f, -0.006744f, - 0.0002438f, 0.00375f, 0.003315f, 0.00235f, 0.006836f, -0.005516f, 0.00434f, -0.004208f, 0.002483f, - 0.006413f, 0.00674f, 0.005604f, -0.002977f, -0.00732f, -0.00908f, 0.007484f, 0.004456f, -0.00822f, - 0.007442f, -0.003195f, 0.005753f, 0.007698f, -0.006397f, -0.00785f, -0.009605f, -0.00419f, 0.00676f, - -0.00833f, -0.00997f, -0.0003414f, 0.00906f, -0.0071f, -0.006092f, -0.00885f, -0.007866f, 0.000824f, - -0.003231f, -0.0006027f, 0.0074f, 0.00764f, 0.005795f, 0.002886f, 0.00958f, -0.007668f, 0.004158f, - 0.00622f, 0.00119f, 0.00277f, -0.00571f, -0.0006685f, -0.006645f, 0.0004497f, 0.00218f, -0.00405f, - 0.00485f, -0.007504f, -0.001411f, -0.001933f, -0.009964f, 0.002077f, 0.00159f, -0.002796f, 0.005787f, - 0.00335f, 0.001426f, -0.005413f, 0.00994f, 0.001742f, -0.00715f, -0.0099f, 0.007744f, -0.0008388f, - -0.000603f, -0.002f, 0.005436f, 0.00178f, 0.009796f, -0.001966f, -0.007397f, -0.001909f, 0.00931f, - 0.0003397f, -0.006817f, 0.0069f, 0.002558f, 0.00808f, -0.007313f, -0.00984f, -0.00001967f, 0.002756f, - 0.009995f, -0.00715f, 0.004765f, -0.006096f, 0.004337f, 0.005642f, 0.00763f, 0.007103f, -0.0002332f, - 0.00322f, 0.00284f, 0.003447f, 0.0012f, -0.001126f, -0.002625f, 0.00961f, -0.005272f, 0.0053f, - -0.002483f, -0.00931f, 0.007687f, -0.002417f, 0.004463f, 0.001136f, -0.005375f, -0.00672f, 0.007084f, - 0.0006213f, -0.00912f, 0.006542f, 0.00606f, 0.003868f, 0.001709f, -0.007484f, 0.004448f, -0.00842f, - 0.00427f, -0.00975f, 0.006847f, -0.0071f, 0.0005484f, 0.00909f, -0.004642f, 0.00564f, -0.001863f, - -0.006863f, 0.0087f, -0.003702f, -0.001783f, -0.004032f, 0.003088f, -0.002344f, -0.00323f, -0.00966f, - 0.008286f, 0.006916f, -0.001279f, 0.003246f, 0.00921f, 0.007122f, -0.006985f, 0.0002171f, 0.000837f, - 0.001388f, 0.001075f, -0.008095f, 0.007515f, 0.00999f, 0.00423f, -0.0004835f, -0.009026f, 0.007538f, - 0.00877f, -0.002445f, 0.003437f, 0.00485f, -0.008125f, -0.007767f, 0.00934f, -0.0069f, 0.00804f, - -0.001232f, 0.00959f, -0.007687f, 0.005993f, 0.0006413f, -0.00814f, -0.002447f, -0.001008f, 0.002981f, - 0.001682f, 0.004833f, -0.00382f, -0.0008454f, -0.006485f, 0.00567f, 0.004982f, -0.00484f, 0.00922f, - -0.004585f, 0.00426f, 0.0004027f, 0.0006104f, -0.0063f, -0.00273f, -0.006138f, 0.005367f, -0.004303f, - 0.001937f, -0.003523f, 0.007137f, -0.005737f, -0.00869f, -0.00481f, -0.00816f, 0.0002303f, -0.0002975f, - -0.002365f, 0.00207f, -0.004353f, -0.00924f, 0.00395f, -0.00843f, -0.0043f, -0.0004406f, 0.004807f, - -0.00694f, 0.001308f, -0.000525f, 0.000463f, -0.006813f, 0.00775f, 0.006725f, -0.00984f, -0.0003664f, - 0.009964f, 0.007217f, 0.001767f, -0.004524f, 0.002432f, 0.000869f, -0.005993f, 0.007275f, -0.001423f, - -0.00711f, -0.001464f, 0.007347f, -0.004776f, 0.00513f, -0.00942f, 0.003813f, -0.00489f, -0.00835f, - -0.00711f, -0.002565f, 0.004646f, 0.002693f, 0.000531f, -0.001337f, -0.0008225f, 0.0005493f, -0.003017f, - 0.003242f, -0.00651f, 0.00958f, 0.006573f, -0.00635f, 0.008f, -0.004864f, 0.003464f, -0.007538f, - -0.00917f, -0.002682f, 0.00431f, -0.00604f, 0.002548f, 0.000772f, -0.00769f, -0.002756f, 0.004482f, - 0.001484f, -0.004753f, -0.003052f, 0.0002143f, 0.003023f, 0.002924f, 0.00821f, 0.004673f, 0.003557f, - 0.0092f, -0.00654f, 0.001993f, 0.00835f, -0.008736f, -0.0003886f, -0.00677f, 0.0004423f, -0.00723f, - -0.002926f, 0.00994f, 0.00784f, 0.001214f, 0.00311f, 0.003584f, 0.00856f, 0.001752f, -0.004345f, - -0.003647f, 0.00984f, -0.006798f, 0.001661f, 0.0005393f, 0.0004299f, 0.001711f, -0.006824f, 0.003633f, - 0.00506f, -0.002146f, 0.005653f, -0.00959f, 0.0009027f, -0.009674f, 0.002176f, -0.002815f, -0.007362f, - -0.0002565f, -0.005466f, 0.006443f, 0.00541f, -0.006615f, -0.00668f, 0.0000291f, -0.00249f, -0.00648f, - 0.006466f, 0.005596f, -0.00963f, -0.00289f, -0.007336f, 0.001666f, -0.001227f, 0.008835f, -0.00396f, - -0.001764f, -0.00962f, -0.00461f, 0.00488f, 0.00606f, -0.00959f, 0.005497f, 0.003384f, -0.002548f, - 0.00479f, 0.001423f, -0.004772f, 0.0001752f, 0.00884f, 0.0069f, 0.00792f, -0.001779f, 0.0007215f, - -0.007557f, 0.004314f, -0.006527f, -0.00513f, -0.00855f, -0.00873f, -0.00709f, -0.007538f, -0.002918f, - -0.00867f, 0.000341f, 0.0004723f, 0.007336f, -0.0009327f, -0.005554f, 0.007065f, 0.00586f, -0.003202f, - -0.001984f, -0.007755f, 0.006268f, 0.003624f, 0.001136f, 0.002611f, -0.007374f, -0.00522f, 0.005642f, - 0.003551f, 0.005558f, 0.00512f, -0.001255f, 0.00445f, 0.006657f, -0.003395f, -0.0000211f, -0.00948f, - -0.00525f, 0.007614f, 0.007603f, -0.00872f, 0.00983f, -0.0059f, 0.005405f, -0.005775f, 0.001911f, - -0.006306f, -0.008446f, 0.006702f, 0.001295f, -0.007904f, -0.00613f, -0.00737f, 0.004997f, 0.00699f, - -0.008514f, 0.001029f, 0.008705f, 0.00543f, -0.0097f, -0.00839f, 0.00201f, 0.00319f, -0.00767f, - 0.003147f, -0.00936f, 0.003647f, 0.007465f, 0.00802f, 0.001254f, 0.00955f, 0.006344f, -0.00754f, - 0.007072f, -0.007305f, -0.002403f, -0.006702f, -0.00827f, 0.007183f, -0.001834f, -0.0057f, -0.007095f, - 0.00332f, -0.0008297f, 0.004333f, 0.0008926f, -0.00629f, 0.007393f, 0.006477f, -0.004684f, 0.002182f, - -0.004246f, 0.007324f, 0.001202f, 0.00993f, 0.001759f, -0.001665f, 0.0067f, 0.003798f, -0.007454f, - -0.00821f, 0.001178f, 0.004494f, 0.00384f, 0.003609f, 0.007614f, 0.00976f, -0.00918f, -0.002209f, - 0.002016f, 0.0093f, 0.00638f, -0.007572f, -0.008224f, -0.000771f, -0.00854f, -0.001513f, -0.007267f, - 0.00887f, -0.00107f, -0.007755f, 0.004757f, 0.002693f, 0.00439f, -0.00927f, -0.003588f, 0.001711f, - -0.002756f, 0.00974f, -0.004158f, 0.00621f, 0.00451f, 0.007935f, -0.002064f, -0.0081f, -0.00682f, - 0.006042f, -0.003317f, -0.003391f, -0.00688f, -0.00743f, 0.003933f, -0.00816f, -0.003164f, -0.001821f, - -0.001942f, 0.005005f, 0.00597f, 0.00595f, 0.0086f, 0.003202f, -0.00803f, -0.00892f, -0.002626f, - 0.000533f, -0.002506f, 0.00506f, -0.00822f, -0.000431f, 0.000955f, -0.004826f, -0.006626f, 0.001367f, - 0.00684f, -0.00793f, 0.00634f, -0.004353f, -0.00682f, 0.00657f, 0.000718f, -0.002306f, 0.006966f, - 0.006992f, -0.006275f, 0.00843f, 0.004826f, 0.00886f, -0.004f, 0.00901f, 0.005543f, -0.00566f, - -0.009575f, 0.005444f, 0.00633f, -0.005756f, 0.007687f, 0.001801f, -0.005802f, 0.001708f, -0.004517f, - 0.00808f, 0.00984f, -0.00847f, 0.00959f, -0.002443f, -0.001829f, -0.003305f, -0.00392f, -0.006924f, - -0.002266f, 0.001481f, 0.001099f, -0.00549f, 0.004787f, 0.00784f, -0.008514f, -0.00288f, -0.00858f, - 0.003025f, 0.002846f, 0.001469f, 0.00927f, 0.006443f, -0.00908f, 0.009445f, -0.009636f, -0.0003245f, - 0.003815f, -0.0001975f, 0.0007005f, -0.00984f, 0.0005784f, 0.0006576f, -0.00885f, 0.001424f, -0.004414f, - 0.006252f, 0.002722f, -0.002953f, 0.001995f, 0.00942f, -0.0000668f, -0.007507f, 0.00201f, 0.00344f, - 0.002167f, -0.001902f, -0.00691f, 0.00427f, -0.006607f, -0.003334f, -0.00143f, -0.00676f, 0.00736f, - 0.005222f, -0.0004745f, -0.0005236f, -0.00818f, 0.004253f, -0.002077f, 0.007355f, -0.00157f, -0.004112f, - -0.007156f, 0.002766f, -0.001808f, -0.003685f, 0.002918f, 0.005814f, 0.00126f, 0.00001913f, -0.0002122f, - 0.00882f, -0.001593f, 0.005184f, -0.006516f, 0.00848f, 0.00835f, -0.0006256f, 0.00252f, -0.00594f, - 0.005688f, -0.0089f, 0.000832f, 0.00922f, 0.002317f, -0.003725f, -0.005905f, 0.001728f, 0.002249f, - -0.00986f, 0.008896f, -0.0001637f, 0.006817f, -0.0092f, 0.008484f, -0.00751f, -0.002232f, 0.007233f, - 0.001008f, 0.003746f, -0.005726f, 0.006203f, 0.000586f, 0.00568f, 0.000979f, -0.00249f, -0.004295f, - -0.005775f, 0.0093f, -0.002306f, 0.002426f, -0.00712f, 0.004265f, 0.00659f, -0.00504f, -0.002317f, - 0.003494f, -0.005882f, 0.00602f, 0.001864f, -0.008255f, 0.00559f, -0.001576f, -0.004242f, -0.005627f, - 0.00521f, 0.003729f, -0.005524f, -0.005688f, 0.00695f, -0.00475f, -0.0001157f, -0.007744f, -0.007935f, - 0.006092f, -0.007626f, 0.002676f, -0.00196f, -0.00932f, -0.001797f, -0.0081f, -0.004524f, 0.002777f, - -0.0007696f, -0.0008817f, -0.00864f, 0.00834f, -0.001039f, -0.00899f, -0.007412f, -0.002197f, 0.003298f, - 0.00258f, 0.00667f, 0.001576f, -0.002626f, -0.001692f, -0.00107f, -0.001912f, -0.00997f, -0.005493f, - -0.0098f, -0.001864f, 0.001933f, 0.005116f, -0.00938f, -0.0002704f, 0.0001253f, -0.00465f, -0.00414f, - 0.001244f, 0.002434f, -0.003223f, 0.007835f, 0.004036f, 0.00748f, -0.00903f, 0.004265f, -0.002977f, - 0.00732f, 0.006317f, -0.00563f, -0.008224f, -0.00867f, 0.00962f, -0.005325f, 0.00101f, -0.00856f, - 0.00735f, -0.00862f, -0.003899f, -0.004925f, 0.0069f, 0.004513f, -0.009895f, -0.00239f, 0.00992f, - -0.00149f, 0.001915f, -0.002604f, 0.0095f, 0.007416f, 0.005016f, -0.002281f, 0.008125f, -0.009476f, - -0.009056f, 0.003843f, -0.002602f, 0.0089f, 0.003674f, 0.00132f, -0.00627f, 0.009186f, 0.006226f, - -0.00442f, 0.003323f, -0.00282f, 0.00831f, 0.007153f, -0.00724f, -0.002815f, -0.0001028f, 0.00809f, - 0.00871f, -0.007435f, -0.0018835f, 0.002344f, 0.00975f, -0.00286f, -0.00835f, -0.003582f, -0.000401f, - 0.007904f, -0.00499f, 0.003502f, -0.009605f, 0.00367f, -0.007473f, -0.003994f, -0.002377f, 0.00413f, - 0.000489f, 0.005356f, 0.00786f, 0.00476f, -0.005436f, 0.005947f, -0.000724f, -0.00671f, 0.00569f, - -0.00826f, 0.00846f, -0.006634f, -0.003334f, -0.00802f, -0.007126f, -0.001247f, 0.00596f, -0.009056f, - 0.0005774f, -0.00648f, 0.006126f, -0.00668f, -0.004116f, -0.0002975f, 0.0002549f, -0.006977f, 0.002117f, - 0.0007377f, -0.00803f, -0.003365f, 0.00819f, -0.002949f, -0.00969f, 0.006794f, -0.007645f, -0.00099f, - 0.006966f, 0.009735f, 0.002426f, 0.005592f, 0.0003273f, -0.003353f, -0.002249f, -0.00514f, -0.002508f, - -0.008156f, -0.000979f, 0.0002344f, -0.006508f, 0.00781f, 0.001318f, -0.00498f, 0.00858f, -0.003828f, - -0.00504f, 0.00639f, -0.002424f, 0.002552f, 0.003736f, -0.00797f, 0.00761f, 0.006474f, 0.004166f, - -0.009026f, 0.00638f, 0.0097f, -0.007202f, -0.008224f, -0.005714f, 0.001017f, 0.004894f, -0.00898f, - 0.00874f, -0.004066f, -0.002527f, 0.000754f, -0.002802f, 0.009315f, -0.00817f, -0.008705f, -0.0006857f, - 0.006992f, 0.000913f, 0.005993f, 0.005013f, 0.009346f, -0.00574f, 0.008575f, 0.004166f, -0.00604f, - -0.0032f, 0.0014925f, 0.008865f, -0.006435f, -0.004417f, 0.000921f, 0.00928f, -0.001739f, 0.000586f, - 0.007904f, 0.007347f, 0.00331f, -0.0078f, -0.004005f, 0.0074f, -0.005825f, -0.007244f, -0.002626f, - -0.005917f, 0.006508f, 0.007263f, -0.001506f, -0.003498f, 0.00693f, 0.004097f, 0.00934f, -0.003752f, - -0.006752f, 0.001534f, 0.003906f, 0.001351f, 0.00367f, 0.0086f, -0.00536f, -0.001699f, 0.001546f, - -0.00277f, -0.0005455f, -0.002718f, -0.00583f, -0.0009003f, -0.001003f, 0.001612f, -0.003557f, -0.006004f, - 0.001006f, -0.00925f, -0.0008187f, -0.002907f, 0.003675f, 0.00394f, 0.005608f, -0.007133f, 0.001691f, - 0.006428f, 0.003813f, -0.00542f, -0.00583f, 0.002207f, -0.001088f, 0.00714f, 0.006233f, 0.002617f, - -0.00419f, -0.00916f, 0.004063f, -0.002892f, 0.000514f, 0.00224f, 0.0001853f, 0.0007997f, 0.0005536f, - -0.00639f, -0.007015f, 0.00309f, 0.006184f, -0.00982f, -0.0002372f, 0.0009604f, 0.00962f, 0.00678f, - -0.006653f, -0.004955f, -0.0003958f, 0.006428f, 0.004517f, 0.00672f, 0.003792f, -0.006046f, -0.00221f, - -0.00727f, -0.00748f, -0.004204f, -0.00982f, 0.0007663f, 0.00661f, -0.003647f, -0.006973f, 0.002605f, - 0.0001023f, 0.004536f, -0.00647f, 0.009735f, 0.00945f, -0.00967f, -0.0003023f, -0.0086f, 0.008736f, - -0.00701f, 0.00258f, -0.002716f, -0.00162f, -0.006996f, 0.007664f, 0.007595f, 0.00403f, 0.00233f, - -0.00481f, -0.001349f, -0.005196f, -0.009026f, 0.00606f, 0.001146f, 0.001434f, 0.00967f, 0.004448f, - -0.004837f, -0.007168f, -0.005234f, 0.002514f, 0.005306f, 0.003088f, 0.0018215f, -0.00558f, -0.006596f, - 0.002018f, -0.003408f, -0.001384f, -0.006065f, -0.001212f, -0.002604f, -0.00767f, 0.0001342f, -0.00851f, - -0.00392f, 0.003862f, 0.00701f, 0.003605f, -0.00965f, -0.00714f, 0.00956f, -0.00888f, -0.001019f, - 0.0024f, -0.00961f, -0.005238f, 0.005333f, 0.00871f, 0.007607f, -0.00756f, -0.004772f, -0.00912f, - -0.004047f, 0.003483f, 0.003294f, 0.006577f, -0.005505f, 0.00996f, 0.009964f, 0.0004187f, 0.005898f, - 0.00796f, -0.00165f, -0.003225f, -0.001258f, 0.00853f, -0.008865f, 0.00815f, -0.001117f, -0.00685f, - 0.001974f, 0.00915f, 0.00667f, 0.009605f, 0.007107f, 0.007698f, -0.004387f, -0.0003958f, -0.005062f, - 0.002188f, -0.004875f, -0.002922f, -0.0003638f, 0.006268f, 0.00785f, 0.006138f, 0.000505f, -0.0003953f, - -0.00841f, -0.00958f, -0.007126f, -0.003107f, 0.0078f, 0.003452f, -0.009254f, -0.00117f, -0.00878f, - -0.00911f, -0.0004418f, 0.00831f, -0.004524f, 0.003872f, 0.0044f, 0.006424f, 0.000634f, -0.004883f, - -0.002487f, -0.00512f, -0.00692f, -0.00521f, -0.001761f, 0.008575f, -0.006393f, 0.00351f, 0.00914f, - -0.006035f, -0.002264f, -0.009636f, 0.00918f, -0.00967f, -0.004944f, -0.0004587f, -0.002478f, -0.00814f, - 0.00816f, -0.004776f, 0.00954f, 0.003471f, -0.006172f, 0.003603f, 0.009346f, 0.00455f, 0.00982f, - 0.00476f, 0.0007815f, -0.003096f, -0.0000307f, -0.005608f, 0.009315f, 0.00374f, -0.007366f, -0.001133f, - -0.00944f, 0.006847f, 0.00631f, 0.005394f, 0.003088f, -0.00644f, -0.0004168f, -0.00923f, -0.003254f, - -0.005077f, 0.00637f, -0.001415f, -0.003235f, -0.001729f, -0.0082f, 0.006664f, -0.006f, 0.00663f, - -0.001547f, -0.004116f, -0.00542f, 0.00521f, -0.00286f, -0.00396f, 0.004547f, -0.0001363f, 0.000979f, - -0.00634f, -0.006767f, -0.0000603f, 0.008316f, 0.00756f, -0.004993f, -0.00645f, -0.002295f, 0.004288f, - 0.00901f, 0.008194f, -0.004192f, -0.002182f, -0.005836f, -0.003983f, -0.007183f, -0.0061f, 0.001098f, - -0.0009274f, 0.005207f, 0.0002102f, -0.003925f, 0.0056f, -0.00296f, 0.006134f, -0.007744f, 0.006126f, - -0.005047f, -0.006134f, 0.004818f, -0.005283f, 0.005272f, -0.00779f, -0.003086f, -0.000607f, 0.005486f, - 0.0005345f, -0.007305f, -0.0048f, -0.00876f, -0.00433f, 0.006165f, -0.002474f, -0.00953f, -0.002066f, - 0.002918f, 0.006382f, 0.003317f, 0.00826f, -0.009995f, 0.004143f, 0.00985f, -0.0002116f, -0.002989f, - -0.007805f, 0.0003633f, -0.00365f, -0.00916f, 0.009834f, 0.003513f, -0.00379f, 0.00736f, -0.00957f, - 0.005726f, -0.00772f, -0.00803f, -0.002052f, -0.005585f, -0.00781f, -0.00599f, 0.00954f, 0.002024f, - -0.005745f, 0.003054f, -0.009415f, -0.005054f, 0.00424f, 0.003218f, 0.00826f, 0.00817f, -0.00409f, - 0.00518f, 0.00216f, 0.006756f, -0.00411f, -0.003344f, -0.004898f, 0.00001055f, 0.006104f, 0.001057f, - -0.000702f, 0.00771f, -0.001743f, 0.001407f, -0.005104f, -0.007717f, -0.002026f, -0.006405f, 0.00886f, - 0.0006466f, -0.00951f, -0.00395f, -0.00814f, 0.00936f, 0.001143f, -0.00485f, 0.00584f, -0.002224f, - 0.00834f, -0.0003467f, -0.000945f, 0.007034f, -0.0009427f, -0.009445f, 0.0007753f, -0.006973f, 0.001507f, - 0.004105f, -0.002523f, 0.002872f, -0.001515f, -0.00869f, 0.003103f, 0.000389f, -0.00774f, 0.00441f, - -0.001002f, 0.00783f, -0.001102f, -0.003883f, -0.007187f, -0.0001678f, -0.00742f, -0.00686f, -0.006702f, - 0.00894f, -0.0003886f, -0.005543f, 0.00988f, 0.00411f, -0.00002635f, 0.00851f, -0.002317f, 0.00873f, - -0.00532f, -0.000835f, -0.004166f, -0.004036f, -0.003325f, -0.00799f, 0.003025f, 0.001356f, -0.009575f, - -0.00426f, -0.003431f, 0.00899f, -0.001455f, -0.0007324f, -0.00492f, 0.00989f, -0.0002503f, -0.00814f, - -0.00535f, -0.0035f, -0.001434f, 0.00635f, -0.005108f, 0.002626f, 0.00983f, 0.00672f, -0.00725f, - -0.004826f, 0.007275f, -0.006763f, 0.002605f, 0.002369f, -0.000976f, 0.00263f, 0.00465f, -0.009544f, - -0.0008945f, -0.00175f, -0.00799f, -0.0006666f, -0.00514f, -0.002842f, -0.001805f, 0.000992f, 0.00844f, - -0.000964f, -0.00636f, 0.001281f, 0.001717f, 0.00569f, 0.005917f, -0.00826f, -0.00859f, 0.004246f, - 0.004078f, -0.005566f, 0.00835f, -0.006893f, -0.005867f, 0.001273f, -0.005856f, 0.004448f, 0.004562f, - -0.00392f, -0.00855f, 0.0005975f, 0.006817f, -0.005524f, -0.0009527f, -0.00695f, -0.002172f, -0.003683f, - -0.00546f, 0.007698f, -0.00858f, 0.003372f, 0.001414f, -0.007786f, -0.00482f, 0.0083f, 0.007534f, - 0.00554f, 0.005768f, 0.001982f, -0.004597f, -0.001634f, 0.000563f, 0.00298f, 0.001768f, 0.0004673f, - 0.009285f, 0.00518f, 0.00798f, 0.00557f, -0.002504f, -0.00777f, 0.007904f, 0.00939f, -0.004646f, - 0.00527f, 0.00817f, 0.00526f, 0.007935f, -0.00413f, -0.002628f, -0.008194f, -0.006195f, 0.00884f, - 0.007282f, 0.003819f, -0.00904f, 0.001354f, -0.004368f, -0.0002527f, 0.004684f, -0.002907f, -0.003862f, - -0.002197f, 0.00858f, -0.00989f, 0.0004277f, 0.008484f, -0.008865f, 0.007275f, 0.00869f, -0.0000226f, - 0.0006456f, 0.0002527f, 0.003267f, 0.007793f, -0.001359f, -0.007423f, -0.004204f, 0.006824f, -0.00801f, - 0.006992f, -0.002182f, 0.00181f, 0.00966f, -0.00888f, -0.006527f, -0.00873f, -0.004623f, -0.006767f, - -0.006317f, 0.003017f, 0.002218f, 0.00805f, -0.00677f, -0.00974f, -0.0083f, 0.008095f, -0.00424f, - -0.009636f, 0.002298f, -0.00864f, 0.004044f, 0.000354f, 0.00949f, 0.00635f, 0.009026f, -0.00806f, - -0.0008893f, 0.002377f, -0.001343f, -0.001965f, -0.00442f, -0.006615f, -0.004166f, 0.00719f, -0.006306f, - -0.009674f, -0.00787f, 0.00712f, -0.003637f, 0.0008287f, 0.005352f, -0.004227f, -0.00549f, -0.0058f, - 0.00489f, -0.005165f, 0.001942f, 0.00591f, 0.00612f, 0.005306f, -0.00723f, 0.0051f, 0.002329f, - -0.001097f, 0.002022f, -0.006416f, -0.006577f, 0.003603f, 0.004303f, 0.007652f, 0.00884f, -0.003191f, - 0.002787f, -0.009254f, 0.003475f, -0.002266f, 0.00936f, -0.00793f, -0.00738f, 0.008194f, 0.003998f, - -0.0049f, 0.008965f, -0.000592f, 0.00711f, 0.00905f, -0.0006223f, -0.00735f, -0.00399f, -0.00808f, - -0.005367f, 0.00705f, 0.0007415f, 0.00864f, 0.00883f, -0.001155f, 0.00898f, 0.004406f, 0.00967f, - 0.004677f, -0.003113f, -0.0009146f, 0.00756f, 0.005733f, -0.003647f, 0.00446f, 0.00798f, 0.003305f, - -0.0000515f, -0.003746f, -0.002283f, -0.004913f, 0.003496f, -0.00773f, -0.003622f, 0.004974f, 0.00244f, - 0.001445f, -0.004826f, 0.002394f, 0.003075f, -0.0006714f, 0.002077f, -0.008675f, -0.001683f, 0.006065f, - -0.005512f, -0.001691f, 0.007507f, -0.00913f, -0.0008674f, -0.005f, 0.001398f, -0.004875f, -0.000567f, - -0.002668f, 0.001711f, -0.005306f, -0.00883f, -0.001738f, 0.0035f, -0.006702f, -0.006943f, 0.00884f, - -0.001516f, 0.00991f, 0.003082f, 0.006077f, -0.00437f, -0.000524f, -0.003986f, 0.007393f, 0.00986f, - -0.0008f, -0.001425f, -0.001999f, -0.002277f, -0.00901f, 0.004986f, 0.002085f, -0.0009236f, 0.001841f, - -0.003191f, 0.002205f, -0.00781f, 0.00397f, -0.002066f, -0.008835f, -0.004585f, -0.00953f, -0.006496f, - -0.006996f, 0.007233f, -0.00544f, 0.001037f, 0.0028f, -0.007935f, -0.0055f, -0.007866f, 0.00436f, - -0.0009565f, 0.001419f, 0.007587f, -0.0004418f, -0.00318f, -0.003857f, 0.007763f, 0.008896f, 0.004925f, - 0.00979f, -0.00928f, -0.001149f, 0.00678f, -0.002733f, -0.002972f, -0.001726f, 0.006706f, -0.001256f, - -0.00636f, 0.0004964f, 0.0005093f, -0.0008807f, 0.002026f, 0.00215f, -0.007603f, -0.00936f, -0.001715f, - -0.000935f, 0.0005236f, 0.000975f, 0.00786f, -0.002583f, 0.003407f, -0.002033f, -0.00217f, 0.001398f, - -0.0001027f, 0.0009203f, 0.0009117f, 0.00741f, -0.003925f, 0.0007577f, -0.006317f, 0.001241f, 0.005623f, - 0.001732f, 0.00374f, 0.00341f, 0.006714f, 0.001987f, -0.0037f, 0.00349f, -0.00431f, -0.00895f, - -0.009605f, -0.007214f, -0.00393f, -0.002583f, 0.00841f, 0.00782f, -0.005657f, -0.00655f, 0.003542f, - -0.004143f, 0.003202f, -0.002695f, 0.0002656f, 0.001797f, -0.0065f, 0.00628f, -0.0001239f, -0.002842f, - 0.00119f, -0.00979f, 0.006287f, -0.00646f, 0.00769f, 0.00831f, -0.0055f, 0.0005436f, 0.006554f, - -0.0001364f, 0.00699f, 0.004364f, -0.00227f, 0.00489f, 0.0026f, 0.0007696f, 0.0004685f, -0.001103f, - 0.001123f, -0.002245f, 0.006527f, -0.00828f, -0.002954f, -0.005226f, -0.005814f, -0.0002468f, -0.00884f, - 0.008606f, -0.00001067f, -0.00417f, -0.003376f, 0.00918f, -0.00776f, 0.002684f, 0.006145f, -0.0006285f, - -0.004173f, -0.004917f, -0.00678f, 0.00248f, 0.007263f, 0.002188f, -0.000213f, 0.00413f, 0.002676f, - 0.004948f, 0.007614f, -0.001845f, -0.00436f, 0.00591f, 0.004833f, -0.002085f, -0.006096f, 0.007378f, - 0.001922f, 0.006573f, 0.0016985f, 0.001776f, 0.00993f, -0.00829f, -0.0001675f, 0.004753f, 0.00008494f, - 0.00989f, 0.0008593f, 0.00636f, 0.0008297f, -0.00482f, -0.001189f, -0.001576f, -0.001331f, -0.00881f, - 0.00416f, -0.0008516f, -0.002281f, -0.00399f, -0.00603f, 0.0031f, 0.00994f, 0.0009284f, -0.00446f, - -0.00944f, 0.00272f, -0.001006f, -0.006733f, 0.00815f, 0.004932f, -0.004894f, 0.007156f, 0.0001193f, - -0.00745f, -0.000041f, -0.004074f, 0.00829f, 0.006042f, 0.006176f, -0.00509f, 0.005375f, -0.00554f, - -0.001078f, -0.002928f, 0.00813f, 0.004013f, 0.002552f, -0.0086f, 0.000254f, -0.005844f, 0.004093f, - -0.008224f, 0.006016f, -0.004883f, -0.006504f, 0.0003617f, -0.00008327f, 0.00382f, 0.00786f, -0.00915f, - -0.004963f, 0.003756f, 0.00689f, 0.00833f, 0.005455f, -0.00871f, -0.00872f, -0.0008054f, 0.001023f, - -0.003527f, -0.00735f, 0.00691f, 0.0092f, 0.004837f, -0.000847f, 0.0006146f, -0.00829f, 0.007317f, - -0.002722f, 0.005962f, -0.004005f, 0.002857f, 0.004414f, 0.00437f, -0.003452f, -0.004383f, -0.004654f, - 0.007866f, -0.000736f, -0.001158f, -0.005924f, -0.002207f, 0.00904f, 0.004505f, 0.005688f, 0.003448f, - -0.00414f, -0.00986f, -0.007446f, 0.00479f, 0.00314f, 0.0084f, 0.005714f, -0.002865f, 0.0008903f, - -0.00831f, 0.009415f, -0.001098f, 0.0007825f, -0.002136f, -0.009995f, 0.00798f, -0.0002449f, -0.00454f, - 0.00262f, -0.001926f, 0.003874f, -0.001987f, 0.00456f, 0.00994f, -0.00275f, -0.0013485f, 0.00911f, - -0.0011f, -0.005253f, 0.003504f, 0.004726f, -0.00821f, 0.00008196f, 0.004696f, 0.00473f, 0.006893f, - -0.002386f, 0.007145f, 0.007584f, -0.00542f, -0.000596f, 0.002354f, 0.001427f, 0.001673f, 0.004646f, - 0.004826f, 0.00847f, -0.005226f, 0.0003307f, 0.00536f, 0.002802f, 0.006264f, -0.000479f, 0.00222f, - 0.00817f, 0.005253f, 0.005257f, 0.001163f, 0.005417f, 0.006603f, 0.00514f, -0.003473f, -0.001948f, - 0.006695f, 0.003492f, 0.000456f, 0.00933f, 0.00283f, 0.006935f, -0.004658f, -0.0008807f, -0.001274f, - -0.0006485f, -0.00349f, -0.002163f, 0.00811f, 0.001358f, -0.002134f, 0.0005803f, -0.001573f, -0.005478f, - -0.00496f, 0.00968f, 0.001645f, -0.005756f, -0.0008974f, -0.00608f, -0.00528f, 0.00005585f, -0.005756f, - -0.004025f, -0.00772f, -0.0008974f, 0.00786f, 0.00396f, -0.008865f, -0.00645f, -0.00903f, 0.00802f, - -0.001602f, -0.0072f, 0.00736f, 0.002499f, -0.00839f, -0.00925f, 0.005943f, -0.00785f, -0.0081f, - -0.00802f, -0.005554f, 0.004078f, 0.009476f, -0.00877f, 0.00257f, -0.00439f, 0.006744f, -0.00419f, - -0.005413f, 0.002476f, -0.002373f, -0.006424f, 0.008736f, 0.006977f, 0.009735f, 0.009514f, 0.0009437f, - -0.001418f, 0.004066f, 0.004986f, -0.008644f, -0.007427f, -0.00988f, 0.006714f, -0.00118f, 0.00924f, - 0.000984f, 0.001846f, -0.00418f, 0.00341f, 0.0007763f, 0.008545f, 0.007313f, 0.00999f, -0.000682f, - 0.003416f, 0.00465f, -0.000676f, 0.00206f, -0.00654f, -0.002478f, 0.003826f, -0.001733f, -0.003693f, - -0.001044f, -0.004696f, 0.00688f, 0.00632f, 0.004963f, -0.00365f, -0.00772f, -0.001813f, -0.004898f, - -0.008385f, 0.002f, -0.007782f, -0.000961f, -0.003376f, 0.005157f, -0.002651f, 0.007935f, 0.003716f, - 0.009f, 0.001195f, -0.00982f, -0.00532f, -0.00828f, -0.000279f, -0.007626f, 0.00879f, 0.006996f, - 0.00942f, 0.002588f, -0.0097f, -0.00011635f, -0.001595f, -0.0006347f, -0.001799f, 0.00126f, 0.005085f, - 0.001865f, 0.003216f, -0.000628f, -0.00474f, -0.004925f, -0.00626f, 0.006287f, -0.005054f, 0.0079f, - -0.005177f, -0.009796f, -0.00805f, -0.001599f, 0.0085f, -0.008965f, -0.002886f, -0.008606f, -0.008965f, - 0.004757f, -0.009285f, 0.00548f, 0.00816f, -0.001941f, 0.00622f, 0.00755f, 0.00926f, 0.009125f, - -0.004364f, 0.006214f, -0.007137f, 0.001763f, -0.002035f, 0.004326f, 0.00653f, -0.007072f, -0.003609f, - -0.00504f, 0.004448f, -0.005928f, -0.007057f, -0.002148f, -0.004593f, -0.004467f, -0.009514f, -0.00854f, - 0.001922f, 0.007572f, -0.005016f, 0.003345f, 0.008575f, -0.00967f, 0.000532f, -0.002897f, -0.005013f, - -0.009834f, 0.00302f, 0.005688f, 0.005096f, -0.003983f, 0.00851f, 0.001554f, 0.00394f, 0.005688f, - -0.00537f, 0.00655f, 0.007526f, 0.002298f, 0.006126f, -0.00654f, -0.003433f, -0.00818f, -0.003098f, - -0.00822f, -0.00898f, -0.007675f, 0.005955f, -0.003288f, 0.006237f, -0.002f, 0.002678f, -0.00639f, - 0.00899f, 0.009766f, 0.009384f, -0.0001253f, 0.007263f, -0.003555f, -0.00988f, -0.00534f, -0.005356f, - -0.00805f, 0.001697f, 0.002516f, 0.0022f, 0.007397f, -0.002075f, 0.00247f, 0.004593f, -0.00543f, - 0.000358f, -0.005047f, 0.00476f, -0.003937f, -0.002851f, 0.007507f, 0.001389f, 0.003235f, 0.00205f, - -0.00474f, -0.0059f, 0.001666f, 0.002943f, -0.00954f, -0.00828f, -0.008804f, 0.002356f, 0.00836f, - 0.002785f, 0.00881f, -0.00716f, 0.005608f, 0.007534f, -0.00952f, 0.008965f, 0.0001839f, -0.007412f, - 0.00693f, -0.0000717f, 0.003857f, 0.00021f, 0.002897f, -0.00452f, -0.002552f, -0.005962f, -0.006737f, - -0.0008616f, 0.008606f, -0.005814f, -0.007397f, -0.006096f, 0.0099f, -0.00955f, 0.001134f, 0.00702f, - -0.0003154f, 0.00366f, -0.009186f, -0.001096f, 0.00984f, -0.005787f, 0.00369f, -0.001496f, 0.002462f, - -0.00623f, -0.00426f, -0.004837f, -0.00558f, -0.003311f, -0.0066f, 0.0077f, 0.003609f, 0.004646f, - 0.007996f, -0.00788f, 0.006348f, -0.00986f, 0.00817f, 0.0001633f, 0.0001796f, -0.00899f, -0.001417f, - 0.00972f, -0.00067f, -0.005535f, 0.001376f, 0.004974f, 0.0008225f, 0.008484f, -0.00589f, 0.00828f, - -0.007206f, -0.00599f, -0.0009503f, 0.000634f, -0.0001874f, -0.00654f, 0.00424f, -0.001244f, 0.002506f, - -0.009964f, -0.00828f, -0.002129f, -0.003368f, -0.0003746f, -0.006798f, -0.00383f, 0.008514f, 0.00818f, - -0.005497f, -0.0034f, -0.001681f, -0.004208f, -0.004337f, -0.0000664f, 0.003807f, -0.006073f, -0.003489f, - -0.00521f, 0.005047f, 0.00367f, 0.005657f, -0.004665f, 0.00671f, -0.003513f, 0.00869f, 0.008095f, - 0.007545f, 0.007214f, 0.002594f, -0.001637f, 0.005642f, 0.00526f, -0.007195f, 0.00413f, -0.006878f, - 0.009224f, 0.008514f, -0.0008245f, -0.004276f, 0.003633f, -0.000534f, -0.00916f, -0.00905f, 0.00827f, - 0.00458f, 0.002428f, -0.002975f, 0.00718f, -0.00888f, 0.004597f, 0.0004854f, -0.003778f, 0.006023f, - 0.001024f, -0.00484f, -0.0048f, 0.001374f, -0.004204f, -0.004368f, 0.005783f, 0.001205f, 0.007774f, - -0.001196f, -0.007015f, 0.00822f, -0.005875f, 0.003675f, 0.00279f, 0.001947f, -0.00342f, -0.000307f, - -0.003113f, -0.0017185f, -0.001276f, 0.0031f, -0.003546f, -0.003328f, 0.004078f, 0.00976f, -0.002756f, - 0.00487f, -0.007904f, 0.003613f, 0.007034f, -0.00624f, 0.0007896f, -0.0077f, -0.001974f, 0.007397f, - 0.005966f, -0.00627f, -0.005215f, 0.001178f, -0.00372f, 0.001711f, -0.001743f, 0.00248f, 0.0003877f, - 0.005028f, -0.00789f, -0.0007873f, -0.005753f, 0.00961f, 0.00961f, 0.002813f, 0.002567f, -0.007095f, - 0.003628f, 0.0001531f, 0.0002968f, -0.005493f, -0.0001053f, 0.00964f, 0.004997f, -0.00657f, 0.000724f, - -0.00563f, -0.009834f, -0.003574f, 0.003572f, -0.006805f, 0.007423f, 0.003103f, -0.005455f, 0.00881f, - -0.00777f, -0.003508f, 0.0075f, 0.00404f, -0.00747f, 0.003056f, 0.005142f, -0.007156f, -0.00923f, - 0.00401f, 0.007442f, 0.005077f, 0.007393f, 0.004276f, -0.00851f, -0.00263f, -0.006123f, 0.003536f, - 0.005672f, 0.00887f, -0.002031f, -0.00524f, -0.001232f, 0.000433f, 0.005398f, 0.009575f, 0.009705f, - -0.007267f, -0.00565f, -0.003963f, 0.007477f, -0.00216f, -0.007744f, -0.003347f, -0.00804f, -0.002136f, - -0.002407f, 0.00826f, -0.006294f, 0.005116f, 0.00007975f, -0.007267f, -0.003428f, -0.005497f, 0.001562f, - 0.003801f, -0.004646f, 0.004234f, 0.00979f, 0.00943f, -0.002726f, 0.0007277f, 0.0007143f, -0.00785f, - 0.00531f, 0.00747f, -0.006287f, 0.0001854f, 0.0005198f, -0.006645f, -0.000202f, -0.0004883f, -0.001946f, - 0.00904f, 0.00122f, 0.005608f, 0.002243f, -0.001732f, -0.00844f, -0.000973f, 0.00898f, 0.00686f, - 0.005028f, 0.005497f, -0.002182f, -0.007122f, 0.00955f, 0.00725f, 0.0000116f, 0.00504f, 0.00864f, - -0.00827f, -0.00476f, -0.001607f, 0.006145f, 0.00777f, 0.00974f, -0.002163f, 0.00857f, 0.006485f, - -0.004356f, 0.00010043f, 0.001632f, 0.005432f, 0.00846f, -0.006756f, 0.0005136f, -0.00836f, -0.009544f, - 0.005016f, -0.002354f, -0.004543f, 0.00419f, 0.00798f, -0.001813f, 0.005913f, 0.003494f, -0.002695f, - -0.009346f, -0.001584f, -0.00886f, -0.007374f, 0.00979f, 0.00961f, 0.0006576f, -0.0018015f, -0.009766f, - -0.00821f, -0.00924f, 0.0002823f, 0.003115f, -0.00788f, -0.005257f, 0.003233f, -0.00939f, 0.00617f, - 0.003914f, -0.002165f, 0.004215f, 0.00603f, 0.00498f, -0.000754f, 0.0079f, 0.00463f, -0.004574f, - -0.00494f, 0.0014715f, 0.007866f, 0.005215f, -0.00008845f, 0.00897f, -0.00431f, -0.00416f, 0.001195f, - -0.007626f, 0.006153f, 0.000168f, -0.001373f, 0.001575f, -0.00368f, -0.00926f, 0.003387f, -0.006237f, - -0.003305f, -0.004677f, 0.003044f, 0.002283f, -0.00855f, -0.00383f, 0.005135f, -0.003328f, -0.005f, - -0.006145f, 0.008995f, 0.00933f, -0.0004253f, -0.00697f, -0.00895f, 0.001212f, 0.007114f, 0.005264f, - 0.003008f, -0.0087f, 0.00578f, -0.008354f, 0.009056f, 0.004955f, -0.004787f, 0.001999f, -0.008705f, - -0.00722f, -0.00211f, 0.00471f, -0.0012245f, -0.0003836f, -0.00119f, -0.005363f, -0.00464f, -0.00628f, - -0.00855f, -0.000797f, 0.005047f, 0.0006003f, 0.002134f, 0.001738f, 0.006653f, -0.003204f, 0.00568f, - -0.0003297f, 0.0001493f, -0.00001603f, -0.001742f, -0.0004888f, -0.002066f, -0.003843f, 0.008514f, 0.001038f, - -0.006084f, 0.002298f, -0.00506f, 0.0028f, -0.00588f, 0.006187f, -0.004707f, 0.00482f, -0.005604f, - 0.0099f, 0.002226f, -0.00418f, -0.00867f, -0.001959f, 0.006733f, 0.00881f, -0.009636f, 0.006523f, - 0.00918f, -0.005287f, -0.00939f, 0.007725f, 0.002266f, -0.00813f, 0.00945f, -0.009735f, 0.00804f, - -0.00447f, -0.0006757f, -0.002113f, 0.0071f, -0.002256f, -0.001572f, -0.002722f, -0.005325f, 0.005184f, - 0.001163f, 0.00785f, -0.00908f, 0.000957f, -0.004894f, -0.00785f, 0.004192f, 0.005585f, -0.00466f, - 0.00659f, -0.009026f, 0.00393f, -0.00526f, -0.00882f, -0.006893f, -0.008286f, -0.000591f, -0.00449f, - -0.00882f, 0.004025f, -0.00812f, 0.002306f, 0.003397f, 0.0002433f, -0.00333f, 0.000728f, -0.001259f, - -0.0006423f, 0.00922f, 0.002346f, -0.00682f, -0.002346f, -0.00688f, 0.0004377f, 0.0007114f, -0.00878f, - 0.00824f, -0.007797f, 0.00000536f, 0.00009096f, 0.00981f, -0.001997f, -0.006676f, -0.006683f, -0.00412f, - 0.00085f, 0.004017f, 0.00645f, -0.00674f, 0.00846f, -0.00847f, -0.00199f, 0.003153f, -0.0002362f, - -0.0004025f, 0.007996f, 0.002476f, 0.00555f, 0.003628f, -0.00508f, 0.00728f, -0.00266f, 0.003223f, - -0.007328f, -0.00689f, -0.00229f, -0.001114f, 0.002768f, -0.001708f, 0.003847f, -0.007248f, -0.00689f, - -0.007065f, -0.00772f, 0.005745f, 0.008804f, 0.006092f, 0.005795f, 0.001585f, 0.005386f, -0.005962f, - -0.0004244f, 0.008804f, 0.003803f, 0.000961f, 0.00976f, 0.0005674f, 0.00905f, 0.00982f, 0.005295f, - -0.00009507f, 0.005775f, -0.002659f, -0.001253f, -0.006416f, 0.008194f, 0.00945f, 0.006752f, -0.00935f, - 0.003845f, -0.006237f, 0.00415f, 0.008095f, -0.00645f, -0.009865f, 0.000944f, 0.00811f, 0.00841f, - 0.0002704f, -0.00681f, 0.00514f, -0.005535f, -0.00543f, -0.007355f, 0.006424f, -0.0012665f, -0.007423f, - 0.00501f, 0.0071f, -0.0001485f, -0.004772f, -0.007965f, -0.002703f, 0.00977f, -0.0002038f, 0.00664f, - 0.002275f, 0.004887f, 0.00762f, 0.001178f, 0.001114f, -0.000678f, -0.001807f, -0.004963f, 0.001163f, - 0.00273f, -0.00955f, 0.002756f, 0.0005674f, -0.00551f, -0.00862f, -0.009026f, 0.00948f, -0.00195f, - -0.001241f, 0.00402f, 0.002943f, 0.0001924f, 0.001133f, -0.004086f, 0.002512f, -0.0058f, 0.00159f, - -0.00808f, 0.00575f, -0.00857f, -0.00701f, 0.009544f, -0.001974f, 0.002966f, -0.004898f, -0.001783f, - 0.003128f, -0.005596f, -0.00751f, -0.004704f, 0.00719f, -0.00949f, -0.001564f, 0.003157f, 0.005245f, - -0.00424f, 0.004654f, -0.00425f, -0.008766f, 0.00912f, -0.005386f, 0.00439f, -0.002386f, 0.00576f, - 0.003857f, -0.007004f, 0.0005574f, 0.006065f, -0.0068f, 0.00985f, -0.0003872f, -0.004654f, 0.008675f, - 0.00801f, 0.001015f, 0.0019045f, 0.007225f, 0.0004132f, -0.005173f, 0.001682f, -0.002037f, -0.003492f, - 0.003092f, 0.00231f, 0.007294f, 0.002605f, -0.00941f, -0.004112f, 0.0082f, 0.002506f, -0.00819f, - -0.0041f, 0.009476f, 0.003584f, -0.00585f, 0.00462f, -0.006348f, 0.00913f, -0.003197f, -0.004265f, - -0.00945f, -0.001356f, 0.007545f, 0.002289f, 0.001126f, 0.002977f, 0.00948f, -0.00703f, -0.002531f, - -0.00868f, -0.00619f, -0.0004635f, 0.009254f, -0.0005174f, -0.00736f, -0.006264f, 0.00779f, -0.002342f, - 0.004997f, 0.00269f, 0.00509f, -0.0041f, 0.00506f, 0.002752f, -0.006416f, 0.00794f, 0.003563f, - 0.00551f, 0.006554f, -0.008286f, -0.00296f, 0.008354f, -0.0079f, -0.006348f, 0.001052f, 0.0007205f, - 0.00506f, 0.000453f, -0.00993f, -0.006424f, 0.005787f, -0.001206f, 0.00876f, -0.004513f, -0.002857f, - -0.00701f, -0.00621f, 0.003498f, 0.00986f, -0.00846f, -0.00128f, 0.006294f, -0.003735f, 0.00843f, - -0.00841f, -0.007465f, -0.007504f, -0.00734f, 0.00635f, 0.004498f, -0.005688f, -0.003014f, 0.00892f, - 0.00982f, 0.00793f, -0.002365f, 0.003353f, -0.004486f, -0.00651f, -0.00361f, -0.00418f, -0.00786f, - 0.007812f, 0.001912f, -0.008156f, -0.00809f, -0.001939f, -0.003836f, -0.001578f, 0.00331f, -0.008736f, - -0.006138f, -0.00877f, -0.007595f, 0.002537f, -0.007336f, -0.006477f, -0.007767f, -0.00853f, -0.003601f, - -0.000952f, 0.007683f, -0.006283f, 0.00796f, 0.006012f, -0.001464f, 0.00718f, -0.0025f, -0.001972f, - 0.004166f, 0.0002615f, 0.00496f, 0.006516f, 0.0016f, -0.008415f, -0.002398f, -0.001027f, 0.0000037f, - 0.00827f, 0.003153f, 0.004826f, 0.00619f, -0.00673f, -0.00834f, -0.001702f, 0.006664f, -0.00465f, - -0.00909f, 0.003893f, 0.005188f, 0.009415f, 0.00191f, 0.00274f, -0.002968f, -0.003834f, 0.00495f, - 0.005985f, -0.002945f, 0.007317f, -0.00934f, -0.001007f, -0.005333f, -0.008415f, -0.0067f, 0.006084f, - 0.00689f, -0.002855f, -0.009254f, -0.00402f, 0.007694f, -0.007633f, -0.008865f, -0.00846f, 0.007317f, - -0.00915f, -0.009476f, 0.002455f, -0.001528f, -0.001358f, 0.0016985f, -0.001466f, -0.002584f, -0.006992f, - -0.00427f, 0.000739f, 0.00258f, 0.0042f, 0.001303f, 0.00963f, 0.002176f, -0.00952f, 0.0005264f, - -0.005226f, 0.008804f, 0.005707f, -0.00763f, -0.00875f, 0.0002716f, -0.00251f, -0.00646f, -0.00666f, - 0.00936f, 0.005447f, -0.00562f, 0.00967f, 0.001811f, -0.00963f, 0.001052f, 0.00807f, -0.002794f, - -0.00845f, 0.00685f, -0.003199f, 0.003119f, -0.004333f, 0.0001079f, -0.00884f, -0.002384f, -0.0008464f, - -0.0053f, 0.0008607f, 0.005f, 0.003218f, -0.001972f, 0.003925f, -0.000635f, -0.003868f, -0.00636f, - -0.005894f, 0.0005355f, 0.00921f, -0.006687f, 0.00629f, -0.001168f, -0.00646f, 0.005547f, -0.00963f, - -0.004078f, 0.002125f, 0.008995f, 0.006187f, 0.007397f, -0.00656f, -0.006527f, 0.006042f, -0.001503f, - -0.00624f, 0.003023f, -0.009995f, -0.002466f, 0.00351f, 0.003439f, -0.003235f, 0.008026f, 0.004158f, - 0.003117f, -0.005856f, 0.00461f, -0.001134f, 0.004257f, 0.00933f, 0.00992f, -0.008156f, 0.004356f, - 0.00917f, -0.007904f, 0.0004003f, -0.00912f, -0.003895f, -0.005566f, -0.00899f, -0.0001261f, -0.00272f, - -0.00529f, -0.005215f, -0.000558f, -0.006172f, 0.008354f, 0.000414f, -0.004574f, 0.00527f, 0.004333f, - -0.00728f, -0.00797f, 0.0096f, -0.00344f, -0.00881f, -0.00368f, 0.00844f, -0.00517f, -0.005783f, - -0.002708f, -0.006958f, 0.00088f, 0.007393f, 0.002115f, 0.00502f, -0.007347f, 0.002518f, -0.007164f, - 0.003891f, -0.006386f, 0.004723f, -0.007137f, 0.00979f, 0.00728f, -0.007385f, -0.003569f, -0.001245f, - 0.007244f, -0.004177f, 0.005627f, -0.001364f, 0.007786f, -0.003647f, 0.00975f, 0.003262f, 0.006668f, - 0.007492f, -0.002676f, 0.00452f, 0.00613f, 0.009895f, -0.0000653f, -0.0002944f, 0.0095f, 0.00829f, - 0.003607f, -0.00763f, 0.001573f, 0.00708f, 0.001338f, 0.00761f, -0.00934f, 0.00425f, 0.004677f, - 0.004356f, -0.00835f, -0.003391f, -0.00722f, 0.00877f, 0.001739f, -0.0078f, -0.003801f, -0.002934f, - 0.00592f, -0.00832f, -0.005596f, 0.00847f, 0.002663f, -0.002655f, -0.00461f, 0.001812f, -0.005447f, - 0.00393f, -0.0001626f, -0.0099f, -0.005177f, -0.000107f, -0.004513f, -0.00942f, -0.004494f, -0.0002584f, - 0.00558f, 0.00919f, 0.00483f, -0.003881f, 0.0000862f, 0.00472f, 0.002277f, 0.00452f, -0.005043f, - -0.00812f, 0.006695f, -0.001397f, 0.00708f, 0.00666f, 0.009445f, 0.002443f, 0.00672f, 0.00742f, - 0.0047f, -0.0099f, -0.001733f, -0.001216f, 0.002306f, 0.00525f, 0.006687f, 0.007397f, -0.004185f, - -0.007645f, 0.00497f, 0.002726f, -0.004883f, 0.00545f, 0.001207f, -0.003443f, 0.00855f, -0.008575f, - -0.00995f, 0.00938f, 0.001395f, -0.005894f, -0.004715f, 0.001335f, 0.007214f, -0.00979f, -0.0009723f, - -0.00884f, -0.00325f, -0.006447f, -0.0002873f, -0.006546f, -0.00914f, 0.00311f, 0.001508f, -0.008644f, - 0.003849f, -0.00224f, -0.0073f, 0.004158f, -0.007076f, -0.00458f, -0.002794f, 0.00691f, -0.00991f, - -0.002531f, -0.007236f, 0.00291f, 0.003098f, -0.00666f, 0.00618f, -0.001502f, -0.008026f, 0.0001609f, - -0.001733f, 0.00476f, 0.007725f, -0.007076f, -0.005398f, -0.001904f, 0.002743f, 0.001987f, 0.002935f, - 0.006363f, 0.007755f, -0.002127f, -0.002626f, 0.003273f, 0.0044f, -0.003975f, -0.00273f, -0.001413f, - -0.008736f, -0.005775f, 0.00445f, -0.007412f, -0.00647f, 0.0046f, 0.007393f, -0.0003533f, -0.00926f, - -0.006104f, 0.001658f, 0.00642f, -0.00962f, 0.00724f, -0.00032f, -0.00848f, -0.007442f, 0.001179f, - -0.004684f, -0.001757f, 0.002796f, 0.00741f, 0.002192f, 0.003952f, 0.002794f, -0.00581f, 0.00923f, - -0.000795f, -0.008545f, 0.0004318f, 0.007034f, 0.001034f, -0.009224f, 0.0037f, 0.00736f, -0.007587f, - -0.001963f, 0.00037f, -0.001584f, -0.0001048f, 0.00979f, -0.007168f, 0.003159f, 0.00205f, -0.0082f, - 0.000802f, 0.00919f, 0.005257f, 0.000411f, 0.006824f, 0.00543f, -0.00202f, -0.008705f, -0.0084f, - -0.0008135f, -0.001487f, -0.00698f, 0.00766f, 0.0003076f, 0.002989f, 0.00785f, 0.004498f, 0.004917f, - 0.001951f, 0.00489f, -0.000938f, 0.00438f, -0.00010777f, 0.00993f, -0.003304f, -0.00859f, 0.00656f, - -0.009926f, 0.00572f, 0.009445f, 0.004425f, 0.00595f, 0.005547f, -0.00555f, 0.00912f, -0.00391f, - 0.00417f, -0.00732f, -0.00944f, -0.001693f, 0.003319f, 0.007904f, 0.004158f, 0.008026f, -0.004173f, - 0.00174f, 0.00794f, 0.001028f, -0.0004673f, -0.01f, 0.005222f, 0.00968f, 0.00173f, -0.00965f, - 0.00775f, 0.00758f, -0.006916f, -0.006714f, 0.001373f, -0.00906f, 0.005737f, -0.00403f, 0.003036f, - -0.00832f, -0.001393f, -0.00903f, -0.007996f, -0.001152f, 0.00698f, -0.00907f, 0.00455f, 0.0006533f, - -0.001487f, -0.0074f, 0.005177f, 0.00607f, 0.006973f, -0.002907f, -0.008446f, 0.004932f, 0.00457f, - -0.001466f, 0.007805f, 0.002241f, -0.002304f, -0.006294f, -0.00625f, 0.002876f, 0.005146f, 0.000603f, - 0.00309f, -0.00912f, 0.002026f, 0.0096f, -0.000262f, 0.00007397f, 0.001089f, -0.00799f, 0.00948f, - -0.0007935f, -0.00997f, 0.001588f, 0.009674f, -0.0006795f, 0.00958f, 0.00604f, -0.00975f, -0.001219f, - -0.005093f, 0.00061f, 0.0002333f, 0.006195f, 0.006245f, 0.00548f, 0.006554f, 0.009155f, 0.003277f, - -0.0027f, -0.002827f, 0.002981f, 0.00059f, -0.00643f, 0.001903f, 0.006195f, -0.001568f, -0.002792f, - 0.001151f, -0.00969f, 0.0001194f, 0.006084f, -0.00789f, -0.00746f, -0.000923f, -0.002726f, -0.0009117f, - -0.009155f, 0.0003529f, 0.002682f, 0.00394f, 0.0003521f, -0.006798f, 0.f, 0.006145f, -0.006645f, - -0.0000278f, 0.005737f, -0.003601f, 0.008156f, 0.006905f, 0.00996f, 0.00752f, 0.00513f, -0.001212f, - -0.005558f, -0.009796f, -0.009056f, 0.001026f, -0.003756f, 0.002048f, 0.00501f, 0.004303f, 0.00885f, - -0.002895f, 0.00885f, 0.00881f, 0.008965f, -0.00772f, 0.000675f, -0.00361f, 0.009254f, 0.00947f, - 0.002851f, -0.00443f, -0.0008383f, -0.001255f, 0.007088f, -0.00718f, -0.001156f, 0.00496f, 0.00543f, - 0.009575f, -0.00932f, -0.00289f, -0.00961f, -0.005413f, 0.00887f, 0.008194f, 0.007217f, 0.001349f, - -0.00616f, -0.00132f, 0.008255f, 0.008354f, -0.001022f, -0.00916f, 0.0012f, 0.00942f, -0.005272f, - -0.007713f, 0.00924f, -0.002554f, 0.00812f, 0.002947f, 0.006466f, 0.007267f, 0.004383f, 0.006683f, - -0.004047f, -0.001562f, 0.0000953f, -0.00198f, -0.001826f, -0.005013f, 0.008095f, -0.00878f, -0.006645f, - 0.005096f, -0.0003052f, -0.00815f, -0.00986f, 0.0081f, 0.00661f, -0.00097f, 0.006916f, -0.007244f, - 0.004272f, 0.00444f, -0.00546f, 0.003994f, -0.00191f, 0.001437f, 0.00408f, -0.000537f, -0.007557f, - 0.0009537f, -0.00972f, -0.006805f, -0.007835f, -0.000847f, 0.005665f, -0.0085f, 0.005657f, 0.006027f, - -0.009285f, 0.00652f, 0.005535f, 0.009224f, 0.0007205f, -0.00692f, -0.00881f, 0.005817f, -0.00506f, - -0.00877f, -0.00991f, -0.001778f, -0.002598f, -0.00755f, 0.003616f, 0.00898f, 0.002537f, -0.001853f, - -0.000725f, 0.00202f, 0.001978f, -0.0008383f, 0.004784f, -0.0003638f, -0.00895f, 0.00243f, -0.00395f, - 0.001955f, -0.002853f, -0.005f, 0.00976f, -0.0006366f, -0.002913f, 0.002592f, -0.00857f, -0.0006256f, - -0.0001568f, 0.003605f, -0.001659f, 0.000935f, -0.005302f, 0.00593f, -0.002056f, 0.003723f, 0.005863f, - 0.0089f, -0.004147f, -0.007706f, 0.0006566f, 0.003222f, -0.00247f, 0.005234f, -0.009605f, -0.00279f, - 0.00031f, -0.008606f, -0.00952f, 0.001459f, 0.008446f, -0.00921f, 0.00895f, -0.00951f, -0.002565f, - 0.00084f, 0.006874f, -0.004066f, 0.004723f, -0.0006924f, 0.00932f, 0.003325f, -0.006763f, 0.004936f, - -0.003439f, -0.000998f, -0.008224f, -0.00412f, 0.006996f, -0.007057f, -0.00992f, -0.004974f, 0.001361f, - -0.009865f, 0.00982f, -0.00375f, -0.002928f, 0.00166f, -0.007782f, -0.001827f, 0.000567f, -0.002838f, - -0.0002354f, -0.00259f, -0.00849f, -0.001284f, 0.002161f, 0.001709f, -0.00802f, 0.00199f, -0.003202f, - 0.002773f, 0.009056f, -0.001113f, -0.006054f, -0.00209f, 0.007355f, 0.008194f, -0.005627f, -0.005226f, - -0.00478f, 0.001043f, 0.002869f, -0.00657f, -0.003176f, -0.004704f, -0.004574f, -0.00434f, 0.007328f, - 0.00895f, -0.00853f, -0.006207f, -0.00928f, -0.009476f, 0.009125f, 0.004627f, -0.004642f, -0.004658f, - 0.00919f, 0.003496f, 0.002165f, 0.00413f, -0.007694f, 0.003744f, 0.001043f, 0.002182f, -0.00698f, - -0.003906f, 0.00365f, 0.003763f, -0.0043f, 0.002554f, 0.0094f, 0.00586f, -0.00655f, -0.00171f, - -0.0009985f, -0.00851f, 0.00584f, 0.004883f, -0.007523f, 0.005016f, 0.003046f, 0.005917f, -0.006622f, - 0.00741f, -0.002499f, 0.0004418f, -0.003113f, 0.0003803f, 0.003252f, -0.00917f, 0.00506f, -0.006687f, - -0.00916f, 0.000701f, 0.00945f, -0.002863f, 0.00827f, 0.00938f, 0.003405f, -0.00935f, -0.00912f, - 0.00259f, 0.001822f, -0.00674f, 0.0008016f, -0.001132f, 0.00899f, 0.001555f, -0.0007024f, 0.00899f, - -0.00938f, -0.00109f, -0.00674f, 0.001553f, 0.00696f, 0.009415f, 0.0005765f, -0.0002084f, 0.004097f, - 0.005985f, 0.001656f, 0.005325f, -0.00839f, 0.003904f, 0.00822f, -0.003994f, 0.00635f, -0.000794f, - -0.00667f, 0.002296f, -0.002838f, -0.00975f, -0.001081f, 0.005127f, 0.001922f, 0.005127f, -0.008156f, - -0.006653f, 0.00935f, -0.00302f, -0.00052f, -0.005894f, -0.009674f, -0.00613f, 0.009705f, -0.006924f, - 0.004726f, 0.004784f, -0.00146f, 0.001746f, -0.002958f, 0.009636f, 0.005665f, -0.000724f, 0.004875f, - -0.001856f, -0.002975f, 0.0071f, 0.002045f, 0.00507f, -0.007042f, -0.006958f, 0.002089f, -0.003504f, - 0.0004888f, -0.005943f, 0.007607f, -0.003822f, -0.004692f, 0.0001357f, 0.004456f, -0.00799f, -0.006413f, - 0.002268f, 0.00888f, -0.00872f, -0.004936f, -0.0091f, -0.00353f, -0.0052f, -0.003223f, -0.00825f, - 0.003952f, -0.002771f, 0.006344f, 0.00862f, 0.00904f, -0.00221f, -0.0001844f, -0.00227f, 0.000672f, - -0.004852f, -0.005795f, -0.002771f, -0.00653f, -0.002579f, 0.006954f, 0.002605f, -0.00804f, 0.00432f, - 0.0000249f, -0.004536f, -0.008514f, 0.00618f, -0.002804f, 0.00895f, -0.009094f, -0.009155f, -0.003836f, - -0.0008125f, 0.007385f, 0.00554f, -0.0004065f, -0.00517f, -0.006493f, -0.007027f, 0.003748f, -0.00834f, - -0.006668f, 0.00982f, -0.001279f, -0.0008125f, 0.000629f, 0.003786f, -0.00859f, -0.000755f, 0.0004015f, - -0.003065f, -0.007042f, -0.00967f, 0.0004108f, 0.00947f, -0.007076f, -0.0006723f, 0.006496f, -0.001414f, - 0.008194f, -0.000413f, 0.008125f, 0.00146f, -0.006462f, 0.002676f, -0.005474f, -0.003166f, 0.006027f, - 0.001129f, 0.001874f, 0.001855f, 0.00766f, -0.006634f, -0.000823f, -0.00303f, 0.005795f, 0.00279f, - 0.002512f, 0.006172f, 0.006474f, 0.000632f, -0.007507f, 0.001753f, -0.002531f, 0.002895f, -0.007034f, - 0.004955f, -0.0096f, 0.007793f, -0.00803f, -0.0095f, 0.006615f, -0.00854f, 0.00214f, 0.00532f, - -0.00995f, 0.00772f, 0.006977f, -0.00873f, -0.00617f, -0.00808f, -0.00479f, -0.00397f, 0.00456f, - 0.003944f, 0.0001737f, 0.001538f, -0.005756f, 0.009964f, 0.002096f, -0.00984f, 0.001642f, 0.003113f, - -0.00802f, -0.003527f, -0.00876f, 0.003502f, -0.00562f, 0.003378f, 0.006676f, 0.000644f, 0.002071f, - -0.00587f, -0.00771f, -0.0009327f, -0.00441f, 0.007095f, 0.005478f, 0.00781f, 0.00952f, 0.006176f, - 0.0003223f, 0.00818f, 0.00678f, -0.004147f, -0.00999f, 0.00903f, -0.00987f, 0.007553f, -0.00438f, - 0.005028f, 0.0003302f, 0.0002394f, -0.005104f, -0.002537f, -0.005333f, 0.004635f, -0.005787f, -0.005177f, - -0.005615f, -0.00463f, 0.0001181f, -0.00814f, 0.00656f, -0.00132f, 0.003115f, -0.006237f, -0.00123f, - -0.008804f, -0.002682f, -0.00877f, 0.00749f, -0.00863f, 0.004997f, 0.007736f, -0.00963f, -0.002966f, - -0.00405f, -0.004005f, 0.006763f, -0.00639f, 0.000797f, 0.002903f, 0.00967f, -0.0009356f, -0.00675f, - 0.00917f, -0.0048f, 0.0088f, 0.007168f, 0.00394f, 0.005524f, 0.0002052f, -0.0004148f, 0.0059f, - -0.002966f, 0.008f, -0.00955f, -0.008484f, 0.00856f, 0.003498f, -0.005703f, 0.004974f, 0.0089f, - -0.004208f, -0.005203f, -0.007496f, 0.003206f, -0.007713f, -0.0068f, 0.00437f, 0.008896f, 0.0007954f, - 0.002823f, -0.002413f, -0.004665f, 0.0007997f, -0.005394f, 0.00806f, -0.001563f, -0.001497f, -0.005314f, - -0.00952f, 0.0093f, 0.005066f, 0.00407f, 0.004482f, -0.00788f, 0.001537f, 0.00806f, -0.005013f, - -0.003735f, 0.00956f, -0.00946f, 0.002008f, -0.006847f, 0.003038f, 0.003141f, -0.005787f, 0.005665f, - 0.002735f, -0.002401f, 0.003057f, 0.000753f, 0.004444f, 0.00805f, 0.001004f, -0.0065f, -0.001637f, - 0.0065f, 0.004467f, -0.00896f, -0.006573f, -0.007236f, 0.007435f, -0.00392f, -0.001908f, -0.008736f, - -0.0007854f, 0.000625f, 0.003866f, -0.002039f, -0.002193f, -0.006447f, -0.00793f, -0.002161f, -0.0073f, - 0.00472f, 0.001314f, 0.006416f, -0.009224f, 0.00668f, 0.008865f, 0.009155f, -0.004684f, 0.00807f, - -0.0008855f, 0.002748f, 0.001529f, -0.004765f, -0.001041f, 0.00859f, 0.005573f, 0.00433f, -0.009155f, - -0.007614f, 0.00472f, -0.0009365f, 0.00003576f, 0.002872f, -0.003223f, 0.003098f, -0.001782f, 0.001795f, - 0.006645f, 0.002974f, -0.0094f, 0.005337f, 0.00877f, -0.00649f, 0.00959f, -0.008156f, -0.0008917f, - 0.006607f, 0.00905f, -0.001238f, -0.001246f, -0.002775f, -0.002815f, 0.00451f, -0.004486f, 0.003998f, - 0.00956f, -0.00981f, 0.005096f, -0.00876f, -0.002571f, 0.002287f, -0.002996f, -0.008896f, -0.006973f, - 0.003885f, 0.001993f, -0.006523f, 0.0048f, -0.005745f, 0.004883f, 0.005627f, -0.00919f, 0.00978f, - -0.000961f, 0.00954f, 0.003023f, 0.006172f, -0.00371f, -0.00509f, -0.00392f, -0.00989f, 0.00212f, - -0.00917f, -0.009865f, 0.00965f, 0.003618f, -0.004303f, 0.00628f, 0.002913f, 0.0086f, -0.00881f, - 0.004963f, -0.006886f, -0.00000197f, -0.008736f, 0.004147f, -0.003227f, -0.001696f, -0.003815f, 0.00957f, - -0.00994f, -0.006596f, 0.00925f, 0.007454f, -0.001091f, -0.0004747f, 0.009026f, 0.00854f, 0.00133f, - -0.00263f, 0.00543f, 0.003836f, 0.004856f, -0.006695f, 0.005478f, -0.008415f, 0.003187f, -0.00998f, - 0.009514f, 0.002903f, -0.005165f, -0.0004752f, -0.009f, -0.008965f, 0.005806f, 0.006153f, 0.00893f, - -0.00877f, -0.006866f, 0.004154f, -0.008125f, 0.007202f, -0.005573f, 0.004f, -0.002998f, 0.002878f, - 0.005672f, 0.00607f, -0.004578f, 0.001471f, -0.002363f, -0.00006247f, 0.0007734f, 0.001287f, -0.0006113f, - 0.003868f, -0.00696f, -0.003672f, 0.00688f, -0.00908f, -0.00665f, 0.003775f, -0.006355f, -0.005634f, - 0.00421f, 0.00937f, -0.004856f, 0.002947f, -0.003933f, -0.0086f, 0.00988f, 0.00546f, -0.0008826f, - 0.00433f, 0.007183f, 0.002195f, -0.005333f, 0.006683f, 0.003277f, 0.001082f, 0.00579f, -0.00623f, - -0.00966f, -0.002708f, 0.00627f, 0.00581f, -0.0095f, 0.008896f, -0.002478f, -0.00966f, 0.007526f, - -0.001696f, 0.002949f, 0.001381f, -0.00684f, -0.005974f, 0.00413f, 0.00085f, 0.004032f, 0.004807f, - 0.0004041f, -0.006992f, 0.003105f, -0.0002321f, 0.00867f, 0.00237f, 0.00464f, -0.00887f, -0.005978f, - -0.005844f, -0.00826f, 0.005035f, 0.00953f, 0.006485f, -0.00415f, -0.00873f, -0.006836f, 0.00572f, - 0.001606f, -0.00828f, -0.001708f, -0.006145f, 0.00914f, -0.00965f, 0.005646f, -0.00857f, 0.006638f, - 0.00327f, 0.00424f, 0.001341f, 0.003788f, -0.000685f, 0.0061f, -0.00782f, 0.003334f, -0.0068f, - 0.001557f, 0.005825f, -0.0058f, -0.000689f, 0.007496f, 0.00708f, -0.006107f, 0.007668f, -0.001199f, - -0.00948f, 0.00668f, -0.003176f, 0.003733f, -0.001616f, 0.006714f, 0.00789f, 0.001432f, 0.004112f, - 0.00384f, 0.009636f, 0.007053f, -0.00374f, 0.00495f, 0.00959f, 0.004135f, 0.00721f, 0.007225f, - -0.0008454f, 0.008286f, 0.0000413f, 0.003618f, 0.004047f, 0.00454f, -0.0079f, 0.00869f, 0.00706f, - -0.007492f, 0.00493f, 0.00689f, -0.0005245f, 0.00604f, 0.00357f, 0.00598f, -0.00959f, -0.003292f, - 0.0008936f, 0.00904f, 0.002445f, 0.00894f, 0.00819f, 0.003876f, 0.002953f, 0.003384f, -0.006687f, - 0.002918f, -0.0056f, -0.0003066f, -0.001384f, 0.007675f, 0.0009513f, -0.007656f, 0.00804f, -0.000968f, - -0.000649f, 0.00913f, -0.0041f, 0.0002625f, -0.0001359f, -0.008865f, 0.002167f, 0.00687f, -0.00606f, - 0.0003486f, 0.0003984f, -0.004803f, 0.006454f, -0.004997f, 0.00892f, -0.007423f, -0.001277f, -0.007504f, - 0.00762f, 0.003056f, 0.001508f, -0.00391f, 0.00859f, -0.00768f, -0.003675f, 0.002884f, 0.006508f, - 0.000506f, 0.002567f, 0.007607f, -0.003233f, 0.0073f, 0.003862f, -0.003817f, 0.00735f, 0.002506f, - -0.00823f, -0.006706f, 0.005676f, -0.00931f, -0.004025f, 0.006542f, 0.000566f, 0.00919f, -0.002083f, - -0.00783f, 0.0013485f, -0.00839f, 0.0089f, -0.0066f, 0.009674f, -0.00821f, 0.0061f, -0.002129f, - 0.00598f, 0.008865f, 0.00513f, -0.00582f, -0.00459f, -0.00962f, -0.00962f, -0.005966f, -0.007187f, - 0.00995f, 0.004295f, 0.004467f, 0.001008f, -0.00809f, 0.00922f, -0.00768f, -0.00994f, -0.005596f, - 0.006706f, 0.00748f, 0.00942f, -0.00396f, 0.001708f, -0.00961f, 0.005653f, 0.00976f, -0.001643f, - 0.003786f, -0.002264f, 0.002747f, -0.0003808f, 0.000354f, 0.001055f, 0.00584f, 0.006306f, 0.005363f, - -0.006443f, -0.0005603f, 0.00871f, 0.00683f, -0.002083f, -0.00611f, -0.006573f, -0.0027f, 0.004917f, - 0.006207f, 0.004932f, -0.00669f, 0.005665f, 0.002796f, 0.00901f, -0.000798f, 0.001478f, 0.003788f, - 0.000707f, 0.00934f, 0.005985f, -0.00145f, -0.0008683f, 0.00339f, 0.002144f, 0.006596f, 0.00984f, - 0.00258f, 0.0048f, 0.0003848f, -0.002644f, -0.002129f, -0.001171f, -0.002369f, -0.007328f, 0.00841f, - -0.005325f, 0.00968f, -0.00982f, -0.003754f, -0.0006895f, 0.00784f, 0.003864f, 0.008316f, -0.003483f, - 0.004986f, -0.003044f, -0.005714f, -0.001846f, -0.001568f, 0.0003648f, 0.00724f, 0.006336f, -0.003222f, - -0.006836f, 0.001214f, -0.003124f, -0.0006356f, -0.001073f, 0.002682f, -0.007538f, -0.001701f, -0.00883f, - 0.00986f, 0.006336f, 0.0011f, -0.00879f, -0.005875f, 0.004025f, 0.00613f, 0.004856f, -0.008896f, - 0.0006967f, 0.0064f, 0.002707f, -0.002317f, -0.002214f, 0.002409f, -0.000346f, -0.006924f, 0.001986f, - -0.003166f, 0.00836f, -0.00899f, 0.0034f, -0.007755f, 0.00407f, 0.00807f, 0.0076f, 0.003824f, - 0.003876f, -0.00853f, -0.00649f, -0.003506f, 0.001777f, -0.009705f, -0.00516f, -0.0094f, 0.00939f, - -0.00786f, -0.00911f, -0.000737f, 0.000864f, -0.00851f, 0.00786f, -0.003422f, -0.00832f, -0.0007277f, - 0.005642f, -0.00868f, -0.002851f, 0.0005975f, -0.007347f, -0.001616f, -0.001303f, 0.00717f, -0.00231f, - -0.008354f, -0.005333f, 0.00864f, 0.006123f, -0.00994f, 0.00313f, -0.00676f, -0.005806f, 0.008446f, - -0.0007553f, -0.006416f, 0.00223f, -0.00579f, 0.00576f, -0.00892f, 0.002424f, -0.00486f, 0.00636f, - 0.003344f, -0.003195f, 0.001562f, 0.00318f, -0.007202f, -0.001358f, -0.0001854f, 0.002499f, 0.001725f, - 0.000389f, -0.006737f, 0.002745f, 0.000575f, -0.003534f, 0.004284f, 0.0019045f, 0.004898f, -0.004356f, - 0.002254f, -0.00577f, 0.0018215f, -0.008736f, 0.00769f, -0.00885f, -0.00859f, -0.00441f, 0.00583f, - -0.009285f, -0.00792f, -0.00922f, -0.003815f, -0.00886f, -0.005394f, -0.00663f, -0.008224f, -0.00353f, - 0.002161f, 0.00301f, -0.00542f, -0.0085f, -0.007446f, -0.00846f, -0.00515f, 0.00204f, 0.00543f, - -0.001219f, -0.007072f, 0.001966f, -0.00894f, 0.0008793f, -0.003418f, 0.00393f, -0.005283f, 0.005756f, - 0.003225f, 0.002123f, 0.002283f, 0.00566f, 0.000477f, 0.00497f, 0.005295f, 0.002136f, 0.00692f, - 0.00872f, 0.00936f, -0.005074f, 0.00645f, -0.001117f, 0.006493f, -0.00574f, 0.001013f, 0.003334f, - -0.005703f, -0.006992f, -0.004314f, 0.005314f, 0.001457f, -0.00594f, -0.003252f, 0.00844f, 0.002502f, - 0.002604f, 0.00289f, 0.00221f, -0.003344f, -0.006905f, -0.00799f, 0.007378f, -0.00945f, 0.006023f, - -0.00791f, 0.001273f, 0.003849f, 0.007694f, 0.005424f, 0.00298f, -0.003618f, -0.0001827f, 0.002077f, - 0.001976f, -0.006474f, 0.00079f, 0.00982f, 0.004166f, 0.007027f, 0.008606f, 0.00818f, 0.00697f, - -0.003006f, 0.0045f, -0.00885f, -0.00515f, 0.00723f, -0.0001746f, -0.00727f, 0.006237f, -0.008385f, - 0.008194f, -0.008316f, -0.002525f, 0.002558f, 0.00639f, 0.003586f, -0.00612f, -0.006756f, -0.008354f, - 0.004883f, -0.00506f, -0.009f, -0.00537f, -0.001243f, -0.005596f, -0.00853f, -0.007545f, 0.00786f, - 0.001839f, -0.002245f, 0.00544f, -0.00196f, 0.004967f, -0.003464f, -0.005108f, 0.003086f, 0.002628f, - -0.002502f, -0.00665f, -0.006226f, 0.0079f, -0.002287f, 0.0003567f, -0.001279f, 0.004826f, 0.005432f, - -0.00634f, -0.003204f, 0.0002022f, -0.00198f, -0.0008726f, 0.004055f, 0.00793f, -0.00427f, -0.00533f, - 0.00734f, -0.00799f, -0.0051f, -0.009995f, 0.0051f, 0.00413f, -0.00679f, 0.00262f, 0.001331f, - 0.001461f, -0.00865f, -0.00791f, -0.003975f, 0.002504f, 0.0002255f, 0.002337f, -0.00456f, -0.005974f, - 0.000257f, -0.00545f, 0.00842f, 0.005585f, -0.0003774f, 0.0008087f, -0.001679f, 0.003853f, 0.00991f, - 0.0031f, 0.00523f, -0.00721f, 0.000989f, -0.005642f, -0.001042f, 0.007935f, -0.006195f, 0.001426f, - 0.00414f, 0.00925f, -0.00419f, 0.004852f, -0.00639f, 0.00694f, -0.007706f, -0.00684f, -0.00602f, - -0.004444f, 0.005016f, -0.00803f, -0.00955f, 0.004097f, -0.003754f, 0.002384f, -0.007515f, 0.003508f, - -0.00749f, 0.00519f, 0.00228f, 0.007015f, -0.007572f, -0.003864f, -0.00843f, 0.00543f, 0.00911f, - 0.00774f, 0.009125f, -0.003473f, -0.00646f, 0.00856f, 0.004272f, 0.00534f, 0.003859f, -0.0001141f, - 0.001515f, 0.003437f, 0.00737f, 0.003565f, -0.002705f, 0.003675f, 0.003023f, -0.0002156f, -0.00894f, - 0.00103f, -0.001797f, -0.00854f, 0.001505f, -0.00876f, -0.003614f, 0.004887f, -0.005085f, 0.002449f, - 0.00524f, -0.00589f, 0.00784f, 0.001411f, -0.0095f, 0.007797f, -0.003391f, 0.008316f, 0.0094f, - 0.00917f, -0.00658f, -0.00685f, -0.005085f, -0.005375f, 0.008705f, -0.004093f, 0.00764f, -0.006172f, - -0.00609f, -0.0005703f, -0.00941f, -0.007065f, 0.00942f, 0.00403f, 0.00392f, -0.0000164f, 0.000577f, - 0.001058f, 0.006317f, 0.0008893f, 0.001935f, -0.009865f, -0.00542f, 0.001452f, 0.00916f, -0.00852f, - -0.00081f, 0.00397f, 0.0069f, 0.003246f, -0.004456f, 0.00777f, -0.004444f, 0.003632f, -0.002512f, - -0.00284f, 0.009926f, 0.00869f, -0.00636f, -0.006454f, 0.006805f, -0.00232f, -0.00924f, 0.006268f, - 0.00501f, -0.00951f, -0.00518f, 0.006126f, 0.00966f, 0.00881f, -0.009346f, 0.00912f, 0.00341f, - 0.00617f, 0.00984f, -0.00357f, 0.00596f, -0.0081f, -0.0006824f, -0.00711f, 0.004803f, 0.00484f, - -0.000756f, 0.002865f, -0.00422f, 0.00005835f, 0.00912f, 0.000726f, 0.001402f, 0.00644f, -0.006542f, - 0.006016f, 0.003975f, 0.00556f, 0.0000735f, -0.002203f, 0.003893f, -0.000724f, 0.005882f, -0.006226f, - -0.006912f, 0.003027f, 0.0004182f, -0.00728f, -0.00726f, -0.00896f, 0.008095f, -0.001346f, 0.00898f, - 0.002956f, -0.003334f, -0.007717f, -0.00876f, 0.00037f, -0.00727f, -0.003258f, 0.009476f, 0.009056f, - 0.00598f, 0.00281f, 0.00586f, -0.00981f, -0.003296f, 0.00769f, -0.000486f, 0.0091f, 0.00634f, - -0.00542f, 0.00512f, -0.002474f, -0.009514f, 0.00402f, -0.004787f, 0.00274f, -0.001112f, -0.002436f, - 0.00949f, -0.000839f, -0.009155f, 0.002499f, 0.001512f, 0.001406f, -0.00313f, -0.002022f, -0.008896f, - -0.00528f, -0.009254f, -0.002148f, -0.000707f, -0.0001829f, -0.001159f, 0.00411f, -0.007637f, -0.00364f, - 0.005135f, -0.00928f, -0.0000797f, 0.004642f, -0.00817f, -0.007072f, -0.003914f, 0.00416f, 0.002985f, - -0.0075f, -0.000736f, 0.008934f, 0.004204f, 0.0004723f, 0.006306f, -0.007675f, -0.007835f, 0.0005293f, - -0.002478f, -0.006336f, 0.007996f, 0.002539f, 0.001836f, 0.00968f, 0.006844f, 0.001179f, 0.001448f, - 0.006042f, 0.00292f, -0.007122f, -0.001914f, 0.004448f, 0.00822f, 0.00672f, 0.000714f, -0.001145f, - 0.009415f, 0.0015335f, -0.005585f, -0.006104f, -0.0003273f, -0.00987f, 0.001559f, -0.00608f, 0.007664f, - 0.00834f, -0.0002584f, -0.004097f, 0.00745f, 0.005417f, -0.002129f, 0.001597f, 0.00749f, -0.001676f, - 0.006344f, 0.006905f, 0.004364f, -0.00739f, -0.001457f, 0.00806f, -0.008f, -0.004284f, -0.00717f, - 0.00547f, 0.004463f, 0.00529f, -0.00843f, 0.008064f, 0.00556f, 0.0005236f, 0.00918f, -0.004986f, - 0.00578f, -0.001013f, -0.003479f, -0.004425f, -0.0076f, -0.004093f, 0.003084f, -0.00531f, -0.00902f, - -0.002844f, 0.004982f, -0.00986f, 0.003986f, 0.002125f, 0.004036f, -0.006798f, 0.000773f, 0.000544f, - -0.0001241f, 0.009155f, 0.002682f, -0.00997f, -0.00826f, 0.003769f, 0.001383f, -0.005318f, 0.004673f, - -0.005314f, 0.00691f, 0.00212f, -0.00656f, -0.006226f, -0.008705f, 0.00459f, -0.003798f, 0.00869f, - -0.002985f, -0.000604f, 0.00826f, -0.00541f, -0.00502f, 0.000809f, -0.00969f, -0.006626f, 0.005123f, - -0.0005465f, -0.00858f, 0.005554f, -0.002083f, 0.007343f, -0.001588f, -0.001642f, 0.0007577f, 0.00318f, - -0.00391f, 0.00404f, 0.00886f, -0.006374f, -0.00958f, -0.005077f, -0.00218f, 0.00745f, 0.00944f, - 0.007233f, 0.003042f, -0.003296f, 0.006786f, -0.006706f, 0.007114f, 0.00566f, 0.005325f, 0.007637f, - -0.00661f, 0.0008025f, -0.002693f, 0.005634f, 0.001557f, -0.007133f, -0.00483f, -0.00654f, 0.006313f, - -0.00926f, -0.00372f, -0.00583f, -0.004025f, 0.00761f, 0.00955f, 0.002691f, -0.00915f, -0.006084f, - -0.008835f, 0.003885f, 0.009514f, -0.00841f, 0.003637f, -0.00765f, -0.005978f, 0.001959f, -0.005295f, - -0.001565f, -0.003551f, -0.000824f, 0.005848f, -0.00010514f, 0.00828f, -0.003895f, -0.003197f, 0.00797f, - 0.00998f, 0.004635f, 0.006504f, 0.007023f, -0.00675f, 0.001584f, 0.004642f, 0.007458f, -0.002005f, - 0.0000653f, 0.00715f, 0.00402f, 0.00782f, -0.00331f, 0.00676f, 0.000039f, 0.00644f, -0.0007744f, - 0.005688f, 0.00511f, -0.005135f, 0.000995f, 0.006756f, -0.002304f, 0.003553f, -0.00938f, -0.000616f, - -0.00897f, -0.00685f, -0.00838f, 0.003983f, -0.004807f, 0.002314f, 0.00847f, 0.00846f, -0.007507f, - 0.002136f, 0.005905f, -0.00899f, 0.0081f, 0.008f, 0.00889f, -0.00907f, -0.00489f, 0.00938f, - -0.009254f, 0.00627f, 0.0052f, -0.002031f, -0.0006337f, -0.001191f, 0.001453f, -0.003918f, 0.001798f, - -0.00491f, -0.002062f, -0.00889f, 0.00309f, 0.007526f, 0.0007014f, -0.001351f, -0.003838f, 0.00458f, - 0.004005f, -0.00923f, 0.00581f, -0.002983f, -0.00901f, 0.007095f, 0.00844f, -0.00989f, 0.001532f, - -0.00867f, 0.001821f, -0.005646f, 0.00698f, -0.001757f, -0.00102f, -0.00511f, -0.007774f, 0.002588f, - -0.006096f, 0.005196f, -0.002117f, -0.0003762f, 0.00738f, 0.001219f, 0.00447f, 0.00867f, -0.00494f, - 0.007313f, -0.008095f, 0.000967f, 0.004776f, 0.00296f, 0.001068f, 0.00818f, 0.00749f, -0.00939f, - -0.00738f, -0.006214f, -0.00685f, 0.00569f, 0.00716f, 0.004375f, -0.00512f, -0.006252f, -0.004684f, - -0.002974f, -0.007965f, 0.0025f, -0.00943f, 0.00539f, 0.0003204f, 0.0005164f, -0.006573f, 0.00646f, - 0.00502f, 0.007965f, -0.002003f, -0.00609f, -0.009285f, -0.005028f, -0.00985f, 0.001395f, 0.00415f, - 0.003494f, 0.00957f, 0.009834f, -0.005905f, 0.002436f, 0.001002f, -0.002335f, -0.00981f, 0.006714f, - 0.005135f, -0.003138f, -0.00786f, 0.005497f, 0.003677f, 0.00479f, -0.00453f, 0.00845f, 0.007454f, - 0.000992f, -0.00647f, 0.001218f, -0.004295f, 0.00004745f, 0.005558f, -0.002914f, 0.00861f, -0.008064f, - 0.003328f, -0.003998f, -0.007595f, 0.00487f, 0.0008106f, 0.005287f, -0.003735f, 0.003054f, 0.006645f, - -0.002422f, 0.00974f, -0.001171f, 0.006264f, 0.00908f, 0.002903f, 0.00446f, 0.002419f, 0.00806f, - -0.002483f, 0.0089f, 0.0004303f, -0.001789f, -0.00638f, -0.005802f, -0.00953f, -0.00526f, 0.006203f, - -0.001033f, -0.00721f, 0.00391f, 0.00923f, 0.006676f, 0.00495f, -0.002512f, -0.000916f, 0.005054f, - -0.007652f, 0.004738f, 0.00826f, -0.00989f, -0.00202f, -0.00824f, -0.004333f, 0.002779f, -0.00531f, - 0.00181f, -0.00475f, 0.005234f, -0.00558f, 0.002342f, -0.001395f, -0.005856f, 0.004074f, -0.00638f, - -0.003561f, 0.00819f, 0.006454f, -0.00402f, -0.008766f, -0.006668f, -0.00244f, -0.00392f, -0.007248f, - -0.00666f, 0.001226f, -0.0071f, 0.00746f, 0.00396f, -0.00057f, 0.0001602f, 0.006924f, -0.0004158f, - -0.000988f, -0.008385f, 0.004936f, -0.001231f, 0.00533f, 0.00905f, 0.0015335f, 0.003677f, 0.00751f, - -0.00807f, -0.0051f, 0.00774f, -0.000592f, 0.003368f, -0.001825f, -0.003403f, 0.008194f, -0.0004606f, - 0.00312f, -0.004196f, 0.008026f, 0.004883f, -0.003073f, -0.006607f, 0.00847f, -0.007446f, -0.00982f, - -0.002375f, 0.009186f, 0.00991f, 0.005642f, -0.00632f, -0.005085f, 0.0084f, 0.002087f, 0.004f, - 0.002495f, 0.004326f, 0.00969f, -0.003504f, 0.008514f, 0.000959f, 0.003632f, -0.001369f, 0.005737f, - 0.002361f, -0.00802f, -0.006603f, 0.007866f, -0.008675f, 0.009384f, 0.001016f, 0.006927f, -0.005165f, - 0.001802f, -0.002798f, 0.008415f, 0.00439f, 0.003819f, 0.002295f, 0.006844f, -0.006813f, 0.0003488f, - 0.000659f, 0.00963f, -0.00946f, 0.002861f, -0.00614f, 0.002499f, -0.00706f, 0.003216f, -0.003124f, - -0.004585f, 0.001135f, -0.00212f, 0.007435f, -0.003775f, -0.0001405f, -0.000892f, 0.006218f, -0.005333f, - 0.007397f, 0.003202f, 0.009026f, 0.003717f, 0.00787f, 0.005188f, 0.0002823f, -0.0052f, 0.00797f, - -0.0009027f, -0.006462f, 0.00908f, -0.001527f, 0.005005f, 0.005547f, 0.00665f, -0.002155f, -0.00641f, - 0.00467f, -0.002872f, 0.000676f, 0.0009217f, 0.00424f, -0.000898f, 0.00932f, 0.004444f, -0.009834f, - 0.00908f, -0.0000113f, -0.00378f, 0.00792f, -0.00931f, -0.002563f, 0.003622f, 0.00972f, -0.0066f, - -0.002348f, -0.00787f, 0.004368f, -0.00385f, 0.0099f, 0.00617f, -0.001304f, 0.008575f, -0.00803f, - -0.008354f, 0.00794f, -0.00924f, 0.0069f, -0.00811f, 0.000215f, -0.00519f, -0.001069f, 0.000882f, - -0.007378f, 0.006447f, -0.003225f, -0.00484f, -0.00356f, -0.0004394f, -0.002144f, -0.001932f, 0.0007205f, - -0.00976f, 0.008514f, -0.006294f, 0.00618f, -0.001758f, -0.00713f, -0.00912f, 0.004726f, 0.00334f, - 0.00847f, -0.0001967f, 0.005165f, -0.004944f, -0.00915f, 0.0062f, -0.00553f, 0.0084f, -0.0054f, - 0.002823f, 0.00272f, -0.00271f, -0.009514f, 0.00629f, -0.006054f, 0.008865f, -0.00813f, -0.0076f, - 0.00857f, -0.003681f, -0.00738f, -0.00872f, -0.001488f, 0.00926f, -0.001791f, 0.00471f, -0.00482f, - 0.007812f, -0.004654f, -0.006138f, 0.003813f, 0.005768f, -0.00375f, -0.00992f, -0.000584f, 0.00783f, - -0.004147f, 0.001611f, 0.001342f, -0.006832f, -0.00138f, 0.005325f, -0.0000265f, 0.009445f, 0.00872f, - 0.001329f, -0.0026f, 0.002577f, 0.0072f, 0.00547f, 0.006428f, -0.004864f, 0.00876f, -0.00906f, - 0.007317f, -0.007233f, -0.00774f, 0.003387f, -0.002037f, 0.00125f, 0.00655f, -0.003298f, 0.008514f, - -0.003757f, 0.007935f, -0.003181f, 0.00629f, 0.00838f, 0.0009594f, 0.006897f, -0.008835f, 0.00446f, - -0.0082f, -0.006042f, 0.00761f, -0.00883f, 0.002434f, 0.001002f, 0.00712f, -0.005688f, 0.003359f, - -0.00606f, 0.002512f, 0.00576f, 0.006126f, 0.0009394f, -0.00787f, -0.00485f, 0.005936f, 0.002037f, - -0.0024f, -0.00618f, -0.00157f, 0.00702f, -0.007637f, 0.0077f, -0.00784f, -0.0062f, -0.00975f, - -0.00849f, 0.00843f, 0.003843f, -0.006443f, 0.004993f, -0.0001615f, 0.00902f, 0.00811f, 0.005333f, - 0.002123f, 0.001081f, 0.0086f, -0.003103f, 0.005783f, 0.004936f, -0.00898f, 0.001179f, 0.0007f, - 0.003462f, -0.00855f, 0.00254f, -0.0000039f, -0.00468f, 0.0012455f, 0.003431f, 0.007538f, 0.0082f, - 0.00843f, -0.001547f, 0.006157f, 0.001941f, -0.0013895f, -0.003096f, -0.003883f, -0.006382f, -0.00475f, - 0.008766f, -0.003225f, 0.0008793f, -0.002806f, -0.00432f, 0.003944f, 0.008286f, 0.003141f, -0.00975f, - -0.00439f, -0.007645f, 0.0093f, 0.005238f, -0.002018f, -0.006023f, -0.001462f, 0.00286f, 0.00525f, - 0.005463f, -0.0005217f, -0.0003283f, -0.003103f, -0.007656f, -0.003311f, -0.0002983f, 0.005165f, 0.007187f, - 0.00674f, -0.002645f, 0.00882f, 0.009995f, -0.003174f, -0.002956f, -0.00978f, 0.00841f, 0.005043f, - 0.00798f, 0.00003827f, -0.004494f, -0.00883f, -0.0003128f, -0.0015955f, 0.00958f, 0.001948f, -0.007664f, - -0.002064f, 0.002949f, 0.008736f, 0.00684f, 0.00804f, 0.004642f, -0.000742f, 0.001874f, -0.004864f, - 0.0003529f, -0.001284f, 0.00896f, -0.006954f, -0.003616f, 0.0078f, 0.00815f, -0.00876f, -0.002783f, - -0.00649f, 0.00976f, 0.009125f, 0.0019f, -0.0004215f, 0.00461f, 0.001037f, 0.009384f, 0.003422f, - 0.001194f, 0.00923f, 0.00554f, -0.00855f, -0.001592f, -0.002981f, 0.006016f, 0.002314f, -0.00483f, - 0.002476f, -0.00894f, -0.000574f, 0.0096f, -0.0002362f, -0.002018f, 0.00283f, 0.00251f, -0.0001559f, - -0.00557f, 0.00661f, -0.002537f, 0.005524f, 0.00961f, -0.002073f, 0.00454f, -0.006428f, 0.001997f, - -0.00446f, -0.0007524f, 0.002176f, -0.00209f, -0.00874f, 0.001289f, 0.00523f, 0.001575f, -0.008736f, - 0.007057f, -0.0069f, -0.00512f, -0.005383f, 0.0001678f, 0.001076f, 0.007683f, -0.006207f, -0.006233f, - -0.00585f, -0.004894f, 0.00773f, 0.00627f, -0.0008707f, -0.00574f, -0.002068f, -0.0003157f, -0.00921f, - -0.006275f, 0.007275f, -0.0004473f, 0.002474f, -0.009186f, 0.001432f, 0.003687f, -0.004425f, -0.002018f, - 0.00922f, -0.00788f, 0.000894f, -0.001047f, -0.001193f, 0.009094f, -0.0039f, 0.00977f, 0.00951f, - 0.00976f, 0.002201f, 0.006214f, -0.002117f, 0.006203f, 0.00278f, -0.006725f, -0.006157f, 0.003757f, - -0.001729f, 0.005405f, -0.00904f, -0.000435f, -0.002148f, -0.00849f, 0.00923f, -0.008194f, -0.001804f, - -0.00392f, 0.0002866f, -0.007317f, 0.005623f, -0.002657f, -0.005657f, 0.006363f, 0.00205f, 0.005215f, - 0.00376f, 0.001134f, -0.003138f, 0.00569f, 0.008446f, -0.003283f, 0.004047f, -0.00322f, -0.001756f, - -0.006763f, 0.001577f, -0.007225f, 0.006092f, 0.004112f, -0.006554f, -0.00428f, 0.004684f, -0.000417f, - 0.00418f, -0.000349f, -0.00676f, -0.004097f, -0.00899f, 0.004936f, 0.00864f, -0.006325f, -0.004665f, - -0.00834f, 0.00238f, 0.006153f, -0.00914f, 0.004246f, -0.00963f, 0.003986f, 0.00887f, 0.00852f, - 0.0002384f, 0.007866f, -0.002577f, 0.0007524f, -0.004887f, -0.0003715f, 0.00564f, 0.008606f, -0.009705f, - -0.009796f, -0.001706f, -0.00965f, 0.00824f, 0.0009446f, -0.00514f, 0.00492f, 0.002787f, 0.00643f, - -0.0002482f, 0.003603f, 0.004097f, 0.00916f, -0.005463f, -0.003786f, 0.00269f, -0.00688f, 0.002872f, - 0.0079f, 0.002403f, -0.000562f, 0.00747f, -0.00349f, 0.004925f, -0.009f, -0.003199f, -0.0008674f, - 0.004513f, 0.001112f, 0.00242f, -0.003345f, -0.00588f, -0.001415f, 0.001788f, -0.00345f, -0.007744f, - 0.005596f, -0.00871f, -0.001603f, -0.0001678f, -0.00862f, 0.00929f, -0.005604f, 0.00986f, 0.005383f, - 0.00959f, 0.00005203f, -0.002613f, 0.000881f, 0.00828f, -0.00738f, 0.001506f, 0.000615f, -0.001396f, - 0.005566f, -0.00815f, -0.00447f, 0.002577f, -0.00938f, -0.0007024f, 0.000968f, 0.00785f, 0.001473f, - -0.004387f, 0.008286f, -0.003094f, 0.008125f, -0.004494f, -0.00425f, 0.004585f, -0.00964f, 0.002777f, - -0.00888f, 0.005466f, 0.00231f, -0.001025f, -0.009186f, 0.004265f, 0.002234f, -0.002064f, 0.006973f, - -0.007336f, 0.001036f, -0.00965f, -0.003597f, 0.000792f, -0.006615f, 0.00904f, 0.00902f, -0.004856f, - -0.00782f, -0.0004456f, 0.004826f, -0.001932f, 0.003588f, -0.001571f, -0.003286f, -0.00523f, -0.002085f, - 0.004658f, 0.00324f, -0.00974f, 0.007122f, -0.00806f, -0.003452f, -0.00996f, 0.0004315f, -0.004436f, - 0.00442f, 0.0003521f, -0.0000391f, 0.00986f, 0.007553f, 0.00816f, 0.004242f, -0.00706f, 0.00857f, - -0.009705f, -0.00789f, 0.006126f, 0.00494f, 0.001126f, -0.003017f, -0.0005965f, -0.00928f, 0.001935f, - -0.00866f, -0.002542f, 0.003275f, 0.0001297f, -0.00935f, 0.005028f, 0.004097f, -0.006817f, 0.00791f, - 0.0001851f, -0.002525f, 0.00906f, 0.000608f, 0.0004106f, -0.00859f, -0.005623f, -0.00567f, 0.00434f, - 0.004124f, 0.000519f, 0.00947f, -0.002487f, -0.00738f, 0.009346f, -0.004936f, 0.007263f, -0.00096f, - 0.00493f, -0.00823f, 0.003119f, -0.0003824f, 0.0007586f, 0.006584f, 0.00392f, -0.008125f, 0.006313f, - 0.007812f, -0.005913f, 0.005547f, -0.0001316f, -0.007523f, 0.00768f, 0.00142f, 0.00912f, -0.003622f, - 0.00852f, 0.005966f, -0.004467f, -0.00919f, -0.00866f, -0.00875f, -0.0000665f, 0.000144f, 0.00649f, - 0.003706f, -0.001643f, -0.003508f, -0.005817f, -0.0059f, 0.008896f, 0.0088f, -0.005962f, -0.003698f, - -0.003626f, 0.001465f, 0.003386f, 0.002172f, 0.00159f, 0.003794f, 0.00751f, 0.001184f, -0.0008216f, - -0.006474f, 0.00761f, -0.006603f, 0.005993f, 0.003044f, 0.00322f, -0.00928f, -0.00667f, -0.00599f, - 0.00869f, 0.001393f, -0.006184f, -0.002693f, 0.003727f, -0.003624f, 0.002987f, -0.002718f, -0.001762f, - -0.007366f, -0.00294f, -0.004993f, -0.00977f, 0.00814f, -0.001241f, 0.001603f, -0.00352f, -0.004997f, - -0.005177f, -0.002817f, 0.002464f, 0.00763f, 0.00547f, -0.007217f, -0.00507f, 0.000908f, -0.000513f, - 0.001423f, -0.0006895f, 0.001677f, 0.001864f, -0.00401f, -0.003475f, 0.00604f, -0.003687f, -0.008606f, - -0.00724f, -0.0061f, 0.002502f, -0.00612f, -0.003128f, 0.000557f, 0.001442f, -0.007397f, -0.0088f, - -0.0009484f, 0.007244f, -0.008804f, -0.00847f, -0.00967f, 0.00989f, 0.00872f, -0.005753f, 0.003027f, - 0.0014105f, 0.007397f, -0.005905f, 0.007214f, 0.005665f, 0.001882f, -0.002838f, -0.003008f, -0.00795f, - -0.000239f, 0.0064f, 0.005333f, 0.005028f, 0.006863f, -0.004f, -0.00592f, -0.001575f, 0.005398f, - 0.009575f, -0.003317f, 0.00983f, -0.0006003f, 0.005287f, 0.009094f, -0.00502f, -0.00495f, -0.00962f, - 0.000787f, 0.005604f, -0.006504f, 0.002504f, -0.004066f, -0.009766f, -0.0074f, -0.00766f, 0.009705f, - 0.00814f, -0.005157f, -0.001017f, -0.008316f, -0.00004405f, -0.00802f, -0.004677f, -0.004894f, -0.00705f, - 0.00784f, 0.00448f, -0.007553f, -0.0028f, -0.006226f, 0.0000136f, -0.004192f, -0.00755f, 0.00278f, - 0.00343f, -0.0006332f, -0.00343f, -0.004555f, -0.0093f, 0.00261f, 0.00926f, -0.005093f, 0.00627f, - -0.00848f, -0.00984f, -0.001426f, -0.00226f, -0.002077f, -0.001703f, 0.009636f, 0.007664f, -0.003628f, - 0.002018f, -0.006012f, -0.00473f, 0.003834f, 0.00939f, -0.00827f, -0.00812f, -0.00792f, 0.00924f, - 0.00776f, 0.001537f, -0.00287f, -0.002401f, -0.00831f, -0.00903f, 0.00591f, 0.003252f, -0.006348f, - 0.001455f, 0.00674f, -0.002382f, 0.0003512f, -0.0017185f, 0.00684f, 0.00665f, 0.00782f, -0.00969f, - 0.00418f, 0.00442f, 0.00979f, 0.006382f, 0.004642f, 0.00398f, 0.007797f, 0.005234f, -0.005566f, - -0.00903f, 0.003168f, -0.005596f, 0.00006646f, 0.00995f, -0.002335f, -0.00548f, 0.005383f, -0.004562f, - 0.00811f, -0.005035f, 0.0008745f, -0.0086f, -0.00786f, -0.00566f, -0.0096f, -0.000744f, 0.00511f, - -0.003363f, 0.002739f, 0.002033f, 0.005455f, -0.001077f, 0.003887f, 0.00735f, 0.00757f, 0.008965f, - -0.002888f, 0.002462f, 0.000919f, 0.0008416f, -0.003096f, 0.00875f, -0.002434f, 0.00318f, -0.002779f, - 0.00725f, 0.005062f, 0.00073f, 0.00845f, 0.003576f, 0.002874f, -0.00836f, -0.00859f, 0.00916f, - -0.00745f, 0.00869f, 0.001855f, 0.005814f, -0.002064f, 0.0066f, -0.009346f, 0.004307f, -0.00966f, - 0.00877f, -0.002394f, -0.00977f, 0.002356f, -0.008255f, 0.001052f, 0.00495f, -0.00963f, 0.00886f, - -0.00476f, -0.00917f, -0.000619f, -0.00593f, 0.005497f, 0.003141f, 0.002428f, 0.003363f, 0.001099f, - 0.00731f, -0.005577f, 0.00666f, -0.00328f, 0.004677f, 0.00761f, -0.00864f, -0.00873f, -0.00282f, - -0.004177f, 0.00867f, -0.00536f, 0.004387f, -0.007294f, -0.0099f, 0.001112f, -0.001063f, 0.004284f, - 0.000729f, 0.005604f, 0.00434f, 0.00563f, -0.00618f, 0.00464f, 0.004417f, 0.00524f, -0.00052f, - -0.002462f, -0.000902f, 0.005207f, -0.002256f, 0.000805f, -0.006252f, 0.003262f, 0.007603f, -0.000191f, - 0.003582f, -0.002598f, -0.003662f, -0.005585f, -0.00007087f, -0.00784f, -0.001778f, 0.00996f, -0.00643f, - 0.009796f, -0.002966f, 0.005848f, -0.003027f, -0.007587f, -0.003654f, -0.00882f, -0.001206f, -0.005836f, - -0.0089f, -0.00608f, -0.003944f, -0.000564f, -0.00329f, 0.000377f, 0.000702f, 0.000859f, 0.002554f, - 0.001499f, 0.005997f, 0.0006666f, -0.00584f, 0.005337f, -0.00734f, 0.006847f, 0.00829f, 0.003925f, - -0.00837f, -0.005886f, -0.006927f, -0.000641f, -0.0000388f, 0.003124f, 0.007427f, 0.00767f, -0.002771f, - -0.005985f, 0.002094f, -0.007442f, -0.001377f, 0.003183f, 0.0003796f, 0.0068f, 0.0008273f, -0.002102f, - 0.003433f, -0.00931f, 0.0003903f, -0.00771f, -0.000703f, 0.003122f, 0.00833f, 0.001467f, 0.00769f, - -0.004578f, -0.007393f, 0.0054f, -0.007797f, -0.003767f, -0.009735f, -0.0007954f, 0.005028f, -0.00809f, - 0.002352f, -0.0002111f, 0.003624f, 0.00502f, 0.001048f, 0.00922f, 0.003426f, 0.002258f, -0.00708f, - 0.00517f, -0.00919f, -0.00881f, -0.00548f, 0.00891f, 0.00919f, 0.00597f, 0.001098f, 0.004875f, - 0.004875f, 0.00846f, 0.00829f, 0.003426f, 0.001049f, 0.00669f, 0.003994f, 0.006195f, -0.004585f, - -0.001221f, -0.000247f, -0.00613f, -0.00613f, 0.00436f, 0.006775f, -0.001169f, -0.001771f, -0.001071f, - -0.003635f, -0.004475f, -0.00216f, -0.003502f, 0.002285f, -0.006702f, 0.0074f, 0.004845f, 0.00123f, - -0.00434f, -0.0082f, 0.0000914f, 0.00325f, -0.00717f, -0.003687f, 0.003479f, 0.005894f, -0.002655f, - 0.00833f, 0.002365f, -0.00927f, 0.006416f, -0.0031f, 0.009834f, 0.006855f, 0.004673f, 0.00857f, - -0.00627f, 0.00887f, -0.002636f, -0.0066f, -0.003975f, 0.003056f, -0.001572f, -0.005142f, 0.007393f, - 0.00863f, -0.000665f, -0.005146f, 0.008965f, 0.005505f, -0.001827f, -0.001454f, 0.002926f, -0.002275f, - -0.006184f, 0.00991f, -0.005035f, -0.003462f, 0.00855f, -0.009125f, 0.002832f, 0.005817f, 0.007187f, - 0.005844f, -0.003204f, -0.002201f, -0.0095f, -0.00862f, -0.00896f, 0.00543f, 0.00010115f, 0.00392f, - 0.004917f, -0.002266f, 0.0003471f, 0.006306f, -0.004726f, -0.002298f, 0.00234f, -0.004726f, 0.00924f, - -0.005363f, -0.0002112f, -0.0099f, 0.005604f, -0.00523f, -0.004627f, -0.001949f, -0.00936f, 0.002743f, - -0.001635f, 0.001984f, 0.00972f, -0.00359f, 0.003296f, 0.00074f, 0.004654f, 0.00995f, -0.001584f, - 0.003048f, 0.0006003f, -0.003628f, -0.007668f, -0.002537f, -0.006584f, 0.00576f, 0.00864f, -0.00899f, - -0.009636f, -0.005394f, 0.00433f, 0.00706f, 0.005005f, -0.004707f, 0.004597f, 0.00852f, 0.008835f, - 0.003904f, 0.00457f, 0.004128f, 0.005028f, -0.003986f, 0.005997f, 0.0002208f, 0.00777f, 0.00963f, - 0.005787f, 0.007023f, 0.00553f, 0.00449f, 0.005814f, 0.003082f, 0.0093f, 0.00472f, -0.00985f, - 0.00938f, 0.00558f, 0.007088f, 0.00391f, -0.00918f, 0.008415f, 0.00902f, 0.004173f, -0.002716f, - -0.009926f, -0.00801f, -0.009705f, -0.0086f, -0.009865f, 0.003788f, -0.0092f, 0.00887f, -0.001495f, - -0.00314f, -0.003246f, -0.000836f, 0.001646f, 0.00902f, -0.007233f, -0.00376f, -0.0057f, 0.005787f, - -0.002974f, 0.00872f, 0.0086f, -0.00443f, 0.003622f, 0.004593f, 0.008026f, -0.0003214f, 0.00858f, - -0.00338f, 0.00772f, 0.00448f, 0.00855f, 0.001066f, -0.004692f, -0.005737f, 0.007565f, -0.0002706f, - -0.002792f, -0.00949f, 0.000827f, -0.004967f, 0.00864f, 0.00788f, 0.009094f, -0.001957f, -0.002716f, - 0.000686f, -0.00499f, -0.004173f, 0.002407f, 0.00923f, 0.001411f, -0.0005016f, 0.00746f, -0.0087f, - -0.002703f, -0.003134f, -0.001611f, 0.007404f, -0.00999f, -0.004158f, 0.00556f, 0.0005794f, 0.003775f, - -0.001105f, -0.00338f, 0.00999f, 0.006966f, 0.005802f, -0.009735f, -0.009834f, -0.00723f, -0.00656f, - -0.007538f, 0.00995f, 0.00586f, 0.001463f, -0.001861f, -0.007015f, 0.005455f, -0.00492f, -0.005337f, - -0.00855f, -0.002764f, 0.003605f, 0.00967f, -0.007256f, -0.002594f, 0.00397f, -0.00508f, -0.004555f, - 0.009476f, -0.0006495f, 0.003998f, -0.0087f, 0.007294f, -0.007748f, 0.001855f, -0.0002816f, -0.00983f, - -0.007416f, 0.004444f, 0.003036f, 0.005066f, 0.001116f, -0.0001506f, -0.003181f, -0.003258f, -0.00816f, - 0.00821f, -0.0007715f, 0.00669f, 0.002674f, 0.004074f, 0.009605f, 0.001936f, -0.0052f, -0.002779f, - 0.003435f, 0.003592f, -0.00787f, 0.002615f, 0.007996f, 0.002047f, 0.002438f, 0.000739f, -0.002443f, - 0.00817f, 0.009995f, 0.00749f, 0.00953f, 0.007427f, -0.003246f, -0.004795f, 0.003834f, 0.0087f, - -0.00863f, 0.003105f, -0.003313f, -0.006187f, 0.005104f, -0.00093f, 0.004158f, 0.003963f, -0.00579f, - -0.004044f, 0.004044f, -0.0005593f, -0.00388f, -0.00249f, 0.006115f, 0.00322f, 0.007347f, 0.00813f, - -0.005142f, -0.0004606f, 0.00646f, 0.002186f, 0.00812f, 0.004818f, 0.0009236f, -0.00864f, 0.00948f, - -0.003057f, 0.003445f, -0.004444f, 0.001763f, -0.005806f, 0.001699f, 0.00843f, -0.007423f, -0.001351f, - -0.007317f, -0.001196f, 0.002996f, 0.005066f, 0.003227f, 0.00547f, -0.00923f, 0.0008106f, 0.00789f, - -0.006508f, -0.0003939f, -0.002443f, 0.007107f, -0.00692f, -0.007645f, -0.00353f, 0.00661f, 0.000988f, - -0.00769f, -0.003134f, 0.002548f, 0.00495f, 0.0034f, 0.001454f, 0.00344f, -0.00323f, -0.006203f, - 0.001063f, 0.008736f, -0.00737f, 0.00234f, -0.00315f, -0.008865f, -0.003918f, 0.006042f, 0.0003307f, - -0.001405f, 0.002129f, -0.00682f, 0.000836f, -0.005436f, 0.008385f, -0.002783f, -0.0007734f, -0.007088f, - -0.005924f, 0.00951f, 0.000002f, -0.00504f, -0.005474f, -0.00897f, 0.00339f, -0.003044f, 0.0019245f, - 0.00596f, 0.00756f, -0.005936f, 0.007416f, -0.005173f, 0.006367f, 0.0015545f, -0.001073f, 0.008095f, - 0.004868f, 0.0000308f, -0.005302f, -0.0003858f, -0.00421f, -0.00386f, 0.00925f, 0.004604f, 0.001006f, - -0.004482f, 0.00634f, -0.006126f, -0.00878f, 0.0095f, -0.006985f, -0.00575f, -0.001845f, -0.002335f, - 0.00908f, 0.00764f, -0.00405f, 0.003431f, 0.004726f, 0.0002171f, -0.005314f, -0.00693f, 0.00867f, - 0.0007024f, -0.007217f, 0.006042f, -0.0002111f, 0.00475f, -0.00635f, 0.00984f, 0.00829f, -0.0008802f, - -0.005093f, -0.007996f, -0.003607f, -0.00965f, -0.001188f, -0.002707f, 0.002533f, 0.00328f, -0.004807f, - -0.002724f, -0.005733f, 0.007996f, -0.003893f, -0.0002323f, -0.00577f, -0.007263f, 0.00416f, -0.007385f, - -0.004906f, 0.002007f, -0.00773f, -0.0004334f, -0.00542f, -0.0009217f, 0.008545f, 0.0005693f, 0.0094f, - -0.000956f, -0.002106f, -0.0082f, -0.006363f, 0.00431f, -0.001059f, -0.0054f, 0.002123f, 0.0004594f, - -0.003489f, -0.005173f, -0.007595f, 0.007782f, -0.0001341f, 0.00977f, -0.00463f, -0.0002378f, -0.002296f, - 0.00667f, 0.00701f, 0.001323f, -0.001699f, 0.00955f, -0.0091f, 0.0089f, 0.00791f, -0.0003197f, - 0.007835f, -0.00828f, 0.00854f, 0.00239f, 0.008385f, 0.001974f, 0.000486f, 0.00991f, 0.006542f, - 0.007866f, -0.004803f, -0.004913f, -0.00513f, -0.0004153f, 0.00995f, -0.00516f, -0.003317f, 0.00682f, - 0.0004165f, -0.00903f, -0.005344f, 0.00786f, 0.003769f, 0.004158f, 0.0002446f, 0.00589f, -0.002949f, - 0.0073f, -0.002398f, -0.004757f, 0.0002432f, -0.00439f, -0.00454f, 0.000453f, 0.00823f, -0.009575f, - 0.00535f, -0.008575f, -0.00893f, 0.004303f, 0.00502f, 0.00617f, -0.004402f, 0.00919f, -0.00865f, - 0.00876f, 0.003645f, 0.0002997f, -0.00925f, -0.007076f, 0.004448f, 0.005196f, -0.003986f, 0.007084f, - -0.000285f, -0.002855f, -0.000422f, -0.00872f, -0.005013f, 0.00952f, -0.008446f, -0.004044f, -0.00907f, - 0.007072f, -0.00918f, -0.007835f, 0.000878f, -0.006847f, -0.006f, 0.00731f, -0.001876f, -0.002565f, - -0.003584f, -0.003006f, -0.00723f, -0.003433f, 0.0004973f, -0.00795f, 0.0005007f, 0.00608f, 0.00671f, - 0.0001765f, 0.00439f, -0.003738f, -0.006035f, 0.00010353f, -0.00374f, 0.0008683f, 0.00773f, -0.0004847f, - -0.000992f, 0.004658f, -0.003555f, -0.0056f, -0.001982f, 0.00812f, 0.003386f, -0.001584f, 0.003508f, - -0.006138f, -0.00587f, 0.001421f, -0.009094f, -0.00468f, -0.0086f, 0.003637f, 0.00896f, 0.00804f, - -0.00744f, 0.002382f, -0.0097f, 0.000659f, 0.007782f, 0.002981f, -0.00869f, 0.0000934f, -0.00882f, - 0.002771f, -0.009544f, 0.0035f, 0.004124f, -0.0014f, -0.006294f, -0.007614f, 0.00931f, 0.009674f, - 0.0003185f, -0.004295f, 0.007084f, -0.0035f, -0.00334f, -0.001754f, 0.001216f, -0.004375f, 0.003244f, - 0.0001901f, 0.001547f, 0.007183f, 0.006447f, 0.005108f, 0.00679f, 0.001068f, -0.00587f, 0.005745f, - -0.00634f, 0.0058f, 0.006985f, -0.000697f, 0.00008917f, 0.007835f, -0.0004838f, 0.004795f, -0.006832f, - 0.002398f, 0.00687f, -0.001582f, 0.00709f, -0.00908f, -0.001573f, 0.009865f, -0.001476f, -0.000526f, - 0.00477f, 0.008026f, -0.00171f, 0.00979f, -0.005592f, 0.0006247f, -0.00774f, 0.00463f, -0.006676f, - 0.004368f, -0.002373f, -0.005127f, -0.0013275f, -0.002306f, -0.0087f, 0.00997f, 0.005493f, 0.003786f, - -0.004414f, -0.005947f, 0.003181f, -0.0004156f, 0.00909f, -0.00656f, 0.001926f, 0.0003731f, -0.009636f, - 0.003124f, -0.0000686f, -0.001972f, -0.006584f, 0.0009604f, 0.004086f, 0.009865f, 0.001302f, -0.00989f, - -0.0086f, 0.005177f, 0.006493f, -0.00523f, -0.00443f, 0.001586f, 0.00937f, 0.007458f, 0.001883f, - 0.00774f, 0.0004454f, 0.000493f, 0.0003722f, -0.00486f, 0.006435f, 0.002642f, 0.00432f, -0.00272f, - -0.007446f, -0.007397f, 0.00361f, 0.003618f, 0.003956f, -0.001175f, 0.00832f, 0.00794f, 0.001658f, - 0.00123f, -0.003918f, 0.001215f, -0.007427f, 0.003708f, 0.00492f, -0.00968f, 0.008896f, -0.006786f, - -0.005856f, 0.006573f, 0.003876f, -0.003983f, 0.00411f, 0.0076f, -0.0008364f, -0.00496f, 0.008026f, - -0.00986f, -0.001429f, -0.007236f, -0.002172f, -0.003004f, -0.0017185f, -0.00353f, -0.00817f, -0.004353f, - -0.003458f, 0.002663f, -0.00599f, 0.002125f, -0.00625f, -0.00913f, -0.009796f, -0.004574f, -0.00978f, - -0.00398f, -0.006096f, 0.003708f, 0.007214f, 0.00444f, 0.003742f, 0.004547f, 0.006042f, 0.001542f, - 0.002424f, 0.0005617f, 0.006477f, -0.002382f, 0.0009637f, -0.00462f, -0.000934f, 0.0004268f, 0.00975f, - 0.002277f, 0.001031f, -0.007103f, 0.006615f, 0.00199f, 0.009f, 0.00995f, -0.002514f, -0.0016575f, - -0.00875f, 0.00936f, -0.007133f, 0.007412f, -0.001572f, -0.00862f, -0.00675f, 0.009445f, -0.00819f, - 0.004597f, -0.005493f, 0.004894f, -0.004807f, 0.00346f, -0.00114f, 0.006638f, -0.005882f, 0.0041f, - -0.002684f, -0.0006037f, -0.00842f, 0.001939f, -0.0008016f, 0.00265f, -0.005383f, 0.00963f, 0.0063f, - 0.006386f, 0.004463f, -0.004173f, -0.006317f, 0.003534f, -0.00781f, -0.001414f, -0.004723f, -0.003096f, - -0.001367f, 0.00955f, -0.0000178f, -0.007214f, 0.00985f, -0.003782f, 0.005688f, -0.002445f, 0.00185f, - 0.00784f, 0.00203f, 0.0003746f, -0.00935f, 0.00559f, 0.00718f, 0.005905f, 0.002926f, 0.006268f, - 0.0002078f, 0.001244f, 0.00467f, 0.006405f, -0.0005364f, 0.00503f, -0.0004387f, 0.006252f, -0.002594f, - 0.001791f, -0.00807f, -0.001451f, -0.0034f, 0.00958f, 0.003035f, -0.00348f, 0.004818f, 0.008644f, - -0.0005145f, -0.004673f, 0.008934f, 0.00756f, -0.001786f, -0.005634f, -0.002981f, -0.007107f, 0.001145f, - 0.003677f, 0.004997f, 0.009766f, 0.0005856f, -0.002384f, 0.004177f, -0.00965f, 0.005924f, -0.005596f, - 0.004505f, 0.000578f, 0.00663f, -0.006638f, 0.001535f, 0.002502f, 0.002907f, 0.00447f, 0.002016f, - 0.008865f, 0.00828f, -0.00975f, 0.0002487f, -0.00796f, -0.008286f, -0.002083f, -0.00471f, 0.007187f, - 0.004326f, 0.007206f, 0.004307f, 0.009346f, -0.00758f, -0.007545f, 0.00349f, 0.0018425f, -0.00837f, - -0.007935f, -0.002258f, 0.003757f, -0.0014f, 0.000081f, 0.00449f, -0.000318f, 0.006485f, -0.001184f, - -0.001842f, 0.009476f, 0.00818f, -0.00986f, 0.001612f, -0.00779f, 0.006676f, -0.0013075f, 0.00464f, - -0.002117f, -0.0087f, 0.00965f, 0.001394f, 0.00818f, -0.005493f, 0.004673f, -0.00439f, -0.00557f, - -0.001841f, -0.00948f, 0.00607f, 0.00551f, -0.002834f, 0.004883f, -0.00712f, 0.006573f, -0.002064f, - 0.0008054f, -0.006508f, 0.004467f, 0.00773f, 0.004787f, 0.00523f, -0.001751f, -0.005657f, 0.000278f, - -0.001822f, -0.00639f, -0.003477f, -0.006767f, -0.007782f, 0.005375f, -0.00726f, 0.007248f, 0.0008335f, - -0.001856f, -0.00009865f, -0.006054f, 0.006786f, -0.005665f, -0.007393f, -0.0007014f, -0.007046f, -0.0065f, - -0.00645f, 0.002195f, 0.004818f, 0.00909f, -0.00862f, 0.007614f, -0.00499f, 0.007423f, -0.001478f, - -0.005028f, -0.007107f, -0.00488f, 0.00322f, -0.003801f, 0.0018425f, 0.001862f, 0.007713f, -0.008675f, - 0.001135f, 0.00788f, -0.006866f, -0.00776f, 0.001423f, -0.00392f, -0.00908f, 0.00918f, -0.006706f, - -0.00828f, -0.00358f, -0.00956f, -0.00823f, 0.00656f, -0.00617f, -0.004395f, 0.002705f, -0.001398f, - 0.003265f, 0.007793f, 0.00664f, 0.009285f, 0.00851f, 0.00416f, -0.00923f, -0.006733f, 0.00934f, - -0.00564f, -0.001064f, 0.001106f, 0.00943f, 0.005024f, 0.00793f, -0.005302f, -0.00376f, -0.0005045f, - 0.005325f, -0.002134f, -0.001494f, -0.00891f, -0.00803f, 0.00958f, -0.0000229f, -0.003668f, 0.00602f, - -0.003649f, -0.002918f, 0.006573f, 0.005146f, -0.009995f, 0.00864f, -0.008255f, 0.004868f, 0.001078f, - -0.003546f, 0.00235f, 0.005764f, -0.005116f, 0.009186f, -0.008255f, -0.00216f, -0.008f, -0.009125f, - -0.002754f, -0.0083f, -0.002539f, -0.0007524f, -0.00843f, 0.003647f, -0.00156f, 0.00498f, -0.007904f, - -0.00502f, 0.00919f, 0.003862f, 0.00599f, 0.001332f, -0.00788f, 0.007374f, 0.001653f, -0.00406f, - -0.008545f, -0.00444f, -0.00971f, -0.002436f, -0.009834f, -0.005573f, -0.002323f, -0.007126f, 0.004803f, - -0.00913f, 0.002483f, -0.004704f, -0.0014515f, -0.001035f, -0.008934f, -0.001855f, -0.0071f, 0.00979f, - -0.008255f, 0.001663f, -0.001383f, 0.000364f, -0.003595f, -0.002163f, 0.002136f, 0.004894f, 0.006966f, - 0.00925f, 0.006557f, -0.0089f, -0.0007167f, 0.002699f, 0.003483f, 0.003017f, 0.004223f, 0.006042f, - -0.002342f, -0.004868f, 0.003157f, 0.006165f, 0.001519f, -0.00874f, -0.004856f, -0.004116f, 0.002634f, - -0.001233f, -0.008736f, 0.003529f, -0.001974f, 0.00121f, -0.0006013f, -0.002737f, -0.00596f, 0.007027f, - -0.00496f, -0.002726f, -0.00787f, 0.001581f, 0.00381f, -0.004932f, 0.007027f, -0.003616f, -0.000989f, - 0.003532f, 0.002346f, 0.0000479f, 0.002907f, -0.004353f, 0.005424f, 0.003124f, 0.00985f, 0.003f, - -0.007805f, 0.001684f, -0.001324f, 0.0005107f, 0.00483f, -0.00992f, 0.000786f, -0.003649f, -0.0006337f, - -0.001443f, 0.00782f, 0.008194f, -0.00819f, -0.00844f, -0.004906f, -0.006355f, 0.002932f, 0.004242f, - 0.000638f, -0.00259f, 0.00585f, -0.00864f, 0.00378f, -0.00279f, -0.00319f, -0.001805f, -0.002768f, - -0.0007725f, -0.004875f, 0.003784f, 0.00947f, -0.008736f, 0.003262f, -0.00325f, -0.003826f, 0.007904f, - 0.00002706f, 0.006187f, -0.001488f, -0.001711f, -0.003317f, 0.007446f, -0.00699f, -0.005573f, 0.00164f, - 0.00938f, 0.0002334f, 0.003819f, -0.001427f, 0.00992f, -0.003433f, -0.0006833f, -0.00492f, 0.005493f, - 0.003014f, -0.006187f, -0.002325f, 0.00741f, -0.009056f, 0.005604f, -0.003874f, 0.00869f, 0.0001504f, - 0.005356f, 0.001178f, 0.00786f, 0.003292f, 0.00947f, -0.002808f, -0.00424f, -0.00999f, 0.004818f, - 0.00372f, -0.003748f, 0.001496f, 0.009796f, 0.0000038f, 0.00379f, 0.0003746f, -0.004147f, 0.007195f, - -0.0095f, 0.001072f, 0.002129f, 0.00889f, 0.003273f, 0.006958f, -0.004894f, 0.0006795f, 0.00892f, - -0.004356f, 0.00594f, -0.002378f, 0.00969f, -0.0081f, 0.0003927f, 0.00789f, 0.00343f, 0.00479f, - -0.0005517f, -0.00652f, 0.000332f, 0.00876f, -0.001309f, -0.002495f, -0.00831f, 0.007786f, -0.00512f, - -0.003832f, -0.0006423f, -0.003162f, 0.00807f, -0.006298f, -0.003601f, 0.002438f, 0.0017395f, 0.002686f, - -0.001712f, 0.00424f, 0.00632f, -0.00935f, 0.000598f, 0.005714f, -0.00921f, -0.002935f, 0.008064f, - -0.001802f, -0.002634f, -0.006786f, 0.00976f, 0.00867f, 0.004066f, 0.002306f, 0.001495f, -0.0003717f, - -0.00597f, 0.00958f, -0.00881f, 0.00856f, -0.00538f, -0.008575f, -0.003626f, 0.006702f, 0.00932f, - 0.001552f, 0.0006847f, 0.00159f, 0.002314f, 0.008606f, 0.005955f, 0.00862f, 0.0003278f, 0.003115f, - -0.006863f, -0.0051f, -0.00824f, 0.00592f, -0.005653f, 0.00871f, -0.008286f, 0.0005655f, -0.005154f, - -0.008766f, 0.008896f, -0.009674f, 0.003782f, -0.000774f, 0.00323f, -0.00935f, 0.007694f, -0.003578f, - -0.00912f, 0.007362f, -0.00561f, 0.00817f, -0.00852f, -0.00006425f, -0.003166f, 0.0004108f, 0.006325f, - -0.00928f, -0.008026f, -0.003891f, -0.005924f, -0.004284f, 0.00515f, -0.00749f, 0.002983f, 0.003885f, - 0.006535f, -0.001574f, 0.005695f, -0.009155f, -0.006996f, -0.0012665f, 0.002983f, -0.00932f, -0.00575f, - -0.008545f, -0.0005817f, 0.002466f, -0.003382f, 0.007477f, 0.00166f, 0.004562f, -0.001331f, -0.0095f, - -0.00291f, 0.002815f, -0.009796f, -0.00496f, 0.005592f, -0.00365f, -0.00609f, 0.0008597f, 0.00516f, - 0.003986f, 0.002157f, 0.00934f, -0.003363f, 0.000835f, 0.003725f, 0.002106f, -0.005993f, 0.00795f, - 0.003122f, -0.003313f, -0.005383f, 0.0004141f, 0.006466f, 0.003517f, -0.00809f, 0.005714f, -0.007294f, - -0.001924f, -0.002457f, -0.001897f, -0.001449f, 0.00543f, 0.000466f, 0.008125f, -0.002316f, 0.003128f, - -0.008255f, -0.001908f, 0.00911f, 0.00793f, -0.001612f, -0.00899f, -0.004013f, -0.002962f, 0.001639f, - -0.006916f, -0.009056f, -0.005795f, -0.001411f, -0.00745f, 0.003126f, 0.000916f, -0.0007496f, 0.003273f, - 0.005184f, 0.004128f, 0.003195f, -0.004635f, 0.004826f, 0.00745f, 0.006348f, -0.008865f, -0.00217f, - 0.006275f, -0.00971f, 0.005478f, -0.003456f, 0.0065f, 0.00943f, -0.005703f, 0.002666f, -0.005745f, - -0.006134f, 0.003513f, 0.00683f, -0.004803f, -0.003841f, -0.006435f, -0.007122f, 0.001902f, 0.005844f, - 0.007313f, 0.004723f, 0.001233f, -0.00402f, 0.001288f, 0.002878f, 0.004196f, -0.002884f, -0.007454f, - 0.000933f, -0.003576f, -0.005608f, -0.00908f, 0.00426f, 0.001788f, -0.004856f, -0.008965f, -0.00546f, - -0.004684f, -0.002708f, -0.006145f, 0.002111f, -0.000599f, -0.007187f, -0.002018f, -0.001014f, -0.006676f, - -0.00335f, -0.00528f, -0.009224f, -0.009285f, -0.00063f, -0.0045f, -0.005157f, 0.008865f, 0.008835f, - -0.00672f, 0.002237f, 0.002687f, 0.005703f, 0.00585f, 0.007175f, -0.007496f, 0.0002145f, 0.00924f, - -0.00611f, -0.003202f, -0.0057f, -0.001237f, 0.006752f, 0.001596f, -0.001424f, 0.007492f, 0.00459f, - -0.00668f, -0.001726f, 0.00209f, 0.001924f, 0.0008316f, 0.0004334f, 0.001638f, 0.005665f, 0.000911f, - -0.00552f, 0.00619f, -0.00979f, 0.00549f, 0.004967f, 0.00818f, -0.006157f, -0.00816f, 0.001334f, - 0.0002472f, 0.00653f, 0.005257f, 0.0000934f, -0.00261f, 0.00755f, 0.000494f, 0.001341f, 0.00236f, - -0.00876f, 0.005054f, -0.00503f, 0.007465f, -0.005676f, 0.003174f, -0.006325f, -0.005238f, -0.005608f, - 0.0002413f, -0.003477f, -0.00379f, -0.002457f, 0.002943f, -0.006855f, 0.001733f, 0.006504f, -0.004406f, - -0.00929f, -0.00009567f, 0.000722f, 0.001004f, -0.00633f, 0.001915f, -0.001345f, -0.002802f, -0.00858f, - -0.001694f, -0.000937f, 0.004486f, -0.00567f, 0.000247f, 0.007782f, -0.0036f, -0.003588f, 0.00717f, - -0.00928f, 0.00838f, -0.0063f, 0.00916f, 0.005352f, 0.00736f, 0.00083f, -0.007248f, -0.005722f, - 0.00325f, -0.00503f, 0.001647f, 0.007767f, -0.00539f, 0.0065f, -0.002151f, 0.003359f, 0.0002371f, - -0.007057f, 0.000602f, 0.00692f, -0.008415f, -0.001443f, 0.006783f, -0.00778f, 0.00946f, -0.002735f, - -0.006832f, 0.00419f, -0.009315f, 0.00963f, -0.003994f, -0.00833f, 0.00411f, 0.0076f, 0.005817f, - -0.001542f, -0.003956f, 0.004513f, 0.001667f, -0.002378f, -0.003075f, 0.002481f, -0.001739f, -0.005566f, - -0.002113f, 0.003263f, -0.00797f, -0.008675f, 0.006916f, 0.002848f, 0.008446f, -0.004627f, -0.002216f, - -0.0005455f, -0.00882f, 0.00846f, 0.001422f, -0.000527f, -0.00826f, 0.0012245f, 0.006226f, -0.008316f, - 0.002134f, -0.006298f, 0.00672f, -0.008026f, 0.003248f, 0.0046f, 0.001113f, 0.000221f, 0.000791f, - 0.00836f, 0.007805f, 0.006355f, 0.004723f, 0.000991f, -0.00904f, 0.007164f, 0.00896f, 0.00788f, - 0.004128f, -0.003473f, -0.00242f, 0.003466f, 0.003286f, 0.002634f, 0.009865f, 0.006947f, -0.0004823f, - -0.005455f, 0.003603f, 0.002008f, -0.004536f, 0.006187f, 0.005722f, -0.00010717f, 0.00227f, 0.00967f, - -0.004883f, -0.0011015f, 0.009285f, 0.002121f, -0.006718f, 0.00782f, 0.00481f, 0.002974f, -0.002855f, - -0.001182f, -0.000961f, -0.002497f, -0.005707f, -0.00536f, -0.000726f, -0.004868f, -0.000473f, -0.002764f, - 0.0002033f, -0.00961f, -0.00828f, -0.001335f, 0.005314f, 0.007263f, 0.005386f, -0.0006895f, 0.00444f, - -0.00443f, 0.001597f, 0.00753f, 0.005608f, 0.002354f, 0.00399f, 0.003551f, 0.0035f, 0.00319f, - 0.0017185f, -0.006195f, -0.004467f, 0.006042f, -0.007217f, -0.00907f, 0.004025f, -0.00671f, -0.002226f, - -0.00557f, 0.000518f, -0.00805f, 0.008865f, -0.007195f, -0.004032f, -0.005047f, 0.007072f, -0.003544f, - -0.00706f, -0.000232f, -0.00829f, -0.00835f, -0.002449f, 0.002384f, -0.00886f, -0.00177f, -0.00641f, - 0.006733f, -0.001213f, -0.005184f, 0.009995f, 0.006573f, 0.003773f, -0.00962f, 0.003693f, 0.003815f, - 0.004353f, 0.00224f, 0.0003662f, 0.007187f, 0.00817f, -0.002918f, -0.006615f, 0.00834f, 0.002783f, - -0.000913f, 0.004993f, -0.006687f, -0.008224f, 0.00864f, -0.000776f, -0.003668f, 0.002398f, 0.001138f, - 0.001902f, -0.004894f, 0.00398f, 0.001741f, -0.00922f, 0.002316f, 0.0000156f, 0.00923f, -0.004314f, - 0.00844f, -0.002323f, -0.001928f, 0.006115f, 0.006283f, -0.001401f, -0.006443f, 0.00693f, 0.007225f, - 0.0005593f, -0.00996f, -0.00842f, -0.001854f, 0.001111f, 0.00157f, -0.003658f, -0.0003986f, 0.005455f, - 0.004204f, -0.006065f, 0.00812f, -0.00642f, -0.004932f, -0.00778f, 0.004032f, 0.005814f, 0.00329f, - -0.007164f, -0.00576f, 0.002708f, -0.005424f, -0.006355f, -0.003983f, -0.006695f, -0.00661f, 0.005814f, - -0.007137f, -0.00739f, -0.001341f, 0.000845f, 0.000429f, -0.002764f, 0.006496f, 0.00785f, -0.00622f, - 0.003235f, 0.00425f, -0.00612f, 0.00803f, 0.007404f, -0.001365f, 0.002625f, 0.001886f, 0.003359f, - -0.00518f, -0.002394f, 0.00475f, 0.003391f, 0.00693f, -0.002079f, -0.000818f, -0.002357f, -0.005272f, - -0.002317f, -0.000729f, 0.004074f, 0.005486f, 0.006023f, -0.006363f, 0.00527f, -0.003586f, -0.00925f, - 0.003809f, 0.00087f, 0.007133f, -0.001788f, 0.002201f, 0.00955f, 0.003735f, 0.007324f, -0.00614f, - -0.007187f, -0.006783f, -0.006145f, -0.004665f, 0.007175f, 0.00984f, 0.00314f, 0.008064f, 0.007336f, - -0.00337f, -0.00559f, 0.004944f, -0.007744f, -0.00197f, -0.006714f, -0.002281f, -0.002087f, 0.0009074f, - -0.00753f, 0.004993f, 0.00319f, -0.002535f, -0.001945f, 0.0008793f, -0.003357f, 0.004246f, -0.00838f, - 0.007698f, 0.001307f, 0.001717f, 0.00824f, -0.001335f, -0.0002145f, 0.00561f, -0.007168f, -0.001333f, - -0.00551f, -0.003637f, -0.007786f, 0.001738f, 0.007748f, 0.001321f, -0.001924f, 0.006046f, -0.009125f, - 0.009674f, 0.006313f, 0.002666f, 0.002287f, -0.00956f, -0.004803f, -0.008675f, 0.003038f, -0.00514f, - 0.00935f, 0.006756f, 0.004425f, 0.002203f, 0.00642f, 0.004555f, 0.00657f, 0.00157f, 0.00652f, - -0.000512f, 0.003416f, 0.00883f, -0.003372f, -0.001136f, -0.00302f, 0.007435f, -0.00564f, 0.001519f, - -0.007687f, -0.00783f, -0.008736f, 0.003899f, -0.00231f, 0.006927f, 0.00558f, -0.007786f, 0.008156f, - 0.004417f, -0.004173f, 0.008865f, 0.004707f, 0.002438f, -0.008896f, 0.00009686f, -0.00338f, 0.002985f, - 0.0000722f, 0.004047f, 0.00991f, 0.00222f, 0.00381f, -0.003147f, 0.0081f, 0.00392f, 0.001678f, - -0.00647f, 0.00942f, -0.002876f, -0.001987f, -0.00758f, -0.003983f, -0.00814f, 0.00255f, -0.001071f, - 0.006855f, -0.00676f, -0.00801f, 0.00399f, 0.002998f, 0.003906f, -0.002068f, 0.005444f, -0.003128f, - 0.001452f, -0.000623f, 0.007122f, -0.003498f, -0.000979f, -0.003366f, -0.001828f, 0.004135f, 0.006786f, - -0.003593f, -0.00814f, -0.00749f, -0.004894f, 0.009445f, -0.00828f, -0.005108f, -0.005836f, -0.002945f, - -0.008125f, -0.001417f, -0.003443f, 0.00201f, 0.001321f, 0.00578f, 0.00224f, -0.00895f, -0.001515f, - -0.008194f, 0.00883f, -0.000655f, -0.00831f, 0.005695f, 0.00663f, 0.00704f, -0.00393f, 0.003603f, - -0.005608f, 0.00107f, -0.00902f, -0.0001382f, 0.006287f, 0.006393f, 0.0005302f, 0.00898f, 0.00172f, - 0.0033f, -0.001728f, -0.004436f, 0.006794f, 0.001925f, -0.00698f, 0.002726f, -0.00372f, 0.003744f, - 0.007004f, 0.002556f, -0.00895f, -0.005096f, 0.003044f, -0.002342f, -0.00802f, 0.0067f, 0.006172f, - 0.0005546f, 0.009f, 0.006405f, 0.003557f, -0.006527f, 0.002508f, -0.002115f, -0.00497f, 0.004852f, - 0.002605f, 0.009155f, -0.00941f, 0.000894f, -0.00825f, 0.005333f, 0.006023f, -0.001292f, 0.009445f, - -0.007217f, 0.003368f, -0.007156f, -0.006386f, -0.00293f, 0.00218f, -0.00803f, 0.00927f, 0.008965f, - 0.001402f, 0.00525f, -0.00784f, 0.00418f, -0.00978f, -0.003138f, 0.002974f, 0.001657f, -0.009834f, - 0.001901f, -0.00948f, 0.005455f, -0.001604f, 0.00559f, 0.006447f, 0.0008035f, -0.002773f, 0.006332f, - -0.00896f, 0.00488f, 0.004177f, -0.00319f, 0.00708f, 0.0003064f, -0.0007687f, -0.003065f, 0.005558f, - -0.003864f, 0.003887f, -0.00855f, 0.006237f, 0.008415f, -0.002693f, -0.002817f, -0.00904f, 0.003407f, - 0.000946f, -0.00738f, -0.00562f, -0.0009713f, -0.003506f, -0.00766f, 0.00953f, -0.004005f, 0.00867f, - 0.0004733f, -0.005787f, 0.0005293f, 0.006996f, 0.001659f, 0.000469f, 0.001537f, 0.002247f, -0.004242f, - 0.00243f, -0.004093f, -0.007355f, -0.001f, 0.006374f, -0.004963f, 0.006035f, 0.005245f, -0.00839f, - 0.002262f, -0.008286f, 0.00845f, 0.00911f, -0.001388f, -0.001848f, -0.0008616f, 0.006363f, 0.002584f, - -0.002827f, -0.00755f, -0.009834f, 0.002735f, -0.001286f, 0.006f, 0.001821f, -0.001493f, -0.00819f, - -0.0003796f, 0.008606f, 0.000496f, 0.001856f, -0.00668f, -0.009186f, -0.00736f, 0.0048f, -0.003502f, - 0.001626f, -0.0001339f, -0.006126f, -0.00596f, -0.0001252f, 0.001953f, 0.009575f, -0.001304f, 0.004192f, - -0.006035f, -0.001251f, 0.007587f, 0.001031f, -0.00928f, 0.00793f, 0.00653f, 0.0007644f, -0.002647f, - 0.003609f, -0.00461f, 0.000423f, -0.000656f, 0.005367f, -0.00425f, 0.004215f, 0.006554f, 0.005634f, - -0.001172f, 0.00472f, -0.0002402f, 0.003582f, 0.00738f, 0.00301f, 0.005417f, 0.009254f, 0.007145f, - -0.0094f, 0.000404f, 0.00837f, -0.00894f, 0.004658f, 0.0004907f, -0.001399f, -0.00873f, 0.0008955f, - -0.001738f, -0.001934f, 0.003742f, 0.002077f, -0.004063f, -0.007736f, -0.001259f, 0.00867f, 0.00488f, - 0.006584f, -0.00822f, -0.00585f, 0.006927f, -0.003298f, -0.004593f, 0.000567f, -0.004543f, -0.007378f, - 0.00718f, -0.00876f, 0.005707f, 0.00701f, 0.001537f, 0.005993f, -0.0044f, 0.00847f, 0.00694f, - 0.00419f, -0.00511f, 0.00535f, 0.000936f, -0.0007434f, 0.001556f, -0.0008616f, -0.0085f, 0.003342f, - 0.00982f, 0.005077f, 0.005566f, -0.003716f, 0.00839f, 0.007786f, -0.00749f, -0.007614f, -0.00774f, - 0.00209f, 0.005894f, -0.007534f, 0.003998f, -0.00518f, -0.00033f, -0.00831f, -0.00556f, 0.004837f, - -0.001809f, -0.00423f, 0.00916f, -0.006786f, 0.009476f, 0.00841f, -0.000718f, 0.002834f, -0.00947f, - 0.0001942f, -0.007904f, -0.003672f, -0.001356f, -0.004658f, -0.005825f, 0.002747f, -0.00737f, 0.00845f, - 0.005226f, -0.002941f, -0.005226f, -0.00415f, 0.00848f, 0.0007825f, -0.005276f, 0.003502f, -0.005974f, - 0.00866f, -0.0076f, 0.003042f, -0.003267f, -0.00536f, -0.006935f, 0.007515f, 0.008255f, 0.003098f, - -0.007183f, 0.007355f, -0.00878f, -0.0001291f, -0.0009227f, 0.000577f, 0.00787f, 0.003855f, 0.005337f, - -0.004837f, 0.005676f, 0.004658f, -0.00798f, 0.006424f, -0.007534f, 0.002682f, -0.003042f, 0.00868f, - -0.003332f, 0.00318f, 0.00199f, 0.001096f, 0.00871f, 0.005028f, -0.001416f, 0.006233f, -0.007736f, - 0.00808f, -0.001244f, 0.001611f, 0.005127f, 0.00781f, -0.003036f, -0.00453f, -0.00516f, 0.007233f, - -0.001684f, -0.002474f, 0.002844f, -0.00723f, -0.002401f, 0.0015f, -0.005444f, -0.003035f, -0.00929f, - 0.00947f, 0.00247f, 0.004017f, 0.0008864f, -0.003862f, 0.0062f, -0.00172f, -0.00449f, 0.00796f, - 0.009445f, 0.007687f, -0.007034f, -0.001731f, -0.00585f, -0.005653f, -0.002281f, 0.004925f, -0.006744f, - -0.002542f, 0.005775f, 0.00861f, 0.003054f, 0.00666f, -0.00694f, -0.00822f, -0.001123f, 0.006557f, - -0.00476f, 0.006397f, 0.00957f, 0.00888f, -0.003952f, -0.006313f, 0.001164f, 0.001948f, -0.00758f, - 0.007263f, -0.00801f, 0.00924f, 0.009476f, -0.00979f, 0.007748f, -0.00533f, 0.006195f, 0.00659f, - 0.003437f, 0.00546f, -0.00859f, 0.002409f, -0.006824f, -0.006172f, 0.00663f, 0.004215f, 0.00291f, - 0.001303f, -0.007786f, -0.000654f, 0.00965f, -0.002867f, 0.002117f, 0.00484f, -0.002012f, -0.004826f, - -0.00801f, -0.00259f, 0.002625f, -0.000174f, 0.006844f, -0.005554f, -0.001617f, 0.00741f, -0.00145f, - -0.001762f, 0.005222f, 0.001931f, 0.006676f, -0.002014f, 0.005676f, -0.001987f, 0.003426f, -0.00088f, - 0.002485f, -0.007698f, -0.00604f, 0.006687f, -0.003902f, -0.00783f, -0.00817f, 0.00841f, 0.006134f, - -0.00659f, -0.004807f, 0.00649f, -0.00855f, -0.00605f, -0.003489f, 0.00594f, -0.00818f, -0.001544f, - 0.003778f, 0.00706f, -0.0002632f, 0.005882f, 0.003763f, 0.003439f, 0.00872f, 0.004265f, 0.00522f, - -0.00886f, -0.00803f, -0.0003037f, -0.00807f, -0.006756f, 0.00789f, -0.00428f, -0.000516f, 0.005196f, - -0.00981f, 0.00926f, -0.007507f, -0.00952f, -0.00259f, -0.003004f, 0.00828f, -0.000515f, -0.00759f, - -0.002186f, -0.00375f, -0.00902f, 0.002289f, -0.002497f, 0.00996f, 0.004932f, -0.00803f, -0.00785f, - 0.00993f, -0.007694f, 0.000255f, -0.0002395f, -0.005318f, 0.005173f, 0.00518f, -0.007427f, 0.00505f, - 0.008545f, -0.00238f, -0.002556f, 0.00932f, 0.009094f, -0.002436f, -0.00971f, 0.000679f, 0.00931f, - -0.00531f, 0.003595f, 0.0065f, -0.001422f, 0.002657f, 0.00864f, 0.001987f, -0.001189f, -0.0007544f, - 0.0002537f, -0.003994f, -0.00898f, -0.00314f, -0.00829f, 0.006683f, -0.006706f, -0.005634f, 0.00001407f, - 0.006878f, 0.004093f, 0.001739f, -0.003754f, 0.006306f, -0.001363f, -0.00145f, -0.00985f, -0.003508f, - -0.007454f, 0.00352f, -0.004467f, -0.00601f, -0.007763f, -0.00894f, 0.00583f, -0.00698f, 0.0099f, - -0.006313f, 0.00404f, -0.002666f, -0.00373f, 0.004604f, -0.00813f, -0.006283f, 0.004066f, -0.00592f, - -0.0003827f, -0.002565f, 0.006275f, 0.008705f, -0.007404f, 0.00793f, -0.0009556f, 0.001682f, 0.00866f, - 0.00774f, 0.00332f, 0.0008507f, -0.005215f, -0.00757f, -0.001497f, 0.005787f, 0.001453f, -0.001265f, - -0.00909f, 0.006832f, 0.00836f, 0.002867f, 0.002851f, 0.002344f, 0.001552f, -0.0006785f, -0.00941f, - -0.007114f, -0.003008f, 0.002539f, 0.0002484f, -0.00774f, 0.000987f, 0.00991f, 0.00611f, 0.0009437f, - -0.001054f, 0.000739f, 0.00809f, -0.003117f, -0.007812f, -0.001368f, -0.009674f, -0.001733f, 0.006268f, - 0.003513f, 0.00852f, -0.007652f, 0.004547f, -0.0001137f, 0.003424f, 0.000804f, -0.003584f, -0.00599f, - -0.005333f, -0.00303f, 0.004303f, 0.009f, -0.0006638f, -0.0008726f, 0.007774f, -0.0000234f, -0.0002577f, - 0.005783f, -0.008316f, -0.00841f, -0.003605f, 0.001991f, 0.006767f, 0.00508f, 0.00787f, 0.003464f, - 0.00908f, 0.007133f, 0.007504f, -0.00896f, 0.000183f, -0.00929f, -0.0009255f, -0.0034f, -0.00848f, - 0.002066f, 0.0002947f, 0.005394f, 0.002613f, 0.00701f, -0.00833f, -0.001219f, 0.004704f, 0.00446f, - -0.00775f, 0.00476f, -0.007195f, -0.00163f, -0.003307f, -0.007484f, -0.00889f, -0.00846f, 0.008156f, - -0.002731f, 0.005733f, 0.0099f, -0.00276f, -0.00869f, -0.00962f, -0.00841f, -0.004955f, 0.004997f, - 0.008896f, 0.00907f, -0.000695f, 0.00972f, 0.00685f, 0.004505f, -0.00726f, -0.003025f, -0.002087f, - 0.00797f, 0.006016f, -0.006485f, -0.00491f, 0.001922f, -0.00934f, 0.006355f, -0.0004008f, -0.005714f, - 0.002274f, -0.005512f, 0.005424f, -0.0003483f, 0.001698f, 0.0006733f, 0.00815f, -0.005264f, 0.002876f, - -0.0000476f, -0.003105f, -0.001815f, -0.00997f, 0.0004442f, -0.00557f, -0.007656f, -0.003036f, 0.002333f, - -0.001329f, 0.003675f, -0.00706f, -0.00807f, 0.001302f, -0.00788f, 0.003828f, -0.00995f, -0.006676f, - -0.001514f, -0.005756f, -0.001301f, 0.002438f, 0.007313f, 0.00913f, 0.003407f, -0.002222f, 0.00981f, - 0.0012245f, 0.009155f, 0.008194f, -0.004368f, -0.006615f, -0.0008593f, -0.00582f, 0.003933f, 0.005173f, - -0.001201f, 0.002068f, -0.00915f, 0.00797f, -0.002686f, -0.00958f, 0.005775f, 0.002453f, -0.003305f, - 0.00697f, 0.0001255f, 0.00218f, 0.009926f, -0.007473f, 0.007965f, 0.0066f, -0.003874f, 0.00658f, - -0.007618f, 0.000942f, 0.002375f, -0.007053f, -0.003815f, 0.00569f, -0.001039f, 0.004536f, 0.003641f, - 0.004314f, -0.003353f, 0.00857f, -0.0006385f, -0.000856f, -0.007175f, 0.007557f, -0.00978f, 0.002863f, - -0.005424f, 0.005215f, -0.000666f, -0.006275f, 0.005527f, 0.00827f, -0.006187f, -0.005993f, 0.000444f, - -0.0001373f, 0.00458f, 0.009315f, -0.005093f, -0.00154f, 0.002647f, 0.00586f, 0.007473f, -0.00275f, - 0.00046f, 0.008965f, -0.0002766f, 0.00485f, -0.00974f, 0.001143f, -0.00859f, -0.00027f, 0.007748f, - -0.00341f, -0.006992f, -0.006664f, 0.0005536f, 0.00828f, -0.003752f, 0.000553f, 0.008575f, 0.004868f, - -0.0004208f, -0.001359f, 0.002785f, 0.00247f, 0.0002398f, 0.00441f, -0.007866f, -0.00444f, 0.000598f, - 0.00985f, 0.0041f, 0.001188f, -0.00271f, -0.003817f, -0.0008373f, -0.004078f, 0.00927f, -0.002739f, - -0.004578f, 0.004482f, 0.000669f, -0.003761f, -0.00921f, -0.003477f, -0.00516f, -0.00893f, 0.0007854f, - 0.00305f, 0.004894f, 0.00165f, -0.009834f, -0.00859f, 0.000812f, -0.007256f, -0.00276f, -0.003006f, - 0.001255f, -0.002705f, 0.005894f, 0.00904f, 0.004845f, 0.00814f, -0.003206f, 0.007042f, -0.003756f, - -0.003365f, -0.00868f, 0.00358f, -0.009514f, 0.00952f, -0.005753f, 0.00848f, 0.003448f, 0.006912f, - -0.001069f, -0.0006742f, 0.00974f, -0.001088f, -0.0004857f, 0.00841f, 0.006027f, -0.00606f, -0.001904f, - -0.006058f, -0.004673f, 0.007572f, -0.009674f, -0.008896f, -0.002888f, -0.00806f, 0.00633f, -0.000787f, - -0.002151f, 0.002234f, -0.00991f, 0.00663f, -0.00541f, -0.006706f, -0.00598f, -0.00592f, 0.0001597f, - 0.001887f, -0.00104f, 0.00994f, 0.0083f, -0.009415f, -0.00954f, 0.0003498f, -0.009254f, 0.002195f, - 0.003555f, -0.007557f, 0.006336f, -0.00789f, -0.006927f, 0.005497f, -0.003809f, -0.002302f, -0.00952f, - -0.0007987f, -0.001707f, 0.00007784f, -0.006718f, -0.005337f, 0.008934f, 0.006355f, 0.006626f, 0.00514f, - 0.006844f, -0.005447f, -0.001604f, -0.0008254f, -0.004185f, -0.006702f, -0.001056f, -0.00847f, -0.005917f, - -0.002684f, -0.00482f, -0.009514f, 0.004032f, 0.003906f, 0.0048f, -0.004612f, 0.000876f, -0.00497f, - 0.008415f, -0.00986f, -0.00565f, -0.000717f, -0.003967f, -0.006863f, 0.00825f, -0.003292f, -0.00966f, - 0.00263f, 0.001377f, -0.0084f, 0.004414f, -0.0054f, 0.00609f, -0.009026f, -0.000778f, -0.008385f, - 0.008286f, -0.00352f, 0.00549f, 0.00738f, -0.007515f, -0.002409f, -0.00558f, -0.003153f, -0.005985f, - -0.00919f, 0.00001955f, 0.004105f, -0.0009418f, 0.001782f, 0.0007043f, -0.00539f, -0.004562f, -0.003515f, - -0.00916f, -0.00623f, 0.0002017f, -0.003117f, 0.00392f, 0.00738f, 0.001152f, -0.00806f, -0.005108f, - 0.00985f, -0.001203f, 0.00719f, 0.001182f, -0.0002191f, -0.00661f, -0.003593f, -0.001818f, 0.00765f, - 0.004604f, -0.005318f, -0.0009274f, 0.002466f, -0.0003357f, 0.00783f, -0.006584f, -0.00664f, 0.003544f, - -0.002964f, -0.00983f, 0.001785f, -0.000708f, -0.00793f, 0.00785f, 0.006046f, 0.007812f, 0.0096f, - 0.00849f, -0.001343f, 0.00623f, -0.007465f, 0.001237f, -0.00393f, -0.0007534f, -0.004776f, -0.002806f, - 0.00451f, -0.004726f, 0.00364f, 0.002312f, -0.00561f, -0.00462f, -0.001799f, -0.0005593f, 0.00191f, - -0.002151f, -0.0076f, 0.001353f, 0.001949f, -0.004097f, 0.005615f, 0.002104f, 0.00746f, -0.00824f, - -0.006596f, 0.009285f, -0.008026f, 0.00331f, -0.008736f, -0.00988f, -0.002468f, 0.003393f, -0.007675f, - -0.00852f, 0.0067f, 0.00552f, 0.00002897f, 0.0002024f, -0.004135f, 0.003683f, -0.001939f, -0.002998f, - -0.006897f, -0.00462f, 0.00989f, 0.001207f, 0.001254f, -0.0008793f, -0.004036f, -0.00255f, 0.00871f, - 0.00695f, 0.00251f, 0.005455f, -0.00592f, -0.001793f, -0.0005703f, -0.00213f, 0.004787f, -0.0025f, - -0.00712f, -0.003109f, -0.0074f, 0.003607f, -0.003696f, -0.001566f, 0.007812f, -0.004433f, 0.001471f, - 0.004066f, -0.001959f, -0.001853f, -0.00985f, 0.006023f, 0.006184f, -0.00586f, -0.002455f, 0.007687f, - -0.003036f, -0.001865f, 0.0052f, -0.005646f, 0.002298f, -0.0049f, -0.001856f, -0.003754f, -0.003891f, - 0.00979f, 0.008415f, -0.00886f, 0.009926f, 0.001531f, -0.001119f, -0.004818f, 0.007763f, -0.004997f, - 0.009415f, 0.002409f, 0.00149f, 0.003786f, -0.001091f, -0.00852f, 0.00888f, 0.0092f, 0.004227f, - 0.004055f, -0.001675f, -0.004677f, 0.003109f, 0.006733f, 0.00538f, 0.0086f, 0.002913f, -0.00939f, - -0.006355f, 0.00495f, -0.007866f, 0.00885f, 0.005394f, -0.00323f, 0.00578f, -0.00476f, 0.006634f, - -0.00769f, 0.001916f, -0.001957f, 0.00988f, 0.004417f, -0.00677f, 0.007565f, 0.00842f, -0.00919f, - -0.0055f, 0.003214f, 0.00413f, -0.00813f, 0.002834f, 0.005272f, -0.00954f, 0.006275f, -0.00836f, - 0.00561f, 0.00951f, 0.004837f, 0.00753f, 0.000762f, -0.002527f, -0.003277f, -0.00522f, 0.003021f, - 0.00706f, -0.008f, -0.00916f, -0.002863f, 0.002209f, -0.00828f, 0.00499f, -0.001951f, -0.002157f, - 0.004375f, 0.006233f, -0.007336f, -0.0002134f, 0.004395f, -0.004135f, -0.00865f, 0.001095f, 0.003302f, - -0.00732f, 0.002275f, 0.00976f, 0.002602f, -0.003263f, 0.00766f, 0.003126f, 0.001476f, -0.001589f, - 0.00351f, 0.007305f, 0.00553f, 0.007236f, -0.005352f, -0.006542f, -0.002747f, -0.002932f, -0.002441f, - -0.008575f, -0.00934f, -0.00197f, -0.004387f, 0.001285f, 0.003265f, 0.001039f, 0.004814f, -0.001674f, - -0.00887f, 0.003067f, -0.007866f, 0.00903f, 0.003162f, -0.004402f, 0.00029f, 0.00928f, -0.002539f, - -0.003176f, 0.002398f, 0.004284f, 0.001891f, -0.000756f, 0.00846f, 0.00686f, 0.001065f, -0.008934f, - -0.00705f, 0.002884f, -0.006603f, -0.004486f, 0.00396f, -0.009766f, -0.003494f, 0.004738f, 0.00899f, - 0.006016f, 0.007515f, 0.003511f, -0.00786f, 0.00949f, -0.00682f, 0.004265f, 0.00728f, 0.0047f, - 0.00902f, -0.00474f, -0.0005236f, 0.005547f, -0.002396f, -0.006386f, -0.007904f, 0.00722f, 0.005135f, - 0.000564f, -0.003956f, -0.00997f, -0.00982f, 0.001334f, 0.001509f, -0.002422f, -0.001891f, 0.002316f, - 0.00309f, -0.006355f, 0.007336f, -0.00487f, 0.00010824f, -0.0008583f, 0.002853f, 0.003754f, -0.006348f, - 0.00793f, 0.00723f, -0.00981f, -0.003706f, 0.00317f, -0.008446f, -0.002966f, -0.0009055f, 0.002184f, - 0.003096f, 0.003244f, 0.009674f, 0.002132f, 0.0016165f, -0.006443f, -0.00423f, -0.00905f, 0.001218f, - 0.004185f, 0.00935f, -0.00193f, 0.00179f, 0.004192f, -0.006424f, 0.002945f, 0.0005383f, 0.004173f, - -0.001795f, 0.00803f, 0.006462f, -0.00502f, -0.003693f, 0.001283f, -0.001253f, 0.00715f, -0.002525f, - 0.00824f, -0.008995f, -0.00549f, 0.004345f, 0.002205f, 0.00827f, -0.004692f, -0.000714f, 0.00686f, - 0.003473f, 0.009636f, -0.001164f, -0.002003f, 0.00674f, -0.008224f, -0.00462f, 0.00948f, 0.002377f, - 0.00781f, 0.002586f, 0.00744f, -0.001399f, 0.003376f, 0.005226f, -0.003313f, 0.007713f, -0.004364f, - 0.0005984f, -0.004997f, 0.00611f, -0.00772f, 0.006653f, -0.002066f, 0.00196f, 0.004326f, 0.00797f, - -0.002724f, -0.005474f, 0.007782f, 0.00728f, 0.007442f, -0.002098f, 0.005306f, -0.007206f, -0.001974f, - 0.0000934f, -0.003695f, -0.007633f, 0.006306f, 0.006794f, -0.002983f, -0.00424f, 0.0018215f, 0.000337f, - -0.00849f, -0.00768f, 0.00659f, 0.002615f, -0.008514f, 0.00282f, 0.003607f, 0.009544f, 0.00924f, - 0.00949f, -0.006145f, -0.003231f, -0.001794f, 0.006004f, -0.0005646f, 0.005558f, 0.00455f, -0.005344f, - 0.003881f, -0.00979f, -0.00946f, -0.0007844f, 0.00922f, 0.001785f, 0.00854f, -0.0094f, -0.005318f, - 0.006126f, -0.0023f, -0.00576f, -0.00449f, -0.00931f, 0.006935f, -0.007477f, 0.001311f, 0.00797f, - 0.003727f, -0.000941f, -0.00816f, -0.00646f, -0.004032f, -0.002666f, 0.009735f, -0.007072f, -0.007362f, - 0.003067f, 0.007732f, 0.00457f, 0.001084f, -0.0085f, 0.00392f, 0.0006833f, -0.001245f, -0.00907f, - -0.00574f, -0.006786f, 0.005386f, -0.001034f, 0.00993f, 0.00913f, -0.001817f, 0.00613f, 0.002943f, - -0.00825f, -0.008804f, -0.00333f, -0.00754f, 0.00971f, -0.0002515f, 0.004715f, 0.006126f, 0.004963f, - 0.000591f, -0.00912f, -0.002254f, 0.0006866f, -0.00998f, 0.001433f, 0.00787f, -0.00933f, -0.004326f, - 0.00771f, 0.002146f, -0.006893f, -0.003952f, 0.001425f, -0.006123f, 0.00807f, -0.00702f, -0.006565f, - 0.001073f, 0.001927f, -0.004864f, 0.000273f, -0.008224f, 0.00826f, -0.001634f, -0.006905f, -0.00831f, - -0.00594f, -0.002901f, -0.001668f, -0.00987f, 0.006264f, -0.00452f, -0.00924f, 0.0096f, 0.001883f, - 0.005104f, 0.003798f, -0.00859f, 0.002163f, 0.000841f, 0.0001701f, -0.00549f, 0.008896f, -0.00641f, - -0.0086f, 0.0094f, -0.000762f, 0.000456f, 0.002989f, -0.002628f, -0.00817f, -0.000566f, 0.005928f, - -0.002151f, -0.004353f, -0.00403f, -0.0009055f, 0.00814f, -0.005325f, 0.001588f, -0.00841f, 0.001743f, - -0.00651f, -0.002144f, 0.007225f, -0.00623f, -0.002226f, -0.004345f, 0.007904f, -0.007748f, 0.001748f, - -0.003706f, -0.00867f, 0.00432f, -0.00954f, 0.0089f, -0.00607f, 0.00603f, 0.00857f, 0.003477f, - -0.0007524f, 0.000207f, -0.00069f, 0.00925f, -0.003777f, -0.0002985f, -0.001528f, 0.005077f, 0.007435f, - 0.005886f, -0.001046f, 0.00491f, -0.00346f, -0.00944f, 0.0085f, 0.00011885f, -0.007687f, 0.005142f, - -0.005444f, 0.005745f, 0.00565f, -0.005436f, 0.002954f, 0.0009327f, -0.001357f, -0.006035f, -0.0038f, - -0.00277f, 0.001201f, -0.006207f, 0.00892f, -0.00958f, 0.002432f, 0.009636f, -0.006413f, -0.000683f, - 0.000565f, 0.00664f, 0.006424f, 0.004097f, 0.00754f, -0.0082f, 0.002491f, 0.00003463f, -0.001084f, - 0.009895f, -0.001157f, -0.0044f, -0.003542f, -0.005615f, 0.00814f, -0.002285f, 0.009605f, 0.008865f, - 0.00906f, 0.0059f, -0.00735f, 0.0007353f, -0.00103f, -0.004868f, 0.007378f, 0.0074f, -0.001978f, - -0.00555f, -0.004807f, 0.006527f, -0.00968f, -0.001172f, -0.00988f, 0.00564f, 0.00213f, 0.004536f, - -0.001937f, 0.007717f, 0.00901f, -0.000779f, 0.003677f, -0.00831f, -0.005554f, -0.005386f, -0.00959f, - -0.00885f, 0.007416f, -0.00618f, 0.001828f, -0.0004594f, -0.0006585f, -0.009636f, 0.007168f, -0.00868f, - -0.00848f, -0.003803f, -0.00875f, 0.002884f, 0.0002168f, 0.005486f, 0.00989f, -0.00828f, 0.00000566f, - -0.00811f, -0.003649f, 0.003096f, 0.00365f, -0.002344f, -0.00879f, 0.006554f, -0.0003917f, 0.00814f, - -0.001268f, 0.00318f, 0.003078f, -0.002525f, -0.00848f, -0.0004594f, 0.003298f, 0.003225f, 0.002396f, - -0.00686f, -0.00503f, 0.007534f, 0.009636f, -0.00483f, -0.00788f, 0.004208f, 0.0003386f, -0.001907f, - 0.0008726f, 0.004757f, -0.00989f, -0.007004f, 0.0063f, -0.006622f, -0.00978f, 0.00899f, 0.002703f, - 0.00864f, -0.009964f, 0.00617f, 0.005688f, 0.00846f, 0.00576f, 0.00788f, 0.0002687f, 0.00853f, - -0.0002925f, -0.003065f, -0.0000076f, 0.007706f, 0.002523f, -0.00212f, -0.00532f, 0.007347f, 0.001383f, - -0.004616f, -0.008514f, -0.00672f, -0.00883f, 0.00195f, -0.003576f, -0.006306f, 0.005207f, -0.002554f, - -0.001393f, -0.005966f, 0.005707f, -0.001915f, -0.002625f, 0.007797f, 0.00756f, -0.003504f, -0.004597f, - -0.002932f, -0.006004f, -0.00928f, 0.006176f, 0.004486f, -0.00594f, -0.009476f, 0.006813f, -0.00312f, - -0.0014715f, 0.003428f, 0.00991f, -0.004757f, -0.0006704f, 0.001299f, 0.002937f, 0.005505f, 0.00843f, - -0.004585f, -0.00931f, 0.001348f, -0.008545f, 0.001818f, -0.002092f, -0.00689f, -0.009026f, 0.00949f, - 0.00166f, 0.000547f, -0.000135f, -0.000778f, -0.001905f, 0.002375f, 0.00974f, -0.004833f, 0.0094f, - 0.004898f, -0.00005084f, -0.001083f, -0.00499f, -0.00918f, -0.004326f, 0.001663f, 0.00681f, -0.003672f, - 0.00694f, -0.00438f, -0.007336f, 0.0089f, 0.00451f, -0.00564f, 0.00986f, 0.006157f, -0.00539f, - -0.00551f, 0.00947f, 0.00881f, 0.005436f, -0.008354f, -0.005894f, 0.002949f, 0.0009093f, -0.002594f, - -0.002369f, 0.00507f, -0.0088f, 0.0051f, -0.0004027f, 0.001238f, 0.00854f, 0.008804f, 0.0005126f, - 0.00786f, -0.001762f, -0.002861f, 0.001445f, -0.006268f, -0.002352f, -0.00737f, -0.006973f, 0.005512f, - 0.005188f, 0.00951f, -0.006603f, 0.002338f, -0.001549f, 0.000984f, 0.00819f, 0.002796f, -0.003716f, - -0.00731f, -0.004124f, -0.00725f, -0.002102f, 0.00493f, 0.00313f, -0.002922f, 0.0076f, 0.00537f, - -0.00929f, 0.00819f, 0.00932f, 0.00975f, 0.00345f, 0.001942f, 0.001167f, -0.003649f, -0.00787f, - 0.00857f, 0.00359f, 0.0015545f, -0.001327f, -0.00813f, 0.006893f, -0.00185f, -0.00689f, 0.00396f, - 0.003069f, -0.002464f, -0.003843f, 0.004967f, -0.00865f, -0.00503f, 0.003744f, 0.0003045f, 0.006298f, - 0.0011835f, 0.004654f, -0.00736f, -0.00171f, -0.00807f, -0.00462f, 0.00526f, 0.00905f, -0.006798f, - -0.0001366f, 0.00969f, -0.005116f, 0.007614f, -0.007317f, -0.0052f, 0.0007396f, 0.00735f, -0.00347f, - -0.002716f, 0.005177f, 0.003021f, -0.0026f, 0.00685f, -0.003214f, 0.001522f, -0.000601f, 0.00642f, - 0.002537f, 0.009705f, 0.0004787f, 0.00933f, 0.005848f, -0.00789f, -0.005962f, -0.003063f, 0.00734f, - 0.008644f, -0.00652f, 0.00389f, 0.00219f, -0.005104f, 0.004536f, 0.006638f, -0.00424f, -0.000966f, - -0.00242f, -0.003347f, 0.000761f, -0.006855f, -0.00816f, -0.00339f, 0.003853f, 0.00752f, 0.000502f, - 0.00394f, 0.00875f, -0.001621f, -0.00972f, -0.000609f, -0.00796f, -0.003817f, 0.004166f, 0.003754f, - -0.007385f, -0.001137f, -0.004467f, -0.001389f, 0.0093f, 0.003342f, -0.005795f, -0.00792f, 0.0082f, - 0.00557f, -0.00656f, 0.003494f, 0.002573f, 0.0014925f, -0.003141f, 0.002457f, 0.00789f, 0.0071f, - -0.004307f, 0.001407f, 0.000862f, -0.007122f, -0.005196f, -0.00306f, -0.00808f, -0.004246f, 0.00772f, - 0.006165f, 0.002718f, -0.00569f, -0.000952f, -0.005917f, 0.003725f, -0.0008345f, -0.00265f, -0.0063f, - 0.001651f, -0.00962f, 0.006016f, 0.005035f, -0.004337f, 0.00552f, 0.00373f, -0.0005794f, 0.00202f, - -0.006985f, -0.00747f, -0.001536f, -0.007122f, -0.00937f, -0.00641f, -0.00871f, -0.00182f, 0.0000921f, - 0.007484f, -0.00974f, 0.00521f, 0.001293f, 0.0006785f, -0.00888f, 0.005943f, -0.00055f, -0.00676f, - -0.0000759f, 0.00414f, 0.007065f, 0.0000026f, -0.003262f, -0.001492f, 0.00802f, 0.003487f, -0.00977f, - -0.006863f, -0.004192f, -0.007458f, -0.001814f, -0.004482f, 0.008835f, -0.004826f, 0.00872f, 0.004635f, - 0.007317f, -0.00498f, -0.003536f, -0.004375f, 0.005074f, -0.002346f, 0.00384f, 0.00853f, -0.00416f, - -0.007164f, 0.0006695f, 0.0008926f, -0.001899f, 0.005783f, 0.00535f, 0.00557f, -0.00402f, 0.00006354f, - -0.001951f, -0.002588f, -0.005276f, -0.001826f, -0.006058f, 0.001427f, -0.009735f, 0.009224f, -0.00006384f, - -0.002344f, -0.00004303f, 0.00946f, -0.00841f, -0.00199f, -0.00494f, -0.00841f, -0.008835f, 0.00596f, - -0.006348f, 0.007545f, 0.001068f, 0.00624f, -0.005306f, 0.001778f, -0.0009108f, -0.0048f, -0.000988f, - -0.0005326f, -0.005173f, 0.003748f, 0.001759f, -0.003914f, -0.006252f, 0.004486f, 0.00882f, 0.006035f, - -0.002064f, -0.003456f, -0.006615f, -0.004963f, 0.003847f, -0.00342f, 0.006115f, -0.005974f, 0.002302f, - -0.00856f, 0.006847f, -0.006416f, -0.00226f, 0.005363f, 0.008224f, -0.0003793f, -0.009224f, -0.002298f, - -0.005264f, -0.000623f, -0.00803f, -0.007706f, 0.001601f, 0.007046f, -0.004757f, 0.0044f, 0.0046f, - -0.003963f, -0.007156f, 0.0004344f, 0.005592f, -0.00053f, 0.001337f, 0.009186f, -0.00897f, -0.005627f, - -0.001647f, 0.0092f, 0.0016985f, -0.003633f, 0.008064f, 0.004543f, -0.00698f, -0.005695f, 0.00478f, - -0.001252f, 0.00881f, -0.00876f, -0.00202f, -0.009514f, 0.000278f, -0.005013f, 0.007404f, -0.0005183f, - -0.001753f, -0.00442f, 0.00199f, -0.008156f, -0.008865f, -0.00308f, -0.00973f, -0.005714f, 0.007996f, - -0.004395f, 0.00455f, -0.00862f, -0.0004373f, 0.00885f, 0.00984f, -0.00422f, 0.00382f, 0.001032f, - -0.0003273f, 0.004593f, 0.004982f, 0.00259f, -0.00604f, 0.000337f, 0.009186f, -0.003052f, -0.005085f, - 0.005188f, 0.00417f, 0.004345f, 0.003605f, -0.000079f, -0.009575f, 0.00894f, 0.00992f, 0.008f, - -0.00476f, 0.00871f, -0.007538f, -0.00739f, -0.0069f, -0.008804f, -0.00526f, -0.001096f, 0.0009003f, - 0.005367f, 0.005283f, 0.005047f, -0.0003638f, -0.001063f, -0.00399f, 0.0081f, 0.004395f, 0.00805f, - -0.00531f, 0.001779f, 0.003176f, 0.00775f, 0.0071f, 0.00682f, -0.0007925f, -0.00318f, 0.00897f, - -0.006172f, -0.00376f, -0.002518f, -0.007618f, 0.00728f, 0.007042f, 0.006863f, -0.005936f, 0.004787f, - 0.005726f, -0.0009775f, -0.004757f, -0.0002875f, 0.00844f, 0.005302f, 0.003609f, 0.005863f, 0.005436f, - 0.004433f, -0.002047f, 0.003025f, 0.007694f, -0.007565f, -0.006165f, -0.00202f, -0.004505f, -0.004784f, - 0.00921f, -0.00059f, 0.004604f, 0.002249f, -0.004814f, -0.00519f, -0.00625f, 0.0000181f, 0.00531f, - 0.001533f, 0.006847f, -0.00959f, -0.00846f, -0.00928f, -0.006386f, 0.002766f, -0.005516f, -0.0071f, - 0.006073f, 0.00907f, 0.005585f, -0.00644f, -0.00855f, -0.003466f, -0.009514f, -0.00914f, 0.003702f, - -0.00503f, -0.00497f, 0.00796f, -0.007763f, 0.007614f, 0.00544f, 0.00933f, 0.008316f, -0.003374f, - -0.00763f, 0.002035f, 0.002916f, -0.0006156f, -0.003872f, -0.0002236f, -0.00917f, -0.003334f, -0.004528f, - 0.00978f, -0.0005903f, -0.006786f, -0.00913f, -0.009254f, -0.006096f, 0.002638f, 0.003622f, -0.007805f, - 0.00873f, 0.001586f, -0.003641f, 0.001905f, -0.00311f, -0.000627f, 0.005222f, -0.004986f, 0.000169f, - -0.007088f, -0.00783f, -0.004852f, 0.000881f, 0.004627f, -0.00405f, -0.006405f, 0.003586f, 0.002258f, - -0.00988f, 0.000979f, -0.002949f, 0.00912f, 0.00885f, -0.002743f, 0.00833f, 0.003326f, -0.0003536f, - -0.003792f, -0.00941f, 0.000213f, -0.002922f, -0.001483f, -0.003443f, -0.00307f, -0.005894f, 0.003468f, - 0.001887f, -0.006832f, -0.00828f, -0.006172f, -0.00746f, 0.002558f, 0.00998f, 0.001123f, -0.00611f, - -0.005863f, -0.0007744f, 0.003525f, -0.00573f, 0.0009665f, -0.002241f, -0.0007176f, -0.00918f, -0.00794f, - 0.00216f, -0.0049f, 0.002016f, 0.006763f, 0.00445f, 0.004715f, 0.001216f, 0.002068f, -0.001449f, - 0.00249f, 0.00953f, -0.0007606f, -0.00256f, 0.0006046f, -0.004406f, -0.009415f, 0.003393f, -0.004787f, - 0.002743f, 0.00841f, 0.00972f, -0.00194f, 0.004185f, 0.00585f, 0.007504f, -0.00622f, 0.001107f, - -0.0044f, 0.00576f, 0.00772f, 0.00818f, 0.00536f, 0.002644f, -0.00465f, -0.0087f, -0.00816f, - 0.004547f, 0.001851f, -0.005634f, 0.003641f, 0.007618f, -0.00985f, 0.009766f, -0.00459f, -0.002457f, - 0.00393f, -0.008224f, -0.003952f, -0.00813f, 0.007393f, 0.005188f, 0.007126f, 0.00639f, 0.001274f, - 0.002176f, -0.00894f, 0.002445f, -0.001414f, -0.00952f, 0.004444f, -0.001607f, -0.001501f, 0.00857f, - -0.005585f, -0.000724f, 0.003077f, 0.007797f, 0.007473f, 0.003546f, -0.00948f, -0.003933f, 0.004017f, - -0.003176f, 0.001448f, 0.002731f, 0.003504f, 0.00831f, 0.007763f, 0.002405f, -0.006264f, 0.00536f, - -0.0083f, 0.001413f, -0.0003624f, -0.001836f, 0.006027f, 0.005173f, -0.003073f, -0.008354f, 0.00164f, - -0.001941f, -0.002981f, 0.008156f, -0.004414f, -0.005413f, 0.002527f, -0.0004022f, 0.00625f, 0.008575f, - 0.00637f, 0.00765f, 0.0003421f, 0.00798f, -0.005287f, 0.00808f, -0.00646f, 0.000603f, 0.00955f, - 0.00889f, -0.002356f, -0.005306f, 0.002333f, 0.009514f, -0.003855f, 0.0054f, 0.005417f, 0.000675f, - -0.004402f, 0.00933f, -0.005234f, -0.00958f, 0.0089f, 0.009254f, -0.00757f, 0.0098f, -0.001879f, - 0.00789f, 0.002071f, 0.000677f, -0.007763f, -0.001941f, 0.001637f, -0.003653f, 0.00528f, 0.007465f, - -0.00557f, -0.006004f, -0.009476f, 0.000802f, 0.002075f, -0.007168f, 0.00398f, -0.006268f, 0.006287f, - -0.009575f, -0.001453f, 0.0092f, -0.00995f, -0.002644f, 0.005024f, 0.00966f, -0.006878f, 0.00995f, - -0.001319f, -0.002237f, 0.002209f, 0.00861f, -0.00883f, -0.003874f, -0.002903f, 0.00992f, -0.0016365f, - -0.00633f, 0.00823f, -0.00771f, -0.003204f, -0.00563f, 0.00563f, 0.00805f, -0.004936f, 0.003477f, - 0.00741f, 0.0043f, 0.006905f}; + -0.004707f, -0.006775f, 0.0009236f, 0.003067f, -0.00806f, 0.00779f, 0.0004425f, 0.00846f, 0.00048f, + 0.00999f, 0.00115f, 0.00226f, -0.00705f, 0.004467f, 0.001455f, -0.006073f, 0.00465f, -0.00861f, + -0.002779f, 0.00883f, -0.002996f, 0.008354f, -0.003141f, -0.007374f, 0.001634f, -0.009544f, 0.00198f, + 0.005894f, 0.001434f, 0.001589f, 0.00921f, -0.00507f, 0.00448f, 0.0002687f, -0.003147f, 0.001627f, + -0.005608f, 0.006516f, 0.00935f, -0.004715f, 0.00833f, -0.00563f, 0.00281f, -0.005875f, 0.000629f, + 0.00993f, -0.002695f, 0.004486f, -0.00528f, -0.003807f, 0.00521f, 0.00010276f, 0.003307f, 0.000701f, + 0.0001151f, 0.00649f, 0.00934f, -0.001063f, 0.002327f, -0.0002892f, 0.003317f, -0.003506f, 0.004875f, + 0.0006566f, 0.000953f, -0.005898f, 0.00326f, 0.00877f, 0.00923f, -0.00622f, -0.006588f, 0.007748f, + -0.001789f, 0.00002104f, 0.002937f, 0.00816f, 0.005833f, -0.006634f, 0.006985f, 0.00951f, 0.002947f, + 0.001871f, -0.009445f, 0.0004554f, -0.006294f, -0.00649f, 0.00917f, -0.004158f, -0.00462f, -0.001531f, + -0.00658f, -0.00364f, -0.00462f, 0.003723f, 0.009636f, 0.003305f, -0.00984f, 0.006126f, -0.0010395f, + -0.00852f, 0.006287f, -0.002949f, -0.004f, -0.002415f, 0.0009527f, 0.001624f, 0.00364f, 0.007088f, + -0.00717f, -0.009224f, -0.00997f, 0.001726f, -0.00877f, -0.000602f, 0.0089f, 0.009026f, -0.009514f, + 0.00852f, 0.0003986f, -0.006855f, -0.00583f, 0.003622f, -0.00526f, 0.001879f, -0.007053f, 0.00006664f, + 0.00972f, -0.000457f, -0.00759f, -0.007107f, 0.002337f, -0.004204f, -0.005676f, 0.00985f, 0.00978f, + -0.004486f, 0.005093f, -0.009285f, 0.004093f, -0.00682f, 0.00963f, -0.006954f, -0.003674f, -0.003822f, + 0.00202f, -0.004635f, -0.0009174f, -0.001202f, 0.00639f, -0.004356f, -0.00741f, -0.00586f, -0.00319f, + -0.002506f, 0.005047f, 0.007156f, -0.00765f, 0.00702f, 0.007477f, 0.000626f, -0.001587f, -0.005455f, + 0.005814f, -0.002127f, 0.00834f, 0.001279f, 0.007996f, -0.005787f, -0.006924f, -0.004063f, -0.00435f, + -0.00427f, 0.0002115f, 0.00981f, -0.00138f, -0.007965f, -0.004536f, -0.003431f, 0.00416f, 0.005894f, + 0.006054f, 0.00907f, 0.00388f, -0.006763f, 0.001692f, -0.00797f, -0.00691f, 0.00798f, 0.00867f, + -0.00788f, 0.002062f, -0.003761f, 0.009834f, -0.002445f, -0.00613f, 0.0096f, -0.005466f, -0.0008426f, + 0.0002431f, -0.009995f, 0.003736f, -0.0071f, -0.003593f, 0.006386f, 0.005997f, -0.003328f, 0.007515f, + -0.008675f, 0.00547f, -0.00388f, 0.00473f, 0.00362f, -0.00469f, 0.006958f, -0.001264f, -0.003887f, + -0.004276f, -0.000396f, 0.00453f, -0.00465f, -0.007343f, -0.005787f, -0.00927f, -0.006058f, -0.004566f, + -0.009056f, -0.00891f, 0.007633f, 0.001098f, -0.003368f, -0.007214f, -0.00905f, -0.00898f, -0.008736f, + -0.00948f, 0.003162f, 0.004402f, -0.006245f, -0.00515f, -0.00378f, -0.003248f, -0.00304f, 0.001834f, + -0.002672f, 0.005234f, -0.007706f, 0.0084f, 0.00832f, -0.00904f, -0.00596f, 0.009926f, -0.00869f, + 0.001513f, 0.00728f, 0.001057f, 0.001452f, 0.00785f, 0.001203f, -0.004528f, 0.006573f, 0.003656f, + 0.005966f, -0.006985f, 0.002844f, 0.00883f, 0.0004826f, 0.003279f, 0.006916f, 0.00263f, -0.002415f, + -0.001928f, -0.0004041f, -0.004593f, -0.00204f, 0.007965f, -0.008224f, -0.00591f, -0.002144f, 0.000688f, + 0.001676f, -0.00949f, -0.003304f, -0.007637f, 0.00973f, -0.008224f, -0.001211f, -0.003345f, 0.002115f, + -0.00615f, -0.004955f, -0.00803f, 0.00807f, -0.0006227f, 0.00845f, -0.006916f, 0.004353f, -0.000934f, + 0.005604f, -0.00825f, -0.004402f, -0.00441f, 0.00257f, -0.008415f, 0.006542f, 0.001357f, -0.004974f, + -0.00993f, 0.0001058f, 0.002855f, -0.0081f, 0.001513f, -0.00191f, 0.0004003f, 0.003874f, -0.0015545f, + -0.00736f, 0.006718f, 0.005135f, 0.003859f, -0.0054f, 0.00993f, 0.000952f, 0.00228f, 0.001163f, + 0.00918f, 0.00582f, 0.00308f, 0.008415f, 0.00889f, 0.00011665f, -0.007362f, -0.009926f, -0.00784f, + 0.005817f, -0.002918f, 0.005043f, -0.003029f, 0.0085f, -0.007362f, -0.00857f, 0.006832f, -0.00055f, + 0.008835f, -0.00522f, -0.002085f, 0.00353f, -0.007706f, 0.006283f, 0.004414f, -0.002405f, -0.003002f, + -0.00946f, -0.001164f, -0.004177f, 0.00834f, -0.001576f, 0.00855f, 0.004025f, 0.000285f, -0.004486f, + -0.00703f, -0.003061f, 0.003452f, 0.001276f, 0.008446f, -0.001302f, 0.004333f, -0.00898f, -0.002445f, + -0.006523f, 0.0004334f, -0.003206f, -0.00349f, -0.005497f, -0.007786f, 0.007397f, 0.00925f, 0.002077f, + 0.004074f, 0.006626f, -0.001693f, -0.0005975f, -0.005074f, 0.00324f, 0.00925f, -0.009735f, -0.007133f, + -0.0064f, -0.00455f, -0.003153f, 0.0056f, -0.006073f, -0.00274f, -0.00587f, -0.005066f, 0.003595f, + -0.00932f, -0.005f, 0.00569f, 0.008415f, 0.006866f, 0.003952f, -0.009285f, -0.008064f, 0.00824f, + 0.0000188f, -0.001233f, 0.005726f, -0.0007806f, -0.008385f, -0.001798f, -0.008095f, 0.00986f, 0.006924f, + 0.00712f, -0.00964f, -0.00797f, 0.00943f, -0.007416f, 0.007904f, 0.006893f, 0.00799f, -0.007164f, + 0.007214f, 0.00931f, 0.000645f, -0.0058f, 0.009254f, -0.002079f, 0.000969f, 0.009636f, -0.002365f, + -0.002348f, 0.007053f, -0.002796f, -0.007652f, -0.001554f, 0.00402f, -0.002838f, -0.006958f, 0.000331f, + 0.006435f, -0.004036f, 0.007595f, 0.00812f, 0.00637f, 0.007732f, -0.006916f, 0.003952f, -0.008064f, + -0.00928f, 0.00468f, -0.000512f, -0.006287f, 0.00607f, -0.001904f, -0.00458f, 0.003412f, 0.000382f, + -0.00822f, -0.00486f, 0.0008364f, 0.0004992f, 0.003582f, 0.0088f, 0.002453f, -0.00856f, 0.00886f, + 0.0077f, 0.0004592f, -0.001417f, -0.005142f, 0.004696f, -0.003576f, 0.004807f, -0.00851f, -0.006245f, + -0.003649f, -0.0001528f, 0.004017f, -0.006123f, -0.004158f, -0.00445f, 0.004864f, -0.0005493f, 0.00399f, + -0.007244f, 0.003246f, 0.00407f, 0.00929f, -0.006706f, 0.0084f, -0.003496f, 0.00843f, 0.00514f, + 0.002714f, -0.0001633f, -0.00866f, 0.004837f, -0.003016f, 0.00593f, -0.00849f, 0.001287f, -0.007706f, + 0.001479f, -0.002241f, 0.00843f, -0.001236f, -0.007572f, -0.004448f, -0.001927f, 0.001139f, 0.004982f, + -0.00673f, -0.000568f, 0.009346f, 0.000487f, 0.001392f, -0.009605f, 0.00944f, 0.002022f, 0.00617f, + 0.00472f, 0.009575f, -0.006416f, 0.004265f, 0.002005f, 0.000578f, 0.002592f, 0.002707f, -0.005333f, + -0.00928f, -0.00935f, -0.00833f, -0.00205f, -0.005795f, -0.001061f, -0.003605f, 0.003078f, 0.00592f, + 0.0006485f, -0.00504f, 0.002682f, 0.00826f, -0.003983f, -0.00493f, 0.00406f, -0.00838f, 0.0032f, + 0.0009565f, 0.00471f, 0.00504f, 0.004612f, -0.002768f, 0.00791f, -0.002892f, 0.00471f, 0.00588f, + 0.005978f, -0.005203f, -0.009995f, 0.009346f, -0.00802f, 0.003807f, 0.001364f, -0.00736f, 0.009285f, + -0.001995f, 0.002632f, -0.00904f, 0.007042f, -0.00326f, 0.006516f, 0.00492f, 0.00734f, -0.00867f, + -0.002512f, -0.003729f, 0.0027f, -0.002659f, -0.009514f, -0.005634f, -0.001473f, -0.00545f, 0.003551f, + 0.001995f, -0.003704f, 0.006386f, 0.003313f, -0.002823f, 0.00105f, 0.00993f, 0.00951f, -0.007275f, + -0.002213f, -0.003418f, 0.00599f, 0.00948f, 0.007572f, -0.00944f, -0.00924f, 0.00011665f, 0.0069f, + -0.00544f, 0.007515f, -0.006832f, -0.007774f, 0.00853f, -0.0007486f, -0.00643f, -0.0001878f, -0.00849f, + -0.007603f, 0.0016985f, -0.00986f, 0.003975f, -0.002176f, -0.009796f, 0.004795f, -0.00699f, -0.006725f, + 0.00109f, 0.004498f, -0.00569f, -0.00584f, 0.004047f, -0.001022f, 0.001479f, -0.00751f, -0.002579f, + -0.004086f, 0.007603f, -0.0000106f, 0.007366f, 0.0029f, -0.003498f, 0.007385f, -0.00759f, -0.005886f, + 0.00476f, -0.0003812f, -0.00008225f, 0.00998f, 0.002716f, -0.00925f, -0.00439f, -0.000902f, -0.00296f, + -0.007347f, -0.005882f, -0.001428f, -0.002855f, -0.003311f, -0.000793f, -0.00403f, -0.00829f, -0.00999f, + -0.00838f, 0.008804f, 0.004124f, -0.005882f, 0.001305f, 0.00511f, 0.00799f, -0.00953f, -0.008575f, + -0.00556f, -0.00858f, 0.00565f, 0.00908f, 0.00591f, 0.0007925f, -0.00912f, -0.005894f, -0.002588f, + -0.00957f, -0.00682f, 0.002174f, 0.00706f, 0.00528f, 0.0069f, -0.004517f, -0.002382f, 0.005596f, + 0.00645f, 0.00956f, 0.00796f, 0.007706f, 0.004818f, 0.002308f, 0.001367f, -0.004177f, 0.00842f, + 0.007416f, -0.00404f, -0.009094f, 0.00447f, -0.00284f, -0.002499f, -0.0001582f, 0.001681f, 0.004993f, + -0.0059f, 0.007282f, -0.00809f, 0.00927f, 0.004948f, 0.009766f, -0.00618f, -0.001559f, -0.00461f, + 0.001866f, 0.00827f, -0.00785f, -0.003101f, 0.00977f, -0.00444f, -0.00916f, -0.0008535f, 0.004913f, + 0.005627f, 0.007965f, 0.000532f, -0.00878f, 0.004047f, -0.005302f, 0.00201f, 0.002964f, -0.00895f, + 0.005768f, 0.00388f, 0.007526f, -0.00783f, 0.003794f, 0.005363f, 0.003454f, -0.002235f, -0.003494f, + -0.001541f, -0.00003624f, -0.0007634f, -0.0014f, -0.003124f, 0.00829f, -0.00298f, -0.00868f, -0.001243f, + -0.005383f, -0.009964f, 0.004433f, -0.002045f, -0.00753f, 0.002361f, -0.007473f, -0.002419f, -0.000931f, + 0.00585f, 0.007114f, -0.002247f, 0.00472f, -0.003033f, -0.001974f, 0.001622f, -0.007473f, -0.005375f, + -0.005013f, 0.00436f, 0.00662f, -0.0053f, 0.000606f, -0.00849f, -0.007004f, 0.006794f, -0.0005445f, + -0.001269f, 0.00391f, 0.006294f, 0.007088f, -0.009026f, -0.001965f, -0.008545f, 0.002115f, 0.003534f, + -0.00857f, 0.00412f, -0.00722f, -0.006386f, 0.00595f, -0.003778f, -0.00886f, -0.0002267f, 0.00249f, + -0.002825f, 0.0003204f, 0.0002894f, -0.004147f, -0.003632f, 0.001764f, -0.002983f, 0.006584f, -0.004402f, + 0.006493f, 0.002014f, -0.0061f, 0.00816f, 0.005585f, -0.008125f, 0.006546f, -0.00956f, 0.004185f, + 0.001067f, 0.001277f, 0.007835f, -0.003933f, 0.00979f, -0.003376f, 0.006573f, -0.00501f, 0.0007577f, + 0.00133f, -0.00737f, 0.00885f, -0.00599f, -0.001151f, -0.001389f, -0.00987f, -0.003214f, -0.00649f, + 0.005424f, 0.0004575f, 0.002352f, 0.005722f, -0.001995f, -0.007717f, 0.001034f, -0.006557f, 0.0088f, + -0.003183f, -0.00663f, 0.00634f, -0.003008f, -0.004925f, 0.00539f, -0.00432f, -0.00651f, 0.009895f, + 0.00532f, -0.0003607f, 0.003397f, 0.006145f, 0.00531f, -0.006275f, 0.00985f, -0.00471f, 0.00817f, + -0.00927f, 0.007217f, 0.005924f, 0.003187f, 0.001192f, -0.003986f, -0.0000217f, -0.0012245f, -0.003933f, + -0.00617f, -0.002232f, 0.00444f, 0.002008f, 0.0006056f, -0.002827f, -0.007366f, 0.002996f, -0.006752f, + -0.004143f, 0.001662f, -0.00793f, 0.002161f, 0.0001992f, 0.00803f, -0.0000725f, 0.001066f, 0.004745f, + -0.005367f, -0.00641f, 0.00431f, -0.004715f, 0.008575f, -0.007202f, 0.003786f, -0.00247f, 0.006382f, + -0.006832f, 0.00505f, -0.001084f, 0.009674f, 0.00458f, -0.00473f, -0.00656f, -0.00011283f, 0.004417f, + -0.001419f, -0.0005164f, 0.0000397f, -0.00395f, 0.00417f, -0.005512f, 0.0088f, 0.00568f, -0.0005984f, + 0.003128f, -0.006283f, -0.0000904f, -0.004738f, 0.00687f, 0.00592f, -0.005768f, -0.00859f, 0.003523f, + 0.001169f, -0.004498f, 0.00541f, 0.002956f, 0.00896f, -0.002571f, 0.0006533f, 0.002089f, -0.00473f, + -0.002241f, 0.005016f, 0.001295f, 0.005993f, -0.008064f, 0.000595f, -0.007744f, -0.00201f, 0.0075f, + -0.00942f, 0.0002023f, -0.00979f, -0.002243f, 0.002829f, -0.004322f, 0.009125f, 0.00704f, 0.007282f, + 0.00807f, 0.005447f, 0.00518f, -0.0010195f, -0.004803f, -0.001293f, -0.001305f, 0.00975f, -0.00564f, + -0.005215f, -0.009445f, 0.00999f, 0.00959f, -0.009224f, -0.0053f, -0.002106f, -0.00839f, 0.001516f, + 0.003109f, 0.004414f, -0.00921f, -0.00868f, 0.00833f, 0.00809f, 0.004654f, 0.00678f, 0.002237f, + 0.007195f, -0.004875f, -0.001252f, 0.0073f, 0.007275f, 0.00825f, -0.005936f, 0.00594f, -0.00381f, + -0.002117f, 0.009f, -0.003998f, -0.00104f, -0.00421f, 0.00526f, 0.001031f, 0.00902f, 0.006794f, + -0.00912f, -0.0002892f, 0.002966f, 0.00478f, 0.00581f, 0.007217f, 0.008156f, -0.0000639f, -0.003164f, + 0.00859f, -0.00897f, 0.00409f, 0.0008936f, -0.00991f, -0.008316f, -0.004055f, 0.001252f, -0.00473f, + -0.002f, -0.003933f, 0.000755f, -0.00992f, 0.003569f, -0.00812f, -0.004215f, -0.00774f, 0.00907f, + 0.00653f, -0.00992f, -0.006252f, -0.00468f, -0.001105f, -0.007717f, 0.005302f, 0.003773f, -0.001262f, + -0.006207f, -0.005707f, 0.0053f, 0.00415f, 0.002441f, 0.0009265f, -0.006744f, 0.00994f, -0.0004816f, + -0.002108f, -0.003267f, 0.0000461f, 0.004364f, -0.00596f, -0.008675f, 0.005703f, 0.002748f, 0.00961f, + 0.006767f, -0.0000575f, -0.00845f, -0.003597f, 0.003616f, 0.00423f, 0.009705f, -0.00976f, -0.0085f, + 0.00307f, -0.004032f, -0.00784f, -0.00901f, -0.00873f, 0.00543f, 0.00744f, -0.006588f, -0.004765f, + -0.007202f, 0.006306f, -0.007484f, 0.007442f, -0.00008386f, 0.006374f, 0.00879f, 0.002039f, -0.003298f, + 0.003407f, 0.004673f, 0.0068f, 0.0001981f, 0.002296f, 0.008194f, -0.00805f, -0.007637f, -0.00903f, + -0.004025f, 0.001553f, 0.00881f, 0.001311f, -0.005016f, -0.006916f, -0.009926f, -0.00801f, 0.00945f, + 0.0001532f, 0.00234f, -0.002968f, -0.002174f, 0.004585f, -0.00658f, 0.000132f, 0.0004494f, -0.00954f, + -0.00848f, 0.009964f, -0.0006323f, -0.005016f, 0.001238f, 0.00433f, 0.001477f, 0.00578f, 0.00794f, + -0.00512f, -0.00207f, -0.00145f, -0.001166f, 0.008644f, -0.00915f, 0.007187f, -0.00415f, 0.006035f, + -0.004177f, 0.00817f, -0.00432f, 0.001062f, -0.005272f, -0.0004163f, 0.005154f, 0.005688f, -0.002985f, + -0.004f, -0.003176f, 0.00137f, 0.0002158f, 0.003798f, 0.0002009f, -0.01f, 0.00311f, -0.004234f, + 0.00681f, -0.005657f, -0.00963f, 0.00916f, 0.00847f, -0.002085f, -0.00211f, 0.006813f, -0.00473f, + 0.00873f, 0.0008483f, 0.004253f, 0.00865f, -0.007156f, -0.00996f, 0.005413f, -0.004253f, 0.00847f, + 0.004482f, 0.000647f, -0.006702f, 0.00845f, -0.009254f, -0.0001926f, 0.003868f, -0.00788f, 0.00951f, + -0.0005136f, -0.007698f, 0.00889f, -0.00953f, 0.007965f, 0.004982f, -0.004345f, 0.00841f, 0.007034f, + 0.006092f, 0.004166f, 0.00682f, -0.004635f, 0.003433f, -0.006527f, -0.0002658f, 0.005455f, 0.001926f, + -0.003582f, -0.0065f, 0.002348f, -0.001918f, -0.00488f, -0.006416f, -0.000873f, -0.00942f, 0.005177f, + -0.00194f, 0.006374f, 0.003983f, 0.00963f, 0.00697f, -0.00809f, -0.00791f, -0.003254f, -0.00669f, + -0.001487f, 0.002129f, -0.000799f, -0.003944f, 0.002693f, 0.00667f, 0.00892f, 0.002377f, 0.001005f, + -0.00792f, 0.002398f, -0.001093f, 0.0006456f, -0.002361f, 0.00533f, 0.0064f, 0.004524f, -0.0066f, + 0.004406f, 0.007538f, 0.00611f, 0.006294f, 0.0004857f, -0.00859f, 0.00928f, -0.005505f, -0.001135f, + -0.00712f, -0.00923f, 0.007534f, 0.00258f, 0.00685f, -0.00873f, 0.001684f, -0.001002f, -0.0005627f, + 0.00352f, -0.007324f, 0.00838f, 0.00731f, 0.006733f, -0.003832f, -0.00522f, 0.00299f, 0.000935f, + -0.005245f, 0.000987f, 0.007515f, 0.00704f, 0.0086f, 0.00133f, 0.0038f, 0.00622f, -0.0085f, + 0.00988f, 0.00625f, 0.00835f, -0.006023f, 0.007084f, -0.002728f, 0.009995f, 0.0008073f, 0.00341f, + -0.004547f, 0.005917f, -0.00818f, -0.009705f, 0.00907f, -0.008965f, 0.003483f, -0.00556f, -0.001769f, + 0.0068f, 0.007442f, 0.00497f, -0.001922f, 0.002583f, -0.00834f, 0.004417f, 0.005028f, 0.006336f, + 0.00402f, -0.00773f, 0.00672f, 0.00324f, 0.003595f, -0.00852f, 0.00503f, -0.00794f, -0.009766f, + -0.000813f, -0.006924f, -0.006622f, 0.0008802f, 0.004177f, 0.007427f, -0.001697f, 0.008575f, 0.00414f, + 0.00728f, 0.001138f, 0.000674f, -0.00209f, 0.004883f, -0.003029f, 0.0084f, -0.00798f, -0.003302f, + 0.007866f, 0.0006804f, 0.00306f, 0.006325f, 0.000508f, -0.002022f, 0.00473f, 0.00958f, -0.001912f, + -0.002256f, 0.001385f, 0.001143f, 0.007668f, -0.002575f, 0.004364f, 0.00919f, -0.00924f, 0.00558f, + -0.00447f, -0.004196f, -0.00547f, 0.00868f, -0.001469f, -0.00849f, 0.006397f, -0.00529f, 0.002329f, + 0.00847f, -0.009705f, 0.00233f, 0.000902f, 0.006073f, -0.00536f, 0.000875f, 0.002682f, -0.003347f, + 0.00905f, -0.00399f, -0.005783f, -0.00942f, 0.00671f, -0.008095f, -0.004467f, -0.008415f, 0.007996f, + -0.00848f, -0.00531f, 0.002605f, -0.00632f, -0.007652f, 0.009605f, 0.00929f, 0.007782f, -0.006844f, + -0.00115f, -0.006626f, -0.007526f, -0.001129f, 0.00943f, 0.004242f, -0.00486f, 0.00963f, -0.006386f, + -0.004513f, 0.00185f, -0.001695f, 0.00976f, -0.001186f, 0.001484f, 0.00429f, 0.000502f, -0.009285f, + 0.005882f, -0.00674f, 0.00882f, 0.00816f, -0.008705f, -0.003618f, 0.00406f, 0.007607f, -0.001528f, + -0.006336f, 0.006943f, 0.00753f, -0.004963f, -0.00602f, 0.002424f, -0.009476f, 0.007385f, 0.00988f, + -0.00359f, -0.005722f, 0.006863f, -0.00398f, -0.005486f, -0.004898f, -0.0000809f, -0.001511f, 0.00307f, + 0.002613f, 0.0004046f, 0.005634f, 0.00449f, 0.008606f, -0.002146f, 0.002882f, -0.007065f, -0.00796f, + -0.001136f, -0.001323f, 0.004715f, -0.007004f, -0.007565f, -0.002895f, 0.007523f, 0.007027f, 0.001487f, + -0.003323f, 0.004665f, 0.007706f, 0.009186f, 0.00814f, -0.003918f, -0.002062f, 0.00514f, 0.00858f, + 0.00251f, 0.007576f, -0.008736f, 0.001245f, -0.007298f, -0.006157f, 0.00719f, -0.008446f, -0.00864f, + 0.006535f, -0.00002605f, 0.003567f, 0.002258f, 0.003443f, -0.006207f, 0.00934f, 0.007515f, -0.00916f, + 0.00861f, -0.00939f, 0.008644f, 0.00656f, 0.001708f, 0.007935f, -0.001997f, 0.002934f, 0.001758f, + 0.004932f, 0.005432f, 0.007812f, 0.00046f, -0.00562f, 0.009186f, 0.002731f, -0.00234f, 0.00913f, + 0.006542f, -0.001783f, 0.001575f, 0.003267f, 0.00676f, 0.00647f, -0.002998f, 0.00408f, -0.002005f, + 0.002071f, 0.0001754f, -0.003132f, 0.009705f, -0.003107f, 0.00847f, -0.006504f, -0.0005784f, -0.004715f, + -0.008415f, -0.005634f, -0.00926f, -0.006958f, 0.004932f, 0.0076f, 0.008896f, 0.006042f, 0.001687f, + 0.000543f, 0.005047f, -0.002184f, 0.003963f, 0.00716f, 0.003468f, -0.003925f, 0.0073f, 0.00385f, + 0.002712f, -0.00893f, -0.00004303f, -0.00814f, 0.00937f, 0.0017395f, 0.00555f, 0.005833f, -0.001491f, + -0.00863f, 0.00947f, 0.001972f, -0.00984f, 0.004642f, 0.003994f, 0.00923f, -0.00984f, 0.0049f, + -0.00987f, -0.009834f, -0.0005865f, -0.006485f, -0.0005198f, 0.00919f, 0.0004432f, 0.001068f, 0.009254f, + -0.00881f, -0.003483f, 0.00565f, -0.007793f, -0.00989f, -0.00908f, 0.00276f, -0.002663f, -0.006893f, + 0.006332f, -0.004177f, 0.006104f, -0.00004715f, -0.003693f, 0.003576f, 0.00255f, -0.00928f, -0.002916f, + -0.007755f, -0.00729f, -0.0061f, 0.006523f, 0.00254f, 0.0008516f, -0.0003228f, -0.004017f, -0.007374f, + -0.005207f, 0.009056f, -0.002869f, 0.004906f, 0.007675f, 0.003086f, -0.008026f, -0.00861f, -0.006744f, + 0.0002438f, 0.00375f, 0.003315f, 0.00235f, 0.006836f, -0.005516f, 0.00434f, -0.004208f, 0.002483f, + 0.006413f, 0.00674f, 0.005604f, -0.002977f, -0.00732f, -0.00908f, 0.007484f, 0.004456f, -0.00822f, + 0.007442f, -0.003195f, 0.005753f, 0.007698f, -0.006397f, -0.00785f, -0.009605f, -0.00419f, 0.00676f, + -0.00833f, -0.00997f, -0.0003414f, 0.00906f, -0.0071f, -0.006092f, -0.00885f, -0.007866f, 0.000824f, + -0.003231f, -0.0006027f, 0.0074f, 0.00764f, 0.005795f, 0.002886f, 0.00958f, -0.007668f, 0.004158f, + 0.00622f, 0.00119f, 0.00277f, -0.00571f, -0.0006685f, -0.006645f, 0.0004497f, 0.00218f, -0.00405f, + 0.00485f, -0.007504f, -0.001411f, -0.001933f, -0.009964f, 0.002077f, 0.00159f, -0.002796f, 0.005787f, + 0.00335f, 0.001426f, -0.005413f, 0.00994f, 0.001742f, -0.00715f, -0.0099f, 0.007744f, -0.0008388f, + -0.000603f, -0.002f, 0.005436f, 0.00178f, 0.009796f, -0.001966f, -0.007397f, -0.001909f, 0.00931f, + 0.0003397f, -0.006817f, 0.0069f, 0.002558f, 0.00808f, -0.007313f, -0.00984f, -0.00001967f, 0.002756f, + 0.009995f, -0.00715f, 0.004765f, -0.006096f, 0.004337f, 0.005642f, 0.00763f, 0.007103f, -0.0002332f, + 0.00322f, 0.00284f, 0.003447f, 0.0012f, -0.001126f, -0.002625f, 0.00961f, -0.005272f, 0.0053f, + -0.002483f, -0.00931f, 0.007687f, -0.002417f, 0.004463f, 0.001136f, -0.005375f, -0.00672f, 0.007084f, + 0.0006213f, -0.00912f, 0.006542f, 0.00606f, 0.003868f, 0.001709f, -0.007484f, 0.004448f, -0.00842f, + 0.00427f, -0.00975f, 0.006847f, -0.0071f, 0.0005484f, 0.00909f, -0.004642f, 0.00564f, -0.001863f, + -0.006863f, 0.0087f, -0.003702f, -0.001783f, -0.004032f, 0.003088f, -0.002344f, -0.00323f, -0.00966f, + 0.008286f, 0.006916f, -0.001279f, 0.003246f, 0.00921f, 0.007122f, -0.006985f, 0.0002171f, 0.000837f, + 0.001388f, 0.001075f, -0.008095f, 0.007515f, 0.00999f, 0.00423f, -0.0004835f, -0.009026f, 0.007538f, + 0.00877f, -0.002445f, 0.003437f, 0.00485f, -0.008125f, -0.007767f, 0.00934f, -0.0069f, 0.00804f, + -0.001232f, 0.00959f, -0.007687f, 0.005993f, 0.0006413f, -0.00814f, -0.002447f, -0.001008f, 0.002981f, + 0.001682f, 0.004833f, -0.00382f, -0.0008454f, -0.006485f, 0.00567f, 0.004982f, -0.00484f, 0.00922f, + -0.004585f, 0.00426f, 0.0004027f, 0.0006104f, -0.0063f, -0.00273f, -0.006138f, 0.005367f, -0.004303f, + 0.001937f, -0.003523f, 0.007137f, -0.005737f, -0.00869f, -0.00481f, -0.00816f, 0.0002303f, -0.0002975f, + -0.002365f, 0.00207f, -0.004353f, -0.00924f, 0.00395f, -0.00843f, -0.0043f, -0.0004406f, 0.004807f, + -0.00694f, 0.001308f, -0.000525f, 0.000463f, -0.006813f, 0.00775f, 0.006725f, -0.00984f, -0.0003664f, + 0.009964f, 0.007217f, 0.001767f, -0.004524f, 0.002432f, 0.000869f, -0.005993f, 0.007275f, -0.001423f, + -0.00711f, -0.001464f, 0.007347f, -0.004776f, 0.00513f, -0.00942f, 0.003813f, -0.00489f, -0.00835f, + -0.00711f, -0.002565f, 0.004646f, 0.002693f, 0.000531f, -0.001337f, -0.0008225f, 0.0005493f, -0.003017f, + 0.003242f, -0.00651f, 0.00958f, 0.006573f, -0.00635f, 0.008f, -0.004864f, 0.003464f, -0.007538f, + -0.00917f, -0.002682f, 0.00431f, -0.00604f, 0.002548f, 0.000772f, -0.00769f, -0.002756f, 0.004482f, + 0.001484f, -0.004753f, -0.003052f, 0.0002143f, 0.003023f, 0.002924f, 0.00821f, 0.004673f, 0.003557f, + 0.0092f, -0.00654f, 0.001993f, 0.00835f, -0.008736f, -0.0003886f, -0.00677f, 0.0004423f, -0.00723f, + -0.002926f, 0.00994f, 0.00784f, 0.001214f, 0.00311f, 0.003584f, 0.00856f, 0.001752f, -0.004345f, + -0.003647f, 0.00984f, -0.006798f, 0.001661f, 0.0005393f, 0.0004299f, 0.001711f, -0.006824f, 0.003633f, + 0.00506f, -0.002146f, 0.005653f, -0.00959f, 0.0009027f, -0.009674f, 0.002176f, -0.002815f, -0.007362f, + -0.0002565f, -0.005466f, 0.006443f, 0.00541f, -0.006615f, -0.00668f, 0.0000291f, -0.00249f, -0.00648f, + 0.006466f, 0.005596f, -0.00963f, -0.00289f, -0.007336f, 0.001666f, -0.001227f, 0.008835f, -0.00396f, + -0.001764f, -0.00962f, -0.00461f, 0.00488f, 0.00606f, -0.00959f, 0.005497f, 0.003384f, -0.002548f, + 0.00479f, 0.001423f, -0.004772f, 0.0001752f, 0.00884f, 0.0069f, 0.00792f, -0.001779f, 0.0007215f, + -0.007557f, 0.004314f, -0.006527f, -0.00513f, -0.00855f, -0.00873f, -0.00709f, -0.007538f, -0.002918f, + -0.00867f, 0.000341f, 0.0004723f, 0.007336f, -0.0009327f, -0.005554f, 0.007065f, 0.00586f, -0.003202f, + -0.001984f, -0.007755f, 0.006268f, 0.003624f, 0.001136f, 0.002611f, -0.007374f, -0.00522f, 0.005642f, + 0.003551f, 0.005558f, 0.00512f, -0.001255f, 0.00445f, 0.006657f, -0.003395f, -0.0000211f, -0.00948f, + -0.00525f, 0.007614f, 0.007603f, -0.00872f, 0.00983f, -0.0059f, 0.005405f, -0.005775f, 0.001911f, + -0.006306f, -0.008446f, 0.006702f, 0.001295f, -0.007904f, -0.00613f, -0.00737f, 0.004997f, 0.00699f, + -0.008514f, 0.001029f, 0.008705f, 0.00543f, -0.0097f, -0.00839f, 0.00201f, 0.00319f, -0.00767f, + 0.003147f, -0.00936f, 0.003647f, 0.007465f, 0.00802f, 0.001254f, 0.00955f, 0.006344f, -0.00754f, + 0.007072f, -0.007305f, -0.002403f, -0.006702f, -0.00827f, 0.007183f, -0.001834f, -0.0057f, -0.007095f, + 0.00332f, -0.0008297f, 0.004333f, 0.0008926f, -0.00629f, 0.007393f, 0.006477f, -0.004684f, 0.002182f, + -0.004246f, 0.007324f, 0.001202f, 0.00993f, 0.001759f, -0.001665f, 0.0067f, 0.003798f, -0.007454f, + -0.00821f, 0.001178f, 0.004494f, 0.00384f, 0.003609f, 0.007614f, 0.00976f, -0.00918f, -0.002209f, + 0.002016f, 0.0093f, 0.00638f, -0.007572f, -0.008224f, -0.000771f, -0.00854f, -0.001513f, -0.007267f, + 0.00887f, -0.00107f, -0.007755f, 0.004757f, 0.002693f, 0.00439f, -0.00927f, -0.003588f, 0.001711f, + -0.002756f, 0.00974f, -0.004158f, 0.00621f, 0.00451f, 0.007935f, -0.002064f, -0.0081f, -0.00682f, + 0.006042f, -0.003317f, -0.003391f, -0.00688f, -0.00743f, 0.003933f, -0.00816f, -0.003164f, -0.001821f, + -0.001942f, 0.005005f, 0.00597f, 0.00595f, 0.0086f, 0.003202f, -0.00803f, -0.00892f, -0.002626f, + 0.000533f, -0.002506f, 0.00506f, -0.00822f, -0.000431f, 0.000955f, -0.004826f, -0.006626f, 0.001367f, + 0.00684f, -0.00793f, 0.00634f, -0.004353f, -0.00682f, 0.00657f, 0.000718f, -0.002306f, 0.006966f, + 0.006992f, -0.006275f, 0.00843f, 0.004826f, 0.00886f, -0.004f, 0.00901f, 0.005543f, -0.00566f, + -0.009575f, 0.005444f, 0.00633f, -0.005756f, 0.007687f, 0.001801f, -0.005802f, 0.001708f, -0.004517f, + 0.00808f, 0.00984f, -0.00847f, 0.00959f, -0.002443f, -0.001829f, -0.003305f, -0.00392f, -0.006924f, + -0.002266f, 0.001481f, 0.001099f, -0.00549f, 0.004787f, 0.00784f, -0.008514f, -0.00288f, -0.00858f, + 0.003025f, 0.002846f, 0.001469f, 0.00927f, 0.006443f, -0.00908f, 0.009445f, -0.009636f, -0.0003245f, + 0.003815f, -0.0001975f, 0.0007005f, -0.00984f, 0.0005784f, 0.0006576f, -0.00885f, 0.001424f, -0.004414f, + 0.006252f, 0.002722f, -0.002953f, 0.001995f, 0.00942f, -0.0000668f, -0.007507f, 0.00201f, 0.00344f, + 0.002167f, -0.001902f, -0.00691f, 0.00427f, -0.006607f, -0.003334f, -0.00143f, -0.00676f, 0.00736f, + 0.005222f, -0.0004745f, -0.0005236f, -0.00818f, 0.004253f, -0.002077f, 0.007355f, -0.00157f, -0.004112f, + -0.007156f, 0.002766f, -0.001808f, -0.003685f, 0.002918f, 0.005814f, 0.00126f, 0.00001913f, -0.0002122f, + 0.00882f, -0.001593f, 0.005184f, -0.006516f, 0.00848f, 0.00835f, -0.0006256f, 0.00252f, -0.00594f, + 0.005688f, -0.0089f, 0.000832f, 0.00922f, 0.002317f, -0.003725f, -0.005905f, 0.001728f, 0.002249f, + -0.00986f, 0.008896f, -0.0001637f, 0.006817f, -0.0092f, 0.008484f, -0.00751f, -0.002232f, 0.007233f, + 0.001008f, 0.003746f, -0.005726f, 0.006203f, 0.000586f, 0.00568f, 0.000979f, -0.00249f, -0.004295f, + -0.005775f, 0.0093f, -0.002306f, 0.002426f, -0.00712f, 0.004265f, 0.00659f, -0.00504f, -0.002317f, + 0.003494f, -0.005882f, 0.00602f, 0.001864f, -0.008255f, 0.00559f, -0.001576f, -0.004242f, -0.005627f, + 0.00521f, 0.003729f, -0.005524f, -0.005688f, 0.00695f, -0.00475f, -0.0001157f, -0.007744f, -0.007935f, + 0.006092f, -0.007626f, 0.002676f, -0.00196f, -0.00932f, -0.001797f, -0.0081f, -0.004524f, 0.002777f, + -0.0007696f, -0.0008817f, -0.00864f, 0.00834f, -0.001039f, -0.00899f, -0.007412f, -0.002197f, 0.003298f, + 0.00258f, 0.00667f, 0.001576f, -0.002626f, -0.001692f, -0.00107f, -0.001912f, -0.00997f, -0.005493f, + -0.0098f, -0.001864f, 0.001933f, 0.005116f, -0.00938f, -0.0002704f, 0.0001253f, -0.00465f, -0.00414f, + 0.001244f, 0.002434f, -0.003223f, 0.007835f, 0.004036f, 0.00748f, -0.00903f, 0.004265f, -0.002977f, + 0.00732f, 0.006317f, -0.00563f, -0.008224f, -0.00867f, 0.00962f, -0.005325f, 0.00101f, -0.00856f, + 0.00735f, -0.00862f, -0.003899f, -0.004925f, 0.0069f, 0.004513f, -0.009895f, -0.00239f, 0.00992f, + -0.00149f, 0.001915f, -0.002604f, 0.0095f, 0.007416f, 0.005016f, -0.002281f, 0.008125f, -0.009476f, + -0.009056f, 0.003843f, -0.002602f, 0.0089f, 0.003674f, 0.00132f, -0.00627f, 0.009186f, 0.006226f, + -0.00442f, 0.003323f, -0.00282f, 0.00831f, 0.007153f, -0.00724f, -0.002815f, -0.0001028f, 0.00809f, + 0.00871f, -0.007435f, -0.0018835f, 0.002344f, 0.00975f, -0.00286f, -0.00835f, -0.003582f, -0.000401f, + 0.007904f, -0.00499f, 0.003502f, -0.009605f, 0.00367f, -0.007473f, -0.003994f, -0.002377f, 0.00413f, + 0.000489f, 0.005356f, 0.00786f, 0.00476f, -0.005436f, 0.005947f, -0.000724f, -0.00671f, 0.00569f, + -0.00826f, 0.00846f, -0.006634f, -0.003334f, -0.00802f, -0.007126f, -0.001247f, 0.00596f, -0.009056f, + 0.0005774f, -0.00648f, 0.006126f, -0.00668f, -0.004116f, -0.0002975f, 0.0002549f, -0.006977f, 0.002117f, + 0.0007377f, -0.00803f, -0.003365f, 0.00819f, -0.002949f, -0.00969f, 0.006794f, -0.007645f, -0.00099f, + 0.006966f, 0.009735f, 0.002426f, 0.005592f, 0.0003273f, -0.003353f, -0.002249f, -0.00514f, -0.002508f, + -0.008156f, -0.000979f, 0.0002344f, -0.006508f, 0.00781f, 0.001318f, -0.00498f, 0.00858f, -0.003828f, + -0.00504f, 0.00639f, -0.002424f, 0.002552f, 0.003736f, -0.00797f, 0.00761f, 0.006474f, 0.004166f, + -0.009026f, 0.00638f, 0.0097f, -0.007202f, -0.008224f, -0.005714f, 0.001017f, 0.004894f, -0.00898f, + 0.00874f, -0.004066f, -0.002527f, 0.000754f, -0.002802f, 0.009315f, -0.00817f, -0.008705f, -0.0006857f, + 0.006992f, 0.000913f, 0.005993f, 0.005013f, 0.009346f, -0.00574f, 0.008575f, 0.004166f, -0.00604f, + -0.0032f, 0.0014925f, 0.008865f, -0.006435f, -0.004417f, 0.000921f, 0.00928f, -0.001739f, 0.000586f, + 0.007904f, 0.007347f, 0.00331f, -0.0078f, -0.004005f, 0.0074f, -0.005825f, -0.007244f, -0.002626f, + -0.005917f, 0.006508f, 0.007263f, -0.001506f, -0.003498f, 0.00693f, 0.004097f, 0.00934f, -0.003752f, + -0.006752f, 0.001534f, 0.003906f, 0.001351f, 0.00367f, 0.0086f, -0.00536f, -0.001699f, 0.001546f, + -0.00277f, -0.0005455f, -0.002718f, -0.00583f, -0.0009003f, -0.001003f, 0.001612f, -0.003557f, -0.006004f, + 0.001006f, -0.00925f, -0.0008187f, -0.002907f, 0.003675f, 0.00394f, 0.005608f, -0.007133f, 0.001691f, + 0.006428f, 0.003813f, -0.00542f, -0.00583f, 0.002207f, -0.001088f, 0.00714f, 0.006233f, 0.002617f, + -0.00419f, -0.00916f, 0.004063f, -0.002892f, 0.000514f, 0.00224f, 0.0001853f, 0.0007997f, 0.0005536f, + -0.00639f, -0.007015f, 0.00309f, 0.006184f, -0.00982f, -0.0002372f, 0.0009604f, 0.00962f, 0.00678f, + -0.006653f, -0.004955f, -0.0003958f, 0.006428f, 0.004517f, 0.00672f, 0.003792f, -0.006046f, -0.00221f, + -0.00727f, -0.00748f, -0.004204f, -0.00982f, 0.0007663f, 0.00661f, -0.003647f, -0.006973f, 0.002605f, + 0.0001023f, 0.004536f, -0.00647f, 0.009735f, 0.00945f, -0.00967f, -0.0003023f, -0.0086f, 0.008736f, + -0.00701f, 0.00258f, -0.002716f, -0.00162f, -0.006996f, 0.007664f, 0.007595f, 0.00403f, 0.00233f, + -0.00481f, -0.001349f, -0.005196f, -0.009026f, 0.00606f, 0.001146f, 0.001434f, 0.00967f, 0.004448f, + -0.004837f, -0.007168f, -0.005234f, 0.002514f, 0.005306f, 0.003088f, 0.0018215f, -0.00558f, -0.006596f, + 0.002018f, -0.003408f, -0.001384f, -0.006065f, -0.001212f, -0.002604f, -0.00767f, 0.0001342f, -0.00851f, + -0.00392f, 0.003862f, 0.00701f, 0.003605f, -0.00965f, -0.00714f, 0.00956f, -0.00888f, -0.001019f, + 0.0024f, -0.00961f, -0.005238f, 0.005333f, 0.00871f, 0.007607f, -0.00756f, -0.004772f, -0.00912f, + -0.004047f, 0.003483f, 0.003294f, 0.006577f, -0.005505f, 0.00996f, 0.009964f, 0.0004187f, 0.005898f, + 0.00796f, -0.00165f, -0.003225f, -0.001258f, 0.00853f, -0.008865f, 0.00815f, -0.001117f, -0.00685f, + 0.001974f, 0.00915f, 0.00667f, 0.009605f, 0.007107f, 0.007698f, -0.004387f, -0.0003958f, -0.005062f, + 0.002188f, -0.004875f, -0.002922f, -0.0003638f, 0.006268f, 0.00785f, 0.006138f, 0.000505f, -0.0003953f, + -0.00841f, -0.00958f, -0.007126f, -0.003107f, 0.0078f, 0.003452f, -0.009254f, -0.00117f, -0.00878f, + -0.00911f, -0.0004418f, 0.00831f, -0.004524f, 0.003872f, 0.0044f, 0.006424f, 0.000634f, -0.004883f, + -0.002487f, -0.00512f, -0.00692f, -0.00521f, -0.001761f, 0.008575f, -0.006393f, 0.00351f, 0.00914f, + -0.006035f, -0.002264f, -0.009636f, 0.00918f, -0.00967f, -0.004944f, -0.0004587f, -0.002478f, -0.00814f, + 0.00816f, -0.004776f, 0.00954f, 0.003471f, -0.006172f, 0.003603f, 0.009346f, 0.00455f, 0.00982f, + 0.00476f, 0.0007815f, -0.003096f, -0.0000307f, -0.005608f, 0.009315f, 0.00374f, -0.007366f, -0.001133f, + -0.00944f, 0.006847f, 0.00631f, 0.005394f, 0.003088f, -0.00644f, -0.0004168f, -0.00923f, -0.003254f, + -0.005077f, 0.00637f, -0.001415f, -0.003235f, -0.001729f, -0.0082f, 0.006664f, -0.006f, 0.00663f, + -0.001547f, -0.004116f, -0.00542f, 0.00521f, -0.00286f, -0.00396f, 0.004547f, -0.0001363f, 0.000979f, + -0.00634f, -0.006767f, -0.0000603f, 0.008316f, 0.00756f, -0.004993f, -0.00645f, -0.002295f, 0.004288f, + 0.00901f, 0.008194f, -0.004192f, -0.002182f, -0.005836f, -0.003983f, -0.007183f, -0.0061f, 0.001098f, + -0.0009274f, 0.005207f, 0.0002102f, -0.003925f, 0.0056f, -0.00296f, 0.006134f, -0.007744f, 0.006126f, + -0.005047f, -0.006134f, 0.004818f, -0.005283f, 0.005272f, -0.00779f, -0.003086f, -0.000607f, 0.005486f, + 0.0005345f, -0.007305f, -0.0048f, -0.00876f, -0.00433f, 0.006165f, -0.002474f, -0.00953f, -0.002066f, + 0.002918f, 0.006382f, 0.003317f, 0.00826f, -0.009995f, 0.004143f, 0.00985f, -0.0002116f, -0.002989f, + -0.007805f, 0.0003633f, -0.00365f, -0.00916f, 0.009834f, 0.003513f, -0.00379f, 0.00736f, -0.00957f, + 0.005726f, -0.00772f, -0.00803f, -0.002052f, -0.005585f, -0.00781f, -0.00599f, 0.00954f, 0.002024f, + -0.005745f, 0.003054f, -0.009415f, -0.005054f, 0.00424f, 0.003218f, 0.00826f, 0.00817f, -0.00409f, + 0.00518f, 0.00216f, 0.006756f, -0.00411f, -0.003344f, -0.004898f, 0.00001055f, 0.006104f, 0.001057f, + -0.000702f, 0.00771f, -0.001743f, 0.001407f, -0.005104f, -0.007717f, -0.002026f, -0.006405f, 0.00886f, + 0.0006466f, -0.00951f, -0.00395f, -0.00814f, 0.00936f, 0.001143f, -0.00485f, 0.00584f, -0.002224f, + 0.00834f, -0.0003467f, -0.000945f, 0.007034f, -0.0009427f, -0.009445f, 0.0007753f, -0.006973f, 0.001507f, + 0.004105f, -0.002523f, 0.002872f, -0.001515f, -0.00869f, 0.003103f, 0.000389f, -0.00774f, 0.00441f, + -0.001002f, 0.00783f, -0.001102f, -0.003883f, -0.007187f, -0.0001678f, -0.00742f, -0.00686f, -0.006702f, + 0.00894f, -0.0003886f, -0.005543f, 0.00988f, 0.00411f, -0.00002635f, 0.00851f, -0.002317f, 0.00873f, + -0.00532f, -0.000835f, -0.004166f, -0.004036f, -0.003325f, -0.00799f, 0.003025f, 0.001356f, -0.009575f, + -0.00426f, -0.003431f, 0.00899f, -0.001455f, -0.0007324f, -0.00492f, 0.00989f, -0.0002503f, -0.00814f, + -0.00535f, -0.0035f, -0.001434f, 0.00635f, -0.005108f, 0.002626f, 0.00983f, 0.00672f, -0.00725f, + -0.004826f, 0.007275f, -0.006763f, 0.002605f, 0.002369f, -0.000976f, 0.00263f, 0.00465f, -0.009544f, + -0.0008945f, -0.00175f, -0.00799f, -0.0006666f, -0.00514f, -0.002842f, -0.001805f, 0.000992f, 0.00844f, + -0.000964f, -0.00636f, 0.001281f, 0.001717f, 0.00569f, 0.005917f, -0.00826f, -0.00859f, 0.004246f, + 0.004078f, -0.005566f, 0.00835f, -0.006893f, -0.005867f, 0.001273f, -0.005856f, 0.004448f, 0.004562f, + -0.00392f, -0.00855f, 0.0005975f, 0.006817f, -0.005524f, -0.0009527f, -0.00695f, -0.002172f, -0.003683f, + -0.00546f, 0.007698f, -0.00858f, 0.003372f, 0.001414f, -0.007786f, -0.00482f, 0.0083f, 0.007534f, + 0.00554f, 0.005768f, 0.001982f, -0.004597f, -0.001634f, 0.000563f, 0.00298f, 0.001768f, 0.0004673f, + 0.009285f, 0.00518f, 0.00798f, 0.00557f, -0.002504f, -0.00777f, 0.007904f, 0.00939f, -0.004646f, + 0.00527f, 0.00817f, 0.00526f, 0.007935f, -0.00413f, -0.002628f, -0.008194f, -0.006195f, 0.00884f, + 0.007282f, 0.003819f, -0.00904f, 0.001354f, -0.004368f, -0.0002527f, 0.004684f, -0.002907f, -0.003862f, + -0.002197f, 0.00858f, -0.00989f, 0.0004277f, 0.008484f, -0.008865f, 0.007275f, 0.00869f, -0.0000226f, + 0.0006456f, 0.0002527f, 0.003267f, 0.007793f, -0.001359f, -0.007423f, -0.004204f, 0.006824f, -0.00801f, + 0.006992f, -0.002182f, 0.00181f, 0.00966f, -0.00888f, -0.006527f, -0.00873f, -0.004623f, -0.006767f, + -0.006317f, 0.003017f, 0.002218f, 0.00805f, -0.00677f, -0.00974f, -0.0083f, 0.008095f, -0.00424f, + -0.009636f, 0.002298f, -0.00864f, 0.004044f, 0.000354f, 0.00949f, 0.00635f, 0.009026f, -0.00806f, + -0.0008893f, 0.002377f, -0.001343f, -0.001965f, -0.00442f, -0.006615f, -0.004166f, 0.00719f, -0.006306f, + -0.009674f, -0.00787f, 0.00712f, -0.003637f, 0.0008287f, 0.005352f, -0.004227f, -0.00549f, -0.0058f, + 0.00489f, -0.005165f, 0.001942f, 0.00591f, 0.00612f, 0.005306f, -0.00723f, 0.0051f, 0.002329f, + -0.001097f, 0.002022f, -0.006416f, -0.006577f, 0.003603f, 0.004303f, 0.007652f, 0.00884f, -0.003191f, + 0.002787f, -0.009254f, 0.003475f, -0.002266f, 0.00936f, -0.00793f, -0.00738f, 0.008194f, 0.003998f, + -0.0049f, 0.008965f, -0.000592f, 0.00711f, 0.00905f, -0.0006223f, -0.00735f, -0.00399f, -0.00808f, + -0.005367f, 0.00705f, 0.0007415f, 0.00864f, 0.00883f, -0.001155f, 0.00898f, 0.004406f, 0.00967f, + 0.004677f, -0.003113f, -0.0009146f, 0.00756f, 0.005733f, -0.003647f, 0.00446f, 0.00798f, 0.003305f, + -0.0000515f, -0.003746f, -0.002283f, -0.004913f, 0.003496f, -0.00773f, -0.003622f, 0.004974f, 0.00244f, + 0.001445f, -0.004826f, 0.002394f, 0.003075f, -0.0006714f, 0.002077f, -0.008675f, -0.001683f, 0.006065f, + -0.005512f, -0.001691f, 0.007507f, -0.00913f, -0.0008674f, -0.005f, 0.001398f, -0.004875f, -0.000567f, + -0.002668f, 0.001711f, -0.005306f, -0.00883f, -0.001738f, 0.0035f, -0.006702f, -0.006943f, 0.00884f, + -0.001516f, 0.00991f, 0.003082f, 0.006077f, -0.00437f, -0.000524f, -0.003986f, 0.007393f, 0.00986f, + -0.0008f, -0.001425f, -0.001999f, -0.002277f, -0.00901f, 0.004986f, 0.002085f, -0.0009236f, 0.001841f, + -0.003191f, 0.002205f, -0.00781f, 0.00397f, -0.002066f, -0.008835f, -0.004585f, -0.00953f, -0.006496f, + -0.006996f, 0.007233f, -0.00544f, 0.001037f, 0.0028f, -0.007935f, -0.0055f, -0.007866f, 0.00436f, + -0.0009565f, 0.001419f, 0.007587f, -0.0004418f, -0.00318f, -0.003857f, 0.007763f, 0.008896f, 0.004925f, + 0.00979f, -0.00928f, -0.001149f, 0.00678f, -0.002733f, -0.002972f, -0.001726f, 0.006706f, -0.001256f, + -0.00636f, 0.0004964f, 0.0005093f, -0.0008807f, 0.002026f, 0.00215f, -0.007603f, -0.00936f, -0.001715f, + -0.000935f, 0.0005236f, 0.000975f, 0.00786f, -0.002583f, 0.003407f, -0.002033f, -0.00217f, 0.001398f, + -0.0001027f, 0.0009203f, 0.0009117f, 0.00741f, -0.003925f, 0.0007577f, -0.006317f, 0.001241f, 0.005623f, + 0.001732f, 0.00374f, 0.00341f, 0.006714f, 0.001987f, -0.0037f, 0.00349f, -0.00431f, -0.00895f, + -0.009605f, -0.007214f, -0.00393f, -0.002583f, 0.00841f, 0.00782f, -0.005657f, -0.00655f, 0.003542f, + -0.004143f, 0.003202f, -0.002695f, 0.0002656f, 0.001797f, -0.0065f, 0.00628f, -0.0001239f, -0.002842f, + 0.00119f, -0.00979f, 0.006287f, -0.00646f, 0.00769f, 0.00831f, -0.0055f, 0.0005436f, 0.006554f, + -0.0001364f, 0.00699f, 0.004364f, -0.00227f, 0.00489f, 0.0026f, 0.0007696f, 0.0004685f, -0.001103f, + 0.001123f, -0.002245f, 0.006527f, -0.00828f, -0.002954f, -0.005226f, -0.005814f, -0.0002468f, -0.00884f, + 0.008606f, -0.00001067f, -0.00417f, -0.003376f, 0.00918f, -0.00776f, 0.002684f, 0.006145f, -0.0006285f, + -0.004173f, -0.004917f, -0.00678f, 0.00248f, 0.007263f, 0.002188f, -0.000213f, 0.00413f, 0.002676f, + 0.004948f, 0.007614f, -0.001845f, -0.00436f, 0.00591f, 0.004833f, -0.002085f, -0.006096f, 0.007378f, + 0.001922f, 0.006573f, 0.0016985f, 0.001776f, 0.00993f, -0.00829f, -0.0001675f, 0.004753f, 0.00008494f, + 0.00989f, 0.0008593f, 0.00636f, 0.0008297f, -0.00482f, -0.001189f, -0.001576f, -0.001331f, -0.00881f, + 0.00416f, -0.0008516f, -0.002281f, -0.00399f, -0.00603f, 0.0031f, 0.00994f, 0.0009284f, -0.00446f, + -0.00944f, 0.00272f, -0.001006f, -0.006733f, 0.00815f, 0.004932f, -0.004894f, 0.007156f, 0.0001193f, + -0.00745f, -0.000041f, -0.004074f, 0.00829f, 0.006042f, 0.006176f, -0.00509f, 0.005375f, -0.00554f, + -0.001078f, -0.002928f, 0.00813f, 0.004013f, 0.002552f, -0.0086f, 0.000254f, -0.005844f, 0.004093f, + -0.008224f, 0.006016f, -0.004883f, -0.006504f, 0.0003617f, -0.00008327f, 0.00382f, 0.00786f, -0.00915f, + -0.004963f, 0.003756f, 0.00689f, 0.00833f, 0.005455f, -0.00871f, -0.00872f, -0.0008054f, 0.001023f, + -0.003527f, -0.00735f, 0.00691f, 0.0092f, 0.004837f, -0.000847f, 0.0006146f, -0.00829f, 0.007317f, + -0.002722f, 0.005962f, -0.004005f, 0.002857f, 0.004414f, 0.00437f, -0.003452f, -0.004383f, -0.004654f, + 0.007866f, -0.000736f, -0.001158f, -0.005924f, -0.002207f, 0.00904f, 0.004505f, 0.005688f, 0.003448f, + -0.00414f, -0.00986f, -0.007446f, 0.00479f, 0.00314f, 0.0084f, 0.005714f, -0.002865f, 0.0008903f, + -0.00831f, 0.009415f, -0.001098f, 0.0007825f, -0.002136f, -0.009995f, 0.00798f, -0.0002449f, -0.00454f, + 0.00262f, -0.001926f, 0.003874f, -0.001987f, 0.00456f, 0.00994f, -0.00275f, -0.0013485f, 0.00911f, + -0.0011f, -0.005253f, 0.003504f, 0.004726f, -0.00821f, 0.00008196f, 0.004696f, 0.00473f, 0.006893f, + -0.002386f, 0.007145f, 0.007584f, -0.00542f, -0.000596f, 0.002354f, 0.001427f, 0.001673f, 0.004646f, + 0.004826f, 0.00847f, -0.005226f, 0.0003307f, 0.00536f, 0.002802f, 0.006264f, -0.000479f, 0.00222f, + 0.00817f, 0.005253f, 0.005257f, 0.001163f, 0.005417f, 0.006603f, 0.00514f, -0.003473f, -0.001948f, + 0.006695f, 0.003492f, 0.000456f, 0.00933f, 0.00283f, 0.006935f, -0.004658f, -0.0008807f, -0.001274f, + -0.0006485f, -0.00349f, -0.002163f, 0.00811f, 0.001358f, -0.002134f, 0.0005803f, -0.001573f, -0.005478f, + -0.00496f, 0.00968f, 0.001645f, -0.005756f, -0.0008974f, -0.00608f, -0.00528f, 0.00005585f, -0.005756f, + -0.004025f, -0.00772f, -0.0008974f, 0.00786f, 0.00396f, -0.008865f, -0.00645f, -0.00903f, 0.00802f, + -0.001602f, -0.0072f, 0.00736f, 0.002499f, -0.00839f, -0.00925f, 0.005943f, -0.00785f, -0.0081f, + -0.00802f, -0.005554f, 0.004078f, 0.009476f, -0.00877f, 0.00257f, -0.00439f, 0.006744f, -0.00419f, + -0.005413f, 0.002476f, -0.002373f, -0.006424f, 0.008736f, 0.006977f, 0.009735f, 0.009514f, 0.0009437f, + -0.001418f, 0.004066f, 0.004986f, -0.008644f, -0.007427f, -0.00988f, 0.006714f, -0.00118f, 0.00924f, + 0.000984f, 0.001846f, -0.00418f, 0.00341f, 0.0007763f, 0.008545f, 0.007313f, 0.00999f, -0.000682f, + 0.003416f, 0.00465f, -0.000676f, 0.00206f, -0.00654f, -0.002478f, 0.003826f, -0.001733f, -0.003693f, + -0.001044f, -0.004696f, 0.00688f, 0.00632f, 0.004963f, -0.00365f, -0.00772f, -0.001813f, -0.004898f, + -0.008385f, 0.002f, -0.007782f, -0.000961f, -0.003376f, 0.005157f, -0.002651f, 0.007935f, 0.003716f, + 0.009f, 0.001195f, -0.00982f, -0.00532f, -0.00828f, -0.000279f, -0.007626f, 0.00879f, 0.006996f, + 0.00942f, 0.002588f, -0.0097f, -0.00011635f, -0.001595f, -0.0006347f, -0.001799f, 0.00126f, 0.005085f, + 0.001865f, 0.003216f, -0.000628f, -0.00474f, -0.004925f, -0.00626f, 0.006287f, -0.005054f, 0.0079f, + -0.005177f, -0.009796f, -0.00805f, -0.001599f, 0.0085f, -0.008965f, -0.002886f, -0.008606f, -0.008965f, + 0.004757f, -0.009285f, 0.00548f, 0.00816f, -0.001941f, 0.00622f, 0.00755f, 0.00926f, 0.009125f, + -0.004364f, 0.006214f, -0.007137f, 0.001763f, -0.002035f, 0.004326f, 0.00653f, -0.007072f, -0.003609f, + -0.00504f, 0.004448f, -0.005928f, -0.007057f, -0.002148f, -0.004593f, -0.004467f, -0.009514f, -0.00854f, + 0.001922f, 0.007572f, -0.005016f, 0.003345f, 0.008575f, -0.00967f, 0.000532f, -0.002897f, -0.005013f, + -0.009834f, 0.00302f, 0.005688f, 0.005096f, -0.003983f, 0.00851f, 0.001554f, 0.00394f, 0.005688f, + -0.00537f, 0.00655f, 0.007526f, 0.002298f, 0.006126f, -0.00654f, -0.003433f, -0.00818f, -0.003098f, + -0.00822f, -0.00898f, -0.007675f, 0.005955f, -0.003288f, 0.006237f, -0.002f, 0.002678f, -0.00639f, + 0.00899f, 0.009766f, 0.009384f, -0.0001253f, 0.007263f, -0.003555f, -0.00988f, -0.00534f, -0.005356f, + -0.00805f, 0.001697f, 0.002516f, 0.0022f, 0.007397f, -0.002075f, 0.00247f, 0.004593f, -0.00543f, + 0.000358f, -0.005047f, 0.00476f, -0.003937f, -0.002851f, 0.007507f, 0.001389f, 0.003235f, 0.00205f, + -0.00474f, -0.0059f, 0.001666f, 0.002943f, -0.00954f, -0.00828f, -0.008804f, 0.002356f, 0.00836f, + 0.002785f, 0.00881f, -0.00716f, 0.005608f, 0.007534f, -0.00952f, 0.008965f, 0.0001839f, -0.007412f, + 0.00693f, -0.0000717f, 0.003857f, 0.00021f, 0.002897f, -0.00452f, -0.002552f, -0.005962f, -0.006737f, + -0.0008616f, 0.008606f, -0.005814f, -0.007397f, -0.006096f, 0.0099f, -0.00955f, 0.001134f, 0.00702f, + -0.0003154f, 0.00366f, -0.009186f, -0.001096f, 0.00984f, -0.005787f, 0.00369f, -0.001496f, 0.002462f, + -0.00623f, -0.00426f, -0.004837f, -0.00558f, -0.003311f, -0.0066f, 0.0077f, 0.003609f, 0.004646f, + 0.007996f, -0.00788f, 0.006348f, -0.00986f, 0.00817f, 0.0001633f, 0.0001796f, -0.00899f, -0.001417f, + 0.00972f, -0.00067f, -0.005535f, 0.001376f, 0.004974f, 0.0008225f, 0.008484f, -0.00589f, 0.00828f, + -0.007206f, -0.00599f, -0.0009503f, 0.000634f, -0.0001874f, -0.00654f, 0.00424f, -0.001244f, 0.002506f, + -0.009964f, -0.00828f, -0.002129f, -0.003368f, -0.0003746f, -0.006798f, -0.00383f, 0.008514f, 0.00818f, + -0.005497f, -0.0034f, -0.001681f, -0.004208f, -0.004337f, -0.0000664f, 0.003807f, -0.006073f, -0.003489f, + -0.00521f, 0.005047f, 0.00367f, 0.005657f, -0.004665f, 0.00671f, -0.003513f, 0.00869f, 0.008095f, + 0.007545f, 0.007214f, 0.002594f, -0.001637f, 0.005642f, 0.00526f, -0.007195f, 0.00413f, -0.006878f, + 0.009224f, 0.008514f, -0.0008245f, -0.004276f, 0.003633f, -0.000534f, -0.00916f, -0.00905f, 0.00827f, + 0.00458f, 0.002428f, -0.002975f, 0.00718f, -0.00888f, 0.004597f, 0.0004854f, -0.003778f, 0.006023f, + 0.001024f, -0.00484f, -0.0048f, 0.001374f, -0.004204f, -0.004368f, 0.005783f, 0.001205f, 0.007774f, + -0.001196f, -0.007015f, 0.00822f, -0.005875f, 0.003675f, 0.00279f, 0.001947f, -0.00342f, -0.000307f, + -0.003113f, -0.0017185f, -0.001276f, 0.0031f, -0.003546f, -0.003328f, 0.004078f, 0.00976f, -0.002756f, + 0.00487f, -0.007904f, 0.003613f, 0.007034f, -0.00624f, 0.0007896f, -0.0077f, -0.001974f, 0.007397f, + 0.005966f, -0.00627f, -0.005215f, 0.001178f, -0.00372f, 0.001711f, -0.001743f, 0.00248f, 0.0003877f, + 0.005028f, -0.00789f, -0.0007873f, -0.005753f, 0.00961f, 0.00961f, 0.002813f, 0.002567f, -0.007095f, + 0.003628f, 0.0001531f, 0.0002968f, -0.005493f, -0.0001053f, 0.00964f, 0.004997f, -0.00657f, 0.000724f, + -0.00563f, -0.009834f, -0.003574f, 0.003572f, -0.006805f, 0.007423f, 0.003103f, -0.005455f, 0.00881f, + -0.00777f, -0.003508f, 0.0075f, 0.00404f, -0.00747f, 0.003056f, 0.005142f, -0.007156f, -0.00923f, + 0.00401f, 0.007442f, 0.005077f, 0.007393f, 0.004276f, -0.00851f, -0.00263f, -0.006123f, 0.003536f, + 0.005672f, 0.00887f, -0.002031f, -0.00524f, -0.001232f, 0.000433f, 0.005398f, 0.009575f, 0.009705f, + -0.007267f, -0.00565f, -0.003963f, 0.007477f, -0.00216f, -0.007744f, -0.003347f, -0.00804f, -0.002136f, + -0.002407f, 0.00826f, -0.006294f, 0.005116f, 0.00007975f, -0.007267f, -0.003428f, -0.005497f, 0.001562f, + 0.003801f, -0.004646f, 0.004234f, 0.00979f, 0.00943f, -0.002726f, 0.0007277f, 0.0007143f, -0.00785f, + 0.00531f, 0.00747f, -0.006287f, 0.0001854f, 0.0005198f, -0.006645f, -0.000202f, -0.0004883f, -0.001946f, + 0.00904f, 0.00122f, 0.005608f, 0.002243f, -0.001732f, -0.00844f, -0.000973f, 0.00898f, 0.00686f, + 0.005028f, 0.005497f, -0.002182f, -0.007122f, 0.00955f, 0.00725f, 0.0000116f, 0.00504f, 0.00864f, + -0.00827f, -0.00476f, -0.001607f, 0.006145f, 0.00777f, 0.00974f, -0.002163f, 0.00857f, 0.006485f, + -0.004356f, 0.00010043f, 0.001632f, 0.005432f, 0.00846f, -0.006756f, 0.0005136f, -0.00836f, -0.009544f, + 0.005016f, -0.002354f, -0.004543f, 0.00419f, 0.00798f, -0.001813f, 0.005913f, 0.003494f, -0.002695f, + -0.009346f, -0.001584f, -0.00886f, -0.007374f, 0.00979f, 0.00961f, 0.0006576f, -0.0018015f, -0.009766f, + -0.00821f, -0.00924f, 0.0002823f, 0.003115f, -0.00788f, -0.005257f, 0.003233f, -0.00939f, 0.00617f, + 0.003914f, -0.002165f, 0.004215f, 0.00603f, 0.00498f, -0.000754f, 0.0079f, 0.00463f, -0.004574f, + -0.00494f, 0.0014715f, 0.007866f, 0.005215f, -0.00008845f, 0.00897f, -0.00431f, -0.00416f, 0.001195f, + -0.007626f, 0.006153f, 0.000168f, -0.001373f, 0.001575f, -0.00368f, -0.00926f, 0.003387f, -0.006237f, + -0.003305f, -0.004677f, 0.003044f, 0.002283f, -0.00855f, -0.00383f, 0.005135f, -0.003328f, -0.005f, + -0.006145f, 0.008995f, 0.00933f, -0.0004253f, -0.00697f, -0.00895f, 0.001212f, 0.007114f, 0.005264f, + 0.003008f, -0.0087f, 0.00578f, -0.008354f, 0.009056f, 0.004955f, -0.004787f, 0.001999f, -0.008705f, + -0.00722f, -0.00211f, 0.00471f, -0.0012245f, -0.0003836f, -0.00119f, -0.005363f, -0.00464f, -0.00628f, + -0.00855f, -0.000797f, 0.005047f, 0.0006003f, 0.002134f, 0.001738f, 0.006653f, -0.003204f, 0.00568f, + -0.0003297f, 0.0001493f, -0.00001603f, -0.001742f, -0.0004888f, -0.002066f, -0.003843f, 0.008514f, 0.001038f, + -0.006084f, 0.002298f, -0.00506f, 0.0028f, -0.00588f, 0.006187f, -0.004707f, 0.00482f, -0.005604f, + 0.0099f, 0.002226f, -0.00418f, -0.00867f, -0.001959f, 0.006733f, 0.00881f, -0.009636f, 0.006523f, + 0.00918f, -0.005287f, -0.00939f, 0.007725f, 0.002266f, -0.00813f, 0.00945f, -0.009735f, 0.00804f, + -0.00447f, -0.0006757f, -0.002113f, 0.0071f, -0.002256f, -0.001572f, -0.002722f, -0.005325f, 0.005184f, + 0.001163f, 0.00785f, -0.00908f, 0.000957f, -0.004894f, -0.00785f, 0.004192f, 0.005585f, -0.00466f, + 0.00659f, -0.009026f, 0.00393f, -0.00526f, -0.00882f, -0.006893f, -0.008286f, -0.000591f, -0.00449f, + -0.00882f, 0.004025f, -0.00812f, 0.002306f, 0.003397f, 0.0002433f, -0.00333f, 0.000728f, -0.001259f, + -0.0006423f, 0.00922f, 0.002346f, -0.00682f, -0.002346f, -0.00688f, 0.0004377f, 0.0007114f, -0.00878f, + 0.00824f, -0.007797f, 0.00000536f, 0.00009096f, 0.00981f, -0.001997f, -0.006676f, -0.006683f, -0.00412f, + 0.00085f, 0.004017f, 0.00645f, -0.00674f, 0.00846f, -0.00847f, -0.00199f, 0.003153f, -0.0002362f, + -0.0004025f, 0.007996f, 0.002476f, 0.00555f, 0.003628f, -0.00508f, 0.00728f, -0.00266f, 0.003223f, + -0.007328f, -0.00689f, -0.00229f, -0.001114f, 0.002768f, -0.001708f, 0.003847f, -0.007248f, -0.00689f, + -0.007065f, -0.00772f, 0.005745f, 0.008804f, 0.006092f, 0.005795f, 0.001585f, 0.005386f, -0.005962f, + -0.0004244f, 0.008804f, 0.003803f, 0.000961f, 0.00976f, 0.0005674f, 0.00905f, 0.00982f, 0.005295f, + -0.00009507f, 0.005775f, -0.002659f, -0.001253f, -0.006416f, 0.008194f, 0.00945f, 0.006752f, -0.00935f, + 0.003845f, -0.006237f, 0.00415f, 0.008095f, -0.00645f, -0.009865f, 0.000944f, 0.00811f, 0.00841f, + 0.0002704f, -0.00681f, 0.00514f, -0.005535f, -0.00543f, -0.007355f, 0.006424f, -0.0012665f, -0.007423f, + 0.00501f, 0.0071f, -0.0001485f, -0.004772f, -0.007965f, -0.002703f, 0.00977f, -0.0002038f, 0.00664f, + 0.002275f, 0.004887f, 0.00762f, 0.001178f, 0.001114f, -0.000678f, -0.001807f, -0.004963f, 0.001163f, + 0.00273f, -0.00955f, 0.002756f, 0.0005674f, -0.00551f, -0.00862f, -0.009026f, 0.00948f, -0.00195f, + -0.001241f, 0.00402f, 0.002943f, 0.0001924f, 0.001133f, -0.004086f, 0.002512f, -0.0058f, 0.00159f, + -0.00808f, 0.00575f, -0.00857f, -0.00701f, 0.009544f, -0.001974f, 0.002966f, -0.004898f, -0.001783f, + 0.003128f, -0.005596f, -0.00751f, -0.004704f, 0.00719f, -0.00949f, -0.001564f, 0.003157f, 0.005245f, + -0.00424f, 0.004654f, -0.00425f, -0.008766f, 0.00912f, -0.005386f, 0.00439f, -0.002386f, 0.00576f, + 0.003857f, -0.007004f, 0.0005574f, 0.006065f, -0.0068f, 0.00985f, -0.0003872f, -0.004654f, 0.008675f, + 0.00801f, 0.001015f, 0.0019045f, 0.007225f, 0.0004132f, -0.005173f, 0.001682f, -0.002037f, -0.003492f, + 0.003092f, 0.00231f, 0.007294f, 0.002605f, -0.00941f, -0.004112f, 0.0082f, 0.002506f, -0.00819f, + -0.0041f, 0.009476f, 0.003584f, -0.00585f, 0.00462f, -0.006348f, 0.00913f, -0.003197f, -0.004265f, + -0.00945f, -0.001356f, 0.007545f, 0.002289f, 0.001126f, 0.002977f, 0.00948f, -0.00703f, -0.002531f, + -0.00868f, -0.00619f, -0.0004635f, 0.009254f, -0.0005174f, -0.00736f, -0.006264f, 0.00779f, -0.002342f, + 0.004997f, 0.00269f, 0.00509f, -0.0041f, 0.00506f, 0.002752f, -0.006416f, 0.00794f, 0.003563f, + 0.00551f, 0.006554f, -0.008286f, -0.00296f, 0.008354f, -0.0079f, -0.006348f, 0.001052f, 0.0007205f, + 0.00506f, 0.000453f, -0.00993f, -0.006424f, 0.005787f, -0.001206f, 0.00876f, -0.004513f, -0.002857f, + -0.00701f, -0.00621f, 0.003498f, 0.00986f, -0.00846f, -0.00128f, 0.006294f, -0.003735f, 0.00843f, + -0.00841f, -0.007465f, -0.007504f, -0.00734f, 0.00635f, 0.004498f, -0.005688f, -0.003014f, 0.00892f, + 0.00982f, 0.00793f, -0.002365f, 0.003353f, -0.004486f, -0.00651f, -0.00361f, -0.00418f, -0.00786f, + 0.007812f, 0.001912f, -0.008156f, -0.00809f, -0.001939f, -0.003836f, -0.001578f, 0.00331f, -0.008736f, + -0.006138f, -0.00877f, -0.007595f, 0.002537f, -0.007336f, -0.006477f, -0.007767f, -0.00853f, -0.003601f, + -0.000952f, 0.007683f, -0.006283f, 0.00796f, 0.006012f, -0.001464f, 0.00718f, -0.0025f, -0.001972f, + 0.004166f, 0.0002615f, 0.00496f, 0.006516f, 0.0016f, -0.008415f, -0.002398f, -0.001027f, 0.0000037f, + 0.00827f, 0.003153f, 0.004826f, 0.00619f, -0.00673f, -0.00834f, -0.001702f, 0.006664f, -0.00465f, + -0.00909f, 0.003893f, 0.005188f, 0.009415f, 0.00191f, 0.00274f, -0.002968f, -0.003834f, 0.00495f, + 0.005985f, -0.002945f, 0.007317f, -0.00934f, -0.001007f, -0.005333f, -0.008415f, -0.0067f, 0.006084f, + 0.00689f, -0.002855f, -0.009254f, -0.00402f, 0.007694f, -0.007633f, -0.008865f, -0.00846f, 0.007317f, + -0.00915f, -0.009476f, 0.002455f, -0.001528f, -0.001358f, 0.0016985f, -0.001466f, -0.002584f, -0.006992f, + -0.00427f, 0.000739f, 0.00258f, 0.0042f, 0.001303f, 0.00963f, 0.002176f, -0.00952f, 0.0005264f, + -0.005226f, 0.008804f, 0.005707f, -0.00763f, -0.00875f, 0.0002716f, -0.00251f, -0.00646f, -0.00666f, + 0.00936f, 0.005447f, -0.00562f, 0.00967f, 0.001811f, -0.00963f, 0.001052f, 0.00807f, -0.002794f, + -0.00845f, 0.00685f, -0.003199f, 0.003119f, -0.004333f, 0.0001079f, -0.00884f, -0.002384f, -0.0008464f, + -0.0053f, 0.0008607f, 0.005f, 0.003218f, -0.001972f, 0.003925f, -0.000635f, -0.003868f, -0.00636f, + -0.005894f, 0.0005355f, 0.00921f, -0.006687f, 0.00629f, -0.001168f, -0.00646f, 0.005547f, -0.00963f, + -0.004078f, 0.002125f, 0.008995f, 0.006187f, 0.007397f, -0.00656f, -0.006527f, 0.006042f, -0.001503f, + -0.00624f, 0.003023f, -0.009995f, -0.002466f, 0.00351f, 0.003439f, -0.003235f, 0.008026f, 0.004158f, + 0.003117f, -0.005856f, 0.00461f, -0.001134f, 0.004257f, 0.00933f, 0.00992f, -0.008156f, 0.004356f, + 0.00917f, -0.007904f, 0.0004003f, -0.00912f, -0.003895f, -0.005566f, -0.00899f, -0.0001261f, -0.00272f, + -0.00529f, -0.005215f, -0.000558f, -0.006172f, 0.008354f, 0.000414f, -0.004574f, 0.00527f, 0.004333f, + -0.00728f, -0.00797f, 0.0096f, -0.00344f, -0.00881f, -0.00368f, 0.00844f, -0.00517f, -0.005783f, + -0.002708f, -0.006958f, 0.00088f, 0.007393f, 0.002115f, 0.00502f, -0.007347f, 0.002518f, -0.007164f, + 0.003891f, -0.006386f, 0.004723f, -0.007137f, 0.00979f, 0.00728f, -0.007385f, -0.003569f, -0.001245f, + 0.007244f, -0.004177f, 0.005627f, -0.001364f, 0.007786f, -0.003647f, 0.00975f, 0.003262f, 0.006668f, + 0.007492f, -0.002676f, 0.00452f, 0.00613f, 0.009895f, -0.0000653f, -0.0002944f, 0.0095f, 0.00829f, + 0.003607f, -0.00763f, 0.001573f, 0.00708f, 0.001338f, 0.00761f, -0.00934f, 0.00425f, 0.004677f, + 0.004356f, -0.00835f, -0.003391f, -0.00722f, 0.00877f, 0.001739f, -0.0078f, -0.003801f, -0.002934f, + 0.00592f, -0.00832f, -0.005596f, 0.00847f, 0.002663f, -0.002655f, -0.00461f, 0.001812f, -0.005447f, + 0.00393f, -0.0001626f, -0.0099f, -0.005177f, -0.000107f, -0.004513f, -0.00942f, -0.004494f, -0.0002584f, + 0.00558f, 0.00919f, 0.00483f, -0.003881f, 0.0000862f, 0.00472f, 0.002277f, 0.00452f, -0.005043f, + -0.00812f, 0.006695f, -0.001397f, 0.00708f, 0.00666f, 0.009445f, 0.002443f, 0.00672f, 0.00742f, + 0.0047f, -0.0099f, -0.001733f, -0.001216f, 0.002306f, 0.00525f, 0.006687f, 0.007397f, -0.004185f, + -0.007645f, 0.00497f, 0.002726f, -0.004883f, 0.00545f, 0.001207f, -0.003443f, 0.00855f, -0.008575f, + -0.00995f, 0.00938f, 0.001395f, -0.005894f, -0.004715f, 0.001335f, 0.007214f, -0.00979f, -0.0009723f, + -0.00884f, -0.00325f, -0.006447f, -0.0002873f, -0.006546f, -0.00914f, 0.00311f, 0.001508f, -0.008644f, + 0.003849f, -0.00224f, -0.0073f, 0.004158f, -0.007076f, -0.00458f, -0.002794f, 0.00691f, -0.00991f, + -0.002531f, -0.007236f, 0.00291f, 0.003098f, -0.00666f, 0.00618f, -0.001502f, -0.008026f, 0.0001609f, + -0.001733f, 0.00476f, 0.007725f, -0.007076f, -0.005398f, -0.001904f, 0.002743f, 0.001987f, 0.002935f, + 0.006363f, 0.007755f, -0.002127f, -0.002626f, 0.003273f, 0.0044f, -0.003975f, -0.00273f, -0.001413f, + -0.008736f, -0.005775f, 0.00445f, -0.007412f, -0.00647f, 0.0046f, 0.007393f, -0.0003533f, -0.00926f, + -0.006104f, 0.001658f, 0.00642f, -0.00962f, 0.00724f, -0.00032f, -0.00848f, -0.007442f, 0.001179f, + -0.004684f, -0.001757f, 0.002796f, 0.00741f, 0.002192f, 0.003952f, 0.002794f, -0.00581f, 0.00923f, + -0.000795f, -0.008545f, 0.0004318f, 0.007034f, 0.001034f, -0.009224f, 0.0037f, 0.00736f, -0.007587f, + -0.001963f, 0.00037f, -0.001584f, -0.0001048f, 0.00979f, -0.007168f, 0.003159f, 0.00205f, -0.0082f, + 0.000802f, 0.00919f, 0.005257f, 0.000411f, 0.006824f, 0.00543f, -0.00202f, -0.008705f, -0.0084f, + -0.0008135f, -0.001487f, -0.00698f, 0.00766f, 0.0003076f, 0.002989f, 0.00785f, 0.004498f, 0.004917f, + 0.001951f, 0.00489f, -0.000938f, 0.00438f, -0.00010777f, 0.00993f, -0.003304f, -0.00859f, 0.00656f, + -0.009926f, 0.00572f, 0.009445f, 0.004425f, 0.00595f, 0.005547f, -0.00555f, 0.00912f, -0.00391f, + 0.00417f, -0.00732f, -0.00944f, -0.001693f, 0.003319f, 0.007904f, 0.004158f, 0.008026f, -0.004173f, + 0.00174f, 0.00794f, 0.001028f, -0.0004673f, -0.01f, 0.005222f, 0.00968f, 0.00173f, -0.00965f, + 0.00775f, 0.00758f, -0.006916f, -0.006714f, 0.001373f, -0.00906f, 0.005737f, -0.00403f, 0.003036f, + -0.00832f, -0.001393f, -0.00903f, -0.007996f, -0.001152f, 0.00698f, -0.00907f, 0.00455f, 0.0006533f, + -0.001487f, -0.0074f, 0.005177f, 0.00607f, 0.006973f, -0.002907f, -0.008446f, 0.004932f, 0.00457f, + -0.001466f, 0.007805f, 0.002241f, -0.002304f, -0.006294f, -0.00625f, 0.002876f, 0.005146f, 0.000603f, + 0.00309f, -0.00912f, 0.002026f, 0.0096f, -0.000262f, 0.00007397f, 0.001089f, -0.00799f, 0.00948f, + -0.0007935f, -0.00997f, 0.001588f, 0.009674f, -0.0006795f, 0.00958f, 0.00604f, -0.00975f, -0.001219f, + -0.005093f, 0.00061f, 0.0002333f, 0.006195f, 0.006245f, 0.00548f, 0.006554f, 0.009155f, 0.003277f, + -0.0027f, -0.002827f, 0.002981f, 0.00059f, -0.00643f, 0.001903f, 0.006195f, -0.001568f, -0.002792f, + 0.001151f, -0.00969f, 0.0001194f, 0.006084f, -0.00789f, -0.00746f, -0.000923f, -0.002726f, -0.0009117f, + -0.009155f, 0.0003529f, 0.002682f, 0.00394f, 0.0003521f, -0.006798f, 0.f, 0.006145f, -0.006645f, + -0.0000278f, 0.005737f, -0.003601f, 0.008156f, 0.006905f, 0.00996f, 0.00752f, 0.00513f, -0.001212f, + -0.005558f, -0.009796f, -0.009056f, 0.001026f, -0.003756f, 0.002048f, 0.00501f, 0.004303f, 0.00885f, + -0.002895f, 0.00885f, 0.00881f, 0.008965f, -0.00772f, 0.000675f, -0.00361f, 0.009254f, 0.00947f, + 0.002851f, -0.00443f, -0.0008383f, -0.001255f, 0.007088f, -0.00718f, -0.001156f, 0.00496f, 0.00543f, + 0.009575f, -0.00932f, -0.00289f, -0.00961f, -0.005413f, 0.00887f, 0.008194f, 0.007217f, 0.001349f, + -0.00616f, -0.00132f, 0.008255f, 0.008354f, -0.001022f, -0.00916f, 0.0012f, 0.00942f, -0.005272f, + -0.007713f, 0.00924f, -0.002554f, 0.00812f, 0.002947f, 0.006466f, 0.007267f, 0.004383f, 0.006683f, + -0.004047f, -0.001562f, 0.0000953f, -0.00198f, -0.001826f, -0.005013f, 0.008095f, -0.00878f, -0.006645f, + 0.005096f, -0.0003052f, -0.00815f, -0.00986f, 0.0081f, 0.00661f, -0.00097f, 0.006916f, -0.007244f, + 0.004272f, 0.00444f, -0.00546f, 0.003994f, -0.00191f, 0.001437f, 0.00408f, -0.000537f, -0.007557f, + 0.0009537f, -0.00972f, -0.006805f, -0.007835f, -0.000847f, 0.005665f, -0.0085f, 0.005657f, 0.006027f, + -0.009285f, 0.00652f, 0.005535f, 0.009224f, 0.0007205f, -0.00692f, -0.00881f, 0.005817f, -0.00506f, + -0.00877f, -0.00991f, -0.001778f, -0.002598f, -0.00755f, 0.003616f, 0.00898f, 0.002537f, -0.001853f, + -0.000725f, 0.00202f, 0.001978f, -0.0008383f, 0.004784f, -0.0003638f, -0.00895f, 0.00243f, -0.00395f, + 0.001955f, -0.002853f, -0.005f, 0.00976f, -0.0006366f, -0.002913f, 0.002592f, -0.00857f, -0.0006256f, + -0.0001568f, 0.003605f, -0.001659f, 0.000935f, -0.005302f, 0.00593f, -0.002056f, 0.003723f, 0.005863f, + 0.0089f, -0.004147f, -0.007706f, 0.0006566f, 0.003222f, -0.00247f, 0.005234f, -0.009605f, -0.00279f, + 0.00031f, -0.008606f, -0.00952f, 0.001459f, 0.008446f, -0.00921f, 0.00895f, -0.00951f, -0.002565f, + 0.00084f, 0.006874f, -0.004066f, 0.004723f, -0.0006924f, 0.00932f, 0.003325f, -0.006763f, 0.004936f, + -0.003439f, -0.000998f, -0.008224f, -0.00412f, 0.006996f, -0.007057f, -0.00992f, -0.004974f, 0.001361f, + -0.009865f, 0.00982f, -0.00375f, -0.002928f, 0.00166f, -0.007782f, -0.001827f, 0.000567f, -0.002838f, + -0.0002354f, -0.00259f, -0.00849f, -0.001284f, 0.002161f, 0.001709f, -0.00802f, 0.00199f, -0.003202f, + 0.002773f, 0.009056f, -0.001113f, -0.006054f, -0.00209f, 0.007355f, 0.008194f, -0.005627f, -0.005226f, + -0.00478f, 0.001043f, 0.002869f, -0.00657f, -0.003176f, -0.004704f, -0.004574f, -0.00434f, 0.007328f, + 0.00895f, -0.00853f, -0.006207f, -0.00928f, -0.009476f, 0.009125f, 0.004627f, -0.004642f, -0.004658f, + 0.00919f, 0.003496f, 0.002165f, 0.00413f, -0.007694f, 0.003744f, 0.001043f, 0.002182f, -0.00698f, + -0.003906f, 0.00365f, 0.003763f, -0.0043f, 0.002554f, 0.0094f, 0.00586f, -0.00655f, -0.00171f, + -0.0009985f, -0.00851f, 0.00584f, 0.004883f, -0.007523f, 0.005016f, 0.003046f, 0.005917f, -0.006622f, + 0.00741f, -0.002499f, 0.0004418f, -0.003113f, 0.0003803f, 0.003252f, -0.00917f, 0.00506f, -0.006687f, + -0.00916f, 0.000701f, 0.00945f, -0.002863f, 0.00827f, 0.00938f, 0.003405f, -0.00935f, -0.00912f, + 0.00259f, 0.001822f, -0.00674f, 0.0008016f, -0.001132f, 0.00899f, 0.001555f, -0.0007024f, 0.00899f, + -0.00938f, -0.00109f, -0.00674f, 0.001553f, 0.00696f, 0.009415f, 0.0005765f, -0.0002084f, 0.004097f, + 0.005985f, 0.001656f, 0.005325f, -0.00839f, 0.003904f, 0.00822f, -0.003994f, 0.00635f, -0.000794f, + -0.00667f, 0.002296f, -0.002838f, -0.00975f, -0.001081f, 0.005127f, 0.001922f, 0.005127f, -0.008156f, + -0.006653f, 0.00935f, -0.00302f, -0.00052f, -0.005894f, -0.009674f, -0.00613f, 0.009705f, -0.006924f, + 0.004726f, 0.004784f, -0.00146f, 0.001746f, -0.002958f, 0.009636f, 0.005665f, -0.000724f, 0.004875f, + -0.001856f, -0.002975f, 0.0071f, 0.002045f, 0.00507f, -0.007042f, -0.006958f, 0.002089f, -0.003504f, + 0.0004888f, -0.005943f, 0.007607f, -0.003822f, -0.004692f, 0.0001357f, 0.004456f, -0.00799f, -0.006413f, + 0.002268f, 0.00888f, -0.00872f, -0.004936f, -0.0091f, -0.00353f, -0.0052f, -0.003223f, -0.00825f, + 0.003952f, -0.002771f, 0.006344f, 0.00862f, 0.00904f, -0.00221f, -0.0001844f, -0.00227f, 0.000672f, + -0.004852f, -0.005795f, -0.002771f, -0.00653f, -0.002579f, 0.006954f, 0.002605f, -0.00804f, 0.00432f, + 0.0000249f, -0.004536f, -0.008514f, 0.00618f, -0.002804f, 0.00895f, -0.009094f, -0.009155f, -0.003836f, + -0.0008125f, 0.007385f, 0.00554f, -0.0004065f, -0.00517f, -0.006493f, -0.007027f, 0.003748f, -0.00834f, + -0.006668f, 0.00982f, -0.001279f, -0.0008125f, 0.000629f, 0.003786f, -0.00859f, -0.000755f, 0.0004015f, + -0.003065f, -0.007042f, -0.00967f, 0.0004108f, 0.00947f, -0.007076f, -0.0006723f, 0.006496f, -0.001414f, + 0.008194f, -0.000413f, 0.008125f, 0.00146f, -0.006462f, 0.002676f, -0.005474f, -0.003166f, 0.006027f, + 0.001129f, 0.001874f, 0.001855f, 0.00766f, -0.006634f, -0.000823f, -0.00303f, 0.005795f, 0.00279f, + 0.002512f, 0.006172f, 0.006474f, 0.000632f, -0.007507f, 0.001753f, -0.002531f, 0.002895f, -0.007034f, + 0.004955f, -0.0096f, 0.007793f, -0.00803f, -0.0095f, 0.006615f, -0.00854f, 0.00214f, 0.00532f, + -0.00995f, 0.00772f, 0.006977f, -0.00873f, -0.00617f, -0.00808f, -0.00479f, -0.00397f, 0.00456f, + 0.003944f, 0.0001737f, 0.001538f, -0.005756f, 0.009964f, 0.002096f, -0.00984f, 0.001642f, 0.003113f, + -0.00802f, -0.003527f, -0.00876f, 0.003502f, -0.00562f, 0.003378f, 0.006676f, 0.000644f, 0.002071f, + -0.00587f, -0.00771f, -0.0009327f, -0.00441f, 0.007095f, 0.005478f, 0.00781f, 0.00952f, 0.006176f, + 0.0003223f, 0.00818f, 0.00678f, -0.004147f, -0.00999f, 0.00903f, -0.00987f, 0.007553f, -0.00438f, + 0.005028f, 0.0003302f, 0.0002394f, -0.005104f, -0.002537f, -0.005333f, 0.004635f, -0.005787f, -0.005177f, + -0.005615f, -0.00463f, 0.0001181f, -0.00814f, 0.00656f, -0.00132f, 0.003115f, -0.006237f, -0.00123f, + -0.008804f, -0.002682f, -0.00877f, 0.00749f, -0.00863f, 0.004997f, 0.007736f, -0.00963f, -0.002966f, + -0.00405f, -0.004005f, 0.006763f, -0.00639f, 0.000797f, 0.002903f, 0.00967f, -0.0009356f, -0.00675f, + 0.00917f, -0.0048f, 0.0088f, 0.007168f, 0.00394f, 0.005524f, 0.0002052f, -0.0004148f, 0.0059f, + -0.002966f, 0.008f, -0.00955f, -0.008484f, 0.00856f, 0.003498f, -0.005703f, 0.004974f, 0.0089f, + -0.004208f, -0.005203f, -0.007496f, 0.003206f, -0.007713f, -0.0068f, 0.00437f, 0.008896f, 0.0007954f, + 0.002823f, -0.002413f, -0.004665f, 0.0007997f, -0.005394f, 0.00806f, -0.001563f, -0.001497f, -0.005314f, + -0.00952f, 0.0093f, 0.005066f, 0.00407f, 0.004482f, -0.00788f, 0.001537f, 0.00806f, -0.005013f, + -0.003735f, 0.00956f, -0.00946f, 0.002008f, -0.006847f, 0.003038f, 0.003141f, -0.005787f, 0.005665f, + 0.002735f, -0.002401f, 0.003057f, 0.000753f, 0.004444f, 0.00805f, 0.001004f, -0.0065f, -0.001637f, + 0.0065f, 0.004467f, -0.00896f, -0.006573f, -0.007236f, 0.007435f, -0.00392f, -0.001908f, -0.008736f, + -0.0007854f, 0.000625f, 0.003866f, -0.002039f, -0.002193f, -0.006447f, -0.00793f, -0.002161f, -0.0073f, + 0.00472f, 0.001314f, 0.006416f, -0.009224f, 0.00668f, 0.008865f, 0.009155f, -0.004684f, 0.00807f, + -0.0008855f, 0.002748f, 0.001529f, -0.004765f, -0.001041f, 0.00859f, 0.005573f, 0.00433f, -0.009155f, + -0.007614f, 0.00472f, -0.0009365f, 0.00003576f, 0.002872f, -0.003223f, 0.003098f, -0.001782f, 0.001795f, + 0.006645f, 0.002974f, -0.0094f, 0.005337f, 0.00877f, -0.00649f, 0.00959f, -0.008156f, -0.0008917f, + 0.006607f, 0.00905f, -0.001238f, -0.001246f, -0.002775f, -0.002815f, 0.00451f, -0.004486f, 0.003998f, + 0.00956f, -0.00981f, 0.005096f, -0.00876f, -0.002571f, 0.002287f, -0.002996f, -0.008896f, -0.006973f, + 0.003885f, 0.001993f, -0.006523f, 0.0048f, -0.005745f, 0.004883f, 0.005627f, -0.00919f, 0.00978f, + -0.000961f, 0.00954f, 0.003023f, 0.006172f, -0.00371f, -0.00509f, -0.00392f, -0.00989f, 0.00212f, + -0.00917f, -0.009865f, 0.00965f, 0.003618f, -0.004303f, 0.00628f, 0.002913f, 0.0086f, -0.00881f, + 0.004963f, -0.006886f, -0.00000197f, -0.008736f, 0.004147f, -0.003227f, -0.001696f, -0.003815f, 0.00957f, + -0.00994f, -0.006596f, 0.00925f, 0.007454f, -0.001091f, -0.0004747f, 0.009026f, 0.00854f, 0.00133f, + -0.00263f, 0.00543f, 0.003836f, 0.004856f, -0.006695f, 0.005478f, -0.008415f, 0.003187f, -0.00998f, + 0.009514f, 0.002903f, -0.005165f, -0.0004752f, -0.009f, -0.008965f, 0.005806f, 0.006153f, 0.00893f, + -0.00877f, -0.006866f, 0.004154f, -0.008125f, 0.007202f, -0.005573f, 0.004f, -0.002998f, 0.002878f, + 0.005672f, 0.00607f, -0.004578f, 0.001471f, -0.002363f, -0.00006247f, 0.0007734f, 0.001287f, -0.0006113f, + 0.003868f, -0.00696f, -0.003672f, 0.00688f, -0.00908f, -0.00665f, 0.003775f, -0.006355f, -0.005634f, + 0.00421f, 0.00937f, -0.004856f, 0.002947f, -0.003933f, -0.0086f, 0.00988f, 0.00546f, -0.0008826f, + 0.00433f, 0.007183f, 0.002195f, -0.005333f, 0.006683f, 0.003277f, 0.001082f, 0.00579f, -0.00623f, + -0.00966f, -0.002708f, 0.00627f, 0.00581f, -0.0095f, 0.008896f, -0.002478f, -0.00966f, 0.007526f, + -0.001696f, 0.002949f, 0.001381f, -0.00684f, -0.005974f, 0.00413f, 0.00085f, 0.004032f, 0.004807f, + 0.0004041f, -0.006992f, 0.003105f, -0.0002321f, 0.00867f, 0.00237f, 0.00464f, -0.00887f, -0.005978f, + -0.005844f, -0.00826f, 0.005035f, 0.00953f, 0.006485f, -0.00415f, -0.00873f, -0.006836f, 0.00572f, + 0.001606f, -0.00828f, -0.001708f, -0.006145f, 0.00914f, -0.00965f, 0.005646f, -0.00857f, 0.006638f, + 0.00327f, 0.00424f, 0.001341f, 0.003788f, -0.000685f, 0.0061f, -0.00782f, 0.003334f, -0.0068f, + 0.001557f, 0.005825f, -0.0058f, -0.000689f, 0.007496f, 0.00708f, -0.006107f, 0.007668f, -0.001199f, + -0.00948f, 0.00668f, -0.003176f, 0.003733f, -0.001616f, 0.006714f, 0.00789f, 0.001432f, 0.004112f, + 0.00384f, 0.009636f, 0.007053f, -0.00374f, 0.00495f, 0.00959f, 0.004135f, 0.00721f, 0.007225f, + -0.0008454f, 0.008286f, 0.0000413f, 0.003618f, 0.004047f, 0.00454f, -0.0079f, 0.00869f, 0.00706f, + -0.007492f, 0.00493f, 0.00689f, -0.0005245f, 0.00604f, 0.00357f, 0.00598f, -0.00959f, -0.003292f, + 0.0008936f, 0.00904f, 0.002445f, 0.00894f, 0.00819f, 0.003876f, 0.002953f, 0.003384f, -0.006687f, + 0.002918f, -0.0056f, -0.0003066f, -0.001384f, 0.007675f, 0.0009513f, -0.007656f, 0.00804f, -0.000968f, + -0.000649f, 0.00913f, -0.0041f, 0.0002625f, -0.0001359f, -0.008865f, 0.002167f, 0.00687f, -0.00606f, + 0.0003486f, 0.0003984f, -0.004803f, 0.006454f, -0.004997f, 0.00892f, -0.007423f, -0.001277f, -0.007504f, + 0.00762f, 0.003056f, 0.001508f, -0.00391f, 0.00859f, -0.00768f, -0.003675f, 0.002884f, 0.006508f, + 0.000506f, 0.002567f, 0.007607f, -0.003233f, 0.0073f, 0.003862f, -0.003817f, 0.00735f, 0.002506f, + -0.00823f, -0.006706f, 0.005676f, -0.00931f, -0.004025f, 0.006542f, 0.000566f, 0.00919f, -0.002083f, + -0.00783f, 0.0013485f, -0.00839f, 0.0089f, -0.0066f, 0.009674f, -0.00821f, 0.0061f, -0.002129f, + 0.00598f, 0.008865f, 0.00513f, -0.00582f, -0.00459f, -0.00962f, -0.00962f, -0.005966f, -0.007187f, + 0.00995f, 0.004295f, 0.004467f, 0.001008f, -0.00809f, 0.00922f, -0.00768f, -0.00994f, -0.005596f, + 0.006706f, 0.00748f, 0.00942f, -0.00396f, 0.001708f, -0.00961f, 0.005653f, 0.00976f, -0.001643f, + 0.003786f, -0.002264f, 0.002747f, -0.0003808f, 0.000354f, 0.001055f, 0.00584f, 0.006306f, 0.005363f, + -0.006443f, -0.0005603f, 0.00871f, 0.00683f, -0.002083f, -0.00611f, -0.006573f, -0.0027f, 0.004917f, + 0.006207f, 0.004932f, -0.00669f, 0.005665f, 0.002796f, 0.00901f, -0.000798f, 0.001478f, 0.003788f, + 0.000707f, 0.00934f, 0.005985f, -0.00145f, -0.0008683f, 0.00339f, 0.002144f, 0.006596f, 0.00984f, + 0.00258f, 0.0048f, 0.0003848f, -0.002644f, -0.002129f, -0.001171f, -0.002369f, -0.007328f, 0.00841f, + -0.005325f, 0.00968f, -0.00982f, -0.003754f, -0.0006895f, 0.00784f, 0.003864f, 0.008316f, -0.003483f, + 0.004986f, -0.003044f, -0.005714f, -0.001846f, -0.001568f, 0.0003648f, 0.00724f, 0.006336f, -0.003222f, + -0.006836f, 0.001214f, -0.003124f, -0.0006356f, -0.001073f, 0.002682f, -0.007538f, -0.001701f, -0.00883f, + 0.00986f, 0.006336f, 0.0011f, -0.00879f, -0.005875f, 0.004025f, 0.00613f, 0.004856f, -0.008896f, + 0.0006967f, 0.0064f, 0.002707f, -0.002317f, -0.002214f, 0.002409f, -0.000346f, -0.006924f, 0.001986f, + -0.003166f, 0.00836f, -0.00899f, 0.0034f, -0.007755f, 0.00407f, 0.00807f, 0.0076f, 0.003824f, + 0.003876f, -0.00853f, -0.00649f, -0.003506f, 0.001777f, -0.009705f, -0.00516f, -0.0094f, 0.00939f, + -0.00786f, -0.00911f, -0.000737f, 0.000864f, -0.00851f, 0.00786f, -0.003422f, -0.00832f, -0.0007277f, + 0.005642f, -0.00868f, -0.002851f, 0.0005975f, -0.007347f, -0.001616f, -0.001303f, 0.00717f, -0.00231f, + -0.008354f, -0.005333f, 0.00864f, 0.006123f, -0.00994f, 0.00313f, -0.00676f, -0.005806f, 0.008446f, + -0.0007553f, -0.006416f, 0.00223f, -0.00579f, 0.00576f, -0.00892f, 0.002424f, -0.00486f, 0.00636f, + 0.003344f, -0.003195f, 0.001562f, 0.00318f, -0.007202f, -0.001358f, -0.0001854f, 0.002499f, 0.001725f, + 0.000389f, -0.006737f, 0.002745f, 0.000575f, -0.003534f, 0.004284f, 0.0019045f, 0.004898f, -0.004356f, + 0.002254f, -0.00577f, 0.0018215f, -0.008736f, 0.00769f, -0.00885f, -0.00859f, -0.00441f, 0.00583f, + -0.009285f, -0.00792f, -0.00922f, -0.003815f, -0.00886f, -0.005394f, -0.00663f, -0.008224f, -0.00353f, + 0.002161f, 0.00301f, -0.00542f, -0.0085f, -0.007446f, -0.00846f, -0.00515f, 0.00204f, 0.00543f, + -0.001219f, -0.007072f, 0.001966f, -0.00894f, 0.0008793f, -0.003418f, 0.00393f, -0.005283f, 0.005756f, + 0.003225f, 0.002123f, 0.002283f, 0.00566f, 0.000477f, 0.00497f, 0.005295f, 0.002136f, 0.00692f, + 0.00872f, 0.00936f, -0.005074f, 0.00645f, -0.001117f, 0.006493f, -0.00574f, 0.001013f, 0.003334f, + -0.005703f, -0.006992f, -0.004314f, 0.005314f, 0.001457f, -0.00594f, -0.003252f, 0.00844f, 0.002502f, + 0.002604f, 0.00289f, 0.00221f, -0.003344f, -0.006905f, -0.00799f, 0.007378f, -0.00945f, 0.006023f, + -0.00791f, 0.001273f, 0.003849f, 0.007694f, 0.005424f, 0.00298f, -0.003618f, -0.0001827f, 0.002077f, + 0.001976f, -0.006474f, 0.00079f, 0.00982f, 0.004166f, 0.007027f, 0.008606f, 0.00818f, 0.00697f, + -0.003006f, 0.0045f, -0.00885f, -0.00515f, 0.00723f, -0.0001746f, -0.00727f, 0.006237f, -0.008385f, + 0.008194f, -0.008316f, -0.002525f, 0.002558f, 0.00639f, 0.003586f, -0.00612f, -0.006756f, -0.008354f, + 0.004883f, -0.00506f, -0.009f, -0.00537f, -0.001243f, -0.005596f, -0.00853f, -0.007545f, 0.00786f, + 0.001839f, -0.002245f, 0.00544f, -0.00196f, 0.004967f, -0.003464f, -0.005108f, 0.003086f, 0.002628f, + -0.002502f, -0.00665f, -0.006226f, 0.0079f, -0.002287f, 0.0003567f, -0.001279f, 0.004826f, 0.005432f, + -0.00634f, -0.003204f, 0.0002022f, -0.00198f, -0.0008726f, 0.004055f, 0.00793f, -0.00427f, -0.00533f, + 0.00734f, -0.00799f, -0.0051f, -0.009995f, 0.0051f, 0.00413f, -0.00679f, 0.00262f, 0.001331f, + 0.001461f, -0.00865f, -0.00791f, -0.003975f, 0.002504f, 0.0002255f, 0.002337f, -0.00456f, -0.005974f, + 0.000257f, -0.00545f, 0.00842f, 0.005585f, -0.0003774f, 0.0008087f, -0.001679f, 0.003853f, 0.00991f, + 0.0031f, 0.00523f, -0.00721f, 0.000989f, -0.005642f, -0.001042f, 0.007935f, -0.006195f, 0.001426f, + 0.00414f, 0.00925f, -0.00419f, 0.004852f, -0.00639f, 0.00694f, -0.007706f, -0.00684f, -0.00602f, + -0.004444f, 0.005016f, -0.00803f, -0.00955f, 0.004097f, -0.003754f, 0.002384f, -0.007515f, 0.003508f, + -0.00749f, 0.00519f, 0.00228f, 0.007015f, -0.007572f, -0.003864f, -0.00843f, 0.00543f, 0.00911f, + 0.00774f, 0.009125f, -0.003473f, -0.00646f, 0.00856f, 0.004272f, 0.00534f, 0.003859f, -0.0001141f, + 0.001515f, 0.003437f, 0.00737f, 0.003565f, -0.002705f, 0.003675f, 0.003023f, -0.0002156f, -0.00894f, + 0.00103f, -0.001797f, -0.00854f, 0.001505f, -0.00876f, -0.003614f, 0.004887f, -0.005085f, 0.002449f, + 0.00524f, -0.00589f, 0.00784f, 0.001411f, -0.0095f, 0.007797f, -0.003391f, 0.008316f, 0.0094f, + 0.00917f, -0.00658f, -0.00685f, -0.005085f, -0.005375f, 0.008705f, -0.004093f, 0.00764f, -0.006172f, + -0.00609f, -0.0005703f, -0.00941f, -0.007065f, 0.00942f, 0.00403f, 0.00392f, -0.0000164f, 0.000577f, + 0.001058f, 0.006317f, 0.0008893f, 0.001935f, -0.009865f, -0.00542f, 0.001452f, 0.00916f, -0.00852f, + -0.00081f, 0.00397f, 0.0069f, 0.003246f, -0.004456f, 0.00777f, -0.004444f, 0.003632f, -0.002512f, + -0.00284f, 0.009926f, 0.00869f, -0.00636f, -0.006454f, 0.006805f, -0.00232f, -0.00924f, 0.006268f, + 0.00501f, -0.00951f, -0.00518f, 0.006126f, 0.00966f, 0.00881f, -0.009346f, 0.00912f, 0.00341f, + 0.00617f, 0.00984f, -0.00357f, 0.00596f, -0.0081f, -0.0006824f, -0.00711f, 0.004803f, 0.00484f, + -0.000756f, 0.002865f, -0.00422f, 0.00005835f, 0.00912f, 0.000726f, 0.001402f, 0.00644f, -0.006542f, + 0.006016f, 0.003975f, 0.00556f, 0.0000735f, -0.002203f, 0.003893f, -0.000724f, 0.005882f, -0.006226f, + -0.006912f, 0.003027f, 0.0004182f, -0.00728f, -0.00726f, -0.00896f, 0.008095f, -0.001346f, 0.00898f, + 0.002956f, -0.003334f, -0.007717f, -0.00876f, 0.00037f, -0.00727f, -0.003258f, 0.009476f, 0.009056f, + 0.00598f, 0.00281f, 0.00586f, -0.00981f, -0.003296f, 0.00769f, -0.000486f, 0.0091f, 0.00634f, + -0.00542f, 0.00512f, -0.002474f, -0.009514f, 0.00402f, -0.004787f, 0.00274f, -0.001112f, -0.002436f, + 0.00949f, -0.000839f, -0.009155f, 0.002499f, 0.001512f, 0.001406f, -0.00313f, -0.002022f, -0.008896f, + -0.00528f, -0.009254f, -0.002148f, -0.000707f, -0.0001829f, -0.001159f, 0.00411f, -0.007637f, -0.00364f, + 0.005135f, -0.00928f, -0.0000797f, 0.004642f, -0.00817f, -0.007072f, -0.003914f, 0.00416f, 0.002985f, + -0.0075f, -0.000736f, 0.008934f, 0.004204f, 0.0004723f, 0.006306f, -0.007675f, -0.007835f, 0.0005293f, + -0.002478f, -0.006336f, 0.007996f, 0.002539f, 0.001836f, 0.00968f, 0.006844f, 0.001179f, 0.001448f, + 0.006042f, 0.00292f, -0.007122f, -0.001914f, 0.004448f, 0.00822f, 0.00672f, 0.000714f, -0.001145f, + 0.009415f, 0.0015335f, -0.005585f, -0.006104f, -0.0003273f, -0.00987f, 0.001559f, -0.00608f, 0.007664f, + 0.00834f, -0.0002584f, -0.004097f, 0.00745f, 0.005417f, -0.002129f, 0.001597f, 0.00749f, -0.001676f, + 0.006344f, 0.006905f, 0.004364f, -0.00739f, -0.001457f, 0.00806f, -0.008f, -0.004284f, -0.00717f, + 0.00547f, 0.004463f, 0.00529f, -0.00843f, 0.008064f, 0.00556f, 0.0005236f, 0.00918f, -0.004986f, + 0.00578f, -0.001013f, -0.003479f, -0.004425f, -0.0076f, -0.004093f, 0.003084f, -0.00531f, -0.00902f, + -0.002844f, 0.004982f, -0.00986f, 0.003986f, 0.002125f, 0.004036f, -0.006798f, 0.000773f, 0.000544f, + -0.0001241f, 0.009155f, 0.002682f, -0.00997f, -0.00826f, 0.003769f, 0.001383f, -0.005318f, 0.004673f, + -0.005314f, 0.00691f, 0.00212f, -0.00656f, -0.006226f, -0.008705f, 0.00459f, -0.003798f, 0.00869f, + -0.002985f, -0.000604f, 0.00826f, -0.00541f, -0.00502f, 0.000809f, -0.00969f, -0.006626f, 0.005123f, + -0.0005465f, -0.00858f, 0.005554f, -0.002083f, 0.007343f, -0.001588f, -0.001642f, 0.0007577f, 0.00318f, + -0.00391f, 0.00404f, 0.00886f, -0.006374f, -0.00958f, -0.005077f, -0.00218f, 0.00745f, 0.00944f, + 0.007233f, 0.003042f, -0.003296f, 0.006786f, -0.006706f, 0.007114f, 0.00566f, 0.005325f, 0.007637f, + -0.00661f, 0.0008025f, -0.002693f, 0.005634f, 0.001557f, -0.007133f, -0.00483f, -0.00654f, 0.006313f, + -0.00926f, -0.00372f, -0.00583f, -0.004025f, 0.00761f, 0.00955f, 0.002691f, -0.00915f, -0.006084f, + -0.008835f, 0.003885f, 0.009514f, -0.00841f, 0.003637f, -0.00765f, -0.005978f, 0.001959f, -0.005295f, + -0.001565f, -0.003551f, -0.000824f, 0.005848f, -0.00010514f, 0.00828f, -0.003895f, -0.003197f, 0.00797f, + 0.00998f, 0.004635f, 0.006504f, 0.007023f, -0.00675f, 0.001584f, 0.004642f, 0.007458f, -0.002005f, + 0.0000653f, 0.00715f, 0.00402f, 0.00782f, -0.00331f, 0.00676f, 0.000039f, 0.00644f, -0.0007744f, + 0.005688f, 0.00511f, -0.005135f, 0.000995f, 0.006756f, -0.002304f, 0.003553f, -0.00938f, -0.000616f, + -0.00897f, -0.00685f, -0.00838f, 0.003983f, -0.004807f, 0.002314f, 0.00847f, 0.00846f, -0.007507f, + 0.002136f, 0.005905f, -0.00899f, 0.0081f, 0.008f, 0.00889f, -0.00907f, -0.00489f, 0.00938f, + -0.009254f, 0.00627f, 0.0052f, -0.002031f, -0.0006337f, -0.001191f, 0.001453f, -0.003918f, 0.001798f, + -0.00491f, -0.002062f, -0.00889f, 0.00309f, 0.007526f, 0.0007014f, -0.001351f, -0.003838f, 0.00458f, + 0.004005f, -0.00923f, 0.00581f, -0.002983f, -0.00901f, 0.007095f, 0.00844f, -0.00989f, 0.001532f, + -0.00867f, 0.001821f, -0.005646f, 0.00698f, -0.001757f, -0.00102f, -0.00511f, -0.007774f, 0.002588f, + -0.006096f, 0.005196f, -0.002117f, -0.0003762f, 0.00738f, 0.001219f, 0.00447f, 0.00867f, -0.00494f, + 0.007313f, -0.008095f, 0.000967f, 0.004776f, 0.00296f, 0.001068f, 0.00818f, 0.00749f, -0.00939f, + -0.00738f, -0.006214f, -0.00685f, 0.00569f, 0.00716f, 0.004375f, -0.00512f, -0.006252f, -0.004684f, + -0.002974f, -0.007965f, 0.0025f, -0.00943f, 0.00539f, 0.0003204f, 0.0005164f, -0.006573f, 0.00646f, + 0.00502f, 0.007965f, -0.002003f, -0.00609f, -0.009285f, -0.005028f, -0.00985f, 0.001395f, 0.00415f, + 0.003494f, 0.00957f, 0.009834f, -0.005905f, 0.002436f, 0.001002f, -0.002335f, -0.00981f, 0.006714f, + 0.005135f, -0.003138f, -0.00786f, 0.005497f, 0.003677f, 0.00479f, -0.00453f, 0.00845f, 0.007454f, + 0.000992f, -0.00647f, 0.001218f, -0.004295f, 0.00004745f, 0.005558f, -0.002914f, 0.00861f, -0.008064f, + 0.003328f, -0.003998f, -0.007595f, 0.00487f, 0.0008106f, 0.005287f, -0.003735f, 0.003054f, 0.006645f, + -0.002422f, 0.00974f, -0.001171f, 0.006264f, 0.00908f, 0.002903f, 0.00446f, 0.002419f, 0.00806f, + -0.002483f, 0.0089f, 0.0004303f, -0.001789f, -0.00638f, -0.005802f, -0.00953f, -0.00526f, 0.006203f, + -0.001033f, -0.00721f, 0.00391f, 0.00923f, 0.006676f, 0.00495f, -0.002512f, -0.000916f, 0.005054f, + -0.007652f, 0.004738f, 0.00826f, -0.00989f, -0.00202f, -0.00824f, -0.004333f, 0.002779f, -0.00531f, + 0.00181f, -0.00475f, 0.005234f, -0.00558f, 0.002342f, -0.001395f, -0.005856f, 0.004074f, -0.00638f, + -0.003561f, 0.00819f, 0.006454f, -0.00402f, -0.008766f, -0.006668f, -0.00244f, -0.00392f, -0.007248f, + -0.00666f, 0.001226f, -0.0071f, 0.00746f, 0.00396f, -0.00057f, 0.0001602f, 0.006924f, -0.0004158f, + -0.000988f, -0.008385f, 0.004936f, -0.001231f, 0.00533f, 0.00905f, 0.0015335f, 0.003677f, 0.00751f, + -0.00807f, -0.0051f, 0.00774f, -0.000592f, 0.003368f, -0.001825f, -0.003403f, 0.008194f, -0.0004606f, + 0.00312f, -0.004196f, 0.008026f, 0.004883f, -0.003073f, -0.006607f, 0.00847f, -0.007446f, -0.00982f, + -0.002375f, 0.009186f, 0.00991f, 0.005642f, -0.00632f, -0.005085f, 0.0084f, 0.002087f, 0.004f, + 0.002495f, 0.004326f, 0.00969f, -0.003504f, 0.008514f, 0.000959f, 0.003632f, -0.001369f, 0.005737f, + 0.002361f, -0.00802f, -0.006603f, 0.007866f, -0.008675f, 0.009384f, 0.001016f, 0.006927f, -0.005165f, + 0.001802f, -0.002798f, 0.008415f, 0.00439f, 0.003819f, 0.002295f, 0.006844f, -0.006813f, 0.0003488f, + 0.000659f, 0.00963f, -0.00946f, 0.002861f, -0.00614f, 0.002499f, -0.00706f, 0.003216f, -0.003124f, + -0.004585f, 0.001135f, -0.00212f, 0.007435f, -0.003775f, -0.0001405f, -0.000892f, 0.006218f, -0.005333f, + 0.007397f, 0.003202f, 0.009026f, 0.003717f, 0.00787f, 0.005188f, 0.0002823f, -0.0052f, 0.00797f, + -0.0009027f, -0.006462f, 0.00908f, -0.001527f, 0.005005f, 0.005547f, 0.00665f, -0.002155f, -0.00641f, + 0.00467f, -0.002872f, 0.000676f, 0.0009217f, 0.00424f, -0.000898f, 0.00932f, 0.004444f, -0.009834f, + 0.00908f, -0.0000113f, -0.00378f, 0.00792f, -0.00931f, -0.002563f, 0.003622f, 0.00972f, -0.0066f, + -0.002348f, -0.00787f, 0.004368f, -0.00385f, 0.0099f, 0.00617f, -0.001304f, 0.008575f, -0.00803f, + -0.008354f, 0.00794f, -0.00924f, 0.0069f, -0.00811f, 0.000215f, -0.00519f, -0.001069f, 0.000882f, + -0.007378f, 0.006447f, -0.003225f, -0.00484f, -0.00356f, -0.0004394f, -0.002144f, -0.001932f, 0.0007205f, + -0.00976f, 0.008514f, -0.006294f, 0.00618f, -0.001758f, -0.00713f, -0.00912f, 0.004726f, 0.00334f, + 0.00847f, -0.0001967f, 0.005165f, -0.004944f, -0.00915f, 0.0062f, -0.00553f, 0.0084f, -0.0054f, + 0.002823f, 0.00272f, -0.00271f, -0.009514f, 0.00629f, -0.006054f, 0.008865f, -0.00813f, -0.0076f, + 0.00857f, -0.003681f, -0.00738f, -0.00872f, -0.001488f, 0.00926f, -0.001791f, 0.00471f, -0.00482f, + 0.007812f, -0.004654f, -0.006138f, 0.003813f, 0.005768f, -0.00375f, -0.00992f, -0.000584f, 0.00783f, + -0.004147f, 0.001611f, 0.001342f, -0.006832f, -0.00138f, 0.005325f, -0.0000265f, 0.009445f, 0.00872f, + 0.001329f, -0.0026f, 0.002577f, 0.0072f, 0.00547f, 0.006428f, -0.004864f, 0.00876f, -0.00906f, + 0.007317f, -0.007233f, -0.00774f, 0.003387f, -0.002037f, 0.00125f, 0.00655f, -0.003298f, 0.008514f, + -0.003757f, 0.007935f, -0.003181f, 0.00629f, 0.00838f, 0.0009594f, 0.006897f, -0.008835f, 0.00446f, + -0.0082f, -0.006042f, 0.00761f, -0.00883f, 0.002434f, 0.001002f, 0.00712f, -0.005688f, 0.003359f, + -0.00606f, 0.002512f, 0.00576f, 0.006126f, 0.0009394f, -0.00787f, -0.00485f, 0.005936f, 0.002037f, + -0.0024f, -0.00618f, -0.00157f, 0.00702f, -0.007637f, 0.0077f, -0.00784f, -0.0062f, -0.00975f, + -0.00849f, 0.00843f, 0.003843f, -0.006443f, 0.004993f, -0.0001615f, 0.00902f, 0.00811f, 0.005333f, + 0.002123f, 0.001081f, 0.0086f, -0.003103f, 0.005783f, 0.004936f, -0.00898f, 0.001179f, 0.0007f, + 0.003462f, -0.00855f, 0.00254f, -0.0000039f, -0.00468f, 0.0012455f, 0.003431f, 0.007538f, 0.0082f, + 0.00843f, -0.001547f, 0.006157f, 0.001941f, -0.0013895f, -0.003096f, -0.003883f, -0.006382f, -0.00475f, + 0.008766f, -0.003225f, 0.0008793f, -0.002806f, -0.00432f, 0.003944f, 0.008286f, 0.003141f, -0.00975f, + -0.00439f, -0.007645f, 0.0093f, 0.005238f, -0.002018f, -0.006023f, -0.001462f, 0.00286f, 0.00525f, + 0.005463f, -0.0005217f, -0.0003283f, -0.003103f, -0.007656f, -0.003311f, -0.0002983f, 0.005165f, 0.007187f, + 0.00674f, -0.002645f, 0.00882f, 0.009995f, -0.003174f, -0.002956f, -0.00978f, 0.00841f, 0.005043f, + 0.00798f, 0.00003827f, -0.004494f, -0.00883f, -0.0003128f, -0.0015955f, 0.00958f, 0.001948f, -0.007664f, + -0.002064f, 0.002949f, 0.008736f, 0.00684f, 0.00804f, 0.004642f, -0.000742f, 0.001874f, -0.004864f, + 0.0003529f, -0.001284f, 0.00896f, -0.006954f, -0.003616f, 0.0078f, 0.00815f, -0.00876f, -0.002783f, + -0.00649f, 0.00976f, 0.009125f, 0.0019f, -0.0004215f, 0.00461f, 0.001037f, 0.009384f, 0.003422f, + 0.001194f, 0.00923f, 0.00554f, -0.00855f, -0.001592f, -0.002981f, 0.006016f, 0.002314f, -0.00483f, + 0.002476f, -0.00894f, -0.000574f, 0.0096f, -0.0002362f, -0.002018f, 0.00283f, 0.00251f, -0.0001559f, + -0.00557f, 0.00661f, -0.002537f, 0.005524f, 0.00961f, -0.002073f, 0.00454f, -0.006428f, 0.001997f, + -0.00446f, -0.0007524f, 0.002176f, -0.00209f, -0.00874f, 0.001289f, 0.00523f, 0.001575f, -0.008736f, + 0.007057f, -0.0069f, -0.00512f, -0.005383f, 0.0001678f, 0.001076f, 0.007683f, -0.006207f, -0.006233f, + -0.00585f, -0.004894f, 0.00773f, 0.00627f, -0.0008707f, -0.00574f, -0.002068f, -0.0003157f, -0.00921f, + -0.006275f, 0.007275f, -0.0004473f, 0.002474f, -0.009186f, 0.001432f, 0.003687f, -0.004425f, -0.002018f, + 0.00922f, -0.00788f, 0.000894f, -0.001047f, -0.001193f, 0.009094f, -0.0039f, 0.00977f, 0.00951f, + 0.00976f, 0.002201f, 0.006214f, -0.002117f, 0.006203f, 0.00278f, -0.006725f, -0.006157f, 0.003757f, + -0.001729f, 0.005405f, -0.00904f, -0.000435f, -0.002148f, -0.00849f, 0.00923f, -0.008194f, -0.001804f, + -0.00392f, 0.0002866f, -0.007317f, 0.005623f, -0.002657f, -0.005657f, 0.006363f, 0.00205f, 0.005215f, + 0.00376f, 0.001134f, -0.003138f, 0.00569f, 0.008446f, -0.003283f, 0.004047f, -0.00322f, -0.001756f, + -0.006763f, 0.001577f, -0.007225f, 0.006092f, 0.004112f, -0.006554f, -0.00428f, 0.004684f, -0.000417f, + 0.00418f, -0.000349f, -0.00676f, -0.004097f, -0.00899f, 0.004936f, 0.00864f, -0.006325f, -0.004665f, + -0.00834f, 0.00238f, 0.006153f, -0.00914f, 0.004246f, -0.00963f, 0.003986f, 0.00887f, 0.00852f, + 0.0002384f, 0.007866f, -0.002577f, 0.0007524f, -0.004887f, -0.0003715f, 0.00564f, 0.008606f, -0.009705f, + -0.009796f, -0.001706f, -0.00965f, 0.00824f, 0.0009446f, -0.00514f, 0.00492f, 0.002787f, 0.00643f, + -0.0002482f, 0.003603f, 0.004097f, 0.00916f, -0.005463f, -0.003786f, 0.00269f, -0.00688f, 0.002872f, + 0.0079f, 0.002403f, -0.000562f, 0.00747f, -0.00349f, 0.004925f, -0.009f, -0.003199f, -0.0008674f, + 0.004513f, 0.001112f, 0.00242f, -0.003345f, -0.00588f, -0.001415f, 0.001788f, -0.00345f, -0.007744f, + 0.005596f, -0.00871f, -0.001603f, -0.0001678f, -0.00862f, 0.00929f, -0.005604f, 0.00986f, 0.005383f, + 0.00959f, 0.00005203f, -0.002613f, 0.000881f, 0.00828f, -0.00738f, 0.001506f, 0.000615f, -0.001396f, + 0.005566f, -0.00815f, -0.00447f, 0.002577f, -0.00938f, -0.0007024f, 0.000968f, 0.00785f, 0.001473f, + -0.004387f, 0.008286f, -0.003094f, 0.008125f, -0.004494f, -0.00425f, 0.004585f, -0.00964f, 0.002777f, + -0.00888f, 0.005466f, 0.00231f, -0.001025f, -0.009186f, 0.004265f, 0.002234f, -0.002064f, 0.006973f, + -0.007336f, 0.001036f, -0.00965f, -0.003597f, 0.000792f, -0.006615f, 0.00904f, 0.00902f, -0.004856f, + -0.00782f, -0.0004456f, 0.004826f, -0.001932f, 0.003588f, -0.001571f, -0.003286f, -0.00523f, -0.002085f, + 0.004658f, 0.00324f, -0.00974f, 0.007122f, -0.00806f, -0.003452f, -0.00996f, 0.0004315f, -0.004436f, + 0.00442f, 0.0003521f, -0.0000391f, 0.00986f, 0.007553f, 0.00816f, 0.004242f, -0.00706f, 0.00857f, + -0.009705f, -0.00789f, 0.006126f, 0.00494f, 0.001126f, -0.003017f, -0.0005965f, -0.00928f, 0.001935f, + -0.00866f, -0.002542f, 0.003275f, 0.0001297f, -0.00935f, 0.005028f, 0.004097f, -0.006817f, 0.00791f, + 0.0001851f, -0.002525f, 0.00906f, 0.000608f, 0.0004106f, -0.00859f, -0.005623f, -0.00567f, 0.00434f, + 0.004124f, 0.000519f, 0.00947f, -0.002487f, -0.00738f, 0.009346f, -0.004936f, 0.007263f, -0.00096f, + 0.00493f, -0.00823f, 0.003119f, -0.0003824f, 0.0007586f, 0.006584f, 0.00392f, -0.008125f, 0.006313f, + 0.007812f, -0.005913f, 0.005547f, -0.0001316f, -0.007523f, 0.00768f, 0.00142f, 0.00912f, -0.003622f, + 0.00852f, 0.005966f, -0.004467f, -0.00919f, -0.00866f, -0.00875f, -0.0000665f, 0.000144f, 0.00649f, + 0.003706f, -0.001643f, -0.003508f, -0.005817f, -0.0059f, 0.008896f, 0.0088f, -0.005962f, -0.003698f, + -0.003626f, 0.001465f, 0.003386f, 0.002172f, 0.00159f, 0.003794f, 0.00751f, 0.001184f, -0.0008216f, + -0.006474f, 0.00761f, -0.006603f, 0.005993f, 0.003044f, 0.00322f, -0.00928f, -0.00667f, -0.00599f, + 0.00869f, 0.001393f, -0.006184f, -0.002693f, 0.003727f, -0.003624f, 0.002987f, -0.002718f, -0.001762f, + -0.007366f, -0.00294f, -0.004993f, -0.00977f, 0.00814f, -0.001241f, 0.001603f, -0.00352f, -0.004997f, + -0.005177f, -0.002817f, 0.002464f, 0.00763f, 0.00547f, -0.007217f, -0.00507f, 0.000908f, -0.000513f, + 0.001423f, -0.0006895f, 0.001677f, 0.001864f, -0.00401f, -0.003475f, 0.00604f, -0.003687f, -0.008606f, + -0.00724f, -0.0061f, 0.002502f, -0.00612f, -0.003128f, 0.000557f, 0.001442f, -0.007397f, -0.0088f, + -0.0009484f, 0.007244f, -0.008804f, -0.00847f, -0.00967f, 0.00989f, 0.00872f, -0.005753f, 0.003027f, + 0.0014105f, 0.007397f, -0.005905f, 0.007214f, 0.005665f, 0.001882f, -0.002838f, -0.003008f, -0.00795f, + -0.000239f, 0.0064f, 0.005333f, 0.005028f, 0.006863f, -0.004f, -0.00592f, -0.001575f, 0.005398f, + 0.009575f, -0.003317f, 0.00983f, -0.0006003f, 0.005287f, 0.009094f, -0.00502f, -0.00495f, -0.00962f, + 0.000787f, 0.005604f, -0.006504f, 0.002504f, -0.004066f, -0.009766f, -0.0074f, -0.00766f, 0.009705f, + 0.00814f, -0.005157f, -0.001017f, -0.008316f, -0.00004405f, -0.00802f, -0.004677f, -0.004894f, -0.00705f, + 0.00784f, 0.00448f, -0.007553f, -0.0028f, -0.006226f, 0.0000136f, -0.004192f, -0.00755f, 0.00278f, + 0.00343f, -0.0006332f, -0.00343f, -0.004555f, -0.0093f, 0.00261f, 0.00926f, -0.005093f, 0.00627f, + -0.00848f, -0.00984f, -0.001426f, -0.00226f, -0.002077f, -0.001703f, 0.009636f, 0.007664f, -0.003628f, + 0.002018f, -0.006012f, -0.00473f, 0.003834f, 0.00939f, -0.00827f, -0.00812f, -0.00792f, 0.00924f, + 0.00776f, 0.001537f, -0.00287f, -0.002401f, -0.00831f, -0.00903f, 0.00591f, 0.003252f, -0.006348f, + 0.001455f, 0.00674f, -0.002382f, 0.0003512f, -0.0017185f, 0.00684f, 0.00665f, 0.00782f, -0.00969f, + 0.00418f, 0.00442f, 0.00979f, 0.006382f, 0.004642f, 0.00398f, 0.007797f, 0.005234f, -0.005566f, + -0.00903f, 0.003168f, -0.005596f, 0.00006646f, 0.00995f, -0.002335f, -0.00548f, 0.005383f, -0.004562f, + 0.00811f, -0.005035f, 0.0008745f, -0.0086f, -0.00786f, -0.00566f, -0.0096f, -0.000744f, 0.00511f, + -0.003363f, 0.002739f, 0.002033f, 0.005455f, -0.001077f, 0.003887f, 0.00735f, 0.00757f, 0.008965f, + -0.002888f, 0.002462f, 0.000919f, 0.0008416f, -0.003096f, 0.00875f, -0.002434f, 0.00318f, -0.002779f, + 0.00725f, 0.005062f, 0.00073f, 0.00845f, 0.003576f, 0.002874f, -0.00836f, -0.00859f, 0.00916f, + -0.00745f, 0.00869f, 0.001855f, 0.005814f, -0.002064f, 0.0066f, -0.009346f, 0.004307f, -0.00966f, + 0.00877f, -0.002394f, -0.00977f, 0.002356f, -0.008255f, 0.001052f, 0.00495f, -0.00963f, 0.00886f, + -0.00476f, -0.00917f, -0.000619f, -0.00593f, 0.005497f, 0.003141f, 0.002428f, 0.003363f, 0.001099f, + 0.00731f, -0.005577f, 0.00666f, -0.00328f, 0.004677f, 0.00761f, -0.00864f, -0.00873f, -0.00282f, + -0.004177f, 0.00867f, -0.00536f, 0.004387f, -0.007294f, -0.0099f, 0.001112f, -0.001063f, 0.004284f, + 0.000729f, 0.005604f, 0.00434f, 0.00563f, -0.00618f, 0.00464f, 0.004417f, 0.00524f, -0.00052f, + -0.002462f, -0.000902f, 0.005207f, -0.002256f, 0.000805f, -0.006252f, 0.003262f, 0.007603f, -0.000191f, + 0.003582f, -0.002598f, -0.003662f, -0.005585f, -0.00007087f, -0.00784f, -0.001778f, 0.00996f, -0.00643f, + 0.009796f, -0.002966f, 0.005848f, -0.003027f, -0.007587f, -0.003654f, -0.00882f, -0.001206f, -0.005836f, + -0.0089f, -0.00608f, -0.003944f, -0.000564f, -0.00329f, 0.000377f, 0.000702f, 0.000859f, 0.002554f, + 0.001499f, 0.005997f, 0.0006666f, -0.00584f, 0.005337f, -0.00734f, 0.006847f, 0.00829f, 0.003925f, + -0.00837f, -0.005886f, -0.006927f, -0.000641f, -0.0000388f, 0.003124f, 0.007427f, 0.00767f, -0.002771f, + -0.005985f, 0.002094f, -0.007442f, -0.001377f, 0.003183f, 0.0003796f, 0.0068f, 0.0008273f, -0.002102f, + 0.003433f, -0.00931f, 0.0003903f, -0.00771f, -0.000703f, 0.003122f, 0.00833f, 0.001467f, 0.00769f, + -0.004578f, -0.007393f, 0.0054f, -0.007797f, -0.003767f, -0.009735f, -0.0007954f, 0.005028f, -0.00809f, + 0.002352f, -0.0002111f, 0.003624f, 0.00502f, 0.001048f, 0.00922f, 0.003426f, 0.002258f, -0.00708f, + 0.00517f, -0.00919f, -0.00881f, -0.00548f, 0.00891f, 0.00919f, 0.00597f, 0.001098f, 0.004875f, + 0.004875f, 0.00846f, 0.00829f, 0.003426f, 0.001049f, 0.00669f, 0.003994f, 0.006195f, -0.004585f, + -0.001221f, -0.000247f, -0.00613f, -0.00613f, 0.00436f, 0.006775f, -0.001169f, -0.001771f, -0.001071f, + -0.003635f, -0.004475f, -0.00216f, -0.003502f, 0.002285f, -0.006702f, 0.0074f, 0.004845f, 0.00123f, + -0.00434f, -0.0082f, 0.0000914f, 0.00325f, -0.00717f, -0.003687f, 0.003479f, 0.005894f, -0.002655f, + 0.00833f, 0.002365f, -0.00927f, 0.006416f, -0.0031f, 0.009834f, 0.006855f, 0.004673f, 0.00857f, + -0.00627f, 0.00887f, -0.002636f, -0.0066f, -0.003975f, 0.003056f, -0.001572f, -0.005142f, 0.007393f, + 0.00863f, -0.000665f, -0.005146f, 0.008965f, 0.005505f, -0.001827f, -0.001454f, 0.002926f, -0.002275f, + -0.006184f, 0.00991f, -0.005035f, -0.003462f, 0.00855f, -0.009125f, 0.002832f, 0.005817f, 0.007187f, + 0.005844f, -0.003204f, -0.002201f, -0.0095f, -0.00862f, -0.00896f, 0.00543f, 0.00010115f, 0.00392f, + 0.004917f, -0.002266f, 0.0003471f, 0.006306f, -0.004726f, -0.002298f, 0.00234f, -0.004726f, 0.00924f, + -0.005363f, -0.0002112f, -0.0099f, 0.005604f, -0.00523f, -0.004627f, -0.001949f, -0.00936f, 0.002743f, + -0.001635f, 0.001984f, 0.00972f, -0.00359f, 0.003296f, 0.00074f, 0.004654f, 0.00995f, -0.001584f, + 0.003048f, 0.0006003f, -0.003628f, -0.007668f, -0.002537f, -0.006584f, 0.00576f, 0.00864f, -0.00899f, + -0.009636f, -0.005394f, 0.00433f, 0.00706f, 0.005005f, -0.004707f, 0.004597f, 0.00852f, 0.008835f, + 0.003904f, 0.00457f, 0.004128f, 0.005028f, -0.003986f, 0.005997f, 0.0002208f, 0.00777f, 0.00963f, + 0.005787f, 0.007023f, 0.00553f, 0.00449f, 0.005814f, 0.003082f, 0.0093f, 0.00472f, -0.00985f, + 0.00938f, 0.00558f, 0.007088f, 0.00391f, -0.00918f, 0.008415f, 0.00902f, 0.004173f, -0.002716f, + -0.009926f, -0.00801f, -0.009705f, -0.0086f, -0.009865f, 0.003788f, -0.0092f, 0.00887f, -0.001495f, + -0.00314f, -0.003246f, -0.000836f, 0.001646f, 0.00902f, -0.007233f, -0.00376f, -0.0057f, 0.005787f, + -0.002974f, 0.00872f, 0.0086f, -0.00443f, 0.003622f, 0.004593f, 0.008026f, -0.0003214f, 0.00858f, + -0.00338f, 0.00772f, 0.00448f, 0.00855f, 0.001066f, -0.004692f, -0.005737f, 0.007565f, -0.0002706f, + -0.002792f, -0.00949f, 0.000827f, -0.004967f, 0.00864f, 0.00788f, 0.009094f, -0.001957f, -0.002716f, + 0.000686f, -0.00499f, -0.004173f, 0.002407f, 0.00923f, 0.001411f, -0.0005016f, 0.00746f, -0.0087f, + -0.002703f, -0.003134f, -0.001611f, 0.007404f, -0.00999f, -0.004158f, 0.00556f, 0.0005794f, 0.003775f, + -0.001105f, -0.00338f, 0.00999f, 0.006966f, 0.005802f, -0.009735f, -0.009834f, -0.00723f, -0.00656f, + -0.007538f, 0.00995f, 0.00586f, 0.001463f, -0.001861f, -0.007015f, 0.005455f, -0.00492f, -0.005337f, + -0.00855f, -0.002764f, 0.003605f, 0.00967f, -0.007256f, -0.002594f, 0.00397f, -0.00508f, -0.004555f, + 0.009476f, -0.0006495f, 0.003998f, -0.0087f, 0.007294f, -0.007748f, 0.001855f, -0.0002816f, -0.00983f, + -0.007416f, 0.004444f, 0.003036f, 0.005066f, 0.001116f, -0.0001506f, -0.003181f, -0.003258f, -0.00816f, + 0.00821f, -0.0007715f, 0.00669f, 0.002674f, 0.004074f, 0.009605f, 0.001936f, -0.0052f, -0.002779f, + 0.003435f, 0.003592f, -0.00787f, 0.002615f, 0.007996f, 0.002047f, 0.002438f, 0.000739f, -0.002443f, + 0.00817f, 0.009995f, 0.00749f, 0.00953f, 0.007427f, -0.003246f, -0.004795f, 0.003834f, 0.0087f, + -0.00863f, 0.003105f, -0.003313f, -0.006187f, 0.005104f, -0.00093f, 0.004158f, 0.003963f, -0.00579f, + -0.004044f, 0.004044f, -0.0005593f, -0.00388f, -0.00249f, 0.006115f, 0.00322f, 0.007347f, 0.00813f, + -0.005142f, -0.0004606f, 0.00646f, 0.002186f, 0.00812f, 0.004818f, 0.0009236f, -0.00864f, 0.00948f, + -0.003057f, 0.003445f, -0.004444f, 0.001763f, -0.005806f, 0.001699f, 0.00843f, -0.007423f, -0.001351f, + -0.007317f, -0.001196f, 0.002996f, 0.005066f, 0.003227f, 0.00547f, -0.00923f, 0.0008106f, 0.00789f, + -0.006508f, -0.0003939f, -0.002443f, 0.007107f, -0.00692f, -0.007645f, -0.00353f, 0.00661f, 0.000988f, + -0.00769f, -0.003134f, 0.002548f, 0.00495f, 0.0034f, 0.001454f, 0.00344f, -0.00323f, -0.006203f, + 0.001063f, 0.008736f, -0.00737f, 0.00234f, -0.00315f, -0.008865f, -0.003918f, 0.006042f, 0.0003307f, + -0.001405f, 0.002129f, -0.00682f, 0.000836f, -0.005436f, 0.008385f, -0.002783f, -0.0007734f, -0.007088f, + -0.005924f, 0.00951f, 0.000002f, -0.00504f, -0.005474f, -0.00897f, 0.00339f, -0.003044f, 0.0019245f, + 0.00596f, 0.00756f, -0.005936f, 0.007416f, -0.005173f, 0.006367f, 0.0015545f, -0.001073f, 0.008095f, + 0.004868f, 0.0000308f, -0.005302f, -0.0003858f, -0.00421f, -0.00386f, 0.00925f, 0.004604f, 0.001006f, + -0.004482f, 0.00634f, -0.006126f, -0.00878f, 0.0095f, -0.006985f, -0.00575f, -0.001845f, -0.002335f, + 0.00908f, 0.00764f, -0.00405f, 0.003431f, 0.004726f, 0.0002171f, -0.005314f, -0.00693f, 0.00867f, + 0.0007024f, -0.007217f, 0.006042f, -0.0002111f, 0.00475f, -0.00635f, 0.00984f, 0.00829f, -0.0008802f, + -0.005093f, -0.007996f, -0.003607f, -0.00965f, -0.001188f, -0.002707f, 0.002533f, 0.00328f, -0.004807f, + -0.002724f, -0.005733f, 0.007996f, -0.003893f, -0.0002323f, -0.00577f, -0.007263f, 0.00416f, -0.007385f, + -0.004906f, 0.002007f, -0.00773f, -0.0004334f, -0.00542f, -0.0009217f, 0.008545f, 0.0005693f, 0.0094f, + -0.000956f, -0.002106f, -0.0082f, -0.006363f, 0.00431f, -0.001059f, -0.0054f, 0.002123f, 0.0004594f, + -0.003489f, -0.005173f, -0.007595f, 0.007782f, -0.0001341f, 0.00977f, -0.00463f, -0.0002378f, -0.002296f, + 0.00667f, 0.00701f, 0.001323f, -0.001699f, 0.00955f, -0.0091f, 0.0089f, 0.00791f, -0.0003197f, + 0.007835f, -0.00828f, 0.00854f, 0.00239f, 0.008385f, 0.001974f, 0.000486f, 0.00991f, 0.006542f, + 0.007866f, -0.004803f, -0.004913f, -0.00513f, -0.0004153f, 0.00995f, -0.00516f, -0.003317f, 0.00682f, + 0.0004165f, -0.00903f, -0.005344f, 0.00786f, 0.003769f, 0.004158f, 0.0002446f, 0.00589f, -0.002949f, + 0.0073f, -0.002398f, -0.004757f, 0.0002432f, -0.00439f, -0.00454f, 0.000453f, 0.00823f, -0.009575f, + 0.00535f, -0.008575f, -0.00893f, 0.004303f, 0.00502f, 0.00617f, -0.004402f, 0.00919f, -0.00865f, + 0.00876f, 0.003645f, 0.0002997f, -0.00925f, -0.007076f, 0.004448f, 0.005196f, -0.003986f, 0.007084f, + -0.000285f, -0.002855f, -0.000422f, -0.00872f, -0.005013f, 0.00952f, -0.008446f, -0.004044f, -0.00907f, + 0.007072f, -0.00918f, -0.007835f, 0.000878f, -0.006847f, -0.006f, 0.00731f, -0.001876f, -0.002565f, + -0.003584f, -0.003006f, -0.00723f, -0.003433f, 0.0004973f, -0.00795f, 0.0005007f, 0.00608f, 0.00671f, + 0.0001765f, 0.00439f, -0.003738f, -0.006035f, 0.00010353f, -0.00374f, 0.0008683f, 0.00773f, -0.0004847f, + -0.000992f, 0.004658f, -0.003555f, -0.0056f, -0.001982f, 0.00812f, 0.003386f, -0.001584f, 0.003508f, + -0.006138f, -0.00587f, 0.001421f, -0.009094f, -0.00468f, -0.0086f, 0.003637f, 0.00896f, 0.00804f, + -0.00744f, 0.002382f, -0.0097f, 0.000659f, 0.007782f, 0.002981f, -0.00869f, 0.0000934f, -0.00882f, + 0.002771f, -0.009544f, 0.0035f, 0.004124f, -0.0014f, -0.006294f, -0.007614f, 0.00931f, 0.009674f, + 0.0003185f, -0.004295f, 0.007084f, -0.0035f, -0.00334f, -0.001754f, 0.001216f, -0.004375f, 0.003244f, + 0.0001901f, 0.001547f, 0.007183f, 0.006447f, 0.005108f, 0.00679f, 0.001068f, -0.00587f, 0.005745f, + -0.00634f, 0.0058f, 0.006985f, -0.000697f, 0.00008917f, 0.007835f, -0.0004838f, 0.004795f, -0.006832f, + 0.002398f, 0.00687f, -0.001582f, 0.00709f, -0.00908f, -0.001573f, 0.009865f, -0.001476f, -0.000526f, + 0.00477f, 0.008026f, -0.00171f, 0.00979f, -0.005592f, 0.0006247f, -0.00774f, 0.00463f, -0.006676f, + 0.004368f, -0.002373f, -0.005127f, -0.0013275f, -0.002306f, -0.0087f, 0.00997f, 0.005493f, 0.003786f, + -0.004414f, -0.005947f, 0.003181f, -0.0004156f, 0.00909f, -0.00656f, 0.001926f, 0.0003731f, -0.009636f, + 0.003124f, -0.0000686f, -0.001972f, -0.006584f, 0.0009604f, 0.004086f, 0.009865f, 0.001302f, -0.00989f, + -0.0086f, 0.005177f, 0.006493f, -0.00523f, -0.00443f, 0.001586f, 0.00937f, 0.007458f, 0.001883f, + 0.00774f, 0.0004454f, 0.000493f, 0.0003722f, -0.00486f, 0.006435f, 0.002642f, 0.00432f, -0.00272f, + -0.007446f, -0.007397f, 0.00361f, 0.003618f, 0.003956f, -0.001175f, 0.00832f, 0.00794f, 0.001658f, + 0.00123f, -0.003918f, 0.001215f, -0.007427f, 0.003708f, 0.00492f, -0.00968f, 0.008896f, -0.006786f, + -0.005856f, 0.006573f, 0.003876f, -0.003983f, 0.00411f, 0.0076f, -0.0008364f, -0.00496f, 0.008026f, + -0.00986f, -0.001429f, -0.007236f, -0.002172f, -0.003004f, -0.0017185f, -0.00353f, -0.00817f, -0.004353f, + -0.003458f, 0.002663f, -0.00599f, 0.002125f, -0.00625f, -0.00913f, -0.009796f, -0.004574f, -0.00978f, + -0.00398f, -0.006096f, 0.003708f, 0.007214f, 0.00444f, 0.003742f, 0.004547f, 0.006042f, 0.001542f, + 0.002424f, 0.0005617f, 0.006477f, -0.002382f, 0.0009637f, -0.00462f, -0.000934f, 0.0004268f, 0.00975f, + 0.002277f, 0.001031f, -0.007103f, 0.006615f, 0.00199f, 0.009f, 0.00995f, -0.002514f, -0.0016575f, + -0.00875f, 0.00936f, -0.007133f, 0.007412f, -0.001572f, -0.00862f, -0.00675f, 0.009445f, -0.00819f, + 0.004597f, -0.005493f, 0.004894f, -0.004807f, 0.00346f, -0.00114f, 0.006638f, -0.005882f, 0.0041f, + -0.002684f, -0.0006037f, -0.00842f, 0.001939f, -0.0008016f, 0.00265f, -0.005383f, 0.00963f, 0.0063f, + 0.006386f, 0.004463f, -0.004173f, -0.006317f, 0.003534f, -0.00781f, -0.001414f, -0.004723f, -0.003096f, + -0.001367f, 0.00955f, -0.0000178f, -0.007214f, 0.00985f, -0.003782f, 0.005688f, -0.002445f, 0.00185f, + 0.00784f, 0.00203f, 0.0003746f, -0.00935f, 0.00559f, 0.00718f, 0.005905f, 0.002926f, 0.006268f, + 0.0002078f, 0.001244f, 0.00467f, 0.006405f, -0.0005364f, 0.00503f, -0.0004387f, 0.006252f, -0.002594f, + 0.001791f, -0.00807f, -0.001451f, -0.0034f, 0.00958f, 0.003035f, -0.00348f, 0.004818f, 0.008644f, + -0.0005145f, -0.004673f, 0.008934f, 0.00756f, -0.001786f, -0.005634f, -0.002981f, -0.007107f, 0.001145f, + 0.003677f, 0.004997f, 0.009766f, 0.0005856f, -0.002384f, 0.004177f, -0.00965f, 0.005924f, -0.005596f, + 0.004505f, 0.000578f, 0.00663f, -0.006638f, 0.001535f, 0.002502f, 0.002907f, 0.00447f, 0.002016f, + 0.008865f, 0.00828f, -0.00975f, 0.0002487f, -0.00796f, -0.008286f, -0.002083f, -0.00471f, 0.007187f, + 0.004326f, 0.007206f, 0.004307f, 0.009346f, -0.00758f, -0.007545f, 0.00349f, 0.0018425f, -0.00837f, + -0.007935f, -0.002258f, 0.003757f, -0.0014f, 0.000081f, 0.00449f, -0.000318f, 0.006485f, -0.001184f, + -0.001842f, 0.009476f, 0.00818f, -0.00986f, 0.001612f, -0.00779f, 0.006676f, -0.0013075f, 0.00464f, + -0.002117f, -0.0087f, 0.00965f, 0.001394f, 0.00818f, -0.005493f, 0.004673f, -0.00439f, -0.00557f, + -0.001841f, -0.00948f, 0.00607f, 0.00551f, -0.002834f, 0.004883f, -0.00712f, 0.006573f, -0.002064f, + 0.0008054f, -0.006508f, 0.004467f, 0.00773f, 0.004787f, 0.00523f, -0.001751f, -0.005657f, 0.000278f, + -0.001822f, -0.00639f, -0.003477f, -0.006767f, -0.007782f, 0.005375f, -0.00726f, 0.007248f, 0.0008335f, + -0.001856f, -0.00009865f, -0.006054f, 0.006786f, -0.005665f, -0.007393f, -0.0007014f, -0.007046f, -0.0065f, + -0.00645f, 0.002195f, 0.004818f, 0.00909f, -0.00862f, 0.007614f, -0.00499f, 0.007423f, -0.001478f, + -0.005028f, -0.007107f, -0.00488f, 0.00322f, -0.003801f, 0.0018425f, 0.001862f, 0.007713f, -0.008675f, + 0.001135f, 0.00788f, -0.006866f, -0.00776f, 0.001423f, -0.00392f, -0.00908f, 0.00918f, -0.006706f, + -0.00828f, -0.00358f, -0.00956f, -0.00823f, 0.00656f, -0.00617f, -0.004395f, 0.002705f, -0.001398f, + 0.003265f, 0.007793f, 0.00664f, 0.009285f, 0.00851f, 0.00416f, -0.00923f, -0.006733f, 0.00934f, + -0.00564f, -0.001064f, 0.001106f, 0.00943f, 0.005024f, 0.00793f, -0.005302f, -0.00376f, -0.0005045f, + 0.005325f, -0.002134f, -0.001494f, -0.00891f, -0.00803f, 0.00958f, -0.0000229f, -0.003668f, 0.00602f, + -0.003649f, -0.002918f, 0.006573f, 0.005146f, -0.009995f, 0.00864f, -0.008255f, 0.004868f, 0.001078f, + -0.003546f, 0.00235f, 0.005764f, -0.005116f, 0.009186f, -0.008255f, -0.00216f, -0.008f, -0.009125f, + -0.002754f, -0.0083f, -0.002539f, -0.0007524f, -0.00843f, 0.003647f, -0.00156f, 0.00498f, -0.007904f, + -0.00502f, 0.00919f, 0.003862f, 0.00599f, 0.001332f, -0.00788f, 0.007374f, 0.001653f, -0.00406f, + -0.008545f, -0.00444f, -0.00971f, -0.002436f, -0.009834f, -0.005573f, -0.002323f, -0.007126f, 0.004803f, + -0.00913f, 0.002483f, -0.004704f, -0.0014515f, -0.001035f, -0.008934f, -0.001855f, -0.0071f, 0.00979f, + -0.008255f, 0.001663f, -0.001383f, 0.000364f, -0.003595f, -0.002163f, 0.002136f, 0.004894f, 0.006966f, + 0.00925f, 0.006557f, -0.0089f, -0.0007167f, 0.002699f, 0.003483f, 0.003017f, 0.004223f, 0.006042f, + -0.002342f, -0.004868f, 0.003157f, 0.006165f, 0.001519f, -0.00874f, -0.004856f, -0.004116f, 0.002634f, + -0.001233f, -0.008736f, 0.003529f, -0.001974f, 0.00121f, -0.0006013f, -0.002737f, -0.00596f, 0.007027f, + -0.00496f, -0.002726f, -0.00787f, 0.001581f, 0.00381f, -0.004932f, 0.007027f, -0.003616f, -0.000989f, + 0.003532f, 0.002346f, 0.0000479f, 0.002907f, -0.004353f, 0.005424f, 0.003124f, 0.00985f, 0.003f, + -0.007805f, 0.001684f, -0.001324f, 0.0005107f, 0.00483f, -0.00992f, 0.000786f, -0.003649f, -0.0006337f, + -0.001443f, 0.00782f, 0.008194f, -0.00819f, -0.00844f, -0.004906f, -0.006355f, 0.002932f, 0.004242f, + 0.000638f, -0.00259f, 0.00585f, -0.00864f, 0.00378f, -0.00279f, -0.00319f, -0.001805f, -0.002768f, + -0.0007725f, -0.004875f, 0.003784f, 0.00947f, -0.008736f, 0.003262f, -0.00325f, -0.003826f, 0.007904f, + 0.00002706f, 0.006187f, -0.001488f, -0.001711f, -0.003317f, 0.007446f, -0.00699f, -0.005573f, 0.00164f, + 0.00938f, 0.0002334f, 0.003819f, -0.001427f, 0.00992f, -0.003433f, -0.0006833f, -0.00492f, 0.005493f, + 0.003014f, -0.006187f, -0.002325f, 0.00741f, -0.009056f, 0.005604f, -0.003874f, 0.00869f, 0.0001504f, + 0.005356f, 0.001178f, 0.00786f, 0.003292f, 0.00947f, -0.002808f, -0.00424f, -0.00999f, 0.004818f, + 0.00372f, -0.003748f, 0.001496f, 0.009796f, 0.0000038f, 0.00379f, 0.0003746f, -0.004147f, 0.007195f, + -0.0095f, 0.001072f, 0.002129f, 0.00889f, 0.003273f, 0.006958f, -0.004894f, 0.0006795f, 0.00892f, + -0.004356f, 0.00594f, -0.002378f, 0.00969f, -0.0081f, 0.0003927f, 0.00789f, 0.00343f, 0.00479f, + -0.0005517f, -0.00652f, 0.000332f, 0.00876f, -0.001309f, -0.002495f, -0.00831f, 0.007786f, -0.00512f, + -0.003832f, -0.0006423f, -0.003162f, 0.00807f, -0.006298f, -0.003601f, 0.002438f, 0.0017395f, 0.002686f, + -0.001712f, 0.00424f, 0.00632f, -0.00935f, 0.000598f, 0.005714f, -0.00921f, -0.002935f, 0.008064f, + -0.001802f, -0.002634f, -0.006786f, 0.00976f, 0.00867f, 0.004066f, 0.002306f, 0.001495f, -0.0003717f, + -0.00597f, 0.00958f, -0.00881f, 0.00856f, -0.00538f, -0.008575f, -0.003626f, 0.006702f, 0.00932f, + 0.001552f, 0.0006847f, 0.00159f, 0.002314f, 0.008606f, 0.005955f, 0.00862f, 0.0003278f, 0.003115f, + -0.006863f, -0.0051f, -0.00824f, 0.00592f, -0.005653f, 0.00871f, -0.008286f, 0.0005655f, -0.005154f, + -0.008766f, 0.008896f, -0.009674f, 0.003782f, -0.000774f, 0.00323f, -0.00935f, 0.007694f, -0.003578f, + -0.00912f, 0.007362f, -0.00561f, 0.00817f, -0.00852f, -0.00006425f, -0.003166f, 0.0004108f, 0.006325f, + -0.00928f, -0.008026f, -0.003891f, -0.005924f, -0.004284f, 0.00515f, -0.00749f, 0.002983f, 0.003885f, + 0.006535f, -0.001574f, 0.005695f, -0.009155f, -0.006996f, -0.0012665f, 0.002983f, -0.00932f, -0.00575f, + -0.008545f, -0.0005817f, 0.002466f, -0.003382f, 0.007477f, 0.00166f, 0.004562f, -0.001331f, -0.0095f, + -0.00291f, 0.002815f, -0.009796f, -0.00496f, 0.005592f, -0.00365f, -0.00609f, 0.0008597f, 0.00516f, + 0.003986f, 0.002157f, 0.00934f, -0.003363f, 0.000835f, 0.003725f, 0.002106f, -0.005993f, 0.00795f, + 0.003122f, -0.003313f, -0.005383f, 0.0004141f, 0.006466f, 0.003517f, -0.00809f, 0.005714f, -0.007294f, + -0.001924f, -0.002457f, -0.001897f, -0.001449f, 0.00543f, 0.000466f, 0.008125f, -0.002316f, 0.003128f, + -0.008255f, -0.001908f, 0.00911f, 0.00793f, -0.001612f, -0.00899f, -0.004013f, -0.002962f, 0.001639f, + -0.006916f, -0.009056f, -0.005795f, -0.001411f, -0.00745f, 0.003126f, 0.000916f, -0.0007496f, 0.003273f, + 0.005184f, 0.004128f, 0.003195f, -0.004635f, 0.004826f, 0.00745f, 0.006348f, -0.008865f, -0.00217f, + 0.006275f, -0.00971f, 0.005478f, -0.003456f, 0.0065f, 0.00943f, -0.005703f, 0.002666f, -0.005745f, + -0.006134f, 0.003513f, 0.00683f, -0.004803f, -0.003841f, -0.006435f, -0.007122f, 0.001902f, 0.005844f, + 0.007313f, 0.004723f, 0.001233f, -0.00402f, 0.001288f, 0.002878f, 0.004196f, -0.002884f, -0.007454f, + 0.000933f, -0.003576f, -0.005608f, -0.00908f, 0.00426f, 0.001788f, -0.004856f, -0.008965f, -0.00546f, + -0.004684f, -0.002708f, -0.006145f, 0.002111f, -0.000599f, -0.007187f, -0.002018f, -0.001014f, -0.006676f, + -0.00335f, -0.00528f, -0.009224f, -0.009285f, -0.00063f, -0.0045f, -0.005157f, 0.008865f, 0.008835f, + -0.00672f, 0.002237f, 0.002687f, 0.005703f, 0.00585f, 0.007175f, -0.007496f, 0.0002145f, 0.00924f, + -0.00611f, -0.003202f, -0.0057f, -0.001237f, 0.006752f, 0.001596f, -0.001424f, 0.007492f, 0.00459f, + -0.00668f, -0.001726f, 0.00209f, 0.001924f, 0.0008316f, 0.0004334f, 0.001638f, 0.005665f, 0.000911f, + -0.00552f, 0.00619f, -0.00979f, 0.00549f, 0.004967f, 0.00818f, -0.006157f, -0.00816f, 0.001334f, + 0.0002472f, 0.00653f, 0.005257f, 0.0000934f, -0.00261f, 0.00755f, 0.000494f, 0.001341f, 0.00236f, + -0.00876f, 0.005054f, -0.00503f, 0.007465f, -0.005676f, 0.003174f, -0.006325f, -0.005238f, -0.005608f, + 0.0002413f, -0.003477f, -0.00379f, -0.002457f, 0.002943f, -0.006855f, 0.001733f, 0.006504f, -0.004406f, + -0.00929f, -0.00009567f, 0.000722f, 0.001004f, -0.00633f, 0.001915f, -0.001345f, -0.002802f, -0.00858f, + -0.001694f, -0.000937f, 0.004486f, -0.00567f, 0.000247f, 0.007782f, -0.0036f, -0.003588f, 0.00717f, + -0.00928f, 0.00838f, -0.0063f, 0.00916f, 0.005352f, 0.00736f, 0.00083f, -0.007248f, -0.005722f, + 0.00325f, -0.00503f, 0.001647f, 0.007767f, -0.00539f, 0.0065f, -0.002151f, 0.003359f, 0.0002371f, + -0.007057f, 0.000602f, 0.00692f, -0.008415f, -0.001443f, 0.006783f, -0.00778f, 0.00946f, -0.002735f, + -0.006832f, 0.00419f, -0.009315f, 0.00963f, -0.003994f, -0.00833f, 0.00411f, 0.0076f, 0.005817f, + -0.001542f, -0.003956f, 0.004513f, 0.001667f, -0.002378f, -0.003075f, 0.002481f, -0.001739f, -0.005566f, + -0.002113f, 0.003263f, -0.00797f, -0.008675f, 0.006916f, 0.002848f, 0.008446f, -0.004627f, -0.002216f, + -0.0005455f, -0.00882f, 0.00846f, 0.001422f, -0.000527f, -0.00826f, 0.0012245f, 0.006226f, -0.008316f, + 0.002134f, -0.006298f, 0.00672f, -0.008026f, 0.003248f, 0.0046f, 0.001113f, 0.000221f, 0.000791f, + 0.00836f, 0.007805f, 0.006355f, 0.004723f, 0.000991f, -0.00904f, 0.007164f, 0.00896f, 0.00788f, + 0.004128f, -0.003473f, -0.00242f, 0.003466f, 0.003286f, 0.002634f, 0.009865f, 0.006947f, -0.0004823f, + -0.005455f, 0.003603f, 0.002008f, -0.004536f, 0.006187f, 0.005722f, -0.00010717f, 0.00227f, 0.00967f, + -0.004883f, -0.0011015f, 0.009285f, 0.002121f, -0.006718f, 0.00782f, 0.00481f, 0.002974f, -0.002855f, + -0.001182f, -0.000961f, -0.002497f, -0.005707f, -0.00536f, -0.000726f, -0.004868f, -0.000473f, -0.002764f, + 0.0002033f, -0.00961f, -0.00828f, -0.001335f, 0.005314f, 0.007263f, 0.005386f, -0.0006895f, 0.00444f, + -0.00443f, 0.001597f, 0.00753f, 0.005608f, 0.002354f, 0.00399f, 0.003551f, 0.0035f, 0.00319f, + 0.0017185f, -0.006195f, -0.004467f, 0.006042f, -0.007217f, -0.00907f, 0.004025f, -0.00671f, -0.002226f, + -0.00557f, 0.000518f, -0.00805f, 0.008865f, -0.007195f, -0.004032f, -0.005047f, 0.007072f, -0.003544f, + -0.00706f, -0.000232f, -0.00829f, -0.00835f, -0.002449f, 0.002384f, -0.00886f, -0.00177f, -0.00641f, + 0.006733f, -0.001213f, -0.005184f, 0.009995f, 0.006573f, 0.003773f, -0.00962f, 0.003693f, 0.003815f, + 0.004353f, 0.00224f, 0.0003662f, 0.007187f, 0.00817f, -0.002918f, -0.006615f, 0.00834f, 0.002783f, + -0.000913f, 0.004993f, -0.006687f, -0.008224f, 0.00864f, -0.000776f, -0.003668f, 0.002398f, 0.001138f, + 0.001902f, -0.004894f, 0.00398f, 0.001741f, -0.00922f, 0.002316f, 0.0000156f, 0.00923f, -0.004314f, + 0.00844f, -0.002323f, -0.001928f, 0.006115f, 0.006283f, -0.001401f, -0.006443f, 0.00693f, 0.007225f, + 0.0005593f, -0.00996f, -0.00842f, -0.001854f, 0.001111f, 0.00157f, -0.003658f, -0.0003986f, 0.005455f, + 0.004204f, -0.006065f, 0.00812f, -0.00642f, -0.004932f, -0.00778f, 0.004032f, 0.005814f, 0.00329f, + -0.007164f, -0.00576f, 0.002708f, -0.005424f, -0.006355f, -0.003983f, -0.006695f, -0.00661f, 0.005814f, + -0.007137f, -0.00739f, -0.001341f, 0.000845f, 0.000429f, -0.002764f, 0.006496f, 0.00785f, -0.00622f, + 0.003235f, 0.00425f, -0.00612f, 0.00803f, 0.007404f, -0.001365f, 0.002625f, 0.001886f, 0.003359f, + -0.00518f, -0.002394f, 0.00475f, 0.003391f, 0.00693f, -0.002079f, -0.000818f, -0.002357f, -0.005272f, + -0.002317f, -0.000729f, 0.004074f, 0.005486f, 0.006023f, -0.006363f, 0.00527f, -0.003586f, -0.00925f, + 0.003809f, 0.00087f, 0.007133f, -0.001788f, 0.002201f, 0.00955f, 0.003735f, 0.007324f, -0.00614f, + -0.007187f, -0.006783f, -0.006145f, -0.004665f, 0.007175f, 0.00984f, 0.00314f, 0.008064f, 0.007336f, + -0.00337f, -0.00559f, 0.004944f, -0.007744f, -0.00197f, -0.006714f, -0.002281f, -0.002087f, 0.0009074f, + -0.00753f, 0.004993f, 0.00319f, -0.002535f, -0.001945f, 0.0008793f, -0.003357f, 0.004246f, -0.00838f, + 0.007698f, 0.001307f, 0.001717f, 0.00824f, -0.001335f, -0.0002145f, 0.00561f, -0.007168f, -0.001333f, + -0.00551f, -0.003637f, -0.007786f, 0.001738f, 0.007748f, 0.001321f, -0.001924f, 0.006046f, -0.009125f, + 0.009674f, 0.006313f, 0.002666f, 0.002287f, -0.00956f, -0.004803f, -0.008675f, 0.003038f, -0.00514f, + 0.00935f, 0.006756f, 0.004425f, 0.002203f, 0.00642f, 0.004555f, 0.00657f, 0.00157f, 0.00652f, + -0.000512f, 0.003416f, 0.00883f, -0.003372f, -0.001136f, -0.00302f, 0.007435f, -0.00564f, 0.001519f, + -0.007687f, -0.00783f, -0.008736f, 0.003899f, -0.00231f, 0.006927f, 0.00558f, -0.007786f, 0.008156f, + 0.004417f, -0.004173f, 0.008865f, 0.004707f, 0.002438f, -0.008896f, 0.00009686f, -0.00338f, 0.002985f, + 0.0000722f, 0.004047f, 0.00991f, 0.00222f, 0.00381f, -0.003147f, 0.0081f, 0.00392f, 0.001678f, + -0.00647f, 0.00942f, -0.002876f, -0.001987f, -0.00758f, -0.003983f, -0.00814f, 0.00255f, -0.001071f, + 0.006855f, -0.00676f, -0.00801f, 0.00399f, 0.002998f, 0.003906f, -0.002068f, 0.005444f, -0.003128f, + 0.001452f, -0.000623f, 0.007122f, -0.003498f, -0.000979f, -0.003366f, -0.001828f, 0.004135f, 0.006786f, + -0.003593f, -0.00814f, -0.00749f, -0.004894f, 0.009445f, -0.00828f, -0.005108f, -0.005836f, -0.002945f, + -0.008125f, -0.001417f, -0.003443f, 0.00201f, 0.001321f, 0.00578f, 0.00224f, -0.00895f, -0.001515f, + -0.008194f, 0.00883f, -0.000655f, -0.00831f, 0.005695f, 0.00663f, 0.00704f, -0.00393f, 0.003603f, + -0.005608f, 0.00107f, -0.00902f, -0.0001382f, 0.006287f, 0.006393f, 0.0005302f, 0.00898f, 0.00172f, + 0.0033f, -0.001728f, -0.004436f, 0.006794f, 0.001925f, -0.00698f, 0.002726f, -0.00372f, 0.003744f, + 0.007004f, 0.002556f, -0.00895f, -0.005096f, 0.003044f, -0.002342f, -0.00802f, 0.0067f, 0.006172f, + 0.0005546f, 0.009f, 0.006405f, 0.003557f, -0.006527f, 0.002508f, -0.002115f, -0.00497f, 0.004852f, + 0.002605f, 0.009155f, -0.00941f, 0.000894f, -0.00825f, 0.005333f, 0.006023f, -0.001292f, 0.009445f, + -0.007217f, 0.003368f, -0.007156f, -0.006386f, -0.00293f, 0.00218f, -0.00803f, 0.00927f, 0.008965f, + 0.001402f, 0.00525f, -0.00784f, 0.00418f, -0.00978f, -0.003138f, 0.002974f, 0.001657f, -0.009834f, + 0.001901f, -0.00948f, 0.005455f, -0.001604f, 0.00559f, 0.006447f, 0.0008035f, -0.002773f, 0.006332f, + -0.00896f, 0.00488f, 0.004177f, -0.00319f, 0.00708f, 0.0003064f, -0.0007687f, -0.003065f, 0.005558f, + -0.003864f, 0.003887f, -0.00855f, 0.006237f, 0.008415f, -0.002693f, -0.002817f, -0.00904f, 0.003407f, + 0.000946f, -0.00738f, -0.00562f, -0.0009713f, -0.003506f, -0.00766f, 0.00953f, -0.004005f, 0.00867f, + 0.0004733f, -0.005787f, 0.0005293f, 0.006996f, 0.001659f, 0.000469f, 0.001537f, 0.002247f, -0.004242f, + 0.00243f, -0.004093f, -0.007355f, -0.001f, 0.006374f, -0.004963f, 0.006035f, 0.005245f, -0.00839f, + 0.002262f, -0.008286f, 0.00845f, 0.00911f, -0.001388f, -0.001848f, -0.0008616f, 0.006363f, 0.002584f, + -0.002827f, -0.00755f, -0.009834f, 0.002735f, -0.001286f, 0.006f, 0.001821f, -0.001493f, -0.00819f, + -0.0003796f, 0.008606f, 0.000496f, 0.001856f, -0.00668f, -0.009186f, -0.00736f, 0.0048f, -0.003502f, + 0.001626f, -0.0001339f, -0.006126f, -0.00596f, -0.0001252f, 0.001953f, 0.009575f, -0.001304f, 0.004192f, + -0.006035f, -0.001251f, 0.007587f, 0.001031f, -0.00928f, 0.00793f, 0.00653f, 0.0007644f, -0.002647f, + 0.003609f, -0.00461f, 0.000423f, -0.000656f, 0.005367f, -0.00425f, 0.004215f, 0.006554f, 0.005634f, + -0.001172f, 0.00472f, -0.0002402f, 0.003582f, 0.00738f, 0.00301f, 0.005417f, 0.009254f, 0.007145f, + -0.0094f, 0.000404f, 0.00837f, -0.00894f, 0.004658f, 0.0004907f, -0.001399f, -0.00873f, 0.0008955f, + -0.001738f, -0.001934f, 0.003742f, 0.002077f, -0.004063f, -0.007736f, -0.001259f, 0.00867f, 0.00488f, + 0.006584f, -0.00822f, -0.00585f, 0.006927f, -0.003298f, -0.004593f, 0.000567f, -0.004543f, -0.007378f, + 0.00718f, -0.00876f, 0.005707f, 0.00701f, 0.001537f, 0.005993f, -0.0044f, 0.00847f, 0.00694f, + 0.00419f, -0.00511f, 0.00535f, 0.000936f, -0.0007434f, 0.001556f, -0.0008616f, -0.0085f, 0.003342f, + 0.00982f, 0.005077f, 0.005566f, -0.003716f, 0.00839f, 0.007786f, -0.00749f, -0.007614f, -0.00774f, + 0.00209f, 0.005894f, -0.007534f, 0.003998f, -0.00518f, -0.00033f, -0.00831f, -0.00556f, 0.004837f, + -0.001809f, -0.00423f, 0.00916f, -0.006786f, 0.009476f, 0.00841f, -0.000718f, 0.002834f, -0.00947f, + 0.0001942f, -0.007904f, -0.003672f, -0.001356f, -0.004658f, -0.005825f, 0.002747f, -0.00737f, 0.00845f, + 0.005226f, -0.002941f, -0.005226f, -0.00415f, 0.00848f, 0.0007825f, -0.005276f, 0.003502f, -0.005974f, + 0.00866f, -0.0076f, 0.003042f, -0.003267f, -0.00536f, -0.006935f, 0.007515f, 0.008255f, 0.003098f, + -0.007183f, 0.007355f, -0.00878f, -0.0001291f, -0.0009227f, 0.000577f, 0.00787f, 0.003855f, 0.005337f, + -0.004837f, 0.005676f, 0.004658f, -0.00798f, 0.006424f, -0.007534f, 0.002682f, -0.003042f, 0.00868f, + -0.003332f, 0.00318f, 0.00199f, 0.001096f, 0.00871f, 0.005028f, -0.001416f, 0.006233f, -0.007736f, + 0.00808f, -0.001244f, 0.001611f, 0.005127f, 0.00781f, -0.003036f, -0.00453f, -0.00516f, 0.007233f, + -0.001684f, -0.002474f, 0.002844f, -0.00723f, -0.002401f, 0.0015f, -0.005444f, -0.003035f, -0.00929f, + 0.00947f, 0.00247f, 0.004017f, 0.0008864f, -0.003862f, 0.0062f, -0.00172f, -0.00449f, 0.00796f, + 0.009445f, 0.007687f, -0.007034f, -0.001731f, -0.00585f, -0.005653f, -0.002281f, 0.004925f, -0.006744f, + -0.002542f, 0.005775f, 0.00861f, 0.003054f, 0.00666f, -0.00694f, -0.00822f, -0.001123f, 0.006557f, + -0.00476f, 0.006397f, 0.00957f, 0.00888f, -0.003952f, -0.006313f, 0.001164f, 0.001948f, -0.00758f, + 0.007263f, -0.00801f, 0.00924f, 0.009476f, -0.00979f, 0.007748f, -0.00533f, 0.006195f, 0.00659f, + 0.003437f, 0.00546f, -0.00859f, 0.002409f, -0.006824f, -0.006172f, 0.00663f, 0.004215f, 0.00291f, + 0.001303f, -0.007786f, -0.000654f, 0.00965f, -0.002867f, 0.002117f, 0.00484f, -0.002012f, -0.004826f, + -0.00801f, -0.00259f, 0.002625f, -0.000174f, 0.006844f, -0.005554f, -0.001617f, 0.00741f, -0.00145f, + -0.001762f, 0.005222f, 0.001931f, 0.006676f, -0.002014f, 0.005676f, -0.001987f, 0.003426f, -0.00088f, + 0.002485f, -0.007698f, -0.00604f, 0.006687f, -0.003902f, -0.00783f, -0.00817f, 0.00841f, 0.006134f, + -0.00659f, -0.004807f, 0.00649f, -0.00855f, -0.00605f, -0.003489f, 0.00594f, -0.00818f, -0.001544f, + 0.003778f, 0.00706f, -0.0002632f, 0.005882f, 0.003763f, 0.003439f, 0.00872f, 0.004265f, 0.00522f, + -0.00886f, -0.00803f, -0.0003037f, -0.00807f, -0.006756f, 0.00789f, -0.00428f, -0.000516f, 0.005196f, + -0.00981f, 0.00926f, -0.007507f, -0.00952f, -0.00259f, -0.003004f, 0.00828f, -0.000515f, -0.00759f, + -0.002186f, -0.00375f, -0.00902f, 0.002289f, -0.002497f, 0.00996f, 0.004932f, -0.00803f, -0.00785f, + 0.00993f, -0.007694f, 0.000255f, -0.0002395f, -0.005318f, 0.005173f, 0.00518f, -0.007427f, 0.00505f, + 0.008545f, -0.00238f, -0.002556f, 0.00932f, 0.009094f, -0.002436f, -0.00971f, 0.000679f, 0.00931f, + -0.00531f, 0.003595f, 0.0065f, -0.001422f, 0.002657f, 0.00864f, 0.001987f, -0.001189f, -0.0007544f, + 0.0002537f, -0.003994f, -0.00898f, -0.00314f, -0.00829f, 0.006683f, -0.006706f, -0.005634f, 0.00001407f, + 0.006878f, 0.004093f, 0.001739f, -0.003754f, 0.006306f, -0.001363f, -0.00145f, -0.00985f, -0.003508f, + -0.007454f, 0.00352f, -0.004467f, -0.00601f, -0.007763f, -0.00894f, 0.00583f, -0.00698f, 0.0099f, + -0.006313f, 0.00404f, -0.002666f, -0.00373f, 0.004604f, -0.00813f, -0.006283f, 0.004066f, -0.00592f, + -0.0003827f, -0.002565f, 0.006275f, 0.008705f, -0.007404f, 0.00793f, -0.0009556f, 0.001682f, 0.00866f, + 0.00774f, 0.00332f, 0.0008507f, -0.005215f, -0.00757f, -0.001497f, 0.005787f, 0.001453f, -0.001265f, + -0.00909f, 0.006832f, 0.00836f, 0.002867f, 0.002851f, 0.002344f, 0.001552f, -0.0006785f, -0.00941f, + -0.007114f, -0.003008f, 0.002539f, 0.0002484f, -0.00774f, 0.000987f, 0.00991f, 0.00611f, 0.0009437f, + -0.001054f, 0.000739f, 0.00809f, -0.003117f, -0.007812f, -0.001368f, -0.009674f, -0.001733f, 0.006268f, + 0.003513f, 0.00852f, -0.007652f, 0.004547f, -0.0001137f, 0.003424f, 0.000804f, -0.003584f, -0.00599f, + -0.005333f, -0.00303f, 0.004303f, 0.009f, -0.0006638f, -0.0008726f, 0.007774f, -0.0000234f, -0.0002577f, + 0.005783f, -0.008316f, -0.00841f, -0.003605f, 0.001991f, 0.006767f, 0.00508f, 0.00787f, 0.003464f, + 0.00908f, 0.007133f, 0.007504f, -0.00896f, 0.000183f, -0.00929f, -0.0009255f, -0.0034f, -0.00848f, + 0.002066f, 0.0002947f, 0.005394f, 0.002613f, 0.00701f, -0.00833f, -0.001219f, 0.004704f, 0.00446f, + -0.00775f, 0.00476f, -0.007195f, -0.00163f, -0.003307f, -0.007484f, -0.00889f, -0.00846f, 0.008156f, + -0.002731f, 0.005733f, 0.0099f, -0.00276f, -0.00869f, -0.00962f, -0.00841f, -0.004955f, 0.004997f, + 0.008896f, 0.00907f, -0.000695f, 0.00972f, 0.00685f, 0.004505f, -0.00726f, -0.003025f, -0.002087f, + 0.00797f, 0.006016f, -0.006485f, -0.00491f, 0.001922f, -0.00934f, 0.006355f, -0.0004008f, -0.005714f, + 0.002274f, -0.005512f, 0.005424f, -0.0003483f, 0.001698f, 0.0006733f, 0.00815f, -0.005264f, 0.002876f, + -0.0000476f, -0.003105f, -0.001815f, -0.00997f, 0.0004442f, -0.00557f, -0.007656f, -0.003036f, 0.002333f, + -0.001329f, 0.003675f, -0.00706f, -0.00807f, 0.001302f, -0.00788f, 0.003828f, -0.00995f, -0.006676f, + -0.001514f, -0.005756f, -0.001301f, 0.002438f, 0.007313f, 0.00913f, 0.003407f, -0.002222f, 0.00981f, + 0.0012245f, 0.009155f, 0.008194f, -0.004368f, -0.006615f, -0.0008593f, -0.00582f, 0.003933f, 0.005173f, + -0.001201f, 0.002068f, -0.00915f, 0.00797f, -0.002686f, -0.00958f, 0.005775f, 0.002453f, -0.003305f, + 0.00697f, 0.0001255f, 0.00218f, 0.009926f, -0.007473f, 0.007965f, 0.0066f, -0.003874f, 0.00658f, + -0.007618f, 0.000942f, 0.002375f, -0.007053f, -0.003815f, 0.00569f, -0.001039f, 0.004536f, 0.003641f, + 0.004314f, -0.003353f, 0.00857f, -0.0006385f, -0.000856f, -0.007175f, 0.007557f, -0.00978f, 0.002863f, + -0.005424f, 0.005215f, -0.000666f, -0.006275f, 0.005527f, 0.00827f, -0.006187f, -0.005993f, 0.000444f, + -0.0001373f, 0.00458f, 0.009315f, -0.005093f, -0.00154f, 0.002647f, 0.00586f, 0.007473f, -0.00275f, + 0.00046f, 0.008965f, -0.0002766f, 0.00485f, -0.00974f, 0.001143f, -0.00859f, -0.00027f, 0.007748f, + -0.00341f, -0.006992f, -0.006664f, 0.0005536f, 0.00828f, -0.003752f, 0.000553f, 0.008575f, 0.004868f, + -0.0004208f, -0.001359f, 0.002785f, 0.00247f, 0.0002398f, 0.00441f, -0.007866f, -0.00444f, 0.000598f, + 0.00985f, 0.0041f, 0.001188f, -0.00271f, -0.003817f, -0.0008373f, -0.004078f, 0.00927f, -0.002739f, + -0.004578f, 0.004482f, 0.000669f, -0.003761f, -0.00921f, -0.003477f, -0.00516f, -0.00893f, 0.0007854f, + 0.00305f, 0.004894f, 0.00165f, -0.009834f, -0.00859f, 0.000812f, -0.007256f, -0.00276f, -0.003006f, + 0.001255f, -0.002705f, 0.005894f, 0.00904f, 0.004845f, 0.00814f, -0.003206f, 0.007042f, -0.003756f, + -0.003365f, -0.00868f, 0.00358f, -0.009514f, 0.00952f, -0.005753f, 0.00848f, 0.003448f, 0.006912f, + -0.001069f, -0.0006742f, 0.00974f, -0.001088f, -0.0004857f, 0.00841f, 0.006027f, -0.00606f, -0.001904f, + -0.006058f, -0.004673f, 0.007572f, -0.009674f, -0.008896f, -0.002888f, -0.00806f, 0.00633f, -0.000787f, + -0.002151f, 0.002234f, -0.00991f, 0.00663f, -0.00541f, -0.006706f, -0.00598f, -0.00592f, 0.0001597f, + 0.001887f, -0.00104f, 0.00994f, 0.0083f, -0.009415f, -0.00954f, 0.0003498f, -0.009254f, 0.002195f, + 0.003555f, -0.007557f, 0.006336f, -0.00789f, -0.006927f, 0.005497f, -0.003809f, -0.002302f, -0.00952f, + -0.0007987f, -0.001707f, 0.00007784f, -0.006718f, -0.005337f, 0.008934f, 0.006355f, 0.006626f, 0.00514f, + 0.006844f, -0.005447f, -0.001604f, -0.0008254f, -0.004185f, -0.006702f, -0.001056f, -0.00847f, -0.005917f, + -0.002684f, -0.00482f, -0.009514f, 0.004032f, 0.003906f, 0.0048f, -0.004612f, 0.000876f, -0.00497f, + 0.008415f, -0.00986f, -0.00565f, -0.000717f, -0.003967f, -0.006863f, 0.00825f, -0.003292f, -0.00966f, + 0.00263f, 0.001377f, -0.0084f, 0.004414f, -0.0054f, 0.00609f, -0.009026f, -0.000778f, -0.008385f, + 0.008286f, -0.00352f, 0.00549f, 0.00738f, -0.007515f, -0.002409f, -0.00558f, -0.003153f, -0.005985f, + -0.00919f, 0.00001955f, 0.004105f, -0.0009418f, 0.001782f, 0.0007043f, -0.00539f, -0.004562f, -0.003515f, + -0.00916f, -0.00623f, 0.0002017f, -0.003117f, 0.00392f, 0.00738f, 0.001152f, -0.00806f, -0.005108f, + 0.00985f, -0.001203f, 0.00719f, 0.001182f, -0.0002191f, -0.00661f, -0.003593f, -0.001818f, 0.00765f, + 0.004604f, -0.005318f, -0.0009274f, 0.002466f, -0.0003357f, 0.00783f, -0.006584f, -0.00664f, 0.003544f, + -0.002964f, -0.00983f, 0.001785f, -0.000708f, -0.00793f, 0.00785f, 0.006046f, 0.007812f, 0.0096f, + 0.00849f, -0.001343f, 0.00623f, -0.007465f, 0.001237f, -0.00393f, -0.0007534f, -0.004776f, -0.002806f, + 0.00451f, -0.004726f, 0.00364f, 0.002312f, -0.00561f, -0.00462f, -0.001799f, -0.0005593f, 0.00191f, + -0.002151f, -0.0076f, 0.001353f, 0.001949f, -0.004097f, 0.005615f, 0.002104f, 0.00746f, -0.00824f, + -0.006596f, 0.009285f, -0.008026f, 0.00331f, -0.008736f, -0.00988f, -0.002468f, 0.003393f, -0.007675f, + -0.00852f, 0.0067f, 0.00552f, 0.00002897f, 0.0002024f, -0.004135f, 0.003683f, -0.001939f, -0.002998f, + -0.006897f, -0.00462f, 0.00989f, 0.001207f, 0.001254f, -0.0008793f, -0.004036f, -0.00255f, 0.00871f, + 0.00695f, 0.00251f, 0.005455f, -0.00592f, -0.001793f, -0.0005703f, -0.00213f, 0.004787f, -0.0025f, + -0.00712f, -0.003109f, -0.0074f, 0.003607f, -0.003696f, -0.001566f, 0.007812f, -0.004433f, 0.001471f, + 0.004066f, -0.001959f, -0.001853f, -0.00985f, 0.006023f, 0.006184f, -0.00586f, -0.002455f, 0.007687f, + -0.003036f, -0.001865f, 0.0052f, -0.005646f, 0.002298f, -0.0049f, -0.001856f, -0.003754f, -0.003891f, + 0.00979f, 0.008415f, -0.00886f, 0.009926f, 0.001531f, -0.001119f, -0.004818f, 0.007763f, -0.004997f, + 0.009415f, 0.002409f, 0.00149f, 0.003786f, -0.001091f, -0.00852f, 0.00888f, 0.0092f, 0.004227f, + 0.004055f, -0.001675f, -0.004677f, 0.003109f, 0.006733f, 0.00538f, 0.0086f, 0.002913f, -0.00939f, + -0.006355f, 0.00495f, -0.007866f, 0.00885f, 0.005394f, -0.00323f, 0.00578f, -0.00476f, 0.006634f, + -0.00769f, 0.001916f, -0.001957f, 0.00988f, 0.004417f, -0.00677f, 0.007565f, 0.00842f, -0.00919f, + -0.0055f, 0.003214f, 0.00413f, -0.00813f, 0.002834f, 0.005272f, -0.00954f, 0.006275f, -0.00836f, + 0.00561f, 0.00951f, 0.004837f, 0.00753f, 0.000762f, -0.002527f, -0.003277f, -0.00522f, 0.003021f, + 0.00706f, -0.008f, -0.00916f, -0.002863f, 0.002209f, -0.00828f, 0.00499f, -0.001951f, -0.002157f, + 0.004375f, 0.006233f, -0.007336f, -0.0002134f, 0.004395f, -0.004135f, -0.00865f, 0.001095f, 0.003302f, + -0.00732f, 0.002275f, 0.00976f, 0.002602f, -0.003263f, 0.00766f, 0.003126f, 0.001476f, -0.001589f, + 0.00351f, 0.007305f, 0.00553f, 0.007236f, -0.005352f, -0.006542f, -0.002747f, -0.002932f, -0.002441f, + -0.008575f, -0.00934f, -0.00197f, -0.004387f, 0.001285f, 0.003265f, 0.001039f, 0.004814f, -0.001674f, + -0.00887f, 0.003067f, -0.007866f, 0.00903f, 0.003162f, -0.004402f, 0.00029f, 0.00928f, -0.002539f, + -0.003176f, 0.002398f, 0.004284f, 0.001891f, -0.000756f, 0.00846f, 0.00686f, 0.001065f, -0.008934f, + -0.00705f, 0.002884f, -0.006603f, -0.004486f, 0.00396f, -0.009766f, -0.003494f, 0.004738f, 0.00899f, + 0.006016f, 0.007515f, 0.003511f, -0.00786f, 0.00949f, -0.00682f, 0.004265f, 0.00728f, 0.0047f, + 0.00902f, -0.00474f, -0.0005236f, 0.005547f, -0.002396f, -0.006386f, -0.007904f, 0.00722f, 0.005135f, + 0.000564f, -0.003956f, -0.00997f, -0.00982f, 0.001334f, 0.001509f, -0.002422f, -0.001891f, 0.002316f, + 0.00309f, -0.006355f, 0.007336f, -0.00487f, 0.00010824f, -0.0008583f, 0.002853f, 0.003754f, -0.006348f, + 0.00793f, 0.00723f, -0.00981f, -0.003706f, 0.00317f, -0.008446f, -0.002966f, -0.0009055f, 0.002184f, + 0.003096f, 0.003244f, 0.009674f, 0.002132f, 0.0016165f, -0.006443f, -0.00423f, -0.00905f, 0.001218f, + 0.004185f, 0.00935f, -0.00193f, 0.00179f, 0.004192f, -0.006424f, 0.002945f, 0.0005383f, 0.004173f, + -0.001795f, 0.00803f, 0.006462f, -0.00502f, -0.003693f, 0.001283f, -0.001253f, 0.00715f, -0.002525f, + 0.00824f, -0.008995f, -0.00549f, 0.004345f, 0.002205f, 0.00827f, -0.004692f, -0.000714f, 0.00686f, + 0.003473f, 0.009636f, -0.001164f, -0.002003f, 0.00674f, -0.008224f, -0.00462f, 0.00948f, 0.002377f, + 0.00781f, 0.002586f, 0.00744f, -0.001399f, 0.003376f, 0.005226f, -0.003313f, 0.007713f, -0.004364f, + 0.0005984f, -0.004997f, 0.00611f, -0.00772f, 0.006653f, -0.002066f, 0.00196f, 0.004326f, 0.00797f, + -0.002724f, -0.005474f, 0.007782f, 0.00728f, 0.007442f, -0.002098f, 0.005306f, -0.007206f, -0.001974f, + 0.0000934f, -0.003695f, -0.007633f, 0.006306f, 0.006794f, -0.002983f, -0.00424f, 0.0018215f, 0.000337f, + -0.00849f, -0.00768f, 0.00659f, 0.002615f, -0.008514f, 0.00282f, 0.003607f, 0.009544f, 0.00924f, + 0.00949f, -0.006145f, -0.003231f, -0.001794f, 0.006004f, -0.0005646f, 0.005558f, 0.00455f, -0.005344f, + 0.003881f, -0.00979f, -0.00946f, -0.0007844f, 0.00922f, 0.001785f, 0.00854f, -0.0094f, -0.005318f, + 0.006126f, -0.0023f, -0.00576f, -0.00449f, -0.00931f, 0.006935f, -0.007477f, 0.001311f, 0.00797f, + 0.003727f, -0.000941f, -0.00816f, -0.00646f, -0.004032f, -0.002666f, 0.009735f, -0.007072f, -0.007362f, + 0.003067f, 0.007732f, 0.00457f, 0.001084f, -0.0085f, 0.00392f, 0.0006833f, -0.001245f, -0.00907f, + -0.00574f, -0.006786f, 0.005386f, -0.001034f, 0.00993f, 0.00913f, -0.001817f, 0.00613f, 0.002943f, + -0.00825f, -0.008804f, -0.00333f, -0.00754f, 0.00971f, -0.0002515f, 0.004715f, 0.006126f, 0.004963f, + 0.000591f, -0.00912f, -0.002254f, 0.0006866f, -0.00998f, 0.001433f, 0.00787f, -0.00933f, -0.004326f, + 0.00771f, 0.002146f, -0.006893f, -0.003952f, 0.001425f, -0.006123f, 0.00807f, -0.00702f, -0.006565f, + 0.001073f, 0.001927f, -0.004864f, 0.000273f, -0.008224f, 0.00826f, -0.001634f, -0.006905f, -0.00831f, + -0.00594f, -0.002901f, -0.001668f, -0.00987f, 0.006264f, -0.00452f, -0.00924f, 0.0096f, 0.001883f, + 0.005104f, 0.003798f, -0.00859f, 0.002163f, 0.000841f, 0.0001701f, -0.00549f, 0.008896f, -0.00641f, + -0.0086f, 0.0094f, -0.000762f, 0.000456f, 0.002989f, -0.002628f, -0.00817f, -0.000566f, 0.005928f, + -0.002151f, -0.004353f, -0.00403f, -0.0009055f, 0.00814f, -0.005325f, 0.001588f, -0.00841f, 0.001743f, + -0.00651f, -0.002144f, 0.007225f, -0.00623f, -0.002226f, -0.004345f, 0.007904f, -0.007748f, 0.001748f, + -0.003706f, -0.00867f, 0.00432f, -0.00954f, 0.0089f, -0.00607f, 0.00603f, 0.00857f, 0.003477f, + -0.0007524f, 0.000207f, -0.00069f, 0.00925f, -0.003777f, -0.0002985f, -0.001528f, 0.005077f, 0.007435f, + 0.005886f, -0.001046f, 0.00491f, -0.00346f, -0.00944f, 0.0085f, 0.00011885f, -0.007687f, 0.005142f, + -0.005444f, 0.005745f, 0.00565f, -0.005436f, 0.002954f, 0.0009327f, -0.001357f, -0.006035f, -0.0038f, + -0.00277f, 0.001201f, -0.006207f, 0.00892f, -0.00958f, 0.002432f, 0.009636f, -0.006413f, -0.000683f, + 0.000565f, 0.00664f, 0.006424f, 0.004097f, 0.00754f, -0.0082f, 0.002491f, 0.00003463f, -0.001084f, + 0.009895f, -0.001157f, -0.0044f, -0.003542f, -0.005615f, 0.00814f, -0.002285f, 0.009605f, 0.008865f, + 0.00906f, 0.0059f, -0.00735f, 0.0007353f, -0.00103f, -0.004868f, 0.007378f, 0.0074f, -0.001978f, + -0.00555f, -0.004807f, 0.006527f, -0.00968f, -0.001172f, -0.00988f, 0.00564f, 0.00213f, 0.004536f, + -0.001937f, 0.007717f, 0.00901f, -0.000779f, 0.003677f, -0.00831f, -0.005554f, -0.005386f, -0.00959f, + -0.00885f, 0.007416f, -0.00618f, 0.001828f, -0.0004594f, -0.0006585f, -0.009636f, 0.007168f, -0.00868f, + -0.00848f, -0.003803f, -0.00875f, 0.002884f, 0.0002168f, 0.005486f, 0.00989f, -0.00828f, 0.00000566f, + -0.00811f, -0.003649f, 0.003096f, 0.00365f, -0.002344f, -0.00879f, 0.006554f, -0.0003917f, 0.00814f, + -0.001268f, 0.00318f, 0.003078f, -0.002525f, -0.00848f, -0.0004594f, 0.003298f, 0.003225f, 0.002396f, + -0.00686f, -0.00503f, 0.007534f, 0.009636f, -0.00483f, -0.00788f, 0.004208f, 0.0003386f, -0.001907f, + 0.0008726f, 0.004757f, -0.00989f, -0.007004f, 0.0063f, -0.006622f, -0.00978f, 0.00899f, 0.002703f, + 0.00864f, -0.009964f, 0.00617f, 0.005688f, 0.00846f, 0.00576f, 0.00788f, 0.0002687f, 0.00853f, + -0.0002925f, -0.003065f, -0.0000076f, 0.007706f, 0.002523f, -0.00212f, -0.00532f, 0.007347f, 0.001383f, + -0.004616f, -0.008514f, -0.00672f, -0.00883f, 0.00195f, -0.003576f, -0.006306f, 0.005207f, -0.002554f, + -0.001393f, -0.005966f, 0.005707f, -0.001915f, -0.002625f, 0.007797f, 0.00756f, -0.003504f, -0.004597f, + -0.002932f, -0.006004f, -0.00928f, 0.006176f, 0.004486f, -0.00594f, -0.009476f, 0.006813f, -0.00312f, + -0.0014715f, 0.003428f, 0.00991f, -0.004757f, -0.0006704f, 0.001299f, 0.002937f, 0.005505f, 0.00843f, + -0.004585f, -0.00931f, 0.001348f, -0.008545f, 0.001818f, -0.002092f, -0.00689f, -0.009026f, 0.00949f, + 0.00166f, 0.000547f, -0.000135f, -0.000778f, -0.001905f, 0.002375f, 0.00974f, -0.004833f, 0.0094f, + 0.004898f, -0.00005084f, -0.001083f, -0.00499f, -0.00918f, -0.004326f, 0.001663f, 0.00681f, -0.003672f, + 0.00694f, -0.00438f, -0.007336f, 0.0089f, 0.00451f, -0.00564f, 0.00986f, 0.006157f, -0.00539f, + -0.00551f, 0.00947f, 0.00881f, 0.005436f, -0.008354f, -0.005894f, 0.002949f, 0.0009093f, -0.002594f, + -0.002369f, 0.00507f, -0.0088f, 0.0051f, -0.0004027f, 0.001238f, 0.00854f, 0.008804f, 0.0005126f, + 0.00786f, -0.001762f, -0.002861f, 0.001445f, -0.006268f, -0.002352f, -0.00737f, -0.006973f, 0.005512f, + 0.005188f, 0.00951f, -0.006603f, 0.002338f, -0.001549f, 0.000984f, 0.00819f, 0.002796f, -0.003716f, + -0.00731f, -0.004124f, -0.00725f, -0.002102f, 0.00493f, 0.00313f, -0.002922f, 0.0076f, 0.00537f, + -0.00929f, 0.00819f, 0.00932f, 0.00975f, 0.00345f, 0.001942f, 0.001167f, -0.003649f, -0.00787f, + 0.00857f, 0.00359f, 0.0015545f, -0.001327f, -0.00813f, 0.006893f, -0.00185f, -0.00689f, 0.00396f, + 0.003069f, -0.002464f, -0.003843f, 0.004967f, -0.00865f, -0.00503f, 0.003744f, 0.0003045f, 0.006298f, + 0.0011835f, 0.004654f, -0.00736f, -0.00171f, -0.00807f, -0.00462f, 0.00526f, 0.00905f, -0.006798f, + -0.0001366f, 0.00969f, -0.005116f, 0.007614f, -0.007317f, -0.0052f, 0.0007396f, 0.00735f, -0.00347f, + -0.002716f, 0.005177f, 0.003021f, -0.0026f, 0.00685f, -0.003214f, 0.001522f, -0.000601f, 0.00642f, + 0.002537f, 0.009705f, 0.0004787f, 0.00933f, 0.005848f, -0.00789f, -0.005962f, -0.003063f, 0.00734f, + 0.008644f, -0.00652f, 0.00389f, 0.00219f, -0.005104f, 0.004536f, 0.006638f, -0.00424f, -0.000966f, + -0.00242f, -0.003347f, 0.000761f, -0.006855f, -0.00816f, -0.00339f, 0.003853f, 0.00752f, 0.000502f, + 0.00394f, 0.00875f, -0.001621f, -0.00972f, -0.000609f, -0.00796f, -0.003817f, 0.004166f, 0.003754f, + -0.007385f, -0.001137f, -0.004467f, -0.001389f, 0.0093f, 0.003342f, -0.005795f, -0.00792f, 0.0082f, + 0.00557f, -0.00656f, 0.003494f, 0.002573f, 0.0014925f, -0.003141f, 0.002457f, 0.00789f, 0.0071f, + -0.004307f, 0.001407f, 0.000862f, -0.007122f, -0.005196f, -0.00306f, -0.00808f, -0.004246f, 0.00772f, + 0.006165f, 0.002718f, -0.00569f, -0.000952f, -0.005917f, 0.003725f, -0.0008345f, -0.00265f, -0.0063f, + 0.001651f, -0.00962f, 0.006016f, 0.005035f, -0.004337f, 0.00552f, 0.00373f, -0.0005794f, 0.00202f, + -0.006985f, -0.00747f, -0.001536f, -0.007122f, -0.00937f, -0.00641f, -0.00871f, -0.00182f, 0.0000921f, + 0.007484f, -0.00974f, 0.00521f, 0.001293f, 0.0006785f, -0.00888f, 0.005943f, -0.00055f, -0.00676f, + -0.0000759f, 0.00414f, 0.007065f, 0.0000026f, -0.003262f, -0.001492f, 0.00802f, 0.003487f, -0.00977f, + -0.006863f, -0.004192f, -0.007458f, -0.001814f, -0.004482f, 0.008835f, -0.004826f, 0.00872f, 0.004635f, + 0.007317f, -0.00498f, -0.003536f, -0.004375f, 0.005074f, -0.002346f, 0.00384f, 0.00853f, -0.00416f, + -0.007164f, 0.0006695f, 0.0008926f, -0.001899f, 0.005783f, 0.00535f, 0.00557f, -0.00402f, 0.00006354f, + -0.001951f, -0.002588f, -0.005276f, -0.001826f, -0.006058f, 0.001427f, -0.009735f, 0.009224f, -0.00006384f, + -0.002344f, -0.00004303f, 0.00946f, -0.00841f, -0.00199f, -0.00494f, -0.00841f, -0.008835f, 0.00596f, + -0.006348f, 0.007545f, 0.001068f, 0.00624f, -0.005306f, 0.001778f, -0.0009108f, -0.0048f, -0.000988f, + -0.0005326f, -0.005173f, 0.003748f, 0.001759f, -0.003914f, -0.006252f, 0.004486f, 0.00882f, 0.006035f, + -0.002064f, -0.003456f, -0.006615f, -0.004963f, 0.003847f, -0.00342f, 0.006115f, -0.005974f, 0.002302f, + -0.00856f, 0.006847f, -0.006416f, -0.00226f, 0.005363f, 0.008224f, -0.0003793f, -0.009224f, -0.002298f, + -0.005264f, -0.000623f, -0.00803f, -0.007706f, 0.001601f, 0.007046f, -0.004757f, 0.0044f, 0.0046f, + -0.003963f, -0.007156f, 0.0004344f, 0.005592f, -0.00053f, 0.001337f, 0.009186f, -0.00897f, -0.005627f, + -0.001647f, 0.0092f, 0.0016985f, -0.003633f, 0.008064f, 0.004543f, -0.00698f, -0.005695f, 0.00478f, + -0.001252f, 0.00881f, -0.00876f, -0.00202f, -0.009514f, 0.000278f, -0.005013f, 0.007404f, -0.0005183f, + -0.001753f, -0.00442f, 0.00199f, -0.008156f, -0.008865f, -0.00308f, -0.00973f, -0.005714f, 0.007996f, + -0.004395f, 0.00455f, -0.00862f, -0.0004373f, 0.00885f, 0.00984f, -0.00422f, 0.00382f, 0.001032f, + -0.0003273f, 0.004593f, 0.004982f, 0.00259f, -0.00604f, 0.000337f, 0.009186f, -0.003052f, -0.005085f, + 0.005188f, 0.00417f, 0.004345f, 0.003605f, -0.000079f, -0.009575f, 0.00894f, 0.00992f, 0.008f, + -0.00476f, 0.00871f, -0.007538f, -0.00739f, -0.0069f, -0.008804f, -0.00526f, -0.001096f, 0.0009003f, + 0.005367f, 0.005283f, 0.005047f, -0.0003638f, -0.001063f, -0.00399f, 0.0081f, 0.004395f, 0.00805f, + -0.00531f, 0.001779f, 0.003176f, 0.00775f, 0.0071f, 0.00682f, -0.0007925f, -0.00318f, 0.00897f, + -0.006172f, -0.00376f, -0.002518f, -0.007618f, 0.00728f, 0.007042f, 0.006863f, -0.005936f, 0.004787f, + 0.005726f, -0.0009775f, -0.004757f, -0.0002875f, 0.00844f, 0.005302f, 0.003609f, 0.005863f, 0.005436f, + 0.004433f, -0.002047f, 0.003025f, 0.007694f, -0.007565f, -0.006165f, -0.00202f, -0.004505f, -0.004784f, + 0.00921f, -0.00059f, 0.004604f, 0.002249f, -0.004814f, -0.00519f, -0.00625f, 0.0000181f, 0.00531f, + 0.001533f, 0.006847f, -0.00959f, -0.00846f, -0.00928f, -0.006386f, 0.002766f, -0.005516f, -0.0071f, + 0.006073f, 0.00907f, 0.005585f, -0.00644f, -0.00855f, -0.003466f, -0.009514f, -0.00914f, 0.003702f, + -0.00503f, -0.00497f, 0.00796f, -0.007763f, 0.007614f, 0.00544f, 0.00933f, 0.008316f, -0.003374f, + -0.00763f, 0.002035f, 0.002916f, -0.0006156f, -0.003872f, -0.0002236f, -0.00917f, -0.003334f, -0.004528f, + 0.00978f, -0.0005903f, -0.006786f, -0.00913f, -0.009254f, -0.006096f, 0.002638f, 0.003622f, -0.007805f, + 0.00873f, 0.001586f, -0.003641f, 0.001905f, -0.00311f, -0.000627f, 0.005222f, -0.004986f, 0.000169f, + -0.007088f, -0.00783f, -0.004852f, 0.000881f, 0.004627f, -0.00405f, -0.006405f, 0.003586f, 0.002258f, + -0.00988f, 0.000979f, -0.002949f, 0.00912f, 0.00885f, -0.002743f, 0.00833f, 0.003326f, -0.0003536f, + -0.003792f, -0.00941f, 0.000213f, -0.002922f, -0.001483f, -0.003443f, -0.00307f, -0.005894f, 0.003468f, + 0.001887f, -0.006832f, -0.00828f, -0.006172f, -0.00746f, 0.002558f, 0.00998f, 0.001123f, -0.00611f, + -0.005863f, -0.0007744f, 0.003525f, -0.00573f, 0.0009665f, -0.002241f, -0.0007176f, -0.00918f, -0.00794f, + 0.00216f, -0.0049f, 0.002016f, 0.006763f, 0.00445f, 0.004715f, 0.001216f, 0.002068f, -0.001449f, + 0.00249f, 0.00953f, -0.0007606f, -0.00256f, 0.0006046f, -0.004406f, -0.009415f, 0.003393f, -0.004787f, + 0.002743f, 0.00841f, 0.00972f, -0.00194f, 0.004185f, 0.00585f, 0.007504f, -0.00622f, 0.001107f, + -0.0044f, 0.00576f, 0.00772f, 0.00818f, 0.00536f, 0.002644f, -0.00465f, -0.0087f, -0.00816f, + 0.004547f, 0.001851f, -0.005634f, 0.003641f, 0.007618f, -0.00985f, 0.009766f, -0.00459f, -0.002457f, + 0.00393f, -0.008224f, -0.003952f, -0.00813f, 0.007393f, 0.005188f, 0.007126f, 0.00639f, 0.001274f, + 0.002176f, -0.00894f, 0.002445f, -0.001414f, -0.00952f, 0.004444f, -0.001607f, -0.001501f, 0.00857f, + -0.005585f, -0.000724f, 0.003077f, 0.007797f, 0.007473f, 0.003546f, -0.00948f, -0.003933f, 0.004017f, + -0.003176f, 0.001448f, 0.002731f, 0.003504f, 0.00831f, 0.007763f, 0.002405f, -0.006264f, 0.00536f, + -0.0083f, 0.001413f, -0.0003624f, -0.001836f, 0.006027f, 0.005173f, -0.003073f, -0.008354f, 0.00164f, + -0.001941f, -0.002981f, 0.008156f, -0.004414f, -0.005413f, 0.002527f, -0.0004022f, 0.00625f, 0.008575f, + 0.00637f, 0.00765f, 0.0003421f, 0.00798f, -0.005287f, 0.00808f, -0.00646f, 0.000603f, 0.00955f, + 0.00889f, -0.002356f, -0.005306f, 0.002333f, 0.009514f, -0.003855f, 0.0054f, 0.005417f, 0.000675f, + -0.004402f, 0.00933f, -0.005234f, -0.00958f, 0.0089f, 0.009254f, -0.00757f, 0.0098f, -0.001879f, + 0.00789f, 0.002071f, 0.000677f, -0.007763f, -0.001941f, 0.001637f, -0.003653f, 0.00528f, 0.007465f, + -0.00557f, -0.006004f, -0.009476f, 0.000802f, 0.002075f, -0.007168f, 0.00398f, -0.006268f, 0.006287f, + -0.009575f, -0.001453f, 0.0092f, -0.00995f, -0.002644f, 0.005024f, 0.00966f, -0.006878f, 0.00995f, + -0.001319f, -0.002237f, 0.002209f, 0.00861f, -0.00883f, -0.003874f, -0.002903f, 0.00992f, -0.0016365f, + -0.00633f, 0.00823f, -0.00771f, -0.003204f, -0.00563f, 0.00563f, 0.00805f, -0.004936f, 0.003477f, + 0.00741f, 0.0043f, 0.006905f}; bias_data = { - -0.003569f, -0.00789f, 0.002047f, -0.002829f, -0.000592f, -0.003313f, 0.00805f, -0.007397f, -0.006844f, - 0.00809f, -0.003479f, -0.0017395f, 0.007904f, -0.009056f, 0.005806f, 0.008896f, 0.004585f, -0.002356f, - -0.003815f, -0.00673f, 0.005787f, -0.001892f, 0.003233f, 0.005566f, -0.007626f, 0.00835f, 0.009415f, - -0.005707f, -0.0002623f, -0.007496f, -0.003569f, -0.00568f, -0.000693f, 0.00857f, 0.006607f, 0.005245f, - -0.0006056f, 0.008896f, 0.0000753f, -0.0001878f, -0.00957f, -0.003975f, 0.003006f, -0.006794f, -0.007935f, - 0.004246f, 0.004948f, 0.008896f, -0.0046f, -0.002516f, -0.000887f, -0.004555f, 0.002409f, 0.00364f, - -0.002491f, 0.004204f, 0.00010544f, 0.000783f, 0.00895f, 0.005367f, -0.004097f, -0.00592f, 0.009834f, - 0.001047f, 0.00677f, -0.004974f, -0.003212f, 0.00771f, -0.002256f, -0.001008f, -0.008484f, -0.002802f, - 0.00462f, 0.001329f, 0.004562f, 0.006687f, 0.002615f, 0.001449f, -0.0006714f, -0.001256f, 0.0003803f, - -0.005238f, -0.004112f, 0.001925f, -0.002827f, -0.00861f, -0.004723f, -0.002748f, -0.006134f, -0.00342f, - -0.007168f, 0.006626f, 0.001948f, -0.003838f, 0.006878f, -0.001717f, -0.003347f, -0.006287f, 0.00455f, - -0.00136f, 0.004364f, 0.006573f, -0.007545f, -0.004845f, 0.00883f, 0.00572f, 0.00675f, -0.003206f, - -0.00842f, 0.006428f, 0.00394f, 0.000642f, -0.002016f, 0.004486f, 0.009964f, -0.00918f, -0.0084f, - 0.001972f, 0.002031f, -0.00976f, -0.004494f, 0.006958f, -0.00262f, 0.00874f, 0.009865f, 0.0075f, - -0.00271f, -0.006386f, 0.002562f, 0.006397f, 0.00699f, -0.001731f, 0.005432f, 0.00271f, -0.006447f, - -0.00892f, 0.002897f, -0.0004315f, 0.001859f, -0.003462f, 0.007122f, -0.005135f, 0.005363f, 0.0051f, - 0.00806f, 0.00721f, 0.00799f, 0.00945f, -0.006943f, 0.006393f, 0.00935f, -0.0003269f, -0.004536f, - -0.006752f, 0.0095f, 0.00628f, -0.00418f, 0.001624f, -0.005577f, -0.008606f, 0.005486f, 0.002077f, - 0.007378f, 0.004734f, 0.0035f, 0.00991f, -0.001775f, 0.00247f, -0.00613f, 0.007202f, -0.00596f, - 0.003876f, -0.00789f, 0.004505f, 0.004795f, -0.002575f, -0.002932f, -0.003098f, -0.005463f, -0.00912f, - -0.00729f, 0.004486f, 0.006138f, 0.006924f, -0.00722f, 0.00841f, -0.001812f, -0.00959f, -0.000497f, - -0.00513f, -0.006042f, 0.007645f}; + -0.003569f, -0.00789f, 0.002047f, -0.002829f, -0.000592f, -0.003313f, 0.00805f, -0.007397f, -0.006844f, + 0.00809f, -0.003479f, -0.0017395f, 0.007904f, -0.009056f, 0.005806f, 0.008896f, 0.004585f, -0.002356f, + -0.003815f, -0.00673f, 0.005787f, -0.001892f, 0.003233f, 0.005566f, -0.007626f, 0.00835f, 0.009415f, + -0.005707f, -0.0002623f, -0.007496f, -0.003569f, -0.00568f, -0.000693f, 0.00857f, 0.006607f, 0.005245f, + -0.0006056f, 0.008896f, 0.0000753f, -0.0001878f, -0.00957f, -0.003975f, 0.003006f, -0.006794f, -0.007935f, + 0.004246f, 0.004948f, 0.008896f, -0.0046f, -0.002516f, -0.000887f, -0.004555f, 0.002409f, 0.00364f, + -0.002491f, 0.004204f, 0.00010544f, 0.000783f, 0.00895f, 0.005367f, -0.004097f, -0.00592f, 0.009834f, + 0.001047f, 0.00677f, -0.004974f, -0.003212f, 0.00771f, -0.002256f, -0.001008f, -0.008484f, -0.002802f, + 0.00462f, 0.001329f, 0.004562f, 0.006687f, 0.002615f, 0.001449f, -0.0006714f, -0.001256f, 0.0003803f, + -0.005238f, -0.004112f, 0.001925f, -0.002827f, -0.00861f, -0.004723f, -0.002748f, -0.006134f, -0.00342f, + -0.007168f, 0.006626f, 0.001948f, -0.003838f, 0.006878f, -0.001717f, -0.003347f, -0.006287f, 0.00455f, + -0.00136f, 0.004364f, 0.006573f, -0.007545f, -0.004845f, 0.00883f, 0.00572f, 0.00675f, -0.003206f, + -0.00842f, 0.006428f, 0.00394f, 0.000642f, -0.002016f, 0.004486f, 0.009964f, -0.00918f, -0.0084f, + 0.001972f, 0.002031f, -0.00976f, -0.004494f, 0.006958f, -0.00262f, 0.00874f, 0.009865f, 0.0075f, + -0.00271f, -0.006386f, 0.002562f, 0.006397f, 0.00699f, -0.001731f, 0.005432f, 0.00271f, -0.006447f, + -0.00892f, 0.002897f, -0.0004315f, 0.001859f, -0.003462f, 0.007122f, -0.005135f, 0.005363f, 0.0051f, + 0.00806f, 0.00721f, 0.00799f, 0.00945f, -0.006943f, 0.006393f, 0.00935f, -0.0003269f, -0.004536f, + -0.006752f, 0.0095f, 0.00628f, -0.00418f, 0.001624f, -0.005577f, -0.008606f, 0.005486f, 0.002077f, + 0.007378f, 0.004734f, 0.0035f, 0.00991f, -0.001775f, 0.00247f, -0.00613f, 0.007202f, -0.00596f, + 0.003876f, -0.00789f, 0.004505f, 0.004795f, -0.002575f, -0.002932f, -0.003098f, -0.005463f, -0.00912f, + -0.00729f, 0.004486f, 0.006138f, 0.006924f, -0.00722f, 0.00841f, -0.001812f, -0.00959f, -0.000497f, + -0.00513f, -0.006042f, 0.007645f}; } TEST(AttentionTest, Causal_EmptyPastState) { @@ -2494,15 +2448,14 @@ void RawAttentionPastStateBatch1(bool past_present_share_buffer) { if (!past_present_share_buffer) { RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, - batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional, - use_past_state, past_sequence_length, &past_data, &present_data); + batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional, + use_past_state, past_sequence_length, &past_data, &present_data); } else { RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, - batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional, - use_past_state, past_sequence_length, &past_data, &present_data, - kMaskIndexEnd, 0, past_sequence_length + sequence_length + 4, - true, false, true, {}, {}, 0, nullptr, nullptr, - true); + batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional, + use_past_state, past_sequence_length, &past_data, &present_data, + AttentionMaskType::MASK_1D_KEY_SEQ_LEN, 0, past_sequence_length + sequence_length + 4, + true, false, true, {}, {}, 0, true); } } @@ -2624,15 +2577,14 @@ void RawAttentionPastStateBatch2(bool past_present_share_buffer) { if (!past_present_share_buffer) { RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, - batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional, - use_past_state, past_sequence_length, &past_data, &present_data); + batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional, + use_past_state, past_sequence_length, &past_data, &present_data); } else { RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, - batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional, - use_past_state, past_sequence_length, &past_data, &present_data, - kMaskIndexEnd, 0, past_sequence_length + sequence_length, - true, false, true, {}, {}, 0, nullptr, nullptr, - true); + batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional, + use_past_state, past_sequence_length, &past_data, &present_data, + AttentionMaskType::MASK_1D_KEY_SEQ_LEN, 0, past_sequence_length + sequence_length, + true, false, true, {}, {}, 0, true); } } @@ -2744,15 +2696,16 @@ void RawAttentionPastStateBatch2WithPadding(bool past_present_share_buffer) { if (!past_present_share_buffer) { RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, - batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional, - use_past_state, past_sequence_length, &past_data, &present_data, kMaskIndexEndAndStart); + batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional, + use_past_state, past_sequence_length, &past_data, &present_data, + AttentionMaskType::MASK_1D_END_START); } else { RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, - batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional, - use_past_state, past_sequence_length, &past_data, &present_data, kMaskIndexEndAndStart, - 0, past_sequence_length + sequence_length + 4, - true, false, true, {}, {}, 0, nullptr, nullptr, - true); + batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional, + use_past_state, past_sequence_length, &past_data, &present_data, + AttentionMaskType::MASK_1D_END_START, + 0, past_sequence_length + sequence_length + 4, + true, false, true, {}, {}, 0, true); } } @@ -2801,7 +2754,8 @@ TEST(AttentionTest, AttentionBatch2MaskIndex2) { const std::vector* present_data = nullptr; RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskIndexEndAndStart); + use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, + AttentionMaskType::MASK_1D_END_START); } TEST(AttentionTest, AttentionRightPaddingMaskIndex2) { @@ -2838,7 +2792,8 @@ TEST(AttentionTest, AttentionRightPaddingMaskIndex2) { const std::vector* present_data = nullptr; RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskIndexEndAndStart); + use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, + AttentionMaskType::MASK_1D_END_START); } TEST(AttentionTest, AttentionLeftPaddingMaskIndex2) { @@ -2875,7 +2830,8 @@ TEST(AttentionTest, AttentionLeftPaddingMaskIndex2) { const std::vector* present_data = nullptr; RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskIndexEndAndStart); + use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, + AttentionMaskType::MASK_1D_END_START); } TEST(AttentionTest, AttentionBatch2LeftPaddingMaskIndex2) { @@ -2916,7 +2872,8 @@ TEST(AttentionTest, AttentionBatch2LeftPaddingMaskIndex2) { const std::vector* present_data = nullptr; RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskIndexEndAndStart); + use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, + AttentionMaskType::MASK_1D_END_START); } TEST(AttentionTest, Attention3DMask) { @@ -2961,7 +2918,8 @@ TEST(AttentionTest, Attention3DMask) { const std::vector* present_data = nullptr; RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMask3D); + use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, + AttentionMaskType::MASK_3D_ATTENTION); } TEST(AttentionTest, AttentionBatch2AttentionMask) { @@ -3002,7 +2960,8 @@ TEST(AttentionTest, AttentionBatch2AttentionMask) { const std::vector* present_data = nullptr; RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskRaw); + use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, + AttentionMaskType::MASK_2D_KEY_PADDING); } TEST(AttentionTest, AttentionUnidirectional3DMask) { @@ -3047,7 +3006,8 @@ TEST(AttentionTest, AttentionUnidirectional3DMask) { const std::vector* present_data = nullptr; RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMask3D); + use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, + AttentionMaskType::MASK_3D_ATTENTION); } TEST(AttentionTest, AttentionUnidirectionalAttentionMask) { @@ -3088,7 +3048,8 @@ TEST(AttentionTest, AttentionUnidirectionalAttentionMask) { const std::vector* present_data = nullptr; RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskRaw); + use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, + AttentionMaskType::MASK_2D_KEY_PADDING); } TEST(AttentionTest, AttentionMask1DEndNoWord) { @@ -3130,7 +3091,8 @@ TEST(AttentionTest, AttentionMask1DEndNoWord) { RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskIndexEnd); + use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, + AttentionMaskType::MASK_1D_KEY_SEQ_LEN); } TEST(AttentionTest, AttentionMask1DNoWord) { @@ -3172,7 +3134,8 @@ TEST(AttentionTest, AttentionMask1DNoWord) { RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskIndexEndAndStart); + use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, + AttentionMaskType::MASK_1D_END_START); } TEST(AttentionTest, AttentionMask2DNoWord) { @@ -3214,7 +3177,8 @@ TEST(AttentionTest, AttentionMask2DNoWord) { RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskRaw); + use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, + AttentionMaskType::MASK_2D_KEY_PADDING); } TEST(AttentionTest, AttentionMask3DNoWord) { @@ -3256,7 +3220,8 @@ TEST(AttentionTest, AttentionMask3DNoWord) { RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMask3D); + use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, + AttentionMaskType::MASK_3D_ATTENTION); } TEST(AttentionTest, AttentionDummyMask2D) { @@ -3297,7 +3262,8 @@ TEST(AttentionTest, AttentionDummyMask2D) { RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskDummy); + use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, + AttentionMaskType::MASK_2D_DUMMY); } TEST(AttentionTest, Attention4DMask) { @@ -3342,7 +3308,7 @@ TEST(AttentionTest, Attention4DMask) { RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, use_float16, is_unidirectional, use_past_state, past_sequence_length, - past_data, present_data, kMask4D, input_hidden_size, max_sequence_length, + past_data, present_data, AttentionMaskType::MASK_4D_MEGATRON, input_hidden_size, max_sequence_length, disable_cpu); } @@ -3384,7 +3350,8 @@ TEST(AttentionTest, AttentionMaskIndexOutOfRange) { const std::vector* present_data = nullptr; RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskIndexEndAndStart); + use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, + AttentionMaskType::MASK_1D_END_START); } #if !defined(__wasm__) @@ -3534,7 +3501,8 @@ TEST(AttentionTest, AttentionPrunedModel) { const std::vector* present_data = nullptr; RunAttentionTest(input_data, weight_data, bias_data, mask_data, output_data, batch_size, sequence_length, hidden_size, number_of_heads, - use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskRaw, input_hidden_size); + use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, + AttentionMaskType::MASK_2D_KEY_PADDING, input_hidden_size); } static void RunModelWithRandomInput( @@ -3682,59 +3650,6 @@ TEST(AttentionTest, DISABLED_Attention_Mask1D_Fp16_B2_FusedNoPadding) { } } -TEST(AttentionTest, AttentionBatch1_No_Weights) { - int batch_size = 1; - int sequence_length = 2; - int hidden_size = 4; - int number_of_heads = 2; - int kv_sequence_length = 3; - int v_hidden_size = 2; - - // query: (batch_size, sequence_length, hidden_size) - std::vector input_data = { - 0.8f, -0.5f, 0.0f, 1.f, - 0.5f, 0.2f, 0.3f, -0.6f}; - - std::vector weight_data = {}; - - // (hidden_size + hidden_size + v_hidden_size) - std::vector bias_data = { - -0.5f, 0.6f, 1.2f, 2.1f, 0.5f, 0.7f, 0.2f, 1.2f, 0.5f, 0.4f}; - - std::vector mask_index_data = {2L}; - - // (batch_size, kv_sequence_length, hidden_size) - std::vector key_data = {0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f, 1.1f, 1.2f}; - - // (batch_size, kv_sequence_length, v_hidden_size) - std::vector value_data = {0.6f, 0.5f, 0.4f, 0.3f, 0.2f, 0.1f}; - - // (batch_size, sequence_length, v_hidden_size) - std::vector output_data = {0.99434918f, 0.0f, 0.9887343f, 0.74572039f}; - - bool use_float16 = false; - bool is_unidirectional = false; - bool use_past_state = false; - int past_sequence_length = 0; - const std::vector* past_data = nullptr; - const std::vector* present_data = nullptr; - MaskIndexType mask_index_type = kMaskIndexEnd; - int input_hidden_size = 0; - int max_sequence_length = 0; - constexpr bool disable_cpu = true; // not supported in cpu right now. - constexpr bool disable_cuda = false; - constexpr bool disable_rocm = true; // not supported in rocm right now. - const std::vector qkv_sizes = {hidden_size, hidden_size, v_hidden_size}; - const std::vector& extra_add_data = {}; - - RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data, - batch_size, sequence_length, hidden_size, number_of_heads, - use_float16, is_unidirectional, use_past_state, past_sequence_length, - past_data, present_data, mask_index_type, input_hidden_size, max_sequence_length, - disable_cpu, disable_cuda, disable_rocm, qkv_sizes, extra_add_data, - kv_sequence_length, &key_data, &value_data); -} - #ifndef ENABLE_TRAINING // Prepacking is enabled only on non-training builds TEST(AttentionTest, SharedPrepackedWeights) { int batch_size = 2; diff --git a/onnxruntime/test/contrib_ops/cross_attention_op_test.cc b/onnxruntime/test/contrib_ops/cross_attention_op_test.cc new file mode 100644 index 0000000000000..ae1e395a80c4d --- /dev/null +++ b/onnxruntime/test/contrib_ops/cross_attention_op_test.cc @@ -0,0 +1,159 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#include "core/platform/env_var_utils.h" +#include "gtest/gtest.h" +#include "test/common/tensor_op_test_utils.h" +#include "test/common/cuda_op_test_utils.h" +#include "test/providers/provider_test_utils.h" +#include "test/util/include/scoped_env_vars.h" +#include "contrib_ops/cpu/bert/attention_common.h" + +namespace onnxruntime { +using contrib::AttentionMaskType; +namespace test { + +static void RunCrossAttentionTest( + const std::vector& query_data, // query: [batch_size, sequence_length, hidden_size] + const std::vector& key_data, // key: [batch_size, kv_sequence_length, hidden_size] + const std::vector& value_data, // value: [batch_size, kv_sequence_length, v_hidden_size] + const std::vector& bias_data, // bias: [hidden_size + hidden_size + v_hidden_size] + const std::vector& key_padding_mask_data, // key_padding_mask: see below + AttentionMaskType mask_type, // 1 for [batch_size], 2 for [batch_size, kv_sequence_length] + const std::vector& output_data, // output: [batch_size, sequence_length, v_hidden_size] + int number_of_heads, + int batch_size, + int sequence_length, + int kv_sequence_length, + int hidden_size, + int v_hidden_size, + bool use_float16 = false, + const bool disable_cpu = false, + const bool disable_cuda = false, + const bool disable_rocm = false) { + kv_sequence_length = (kv_sequence_length == 0 ? sequence_length : kv_sequence_length); + + int min_cuda_architecture = use_float16 ? 530 : 0; + bool enable_cuda = HasCudaEnvironment(min_cuda_architecture) && !disable_cuda; + bool enable_rocm = (nullptr != DefaultRocmExecutionProvider().get()) && !disable_rocm; + bool enable_cpu = (nullptr != DefaultCpuExecutionProvider().get()) && !use_float16 && !disable_cpu; + + if (enable_cpu || enable_cuda || enable_rocm) { + OpTester tester("CrossAttention", 1, onnxruntime::kMSDomain); + tester.AddAttribute("num_heads", static_cast(number_of_heads)); + + std::vector query_dims = {batch_size, sequence_length, hidden_size}; + std::vector key_dims = {batch_size, kv_sequence_length, hidden_size}; + std::vector value_dims = {batch_size, kv_sequence_length, v_hidden_size}; + std::vector bias_dims = {hidden_size + hidden_size + v_hidden_size}; + std::vector output_dims = {batch_size, sequence_length, v_hidden_size}; + + std::vector mask_dims_1 = {batch_size}; + std::vector mask_dims_2 = {batch_size, kv_sequence_length}; + std::vector& key_padding_mask_dims = (mask_type == AttentionMaskType::MASK_1D_KEY_SEQ_LEN) + ? mask_dims_1 + : mask_dims_2; + + if (use_float16) { + tester.AddInput("query", query_dims, ToFloat16(query_data)); + tester.AddInput("key", key_dims, ToFloat16(key_data)); + tester.AddInput("value", value_dims, ToFloat16(value_data)); + + if (bias_data.size()) { + tester.AddInput("bias", bias_dims, ToFloat16(bias_data)); + } else { + tester.AddOptionalInputEdge(); + } + + if (key_padding_mask_data.size()) { + tester.AddInput("key_padding_mask", key_padding_mask_dims, key_padding_mask_data); + } else { + tester.AddOptionalInputEdge(); + } + + tester.AddOutput("output", output_dims, ToFloat16(output_data)); + } else { + tester.AddInput("query", query_dims, query_data); + tester.AddInput("key", key_dims, key_data); + tester.AddInput("value", value_dims, value_data); + + if (bias_data.size()) { + tester.AddInput("bias", bias_dims, bias_data); + } else { + tester.AddOptionalInputEdge(); + } + + if (key_padding_mask_data.size()) { + tester.AddInput("key_padding_mask", key_padding_mask_dims, key_padding_mask_data); + } else { + tester.AddOptionalInputEdge(); + } + + tester.AddOutput("output", output_dims, output_data); + } + + if (enable_cuda) { + std::vector> execution_providers; + execution_providers.push_back(DefaultCudaExecutionProvider()); + tester.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); + } + + if (enable_rocm) { + std::vector> execution_providers; + execution_providers.push_back(DefaultRocmExecutionProvider()); + tester.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); + } + + if (enable_cpu) { + std::vector> execution_providers; + execution_providers.push_back(DefaultCpuExecutionProvider()); + tester.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); + } + } +} + +TEST(CrossAttentionTest, CrossAttentionBatch1) { + int batch_size = 1; + int sequence_length = 2; + int hidden_size = 4; + int number_of_heads = 2; + int kv_sequence_length = 3; + int v_hidden_size = 2; + + std::vector query_data = { + 0.8f, -0.5f, 0.0f, 1.f, + 0.5f, 0.2f, 0.3f, -0.6f}; + + std::vector key_data = {0.1f, 0.2f, 0.3f, 0.4f, + 0.5f, 0.6f, 0.7f, 0.8f, + 0.9f, 1.0f, 1.1f, 1.2f}; + + std::vector value_data = {0.6f, 0.5f, + 0.4f, 0.3f, + 0.2f, 0.1f}; + + std::vector bias_data = { + -0.5f, 0.6f, 1.2f, 2.1f, + 0.5f, 0.7f, 0.2f, 1.2f, + 0.5f, 0.4f}; + + std::vector output_data = {0.99434918f, 0.0f, + 0.9887343f, 0.74572039f}; + + std::vector key_padding_mask_data = {2L}; + constexpr AttentionMaskType mask_type = AttentionMaskType::MASK_1D_KEY_SEQ_LEN; + + bool use_float16 = false; + + constexpr bool disable_cpu = true; // not supported in cpu right now. + constexpr bool disable_cuda = false; + constexpr bool disable_rocm = true; // not supported in rocm right now. + + RunCrossAttentionTest( + query_data, key_data, value_data, bias_data, key_padding_mask_data, mask_type, output_data, + number_of_heads, batch_size, sequence_length, kv_sequence_length, hidden_size, v_hidden_size, + use_float16, disable_cpu, disable_cuda, disable_rocm); +} + +} // namespace test +} // namespace onnxruntime