You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2022/06/29 12:38:57 UTC
[doris] branch master updated: [bugfix]fix core dump on outfile with expr (#10491)
This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 2c35abe940 [bugfix]fix core dump on outfile with expr (#10491)
2c35abe940 is described below
commit 2c35abe940ff709f254182312146736a6926ee56
Author: Pxl <95...@qq.com>
AuthorDate: Wed Jun 29 20:38:49 2022 +0800
[bugfix]fix core dump on outfile with expr (#10491)
remove log
---
be/src/vec/runtime/vfile_result_writer.cpp | 40 +-
be/src/vec/runtime/vfile_result_writer.h | 14 +-
be/src/vec/sink/vresult_file_sink.cpp | 13 +-
be/src/vec/sink/vresult_file_sink.h | 18 +-
regression-test/data/export/test_outfile_expr.out | 1003 ++++++++++++++++++++
regression-test/suites/export/test_outfile.groovy | 2 +-
...est_outfile.groovy => test_outfile_expr.groovy} | 12 +-
7 files changed, 1058 insertions(+), 44 deletions(-)
diff --git a/be/src/vec/runtime/vfile_result_writer.cpp b/be/src/vec/runtime/vfile_result_writer.cpp
index 30e32d8e7c..912275c974 100644
--- a/be/src/vec/runtime/vfile_result_writer.cpp
+++ b/be/src/vec/runtime/vfile_result_writer.cpp
@@ -18,6 +18,7 @@
#include "vec/runtime/vfile_result_writer.h"
#include "common/consts.h"
+#include "common/status.h"
#include "exprs/expr_context.h"
#include "gutil/strings/numbers.h"
#include "gutil/strings/substitute.h"
@@ -33,22 +34,23 @@
#include "util/mysql_global.h"
#include "util/mysql_row_buffer.h"
#include "vec/core/block.h"
+#include "vec/exprs/vexpr.h"
+#include "vec/exprs/vexpr_context.h"
namespace doris::vectorized {
const size_t VFileResultWriter::OUTSTREAM_BUFFER_SIZE_BYTES = 1024 * 1024;
using doris::operator<<;
-VFileResultWriter::VFileResultWriter(const ResultFileOptions* file_opts,
- const TStorageBackendType::type storage_type,
- const TUniqueId fragment_instance_id,
- const std::vector<ExprContext*>& output_expr_ctxs,
- RuntimeProfile* parent_profile, BufferControlBlock* sinker,
- Block* output_block, bool output_object_data,
- const RowDescriptor& output_row_descriptor)
+VFileResultWriter::VFileResultWriter(
+ const ResultFileOptions* file_opts, const TStorageBackendType::type storage_type,
+ const TUniqueId fragment_instance_id,
+ const std::vector<vectorized::VExprContext*>& output_vexpr_ctxs,
+ RuntimeProfile* parent_profile, BufferControlBlock* sinker, Block* output_block,
+ bool output_object_data, const RowDescriptor& output_row_descriptor)
: _file_opts(file_opts),
_storage_type(storage_type),
_fragment_instance_id(fragment_instance_id),
- _output_expr_ctxs(output_expr_ctxs),
+ _output_vexpr_ctxs(output_vexpr_ctxs),
_parent_profile(parent_profile),
_sinker(sinker),
_output_block(output_block),
@@ -185,7 +187,16 @@ Status VFileResultWriter::append_block(Block& block) {
if (_parquet_writer != nullptr) {
return Status::NotSupported("Parquet Writer is not supported yet!");
} else {
- RETURN_IF_ERROR(_write_csv_file(block));
+ Status status = Status::OK();
+ // Exec vectorized expr here to speed up, block.rows() == 0 means expr exec
+ // failed, just return the error status
+ auto output_block = VExprContext::get_output_block_after_execute_exprs(_output_vexpr_ctxs,
+ block, status);
+ auto num_rows = output_block.rows();
+ if (UNLIKELY(num_rows == 0)) {
+ return status;
+ }
+ RETURN_IF_ERROR(_write_csv_file(output_block));
}
_written_rows += block.rows();
@@ -199,7 +210,7 @@ Status VFileResultWriter::_write_csv_file(const Block& block) {
if (col.column->is_null_at(i)) {
_plain_text_outstream << NULL_IN_CSV;
} else {
- switch (_output_expr_ctxs[col_id]->root()->type().type) {
+ switch (_output_vexpr_ctxs[col_id]->root()->type().type) {
case TYPE_BOOLEAN:
case TYPE_TINYINT:
_plain_text_outstream << (int)*reinterpret_cast<const int8_t*>(
@@ -277,8 +288,7 @@ Status VFileResultWriter::_write_csv_file(const Block& block) {
reinterpret_cast<const PackedInt128*>(col.column->get_data_at(i).data)
->value);
std::string decimal_str;
- int output_scale = _output_expr_ctxs[col_id]->root()->output_scale();
- decimal_str = decimal_val.to_string(output_scale);
+ decimal_str = decimal_val.to_string();
_plain_text_outstream << decimal_str;
break;
}
@@ -299,10 +309,10 @@ Status VFileResultWriter::_write_csv_file(const Block& block) {
}
std::string VFileResultWriter::gen_types() {
- std::string types = "";
- int num_columns = _output_expr_ctxs.size();
+ std::string types;
+ int num_columns = _output_vexpr_ctxs.size();
for (int i = 0; i < num_columns; ++i) {
- types += type_to_string(_output_expr_ctxs[i]->root()->type().type);
+ types += type_to_string(_output_vexpr_ctxs[i]->root()->type().type);
if (i < num_columns - 1) {
types += _file_opts->column_separator;
}
diff --git a/be/src/vec/runtime/vfile_result_writer.h b/be/src/vec/runtime/vfile_result_writer.h
index abfac874c1..c4066c75a5 100644
--- a/be/src/vec/runtime/vfile_result_writer.h
+++ b/be/src/vec/runtime/vfile_result_writer.h
@@ -30,22 +30,22 @@ public:
VFileResultWriter(const ResultFileOptions* file_option,
const TStorageBackendType::type storage_type,
const TUniqueId fragment_instance_id,
- const std::vector<ExprContext*>& output_expr_ctxs,
+ const std::vector<VExprContext*>& _output_vexpr_ctxs,
RuntimeProfile* parent_profile, BufferControlBlock* sinker,
Block* output_block, bool output_object_data,
const RowDescriptor& output_row_descriptor);
virtual ~VFileResultWriter() = default;
- virtual Status append_block(Block& block) override;
- virtual Status append_row_batch(const RowBatch* batch) override {
+ Status append_block(Block& block) override;
+ Status append_row_batch(const RowBatch* batch) override {
return Status::NotSupported("append_row_batch is not supported in VFileResultWriter!");
};
- virtual Status init(RuntimeState* state) override;
- virtual Status close() override;
+ Status init(RuntimeState* state) override;
+ Status close() override;
// file result writer always return statistic result in one row
- virtual int64_t get_written_rows() const override { return 1; }
+ int64_t get_written_rows() const override { return 1; }
std::string gen_types();
Status write_csv_header();
@@ -80,7 +80,7 @@ private:
const ResultFileOptions* _file_opts;
TStorageBackendType::type _storage_type;
TUniqueId _fragment_instance_id;
- const std::vector<ExprContext*>& _output_expr_ctxs;
+ const std::vector<VExprContext*>& _output_vexpr_ctxs;
// If the result file format is plain text, like CSV, this _file_writer is owned by this FileResultWriter.
// If the result file format is Parquet, this _file_writer is owned by _parquet_writer.
diff --git a/be/src/vec/sink/vresult_file_sink.cpp b/be/src/vec/sink/vresult_file_sink.cpp
index b69226bd7e..bc1b987d45 100644
--- a/be/src/vec/sink/vresult_file_sink.cpp
+++ b/be/src/vec/sink/vresult_file_sink.cpp
@@ -83,9 +83,10 @@ Status VResultFileSink::init(const TDataSink& tsink) {
Status VResultFileSink::prepare_exprs(RuntimeState* state) {
// From the thrift expressions create the real exprs.
- RETURN_IF_ERROR(Expr::create_expr_trees(state->obj_pool(), _t_output_expr, &_output_expr_ctxs));
+ RETURN_IF_ERROR(
+ VExpr::create_expr_trees(state->obj_pool(), _t_output_expr, &_output_vexpr_ctxs));
// Prepare the exprs to run.
- RETURN_IF_ERROR(Expr::prepare(_output_expr_ctxs, state, _row_desc, _expr_mem_tracker));
+ RETURN_IF_ERROR(VExpr::prepare(_output_vexpr_ctxs, state, _row_desc, _expr_mem_tracker));
return Status::OK();
}
@@ -106,7 +107,7 @@ Status VResultFileSink::prepare(RuntimeState* state) {
state->fragment_instance_id(), _buf_size, &_sender));
// create writer
_writer.reset(new (std::nothrow) VFileResultWriter(
- _file_opts.get(), _storage_type, state->fragment_instance_id(), _output_expr_ctxs,
+ _file_opts.get(), _storage_type, state->fragment_instance_id(), _output_vexpr_ctxs,
_profile, _sender.get(), nullptr, state->return_object_data_as_binary(),
_output_row_descriptor));
} else {
@@ -121,7 +122,7 @@ Status VResultFileSink::prepare(RuntimeState* state) {
// create writer
_output_block.reset(new Block(_output_row_descriptor.tuple_descriptors()[0]->slots(), 1));
_writer.reset(new (std::nothrow) VFileResultWriter(
- _file_opts.get(), _storage_type, state->fragment_instance_id(), _output_expr_ctxs,
+ _file_opts.get(), _storage_type, state->fragment_instance_id(), _output_vexpr_ctxs,
_profile, nullptr, _output_block.get(), state->return_object_data_as_binary(),
_output_row_descriptor));
}
@@ -134,7 +135,7 @@ Status VResultFileSink::prepare(RuntimeState* state) {
}
Status VResultFileSink::open(RuntimeState* state) {
- return Expr::open(_output_expr_ctxs, state);
+ return VExpr::open(_output_vexpr_ctxs, state);
}
Status VResultFileSink::send(RuntimeState* state, RowBatch* batch) {
@@ -193,7 +194,7 @@ Status VResultFileSink::close(RuntimeState* state, Status exec_status) {
_output_block->clear();
}
- Expr::close(_output_expr_ctxs, state);
+ VExpr::close(_output_vexpr_ctxs, state);
_closed = true;
return Status::OK();
diff --git a/be/src/vec/sink/vresult_file_sink.h b/be/src/vec/sink/vresult_file_sink.h
index 89085a71e3..c5c509caf7 100644
--- a/be/src/vec/sink/vresult_file_sink.h
+++ b/be/src/vec/sink/vresult_file_sink.h
@@ -34,18 +34,18 @@ public:
const std::vector<TPlanFragmentDestination>& destinations,
int per_channel_buffer_size, bool send_query_statistics_with_every_batch,
const std::vector<TExpr>& t_output_expr, DescriptorTbl& descs);
- virtual ~VResultFileSink() = default;
- virtual Status init(const TDataSink& thrift_sink) override;
- virtual Status prepare(RuntimeState* state) override;
- virtual Status open(RuntimeState* state) override;
+ ~VResultFileSink() override = default;
+ Status init(const TDataSink& thrift_sink) override;
+ Status prepare(RuntimeState* state) override;
+ Status open(RuntimeState* state) override;
// send data in 'batch' to this backend stream mgr
// Blocks until all rows in batch are placed in the buffer
- virtual Status send(RuntimeState* state, RowBatch* batch) override;
- virtual Status send(RuntimeState* state, Block* block) override;
+ Status send(RuntimeState* state, RowBatch* batch) override;
+ Status send(RuntimeState* state, Block* block) override;
// Flush all buffered data and close all existing channels to destination
// hosts. Further send() calls are illegal after calling close().
- virtual Status close(RuntimeState* state, Status exec_status) override;
- virtual RuntimeProfile* profile() override { return _profile; }
+ Status close(RuntimeState* state, Status exec_status) override;
+ RuntimeProfile* profile() override { return _profile; }
void set_query_statistics(std::shared_ptr<QueryStatistics> statistics) override;
@@ -57,7 +57,7 @@ private:
// Owned by the RuntimeState.
const std::vector<TExpr>& _t_output_expr;
- std::vector<ExprContext*> _output_expr_ctxs;
+ std::vector<vectorized::VExprContext*> _output_vexpr_ctxs;
RowDescriptor _output_row_descriptor;
std::unique_ptr<Block> _output_block = nullptr;
diff --git a/regression-test/data/export/test_outfile_expr.out b/regression-test/data/export/test_outfile_expr.out
new file mode 100644
index 0000000000..1d92f44ee6
--- /dev/null
+++ b/regression-test/data/export/test_outfile_expr.out
@@ -0,0 +1,1003 @@
+-- This file is automatically generated. You should know what you did if you want to edit this
+-- !select_default --
+2 2 char1char1char1char1char1char1char1char1char1char1
+3 4 char2char2char2char2char2char2char2char2char2char2
+4 6 char3char3char3char3char3char3char3char3char3char3
+5 8 char4char4char4char4char4char4char4char4char4char4
+6 10 char5char5char5char5char5char5char5char5char5char5
+7 12 char6char6char6char6char6char6char6char6char6char6
+8 14 char7char7char7char7char7char7char7char7char7char7
+9 16 char8char8char8char8char8char8char8char8char8char8
+10 18 char9char9char9char9char9char9char9char9char9char9
+11 20 char10char10char10char10char10char10char10char10char10char10
+12 22 char11char11char11char11char11char11char11char11char11char11
+13 24 char12char12char12char12char12char12char12char12char12char12
+14 26 char13char13char13char13char13char13char13char13char13char13
+15 28 char14char14char14char14char14char14char14char14char14char14
+16 30 char15char15char15char15char15char15char15char15char15char15
+17 32 char16char16char16char16char16char16char16char16char16char16
+18 34 char17char17char17char17char17char17char17char17char17char17
+19 36 char18char18char18char18char18char18char18char18char18char18
+20 38 char19char19char19char19char19char19char19char19char19char19
+21 40 char20char20char20char20char20char20char20char20char20char20
+22 42 char21char21char21char21char21char21char21char21char21char21
+23 44 char22char22char22char22char22char22char22char22char22char22
+24 46 char23char23char23char23char23char23char23char23char23char23
+25 48 char24char24char24char24char24char24char24char24char24char24
+26 50 char25char25char25char25char25char25char25char25char25char25
+27 52 char26char26char26char26char26char26char26char26char26char26
+28 54 char27char27char27char27char27char27char27char27char27char27
+29 56 char28char28char28char28char28char28char28char28char28char28
+30 58 char29char29char29char29char29char29char29char29char29char29
+31 60 char30char30char30char30char30char30char30char30char30char30
+32 62 char31char31char31char31char31char31char31char31char31char31
+33 64 char32char32char32char32char32char32char32char32char32char32
+34 66 char33char33char33char33char33char33char33char33char33char33
+35 68 char34char34char34char34char34char34char34char34char34char34
+36 70 char35char35char35char35char35char35char35char35char35char35
+37 72 char36char36char36char36char36char36char36char36char36char36
+38 74 char37char37char37char37char37char37char37char37char37char37
+39 76 char38char38char38char38char38char38char38char38char38char38
+40 78 char39char39char39char39char39char39char39char39char39char39
+41 80 char40char40char40char40char40char40char40char40char40char40
+42 82 char41char41char41char41char41char41char41char41char41char41
+43 84 char42char42char42char42char42char42char42char42char42char42
+44 86 char43char43char43char43char43char43char43char43char43char43
+45 88 char44char44char44char44char44char44char44char44char44char44
+46 90 char45char45char45char45char45char45char45char45char45char45
+47 92 char46char46char46char46char46char46char46char46char46char46
+48 94 char47char47char47char47char47char47char47char47char47char47
+49 96 char48char48char48char48char48char48char48char48char48char48
+50 98 char49char49char49char49char49char49char49char49char49char49
+51 100 char50char50char50char50char50char50char50char50char50char50
+52 102 char51char51char51char51char51char51char51char51char51char51
+53 104 char52char52char52char52char52char52char52char52char52char52
+54 106 char53char53char53char53char53char53char53char53char53char53
+55 108 char54char54char54char54char54char54char54char54char54char54
+56 110 char55char55char55char55char55char55char55char55char55char55
+57 112 char56char56char56char56char56char56char56char56char56char56
+58 114 char57char57char57char57char57char57char57char57char57char57
+59 116 char58char58char58char58char58char58char58char58char58char58
+60 118 char59char59char59char59char59char59char59char59char59char59
+61 120 char60char60char60char60char60char60char60char60char60char60
+62 122 char61char61char61char61char61char61char61char61char61char61
+63 124 char62char62char62char62char62char62char62char62char62char62
+64 126 char63char63char63char63char63char63char63char63char63char63
+65 128 char64char64char64char64char64char64char64char64char64char64
+66 130 char65char65char65char65char65char65char65char65char65char65
+67 132 char66char66char66char66char66char66char66char66char66char66
+68 134 char67char67char67char67char67char67char67char67char67char67
+69 136 char68char68char68char68char68char68char68char68char68char68
+70 138 char69char69char69char69char69char69char69char69char69char69
+71 140 char70char70char70char70char70char70char70char70char70char70
+72 142 char71char71char71char71char71char71char71char71char71char71
+73 144 char72char72char72char72char72char72char72char72char72char72
+74 146 char73char73char73char73char73char73char73char73char73char73
+75 148 char74char74char74char74char74char74char74char74char74char74
+76 150 char75char75char75char75char75char75char75char75char75char75
+77 152 char76char76char76char76char76char76char76char76char76char76
+78 154 char77char77char77char77char77char77char77char77char77char77
+79 156 char78char78char78char78char78char78char78char78char78char78
+80 158 char79char79char79char79char79char79char79char79char79char79
+81 160 char80char80char80char80char80char80char80char80char80char80
+82 162 char81char81char81char81char81char81char81char81char81char81
+83 164 char82char82char82char82char82char82char82char82char82char82
+84 166 char83char83char83char83char83char83char83char83char83char83
+85 168 char84char84char84char84char84char84char84char84char84char84
+86 170 char85char85char85char85char85char85char85char85char85char85
+87 172 char86char86char86char86char86char86char86char86char86char86
+88 174 char87char87char87char87char87char87char87char87char87char87
+89 176 char88char88char88char88char88char88char88char88char88char88
+90 178 char89char89char89char89char89char89char89char89char89char89
+91 180 char90char90char90char90char90char90char90char90char90char90
+92 182 char91char91char91char91char91char91char91char91char91char91
+93 184 char92char92char92char92char92char92char92char92char92char92
+94 186 char93char93char93char93char93char93char93char93char93char93
+95 188 char94char94char94char94char94char94char94char94char94char94
+96 190 char95char95char95char95char95char95char95char95char95char95
+97 192 char96char96char96char96char96char96char96char96char96char96
+98 194 char97char97char97char97char97char97char97char97char97char97
+99 196 char98char98char98char98char98char98char98char98char98char98
+100 198 char99char99char99char99char99char99char99char99char99char99
+101 200 char100char100char100char100char100char100char100char100char100char100
+102 202 char101char101char101char101char101char101char101char101char101char101
+103 204 char102char102char102char102char102char102char102char102char102char102
+104 206 char103char103char103char103char103char103char103char103char103char103
+105 208 char104char104char104char104char104char104char104char104char104char104
+106 210 char105char105char105char105char105char105char105char105char105char105
+107 212 char106char106char106char106char106char106char106char106char106char106
+108 214 char107char107char107char107char107char107char107char107char107char107
+109 216 char108char108char108char108char108char108char108char108char108char108
+110 218 char109char109char109char109char109char109char109char109char109char109
+111 220 char110char110char110char110char110char110char110char110char110char110
+112 222 char111char111char111char111char111char111char111char111char111char111
+113 224 char112char112char112char112char112char112char112char112char112char112
+114 226 char113char113char113char113char113char113char113char113char113char113
+115 228 char114char114char114char114char114char114char114char114char114char114
+116 230 char115char115char115char115char115char115char115char115char115char115
+117 232 char116char116char116char116char116char116char116char116char116char116
+118 234 char117char117char117char117char117char117char117char117char117char117
+119 236 char118char118char118char118char118char118char118char118char118char118
+120 238 char119char119char119char119char119char119char119char119char119char119
+121 240 char120char120char120char120char120char120char120char120char120char120
+122 242 char121char121char121char121char121char121char121char121char121char121
+123 244 char122char122char122char122char122char122char122char122char122char122
+124 246 char123char123char123char123char123char123char123char123char123char123
+125 248 char124char124char124char124char124char124char124char124char124char124
+126 250 char125char125char125char125char125char125char125char125char125char125
+127 252 char126char126char126char126char126char126char126char126char126char126
+128 254 char127char127char127char127char127char127char127char127char127char127
+129 128 char128char128char128char128char128char128char128char128char128char128
+130 130 char129char129char129char129char129char129char129char129char129char129
+131 132 char130char130char130char130char130char130char130char130char130char130
+132 134 char131char131char131char131char131char131char131char131char131char131
+133 136 char132char132char132char132char132char132char132char132char132char132
+134 138 char133char133char133char133char133char133char133char133char133char133
+135 140 char134char134char134char134char134char134char134char134char134char134
+136 142 char135char135char135char135char135char135char135char135char135char135
+137 144 char136char136char136char136char136char136char136char136char136char136
+138 146 char137char137char137char137char137char137char137char137char137char137
+139 148 char138char138char138char138char138char138char138char138char138char138
+140 150 char139char139char139char139char139char139char139char139char139char139
+141 152 char140char140char140char140char140char140char140char140char140char140
+142 154 char141char141char141char141char141char141char141char141char141char141
+143 156 char142char142char142char142char142char142char142char142char142char142
+144 158 char143char143char143char143char143char143char143char143char143char143
+145 160 char144char144char144char144char144char144char144char144char144char144
+146 162 char145char145char145char145char145char145char145char145char145char145
+147 164 char146char146char146char146char146char146char146char146char146char146
+148 166 char147char147char147char147char147char147char147char147char147char147
+149 168 char148char148char148char148char148char148char148char148char148char148
+150 170 char149char149char149char149char149char149char149char149char149char149
+151 172 char150char150char150char150char150char150char150char150char150char150
+152 174 char151char151char151char151char151char151char151char151char151char151
+153 176 char152char152char152char152char152char152char152char152char152char152
+154 178 char153char153char153char153char153char153char153char153char153char153
+155 180 char154char154char154char154char154char154char154char154char154char154
+156 182 char155char155char155char155char155char155char155char155char155char155
+157 184 char156char156char156char156char156char156char156char156char156char156
+158 186 char157char157char157char157char157char157char157char157char157char157
+159 188 char158char158char158char158char158char158char158char158char158char158
+160 190 char159char159char159char159char159char159char159char159char159char159
+161 192 char160char160char160char160char160char160char160char160char160char160
+162 194 char161char161char161char161char161char161char161char161char161char161
+163 196 char162char162char162char162char162char162char162char162char162char162
+164 198 char163char163char163char163char163char163char163char163char163char163
+165 200 char164char164char164char164char164char164char164char164char164char164
+166 202 char165char165char165char165char165char165char165char165char165char165
+167 204 char166char166char166char166char166char166char166char166char166char166
+168 206 char167char167char167char167char167char167char167char167char167char167
+169 208 char168char168char168char168char168char168char168char168char168char168
+170 210 char169char169char169char169char169char169char169char169char169char169
+171 212 char170char170char170char170char170char170char170char170char170char170
+172 214 char171char171char171char171char171char171char171char171char171char171
+173 216 char172char172char172char172char172char172char172char172char172char172
+174 218 char173char173char173char173char173char173char173char173char173char173
+175 220 char174char174char174char174char174char174char174char174char174char174
+176 222 char175char175char175char175char175char175char175char175char175char175
+177 224 char176char176char176char176char176char176char176char176char176char176
+178 226 char177char177char177char177char177char177char177char177char177char177
+179 228 char178char178char178char178char178char178char178char178char178char178
+180 230 char179char179char179char179char179char179char179char179char179char179
+181 232 char180char180char180char180char180char180char180char180char180char180
+182 234 char181char181char181char181char181char181char181char181char181char181
+183 236 char182char182char182char182char182char182char182char182char182char182
+184 238 char183char183char183char183char183char183char183char183char183char183
+185 240 char184char184char184char184char184char184char184char184char184char184
+186 242 char185char185char185char185char185char185char185char185char185char185
+187 244 char186char186char186char186char186char186char186char186char186char186
+188 246 char187char187char187char187char187char187char187char187char187char187
+189 248 char188char188char188char188char188char188char188char188char188char188
+190 250 char189char189char189char189char189char189char189char189char189char189
+191 252 char190char190char190char190char190char190char190char190char190char190
+192 254 char191char191char191char191char191char191char191char191char191char191
+193 256 char192char192char192char192char192char192char192char192char192char192
+194 258 char193char193char193char193char193char193char193char193char193char193
+195 260 char194char194char194char194char194char194char194char194char194char194
+196 262 char195char195char195char195char195char195char195char195char195char195
+197 264 char196char196char196char196char196char196char196char196char196char196
+198 266 char197char197char197char197char197char197char197char197char197char197
+199 268 char198char198char198char198char198char198char198char198char198char198
+200 270 char199char199char199char199char199char199char199char199char199char199
+201 272 char200char200char200char200char200char200char200char200char200char200
+202 274 char201char201char201char201char201char201char201char201char201char201
+203 276 char202char202char202char202char202char202char202char202char202char202
+204 278 char203char203char203char203char203char203char203char203char203char203
+205 280 char204char204char204char204char204char204char204char204char204char204
+206 282 char205char205char205char205char205char205char205char205char205char205
+207 284 char206char206char206char206char206char206char206char206char206char206
+208 286 char207char207char207char207char207char207char207char207char207char207
+209 288 char208char208char208char208char208char208char208char208char208char208
+210 290 char209char209char209char209char209char209char209char209char209char209
+211 292 char210char210char210char210char210char210char210char210char210char210
+212 294 char211char211char211char211char211char211char211char211char211char211
+213 296 char212char212char212char212char212char212char212char212char212char212
+214 298 char213char213char213char213char213char213char213char213char213char213
+215 300 char214char214char214char214char214char214char214char214char214char214
+216 302 char215char215char215char215char215char215char215char215char215char215
+217 304 char216char216char216char216char216char216char216char216char216char216
+218 306 char217char217char217char217char217char217char217char217char217char217
+219 308 char218char218char218char218char218char218char218char218char218char218
+220 310 char219char219char219char219char219char219char219char219char219char219
+221 312 char220char220char220char220char220char220char220char220char220char220
+222 314 char221char221char221char221char221char221char221char221char221char221
+223 316 char222char222char222char222char222char222char222char222char222char222
+224 318 char223char223char223char223char223char223char223char223char223char223
+225 320 char224char224char224char224char224char224char224char224char224char224
+226 322 char225char225char225char225char225char225char225char225char225char225
+227 324 char226char226char226char226char226char226char226char226char226char226
+228 326 char227char227char227char227char227char227char227char227char227char227
+229 328 char228char228char228char228char228char228char228char228char228char228
+230 330 char229char229char229char229char229char229char229char229char229char229
+231 332 char230char230char230char230char230char230char230char230char230char230
+232 334 char231char231char231char231char231char231char231char231char231char231
+233 336 char232char232char232char232char232char232char232char232char232char232
+234 338 char233char233char233char233char233char233char233char233char233char233
+235 340 char234char234char234char234char234char234char234char234char234char234
+236 342 char235char235char235char235char235char235char235char235char235char235
+237 344 char236char236char236char236char236char236char236char236char236char236
+238 346 char237char237char237char237char237char237char237char237char237char237
+239 348 char238char238char238char238char238char238char238char238char238char238
+240 350 char239char239char239char239char239char239char239char239char239char239
+241 352 char240char240char240char240char240char240char240char240char240char240
+242 354 char241char241char241char241char241char241char241char241char241char241
+243 356 char242char242char242char242char242char242char242char242char242char242
+244 358 char243char243char243char243char243char243char243char243char243char243
+245 360 char244char244char244char244char244char244char244char244char244char244
+246 362 char245char245char245char245char245char245char245char245char245char245
+247 364 char246char246char246char246char246char246char246char246char246char246
+248 366 char247char247char247char247char247char247char247char247char247char247
+249 368 char248char248char248char248char248char248char248char248char248char248
+250 370 char249char249char249char249char249char249char249char249char249char249
+251 372 char250char250char250char250char250char250char250char250char250char250
+252 374 char251char251char251char251char251char251char251char251char251char251
+253 376 char252char252char252char252char252char252char252char252char252char252
+254 378 char253char253char253char253char253char253char253char253char253char253
+255 380 char254char254char254char254char254char254char254char254char254char254
+256 382 char255char255char255char255char255char255char255char255char255char255
+257 256 char256char256char256char256char256char256char256char256char256char256
+258 258 char257char257char257char257char257char257char257char257char257char257
+259 260 char258char258char258char258char258char258char258char258char258char258
+260 262 char259char259char259char259char259char259char259char259char259char259
+261 264 char260char260char260char260char260char260char260char260char260char260
+262 266 char261char261char261char261char261char261char261char261char261char261
+263 268 char262char262char262char262char262char262char262char262char262char262
+264 270 char263char263char263char263char263char263char263char263char263char263
+265 272 char264char264char264char264char264char264char264char264char264char264
+266 274 char265char265char265char265char265char265char265char265char265char265
+267 276 char266char266char266char266char266char266char266char266char266char266
+268 278 char267char267char267char267char267char267char267char267char267char267
+269 280 char268char268char268char268char268char268char268char268char268char268
+270 282 char269char269char269char269char269char269char269char269char269char269
+271 284 char270char270char270char270char270char270char270char270char270char270
+272 286 char271char271char271char271char271char271char271char271char271char271
+273 288 char272char272char272char272char272char272char272char272char272char272
+274 290 char273char273char273char273char273char273char273char273char273char273
+275 292 char274char274char274char274char274char274char274char274char274char274
+276 294 char275char275char275char275char275char275char275char275char275char275
+277 296 char276char276char276char276char276char276char276char276char276char276
+278 298 char277char277char277char277char277char277char277char277char277char277
+279 300 char278char278char278char278char278char278char278char278char278char278
+280 302 char279char279char279char279char279char279char279char279char279char279
+281 304 char280char280char280char280char280char280char280char280char280char280
+282 306 char281char281char281char281char281char281char281char281char281char281
+283 308 char282char282char282char282char282char282char282char282char282char282
+284 310 char283char283char283char283char283char283char283char283char283char283
+285 312 char284char284char284char284char284char284char284char284char284char284
+286 314 char285char285char285char285char285char285char285char285char285char285
+287 316 char286char286char286char286char286char286char286char286char286char286
+288 318 char287char287char287char287char287char287char287char287char287char287
+289 320 char288char288char288char288char288char288char288char288char288char288
+290 322 char289char289char289char289char289char289char289char289char289char289
+291 324 char290char290char290char290char290char290char290char290char290char290
+292 326 char291char291char291char291char291char291char291char291char291char291
+293 328 char292char292char292char292char292char292char292char292char292char292
+294 330 char293char293char293char293char293char293char293char293char293char293
+295 332 char294char294char294char294char294char294char294char294char294char294
+296 334 char295char295char295char295char295char295char295char295char295char295
+297 336 char296char296char296char296char296char296char296char296char296char296
+298 338 char297char297char297char297char297char297char297char297char297char297
+299 340 char298char298char298char298char298char298char298char298char298char298
+300 342 char299char299char299char299char299char299char299char299char299char299
+301 344 char300char300char300char300char300char300char300char300char300char300
+302 346 char301char301char301char301char301char301char301char301char301char301
+303 348 char302char302char302char302char302char302char302char302char302char302
+304 350 char303char303char303char303char303char303char303char303char303char303
+305 352 char304char304char304char304char304char304char304char304char304char304
+306 354 char305char305char305char305char305char305char305char305char305char305
+307 356 char306char306char306char306char306char306char306char306char306char306
+308 358 char307char307char307char307char307char307char307char307char307char307
+309 360 char308char308char308char308char308char308char308char308char308char308
+310 362 char309char309char309char309char309char309char309char309char309char309
+311 364 char310char310char310char310char310char310char310char310char310char310
+312 366 char311char311char311char311char311char311char311char311char311char311
+313 368 char312char312char312char312char312char312char312char312char312char312
+314 370 char313char313char313char313char313char313char313char313char313char313
+315 372 char314char314char314char314char314char314char314char314char314char314
+316 374 char315char315char315char315char315char315char315char315char315char315
+317 376 char316char316char316char316char316char316char316char316char316char316
+318 378 char317char317char317char317char317char317char317char317char317char317
+319 380 char318char318char318char318char318char318char318char318char318char318
+320 382 char319char319char319char319char319char319char319char319char319char319
+321 384 char320char320char320char320char320char320char320char320char320char320
+322 386 char321char321char321char321char321char321char321char321char321char321
+323 388 char322char322char322char322char322char322char322char322char322char322
+324 390 char323char323char323char323char323char323char323char323char323char323
+325 392 char324char324char324char324char324char324char324char324char324char324
+326 394 char325char325char325char325char325char325char325char325char325char325
+327 396 char326char326char326char326char326char326char326char326char326char326
+328 398 char327char327char327char327char327char327char327char327char327char327
+329 400 char328char328char328char328char328char328char328char328char328char328
+330 402 char329char329char329char329char329char329char329char329char329char329
+331 404 char330char330char330char330char330char330char330char330char330char330
+332 406 char331char331char331char331char331char331char331char331char331char331
+333 408 char332char332char332char332char332char332char332char332char332char332
+334 410 char333char333char333char333char333char333char333char333char333char333
+335 412 char334char334char334char334char334char334char334char334char334char334
+336 414 char335char335char335char335char335char335char335char335char335char335
+337 416 char336char336char336char336char336char336char336char336char336char336
+338 418 char337char337char337char337char337char337char337char337char337char337
+339 420 char338char338char338char338char338char338char338char338char338char338
+340 422 char339char339char339char339char339char339char339char339char339char339
+341 424 char340char340char340char340char340char340char340char340char340char340
+342 426 char341char341char341char341char341char341char341char341char341char341
+343 428 char342char342char342char342char342char342char342char342char342char342
+344 430 char343char343char343char343char343char343char343char343char343char343
+345 432 char344char344char344char344char344char344char344char344char344char344
+346 434 char345char345char345char345char345char345char345char345char345char345
+347 436 char346char346char346char346char346char346char346char346char346char346
+348 438 char347char347char347char347char347char347char347char347char347char347
+349 440 char348char348char348char348char348char348char348char348char348char348
+350 442 char349char349char349char349char349char349char349char349char349char349
+351 444 char350char350char350char350char350char350char350char350char350char350
+352 446 char351char351char351char351char351char351char351char351char351char351
+353 448 char352char352char352char352char352char352char352char352char352char352
+354 450 char353char353char353char353char353char353char353char353char353char353
+355 452 char354char354char354char354char354char354char354char354char354char354
+356 454 char355char355char355char355char355char355char355char355char355char355
+357 456 char356char356char356char356char356char356char356char356char356char356
+358 458 char357char357char357char357char357char357char357char357char357char357
+359 460 char358char358char358char358char358char358char358char358char358char358
+360 462 char359char359char359char359char359char359char359char359char359char359
+361 464 char360char360char360char360char360char360char360char360char360char360
+362 466 char361char361char361char361char361char361char361char361char361char361
+363 468 char362char362char362char362char362char362char362char362char362char362
+364 470 char363char363char363char363char363char363char363char363char363char363
+365 472 char364char364char364char364char364char364char364char364char364char364
+366 474 char365char365char365char365char365char365char365char365char365char365
+367 476 char366char366char366char366char366char366char366char366char366char366
+368 478 char367char367char367char367char367char367char367char367char367char367
+369 480 char368char368char368char368char368char368char368char368char368char368
+370 482 char369char369char369char369char369char369char369char369char369char369
+371 484 char370char370char370char370char370char370char370char370char370char370
+372 486 char371char371char371char371char371char371char371char371char371char371
+373 488 char372char372char372char372char372char372char372char372char372char372
+374 490 char373char373char373char373char373char373char373char373char373char373
+375 492 char374char374char374char374char374char374char374char374char374char374
+376 494 char375char375char375char375char375char375char375char375char375char375
+377 496 char376char376char376char376char376char376char376char376char376char376
+378 498 char377char377char377char377char377char377char377char377char377char377
+379 500 char378char378char378char378char378char378char378char378char378char378
+380 502 char379char379char379char379char379char379char379char379char379char379
+381 504 char380char380char380char380char380char380char380char380char380char380
+382 506 char381char381char381char381char381char381char381char381char381char381
+383 508 char382char382char382char382char382char382char382char382char382char382
+384 510 char383char383char383char383char383char383char383char383char383char383
+385 384 char384char384char384char384char384char384char384char384char384char384
+386 386 char385char385char385char385char385char385char385char385char385char385
+387 388 char386char386char386char386char386char386char386char386char386char386
+388 390 char387char387char387char387char387char387char387char387char387char387
+389 392 char388char388char388char388char388char388char388char388char388char388
+390 394 char389char389char389char389char389char389char389char389char389char389
+391 396 char390char390char390char390char390char390char390char390char390char390
+392 398 char391char391char391char391char391char391char391char391char391char391
+393 400 char392char392char392char392char392char392char392char392char392char392
+394 402 char393char393char393char393char393char393char393char393char393char393
+395 404 char394char394char394char394char394char394char394char394char394char394
+396 406 char395char395char395char395char395char395char395char395char395char395
+397 408 char396char396char396char396char396char396char396char396char396char396
+398 410 char397char397char397char397char397char397char397char397char397char397
+399 412 char398char398char398char398char398char398char398char398char398char398
+400 414 char399char399char399char399char399char399char399char399char399char399
+401 416 char400char400char400char400char400char400char400char400char400char400
+402 418 char401char401char401char401char401char401char401char401char401char401
+403 420 char402char402char402char402char402char402char402char402char402char402
+404 422 char403char403char403char403char403char403char403char403char403char403
+405 424 char404char404char404char404char404char404char404char404char404char404
+406 426 char405char405char405char405char405char405char405char405char405char405
+407 428 char406char406char406char406char406char406char406char406char406char406
+408 430 char407char407char407char407char407char407char407char407char407char407
+409 432 char408char408char408char408char408char408char408char408char408char408
+410 434 char409char409char409char409char409char409char409char409char409char409
+411 436 char410char410char410char410char410char410char410char410char410char410
+412 438 char411char411char411char411char411char411char411char411char411char411
+413 440 char412char412char412char412char412char412char412char412char412char412
+414 442 char413char413char413char413char413char413char413char413char413char413
+415 444 char414char414char414char414char414char414char414char414char414char414
+416 446 char415char415char415char415char415char415char415char415char415char415
+417 448 char416char416char416char416char416char416char416char416char416char416
+418 450 char417char417char417char417char417char417char417char417char417char417
+419 452 char418char418char418char418char418char418char418char418char418char418
+420 454 char419char419char419char419char419char419char419char419char419char419
+421 456 char420char420char420char420char420char420char420char420char420char420
+422 458 char421char421char421char421char421char421char421char421char421char421
+423 460 char422char422char422char422char422char422char422char422char422char422
+424 462 char423char423char423char423char423char423char423char423char423char423
+425 464 char424char424char424char424char424char424char424char424char424char424
+426 466 char425char425char425char425char425char425char425char425char425char425
+427 468 char426char426char426char426char426char426char426char426char426char426
+428 470 char427char427char427char427char427char427char427char427char427char427
+429 472 char428char428char428char428char428char428char428char428char428char428
+430 474 char429char429char429char429char429char429char429char429char429char429
+431 476 char430char430char430char430char430char430char430char430char430char430
+432 478 char431char431char431char431char431char431char431char431char431char431
+433 480 char432char432char432char432char432char432char432char432char432char432
+434 482 char433char433char433char433char433char433char433char433char433char433
+435 484 char434char434char434char434char434char434char434char434char434char434
+436 486 char435char435char435char435char435char435char435char435char435char435
+437 488 char436char436char436char436char436char436char436char436char436char436
+438 490 char437char437char437char437char437char437char437char437char437char437
+439 492 char438char438char438char438char438char438char438char438char438char438
+440 494 char439char439char439char439char439char439char439char439char439char439
+441 496 char440char440char440char440char440char440char440char440char440char440
+442 498 char441char441char441char441char441char441char441char441char441char441
+443 500 char442char442char442char442char442char442char442char442char442char442
+444 502 char443char443char443char443char443char443char443char443char443char443
+445 504 char444char444char444char444char444char444char444char444char444char444
+446 506 char445char445char445char445char445char445char445char445char445char445
+447 508 char446char446char446char446char446char446char446char446char446char446
+448 510 char447char447char447char447char447char447char447char447char447char447
+449 512 char448char448char448char448char448char448char448char448char448char448
+450 514 char449char449char449char449char449char449char449char449char449char449
+451 516 char450char450char450char450char450char450char450char450char450char450
+452 518 char451char451char451char451char451char451char451char451char451char451
+453 520 char452char452char452char452char452char452char452char452char452char452
+454 522 char453char453char453char453char453char453char453char453char453char453
+455 524 char454char454char454char454char454char454char454char454char454char454
+456 526 char455char455char455char455char455char455char455char455char455char455
+457 528 char456char456char456char456char456char456char456char456char456char456
+458 530 char457char457char457char457char457char457char457char457char457char457
+459 532 char458char458char458char458char458char458char458char458char458char458
+460 534 char459char459char459char459char459char459char459char459char459char459
+461 536 char460char460char460char460char460char460char460char460char460char460
+462 538 char461char461char461char461char461char461char461char461char461char461
+463 540 char462char462char462char462char462char462char462char462char462char462
+464 542 char463char463char463char463char463char463char463char463char463char463
+465 544 char464char464char464char464char464char464char464char464char464char464
+466 546 char465char465char465char465char465char465char465char465char465char465
+467 548 char466char466char466char466char466char466char466char466char466char466
+468 550 char467char467char467char467char467char467char467char467char467char467
+469 552 char468char468char468char468char468char468char468char468char468char468
+470 554 char469char469char469char469char469char469char469char469char469char469
+471 556 char470char470char470char470char470char470char470char470char470char470
+472 558 char471char471char471char471char471char471char471char471char471char471
+473 560 char472char472char472char472char472char472char472char472char472char472
+474 562 char473char473char473char473char473char473char473char473char473char473
+475 564 char474char474char474char474char474char474char474char474char474char474
+476 566 char475char475char475char475char475char475char475char475char475char475
+477 568 char476char476char476char476char476char476char476char476char476char476
+478 570 char477char477char477char477char477char477char477char477char477char477
+479 572 char478char478char478char478char478char478char478char478char478char478
+480 574 char479char479char479char479char479char479char479char479char479char479
+481 576 char480char480char480char480char480char480char480char480char480char480
+482 578 char481char481char481char481char481char481char481char481char481char481
+483 580 char482char482char482char482char482char482char482char482char482char482
+484 582 char483char483char483char483char483char483char483char483char483char483
+485 584 char484char484char484char484char484char484char484char484char484char484
+486 586 char485char485char485char485char485char485char485char485char485char485
+487 588 char486char486char486char486char486char486char486char486char486char486
+488 590 char487char487char487char487char487char487char487char487char487char487
+489 592 char488char488char488char488char488char488char488char488char488char488
+490 594 char489char489char489char489char489char489char489char489char489char489
+491 596 char490char490char490char490char490char490char490char490char490char490
+492 598 char491char491char491char491char491char491char491char491char491char491
+493 600 char492char492char492char492char492char492char492char492char492char492
+494 602 char493char493char493char493char493char493char493char493char493char493
+495 604 char494char494char494char494char494char494char494char494char494char494
+496 606 char495char495char495char495char495char495char495char495char495char495
+497 608 char496char496char496char496char496char496char496char496char496char496
+498 610 char497char497char497char497char497char497char497char497char497char497
+499 612 char498char498char498char498char498char498char498char498char498char498
+500 614 char499char499char499char499char499char499char499char499char499char499
+501 616 char500char500char500char500char500char500char500char500char500char500
+502 618 char501char501char501char501char501char501char501char501char501char501
+503 620 char502char502char502char502char502char502char502char502char502char502
+504 622 char503char503char503char503char503char503char503char503char503char503
+505 624 char504char504char504char504char504char504char504char504char504char504
+506 626 char505char505char505char505char505char505char505char505char505char505
+507 628 char506char506char506char506char506char506char506char506char506char506
+508 630 char507char507char507char507char507char507char507char507char507char507
+509 632 char508char508char508char508char508char508char508char508char508char508
+510 634 char509char509char509char509char509char509char509char509char509char509
+511 636 char510char510char510char510char510char510char510char510char510char510
+512 638 char511char511char511char511char511char511char511char511char511char511
+513 512 char512char512char512char512char512char512char512char512char512char512
+514 514 char513char513char513char513char513char513char513char513char513char513
+515 516 char514char514char514char514char514char514char514char514char514char514
+516 518 char515char515char515char515char515char515char515char515char515char515
+517 520 char516char516char516char516char516char516char516char516char516char516
+518 522 char517char517char517char517char517char517char517char517char517char517
+519 524 char518char518char518char518char518char518char518char518char518char518
+520 526 char519char519char519char519char519char519char519char519char519char519
+521 528 char520char520char520char520char520char520char520char520char520char520
+522 530 char521char521char521char521char521char521char521char521char521char521
+523 532 char522char522char522char522char522char522char522char522char522char522
+524 534 char523char523char523char523char523char523char523char523char523char523
+525 536 char524char524char524char524char524char524char524char524char524char524
+526 538 char525char525char525char525char525char525char525char525char525char525
+527 540 char526char526char526char526char526char526char526char526char526char526
+528 542 char527char527char527char527char527char527char527char527char527char527
+529 544 char528char528char528char528char528char528char528char528char528char528
+530 546 char529char529char529char529char529char529char529char529char529char529
+531 548 char530char530char530char530char530char530char530char530char530char530
+532 550 char531char531char531char531char531char531char531char531char531char531
+533 552 char532char532char532char532char532char532char532char532char532char532
+534 554 char533char533char533char533char533char533char533char533char533char533
+535 556 char534char534char534char534char534char534char534char534char534char534
+536 558 char535char535char535char535char535char535char535char535char535char535
+537 560 char536char536char536char536char536char536char536char536char536char536
+538 562 char537char537char537char537char537char537char537char537char537char537
+539 564 char538char538char538char538char538char538char538char538char538char538
+540 566 char539char539char539char539char539char539char539char539char539char539
+541 568 char540char540char540char540char540char540char540char540char540char540
+542 570 char541char541char541char541char541char541char541char541char541char541
+543 572 char542char542char542char542char542char542char542char542char542char542
+544 574 char543char543char543char543char543char543char543char543char543char543
+545 576 char544char544char544char544char544char544char544char544char544char544
+546 578 char545char545char545char545char545char545char545char545char545char545
+547 580 char546char546char546char546char546char546char546char546char546char546
+548 582 char547char547char547char547char547char547char547char547char547char547
+549 584 char548char548char548char548char548char548char548char548char548char548
+550 586 char549char549char549char549char549char549char549char549char549char549
+551 588 char550char550char550char550char550char550char550char550char550char550
+552 590 char551char551char551char551char551char551char551char551char551char551
+553 592 char552char552char552char552char552char552char552char552char552char552
+554 594 char553char553char553char553char553char553char553char553char553char553
+555 596 char554char554char554char554char554char554char554char554char554char554
+556 598 char555char555char555char555char555char555char555char555char555char555
+557 600 char556char556char556char556char556char556char556char556char556char556
+558 602 char557char557char557char557char557char557char557char557char557char557
+559 604 char558char558char558char558char558char558char558char558char558char558
+560 606 char559char559char559char559char559char559char559char559char559char559
+561 608 char560char560char560char560char560char560char560char560char560char560
+562 610 char561char561char561char561char561char561char561char561char561char561
+563 612 char562char562char562char562char562char562char562char562char562char562
+564 614 char563char563char563char563char563char563char563char563char563char563
+565 616 char564char564char564char564char564char564char564char564char564char564
+566 618 char565char565char565char565char565char565char565char565char565char565
+567 620 char566char566char566char566char566char566char566char566char566char566
+568 622 char567char567char567char567char567char567char567char567char567char567
+569 624 char568char568char568char568char568char568char568char568char568char568
+570 626 char569char569char569char569char569char569char569char569char569char569
+571 628 char570char570char570char570char570char570char570char570char570char570
+572 630 char571char571char571char571char571char571char571char571char571char571
+573 632 char572char572char572char572char572char572char572char572char572char572
+574 634 char573char573char573char573char573char573char573char573char573char573
+575 636 char574char574char574char574char574char574char574char574char574char574
+576 638 char575char575char575char575char575char575char575char575char575char575
+577 640 char576char576char576char576char576char576char576char576char576char576
+578 642 char577char577char577char577char577char577char577char577char577char577
+579 644 char578char578char578char578char578char578char578char578char578char578
+580 646 char579char579char579char579char579char579char579char579char579char579
+581 648 char580char580char580char580char580char580char580char580char580char580
+582 650 char581char581char581char581char581char581char581char581char581char581
+583 652 char582char582char582char582char582char582char582char582char582char582
+584 654 char583char583char583char583char583char583char583char583char583char583
+585 656 char584char584char584char584char584char584char584char584char584char584
+586 658 char585char585char585char585char585char585char585char585char585char585
+587 660 char586char586char586char586char586char586char586char586char586char586
+588 662 char587char587char587char587char587char587char587char587char587char587
+589 664 char588char588char588char588char588char588char588char588char588char588
+590 666 char589char589char589char589char589char589char589char589char589char589
+591 668 char590char590char590char590char590char590char590char590char590char590
+592 670 char591char591char591char591char591char591char591char591char591char591
+593 672 char592char592char592char592char592char592char592char592char592char592
+594 674 char593char593char593char593char593char593char593char593char593char593
+595 676 char594char594char594char594char594char594char594char594char594char594
+596 678 char595char595char595char595char595char595char595char595char595char595
+597 680 char596char596char596char596char596char596char596char596char596char596
+598 682 char597char597char597char597char597char597char597char597char597char597
+599 684 char598char598char598char598char598char598char598char598char598char598
+600 686 char599char599char599char599char599char599char599char599char599char599
+601 688 char600char600char600char600char600char600char600char600char600char600
+602 690 char601char601char601char601char601char601char601char601char601char601
+603 692 char602char602char602char602char602char602char602char602char602char602
+604 694 char603char603char603char603char603char603char603char603char603char603
+605 696 char604char604char604char604char604char604char604char604char604char604
+606 698 char605char605char605char605char605char605char605char605char605char605
+607 700 char606char606char606char606char606char606char606char606char606char606
+608 702 char607char607char607char607char607char607char607char607char607char607
+609 704 char608char608char608char608char608char608char608char608char608char608
+610 706 char609char609char609char609char609char609char609char609char609char609
+611 708 char610char610char610char610char610char610char610char610char610char610
+612 710 char611char611char611char611char611char611char611char611char611char611
+613 712 char612char612char612char612char612char612char612char612char612char612
+614 714 char613char613char613char613char613char613char613char613char613char613
+615 716 char614char614char614char614char614char614char614char614char614char614
+616 718 char615char615char615char615char615char615char615char615char615char615
+617 720 char616char616char616char616char616char616char616char616char616char616
+618 722 char617char617char617char617char617char617char617char617char617char617
+619 724 char618char618char618char618char618char618char618char618char618char618
+620 726 char619char619char619char619char619char619char619char619char619char619
+621 728 char620char620char620char620char620char620char620char620char620char620
+622 730 char621char621char621char621char621char621char621char621char621char621
+623 732 char622char622char622char622char622char622char622char622char622char622
+624 734 char623char623char623char623char623char623char623char623char623char623
+625 736 char624char624char624char624char624char624char624char624char624char624
+626 738 char625char625char625char625char625char625char625char625char625char625
+627 740 char626char626char626char626char626char626char626char626char626char626
+628 742 char627char627char627char627char627char627char627char627char627char627
+629 744 char628char628char628char628char628char628char628char628char628char628
+630 746 char629char629char629char629char629char629char629char629char629char629
+631 748 char630char630char630char630char630char630char630char630char630char630
+632 750 char631char631char631char631char631char631char631char631char631char631
+633 752 char632char632char632char632char632char632char632char632char632char632
+634 754 char633char633char633char633char633char633char633char633char633char633
+635 756 char634char634char634char634char634char634char634char634char634char634
+636 758 char635char635char635char635char635char635char635char635char635char635
+637 760 char636char636char636char636char636char636char636char636char636char636
+638 762 char637char637char637char637char637char637char637char637char637char637
+639 764 char638char638char638char638char638char638char638char638char638char638
+640 766 char639char639char639char639char639char639char639char639char639char639
+641 640 char640char640char640char640char640char640char640char640char640char640
+642 642 char641char641char641char641char641char641char641char641char641char641
+643 644 char642char642char642char642char642char642char642char642char642char642
+644 646 char643char643char643char643char643char643char643char643char643char643
+645 648 char644char644char644char644char644char644char644char644char644char644
+646 650 char645char645char645char645char645char645char645char645char645char645
+647 652 char646char646char646char646char646char646char646char646char646char646
+648 654 char647char647char647char647char647char647char647char647char647char647
+649 656 char648char648char648char648char648char648char648char648char648char648
+650 658 char649char649char649char649char649char649char649char649char649char649
+651 660 char650char650char650char650char650char650char650char650char650char650
+652 662 char651char651char651char651char651char651char651char651char651char651
+653 664 char652char652char652char652char652char652char652char652char652char652
+654 666 char653char653char653char653char653char653char653char653char653char653
+655 668 char654char654char654char654char654char654char654char654char654char654
+656 670 char655char655char655char655char655char655char655char655char655char655
+657 672 char656char656char656char656char656char656char656char656char656char656
+658 674 char657char657char657char657char657char657char657char657char657char657
+659 676 char658char658char658char658char658char658char658char658char658char658
+660 678 char659char659char659char659char659char659char659char659char659char659
+661 680 char660char660char660char660char660char660char660char660char660char660
+662 682 char661char661char661char661char661char661char661char661char661char661
+663 684 char662char662char662char662char662char662char662char662char662char662
+664 686 char663char663char663char663char663char663char663char663char663char663
+665 688 char664char664char664char664char664char664char664char664char664char664
+666 690 char665char665char665char665char665char665char665char665char665char665
+667 692 char666char666char666char666char666char666char666char666char666char666
+668 694 char667char667char667char667char667char667char667char667char667char667
+669 696 char668char668char668char668char668char668char668char668char668char668
+670 698 char669char669char669char669char669char669char669char669char669char669
+671 700 char670char670char670char670char670char670char670char670char670char670
+672 702 char671char671char671char671char671char671char671char671char671char671
+673 704 char672char672char672char672char672char672char672char672char672char672
+674 706 char673char673char673char673char673char673char673char673char673char673
+675 708 char674char674char674char674char674char674char674char674char674char674
+676 710 char675char675char675char675char675char675char675char675char675char675
+677 712 char676char676char676char676char676char676char676char676char676char676
+678 714 char677char677char677char677char677char677char677char677char677char677
+679 716 char678char678char678char678char678char678char678char678char678char678
+680 718 char679char679char679char679char679char679char679char679char679char679
+681 720 char680char680char680char680char680char680char680char680char680char680
+682 722 char681char681char681char681char681char681char681char681char681char681
+683 724 char682char682char682char682char682char682char682char682char682char682
+684 726 char683char683char683char683char683char683char683char683char683char683
+685 728 char684char684char684char684char684char684char684char684char684char684
+686 730 char685char685char685char685char685char685char685char685char685char685
+687 732 char686char686char686char686char686char686char686char686char686char686
+688 734 char687char687char687char687char687char687char687char687char687char687
+689 736 char688char688char688char688char688char688char688char688char688char688
+690 738 char689char689char689char689char689char689char689char689char689char689
+691 740 char690char690char690char690char690char690char690char690char690char690
+692 742 char691char691char691char691char691char691char691char691char691char691
+693 744 char692char692char692char692char692char692char692char692char692char692
+694 746 char693char693char693char693char693char693char693char693char693char693
+695 748 char694char694char694char694char694char694char694char694char694char694
+696 750 char695char695char695char695char695char695char695char695char695char695
+697 752 char696char696char696char696char696char696char696char696char696char696
+698 754 char697char697char697char697char697char697char697char697char697char697
+699 756 char698char698char698char698char698char698char698char698char698char698
+700 758 char699char699char699char699char699char699char699char699char699char699
+701 760 char700char700char700char700char700char700char700char700char700char700
+702 762 char701char701char701char701char701char701char701char701char701char701
+703 764 char702char702char702char702char702char702char702char702char702char702
+704 766 char703char703char703char703char703char703char703char703char703char703
+705 768 char704char704char704char704char704char704char704char704char704char704
+706 770 char705char705char705char705char705char705char705char705char705char705
+707 772 char706char706char706char706char706char706char706char706char706char706
+708 774 char707char707char707char707char707char707char707char707char707char707
+709 776 char708char708char708char708char708char708char708char708char708char708
+710 778 char709char709char709char709char709char709char709char709char709char709
+711 780 char710char710char710char710char710char710char710char710char710char710
+712 782 char711char711char711char711char711char711char711char711char711char711
+713 784 char712char712char712char712char712char712char712char712char712char712
+714 786 char713char713char713char713char713char713char713char713char713char713
+715 788 char714char714char714char714char714char714char714char714char714char714
+716 790 char715char715char715char715char715char715char715char715char715char715
+717 792 char716char716char716char716char716char716char716char716char716char716
+718 794 char717char717char717char717char717char717char717char717char717char717
+719 796 char718char718char718char718char718char718char718char718char718char718
+720 798 char719char719char719char719char719char719char719char719char719char719
+721 800 char720char720char720char720char720char720char720char720char720char720
+722 802 char721char721char721char721char721char721char721char721char721char721
+723 804 char722char722char722char722char722char722char722char722char722char722
+724 806 char723char723char723char723char723char723char723char723char723char723
+725 808 char724char724char724char724char724char724char724char724char724char724
+726 810 char725char725char725char725char725char725char725char725char725char725
+727 812 char726char726char726char726char726char726char726char726char726char726
+728 814 char727char727char727char727char727char727char727char727char727char727
+729 816 char728char728char728char728char728char728char728char728char728char728
+730 818 char729char729char729char729char729char729char729char729char729char729
+731 820 char730char730char730char730char730char730char730char730char730char730
+732 822 char731char731char731char731char731char731char731char731char731char731
+733 824 char732char732char732char732char732char732char732char732char732char732
+734 826 char733char733char733char733char733char733char733char733char733char733
+735 828 char734char734char734char734char734char734char734char734char734char734
+736 830 char735char735char735char735char735char735char735char735char735char735
+737 832 char736char736char736char736char736char736char736char736char736char736
+738 834 char737char737char737char737char737char737char737char737char737char737
+739 836 char738char738char738char738char738char738char738char738char738char738
+740 838 char739char739char739char739char739char739char739char739char739char739
+741 840 char740char740char740char740char740char740char740char740char740char740
+742 842 char741char741char741char741char741char741char741char741char741char741
+743 844 char742char742char742char742char742char742char742char742char742char742
+744 846 char743char743char743char743char743char743char743char743char743char743
+745 848 char744char744char744char744char744char744char744char744char744char744
+746 850 char745char745char745char745char745char745char745char745char745char745
+747 852 char746char746char746char746char746char746char746char746char746char746
+748 854 char747char747char747char747char747char747char747char747char747char747
+749 856 char748char748char748char748char748char748char748char748char748char748
+750 858 char749char749char749char749char749char749char749char749char749char749
+751 860 char750char750char750char750char750char750char750char750char750char750
+752 862 char751char751char751char751char751char751char751char751char751char751
+753 864 char752char752char752char752char752char752char752char752char752char752
+754 866 char753char753char753char753char753char753char753char753char753char753
+755 868 char754char754char754char754char754char754char754char754char754char754
+756 870 char755char755char755char755char755char755char755char755char755char755
+757 872 char756char756char756char756char756char756char756char756char756char756
+758 874 char757char757char757char757char757char757char757char757char757char757
+759 876 char758char758char758char758char758char758char758char758char758char758
+760 878 char759char759char759char759char759char759char759char759char759char759
+761 880 char760char760char760char760char760char760char760char760char760char760
+762 882 char761char761char761char761char761char761char761char761char761char761
+763 884 char762char762char762char762char762char762char762char762char762char762
+764 886 char763char763char763char763char763char763char763char763char763char763
+765 888 char764char764char764char764char764char764char764char764char764char764
+766 890 char765char765char765char765char765char765char765char765char765char765
+767 892 char766char766char766char766char766char766char766char766char766char766
+768 894 char767char767char767char767char767char767char767char767char767char767
+769 768 char768char768char768char768char768char768char768char768char768char768
+770 770 char769char769char769char769char769char769char769char769char769char769
+771 772 char770char770char770char770char770char770char770char770char770char770
+772 774 char771char771char771char771char771char771char771char771char771char771
+773 776 char772char772char772char772char772char772char772char772char772char772
+774 778 char773char773char773char773char773char773char773char773char773char773
+775 780 char774char774char774char774char774char774char774char774char774char774
+776 782 char775char775char775char775char775char775char775char775char775char775
+777 784 char776char776char776char776char776char776char776char776char776char776
+778 786 char777char777char777char777char777char777char777char777char777char777
+779 788 char778char778char778char778char778char778char778char778char778char778
+780 790 char779char779char779char779char779char779char779char779char779char779
+781 792 char780char780char780char780char780char780char780char780char780char780
+782 794 char781char781char781char781char781char781char781char781char781char781
+783 796 char782char782char782char782char782char782char782char782char782char782
+784 798 char783char783char783char783char783char783char783char783char783char783
+785 800 char784char784char784char784char784char784char784char784char784char784
+786 802 char785char785char785char785char785char785char785char785char785char785
+787 804 char786char786char786char786char786char786char786char786char786char786
+788 806 char787char787char787char787char787char787char787char787char787char787
+789 808 char788char788char788char788char788char788char788char788char788char788
+790 810 char789char789char789char789char789char789char789char789char789char789
+791 812 char790char790char790char790char790char790char790char790char790char790
+792 814 char791char791char791char791char791char791char791char791char791char791
+793 816 char792char792char792char792char792char792char792char792char792char792
+794 818 char793char793char793char793char793char793char793char793char793char793
+795 820 char794char794char794char794char794char794char794char794char794char794
+796 822 char795char795char795char795char795char795char795char795char795char795
+797 824 char796char796char796char796char796char796char796char796char796char796
+798 826 char797char797char797char797char797char797char797char797char797char797
+799 828 char798char798char798char798char798char798char798char798char798char798
+800 830 char799char799char799char799char799char799char799char799char799char799
+801 832 char800char800char800char800char800char800char800char800char800char800
+802 834 char801char801char801char801char801char801char801char801char801char801
+803 836 char802char802char802char802char802char802char802char802char802char802
+804 838 char803char803char803char803char803char803char803char803char803char803
+805 840 char804char804char804char804char804char804char804char804char804char804
+806 842 char805char805char805char805char805char805char805char805char805char805
+807 844 char806char806char806char806char806char806char806char806char806char806
+808 846 char807char807char807char807char807char807char807char807char807char807
+809 848 char808char808char808char808char808char808char808char808char808char808
+810 850 char809char809char809char809char809char809char809char809char809char809
+811 852 char810char810char810char810char810char810char810char810char810char810
+812 854 char811char811char811char811char811char811char811char811char811char811
+813 856 char812char812char812char812char812char812char812char812char812char812
+814 858 char813char813char813char813char813char813char813char813char813char813
+815 860 char814char814char814char814char814char814char814char814char814char814
+816 862 char815char815char815char815char815char815char815char815char815char815
+817 864 char816char816char816char816char816char816char816char816char816char816
+818 866 char817char817char817char817char817char817char817char817char817char817
+819 868 char818char818char818char818char818char818char818char818char818char818
+820 870 char819char819char819char819char819char819char819char819char819char819
+821 872 char820char820char820char820char820char820char820char820char820char820
+822 874 char821char821char821char821char821char821char821char821char821char821
+823 876 char822char822char822char822char822char822char822char822char822char822
+824 878 char823char823char823char823char823char823char823char823char823char823
+825 880 char824char824char824char824char824char824char824char824char824char824
+826 882 char825char825char825char825char825char825char825char825char825char825
+827 884 char826char826char826char826char826char826char826char826char826char826
+828 886 char827char827char827char827char827char827char827char827char827char827
+829 888 char828char828char828char828char828char828char828char828char828char828
+830 890 char829char829char829char829char829char829char829char829char829char829
+831 892 char830char830char830char830char830char830char830char830char830char830
+832 894 char831char831char831char831char831char831char831char831char831char831
+833 896 char832char832char832char832char832char832char832char832char832char832
+834 898 char833char833char833char833char833char833char833char833char833char833
+835 900 char834char834char834char834char834char834char834char834char834char834
+836 902 char835char835char835char835char835char835char835char835char835char835
+837 904 char836char836char836char836char836char836char836char836char836char836
+838 906 char837char837char837char837char837char837char837char837char837char837
+839 908 char838char838char838char838char838char838char838char838char838char838
+840 910 char839char839char839char839char839char839char839char839char839char839
+841 912 char840char840char840char840char840char840char840char840char840char840
+842 914 char841char841char841char841char841char841char841char841char841char841
+843 916 char842char842char842char842char842char842char842char842char842char842
+844 918 char843char843char843char843char843char843char843char843char843char843
+845 920 char844char844char844char844char844char844char844char844char844char844
+846 922 char845char845char845char845char845char845char845char845char845char845
+847 924 char846char846char846char846char846char846char846char846char846char846
+848 926 char847char847char847char847char847char847char847char847char847char847
+849 928 char848char848char848char848char848char848char848char848char848char848
+850 930 char849char849char849char849char849char849char849char849char849char849
+851 932 char850char850char850char850char850char850char850char850char850char850
+852 934 char851char851char851char851char851char851char851char851char851char851
+853 936 char852char852char852char852char852char852char852char852char852char852
+854 938 char853char853char853char853char853char853char853char853char853char853
+855 940 char854char854char854char854char854char854char854char854char854char854
+856 942 char855char855char855char855char855char855char855char855char855char855
+857 944 char856char856char856char856char856char856char856char856char856char856
+858 946 char857char857char857char857char857char857char857char857char857char857
+859 948 char858char858char858char858char858char858char858char858char858char858
+860 950 char859char859char859char859char859char859char859char859char859char859
+861 952 char860char860char860char860char860char860char860char860char860char860
+862 954 char861char861char861char861char861char861char861char861char861char861
+863 956 char862char862char862char862char862char862char862char862char862char862
+864 958 char863char863char863char863char863char863char863char863char863char863
+865 960 char864char864char864char864char864char864char864char864char864char864
+866 962 char865char865char865char865char865char865char865char865char865char865
+867 964 char866char866char866char866char866char866char866char866char866char866
+868 966 char867char867char867char867char867char867char867char867char867char867
+869 968 char868char868char868char868char868char868char868char868char868char868
+870 970 char869char869char869char869char869char869char869char869char869char869
+871 972 char870char870char870char870char870char870char870char870char870char870
+872 974 char871char871char871char871char871char871char871char871char871char871
+873 976 char872char872char872char872char872char872char872char872char872char872
+874 978 char873char873char873char873char873char873char873char873char873char873
+875 980 char874char874char874char874char874char874char874char874char874char874
+876 982 char875char875char875char875char875char875char875char875char875char875
+877 984 char876char876char876char876char876char876char876char876char876char876
+878 986 char877char877char877char877char877char877char877char877char877char877
+879 988 char878char878char878char878char878char878char878char878char878char878
+880 990 char879char879char879char879char879char879char879char879char879char879
+881 992 char880char880char880char880char880char880char880char880char880char880
+882 994 char881char881char881char881char881char881char881char881char881char881
+883 996 char882char882char882char882char882char882char882char882char882char882
+884 998 char883char883char883char883char883char883char883char883char883char883
+885 1000 char884char884char884char884char884char884char884char884char884char884
+886 1002 char885char885char885char885char885char885char885char885char885char885
+887 1004 char886char886char886char886char886char886char886char886char886char886
+888 1006 char887char887char887char887char887char887char887char887char887char887
+889 1008 char888char888char888char888char888char888char888char888char888char888
+890 1010 char889char889char889char889char889char889char889char889char889char889
+891 1012 char890char890char890char890char890char890char890char890char890char890
+892 1014 char891char891char891char891char891char891char891char891char891char891
+893 1016 char892char892char892char892char892char892char892char892char892char892
+894 1018 char893char893char893char893char893char893char893char893char893char893
+895 1020 char894char894char894char894char894char894char894char894char894char894
+896 1022 char895char895char895char895char895char895char895char895char895char895
+897 896 char896char896char896char896char896char896char896char896char896char896
+898 898 char897char897char897char897char897char897char897char897char897char897
+899 900 char898char898char898char898char898char898char898char898char898char898
+900 902 char899char899char899char899char899char899char899char899char899char899
+901 904 char900char900char900char900char900char900char900char900char900char900
+902 906 char901char901char901char901char901char901char901char901char901char901
+903 908 char902char902char902char902char902char902char902char902char902char902
+904 910 char903char903char903char903char903char903char903char903char903char903
+905 912 char904char904char904char904char904char904char904char904char904char904
+906 914 char905char905char905char905char905char905char905char905char905char905
+907 916 char906char906char906char906char906char906char906char906char906char906
+908 918 char907char907char907char907char907char907char907char907char907char907
+909 920 char908char908char908char908char908char908char908char908char908char908
+910 922 char909char909char909char909char909char909char909char909char909char909
+911 924 char910char910char910char910char910char910char910char910char910char910
+912 926 char911char911char911char911char911char911char911char911char911char911
+913 928 char912char912char912char912char912char912char912char912char912char912
+914 930 char913char913char913char913char913char913char913char913char913char913
+915 932 char914char914char914char914char914char914char914char914char914char914
+916 934 char915char915char915char915char915char915char915char915char915char915
+917 936 char916char916char916char916char916char916char916char916char916char916
+918 938 char917char917char917char917char917char917char917char917char917char917
+919 940 char918char918char918char918char918char918char918char918char918char918
+920 942 char919char919char919char919char919char919char919char919char919char919
+921 944 char920char920char920char920char920char920char920char920char920char920
+922 946 char921char921char921char921char921char921char921char921char921char921
+923 948 char922char922char922char922char922char922char922char922char922char922
+924 950 char923char923char923char923char923char923char923char923char923char923
+925 952 char924char924char924char924char924char924char924char924char924char924
+926 954 char925char925char925char925char925char925char925char925char925char925
+927 956 char926char926char926char926char926char926char926char926char926char926
+928 958 char927char927char927char927char927char927char927char927char927char927
+929 960 char928char928char928char928char928char928char928char928char928char928
+930 962 char929char929char929char929char929char929char929char929char929char929
+931 964 char930char930char930char930char930char930char930char930char930char930
+932 966 char931char931char931char931char931char931char931char931char931char931
+933 968 char932char932char932char932char932char932char932char932char932char932
+934 970 char933char933char933char933char933char933char933char933char933char933
+935 972 char934char934char934char934char934char934char934char934char934char934
+936 974 char935char935char935char935char935char935char935char935char935char935
+937 976 char936char936char936char936char936char936char936char936char936char936
+938 978 char937char937char937char937char937char937char937char937char937char937
+939 980 char938char938char938char938char938char938char938char938char938char938
+940 982 char939char939char939char939char939char939char939char939char939char939
+941 984 char940char940char940char940char940char940char940char940char940char940
+942 986 char941char941char941char941char941char941char941char941char941char941
+943 988 char942char942char942char942char942char942char942char942char942char942
+944 990 char943char943char943char943char943char943char943char943char943char943
+945 992 char944char944char944char944char944char944char944char944char944char944
+946 994 char945char945char945char945char945char945char945char945char945char945
+947 996 char946char946char946char946char946char946char946char946char946char946
+948 998 char947char947char947char947char947char947char947char947char947char947
+949 1000 char948char948char948char948char948char948char948char948char948char948
+950 1002 char949char949char949char949char949char949char949char949char949char949
+951 1004 char950char950char950char950char950char950char950char950char950char950
+952 1006 char951char951char951char951char951char951char951char951char951char951
+953 1008 char952char952char952char952char952char952char952char952char952char952
+954 1010 char953char953char953char953char953char953char953char953char953char953
+955 1012 char954char954char954char954char954char954char954char954char954char954
+956 1014 char955char955char955char955char955char955char955char955char955char955
+957 1016 char956char956char956char956char956char956char956char956char956char956
+958 1018 char957char957char957char957char957char957char957char957char957char957
+959 1020 char958char958char958char958char958char958char958char958char958char958
+960 1022 char959char959char959char959char959char959char959char959char959char959
+961 1024 char960char960char960char960char960char960char960char960char960char960
+962 1026 char961char961char961char961char961char961char961char961char961char961
+963 1028 char962char962char962char962char962char962char962char962char962char962
+964 1030 char963char963char963char963char963char963char963char963char963char963
+965 1032 char964char964char964char964char964char964char964char964char964char964
+966 1034 char965char965char965char965char965char965char965char965char965char965
+967 1036 char966char966char966char966char966char966char966char966char966char966
+968 1038 char967char967char967char967char967char967char967char967char967char967
+969 1040 char968char968char968char968char968char968char968char968char968char968
+970 1042 char969char969char969char969char969char969char969char969char969char969
+971 1044 char970char970char970char970char970char970char970char970char970char970
+972 1046 char971char971char971char971char971char971char971char971char971char971
+973 1048 char972char972char972char972char972char972char972char972char972char972
+974 1050 char973char973char973char973char973char973char973char973char973char973
+975 1052 char974char974char974char974char974char974char974char974char974char974
+976 1054 char975char975char975char975char975char975char975char975char975char975
+977 1056 char976char976char976char976char976char976char976char976char976char976
+978 1058 char977char977char977char977char977char977char977char977char977char977
+979 1060 char978char978char978char978char978char978char978char978char978char978
+980 1062 char979char979char979char979char979char979char979char979char979char979
+981 1064 char980char980char980char980char980char980char980char980char980char980
+982 1066 char981char981char981char981char981char981char981char981char981char981
+983 1068 char982char982char982char982char982char982char982char982char982char982
+984 1070 char983char983char983char983char983char983char983char983char983char983
+985 1072 char984char984char984char984char984char984char984char984char984char984
+986 1074 char985char985char985char985char985char985char985char985char985char985
+987 1076 char986char986char986char986char986char986char986char986char986char986
+988 1078 char987char987char987char987char987char987char987char987char987char987
+989 1080 char988char988char988char988char988char988char988char988char988char988
+990 1082 char989char989char989char989char989char989char989char989char989char989
+991 1084 char990char990char990char990char990char990char990char990char990char990
+992 1086 char991char991char991char991char991char991char991char991char991char991
+993 1088 char992char992char992char992char992char992char992char992char992char992
+994 1090 char993char993char993char993char993char993char993char993char993char993
+995 1092 char994char994char994char994char994char994char994char994char994char994
+996 1094 char995char995char995char995char995char995char995char995char995char995
+997 1096 char996char996char996char996char996char996char996char996char996char996
+998 1098 char997char997char997char997char997char997char997char997char997char997
+999 1100 char998char998char998char998char998char998char998char998char998char998
+1000 1102 char999char999char999char999char999char999char999char999char999char999
+1001 \N \N
+
diff --git a/regression-test/suites/export/test_outfile.groovy b/regression-test/suites/export/test_outfile.groovy
index d04c5bb5e7..84b0ada7cb 100644
--- a/regression-test/suites/export/test_outfile.groovy
+++ b/regression-test/suites/export/test_outfile.groovy
@@ -21,7 +21,7 @@ import java.nio.charset.StandardCharsets
import java.nio.file.Files
import java.nio.file.Paths
-suite("test_outfile", "export") {
+suite("test_outfile", "basic") {
StringBuilder strBuilder = new StringBuilder()
strBuilder.append("curl --location-trusted -u " + context.config.jdbcUser + ":" + context.config.jdbcPassword)
strBuilder.append(" http://" + context.config.feHttpAddress + "/rest/v1/config/fe")
diff --git a/regression-test/suites/export/test_outfile.groovy b/regression-test/suites/export/test_outfile_expr.groovy
similarity index 91%
copy from regression-test/suites/export/test_outfile.groovy
copy to regression-test/suites/export/test_outfile_expr.groovy
index d04c5bb5e7..9d8600434d 100644
--- a/regression-test/suites/export/test_outfile.groovy
+++ b/regression-test/suites/export/test_outfile_expr.groovy
@@ -21,7 +21,7 @@ import java.nio.charset.StandardCharsets
import java.nio.file.Files
import java.nio.file.Paths
-suite("test_outfile", "export") {
+suite("test_outfile", "expr") {
StringBuilder strBuilder = new StringBuilder()
strBuilder.append("curl --location-trusted -u " + context.config.jdbcUser + ":" + context.config.jdbcPassword)
strBuilder.append(" http://" + context.config.feHttpAddress + "/rest/v1/config/fe")
@@ -48,8 +48,8 @@ suite("test_outfile", "export") {
logger.warn("Please set enable_outfile_to_local to true to run test_outfile")
return
}
- def tableName = "outfile_test"
- def outFilePath = """${context.file.parent}/tmp"""
+ def tableName = "outfile_test_expr"
+ def outFilePath = """${context.file.parent}/tmp_expr"""
try {
sql """ DROP TABLE IF EXISTS ${tableName} """
sql """
@@ -84,7 +84,7 @@ suite("test_outfile", "export") {
sql """ INSERT INTO ${tableName} VALUES
${sb.toString()}
"""
- qt_select_default """ SELECT * FROM ${tableName} t ORDER BY user_id; """
+ qt_select_default """ SELECT user_id+1, age+sex, repeat(char_col, 10) FROM ${tableName} t ORDER BY user_id; """
// check outfile
File path = new File(outFilePath)
@@ -94,12 +94,12 @@ suite("test_outfile", "export") {
throw new IllegalStateException("""${outFilePath} already exists! """)
}
sql """
- SELECT * FROM ${tableName} t ORDER BY user_id INTO OUTFILE "file://${outFilePath}/";
+ SELECT user_id+1, age+sex, repeat(char_col, 10) FROM ${tableName} t ORDER BY user_id INTO OUTFILE "file://${outFilePath}/";
"""
File[] files = path.listFiles()
assert files.length == 1
List<String> outLines = Files.readAllLines(Paths.get(files[0].getAbsolutePath()), StandardCharsets.UTF_8);
- List<String> baseLines = Files.readAllLines(Paths.get("""${context.config.dataPath}/export/test_outfile.out"""), StandardCharsets.UTF_8)
+ List<String> baseLines = Files.readAllLines(Paths.get("""${context.config.dataPath}/export/test_outfile_expr.out"""), StandardCharsets.UTF_8)
for (int j = 0; j < outLines.size(); j ++) {
String[] outLine = outLines.get(j).split("\t")
String[] baseLine = baseLines.get(j + 2).split("\t")
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org